Re: Touchpad stickiness on AMD laptops (was Dell Inspiron/XPS)
From: Hans de Goede <hidden>
Date: 2022-01-17 09:08:55
Also in:
linux-i2c, platform-driver-x86
Hi, On 1/17/22 09:39, Miroslav Bendík wrote:
quoted
[AMD Official Use Only]quoted
Now i am trying to change ASF registers instead of SMBus registers. I have tried to enable interrupts and set listen address, but it don't work or i can't recognize the difference between interrupts generated by transfers and interrupts generated from slave.Try reading the value of SFx0A ASFStatus bit 5 (it's write to clear if it's an interrupt).quoted
outb_p(0x02, 0x15 + piix4_smba); // SlaveIntrListenEn outb_p(0x2c << 1 | 0x01, 0x09 + piix4_smba); // ListenAdr | ListenAdrEnASFx04 SlaveAddress instead of ASFx09 ListenAdr ?Little bit more informations: Interrupts are generated only if ASFx09 ListenAdr is: (0x08 << 1) | 0x01 (0x10 << 1) | 0x01 and touchpad is initialized with synaptics_intertouch=1 There is maybe small correlation between frequency and touch, but i am not 100% sure.
I know very litlle about this, but I believe that when using host-notify that after receiving the host-notify you are supposed to do an I2C read from the SMBus Alert Response Address (ARA, 0x0c) to find out the source of the notify (since multiple devices on the bus may be notify capable). I guess that the controller may not do that itself and that as long as you have not done it the touchpad may keep repeating the notify. But as said I know very little about this, so take this with a big grain of salt :) I guess you may want to read up a bit on how this is supposed to work at the bus level. I believe that the SMBUS spec is public. Regards, Hans
There are no register changed in interrupt handler except of ASFx13 DataBankSel. I can't determine if interrupt is generated from transfer, or from external event. ASF should be system for remote management. It should have access to SMBus and data / command registers are identical, this means, that SMBus should work (except block transfers). If ASF just mirrors SMBus, then question is, why i can't access to touchpad using SMBus? One strange thing is, that i2cdetect on standard SMbus (0xb00), port 0 returns: 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- 36 37 -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 -- -- -- -- -- -- -- 58 -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- Address 0x58 is exactly 0x2c (synaptics) moved 1 bit left, but i2c-piix4 correctly moves address.