Hi,
> I had a preliminary discussion with Benjamin Tissoires and according to
> our agreement I repost it for wider audience.
> Blacklisting the device was decided to be a bad idea.
> But actually I managed to get touchpad totally operational via SMBus
> using a following hack:
>
> providing a parameter to i2c_i801 driver:
>
> modprobe i2c_i801 disable_features=0x2 (i.e. disable the block buffer).
So, from an I2C perspective, there are two things to mention here:
a) I am in the process of extending the I2C core to allow block
transfers > 32 byte. This is a slow process, though, because we need to
pay attention to not break userspace ABI. If this is done *and* the i801
driver supports length > 32 bytes, too, then it would work natively. If
the i801 can do this, this is a question for Jean Delvare.
b) I don't know Elantech HW but there are devices out there which allow
configuration for the block size. Something like a bit specifying if
block transfers > 32 are allowed. Or the SMBus version to support. Block
transfers > 32 are SMBus 3.0+ only. If your HW does not have that,
disabling SMBus is an option, too. Disabling it in the i801 driver is
too much of a hammer, I'd say.
Hope this helps! Happy hacking,
Wolfram
Hi,
25.02.2021 12:38, Wolfram Sang пишет:
> Hi,
>
>> I had a preliminary discussion with Benjamin Tissoires and according to
>> our agreement I repost it for wider audience.
>> Blacklisting the device was decided to be a bad idea.
>> But actually I managed to get touchpad totally operational via SMBus
>> using a following hack:
>>
>> providing a parameter to i2c_i801 driver:
>>
>> modprobe i2c_i801 disable_features=0x2 (i.e. disable the block buffer).
> So, from an I2C perspective, there are two things to mention here:
>
> a) I am in the process of extending the I2C core to allow block
> transfers > 32 byte. This is a slow process, though, because we need to
> pay attention to not break userspace ABI. If this is done *and* the i801
> driver supports length > 32 bytes, too, then it would work natively. If
> the i801 can do this, this is a question for Jean Delvare.
>
> b) I don't know Elantech HW but there are devices out there which allow
> configuration for the block size. Something like a bit specifying if
> block transfers > 32 are allowed. Or the SMBus version to support. Block
> transfers > 32 are SMBus 3.0+ only. If your HW does not have that,
> disabling SMBus is an option, too. Disabling it in the i801 driver is
> too much of a hammer, I'd say.
>
> Hope this helps! Happy hacking,
>
> Wolfram
Thank you for the information, Wolfram!
Finally it turned out that the solution was near me from the very
beginning, but I failed to check mainline code at that moment (which is
now 5.11).
Happily Jingle Wu has pointed me to a couple of patches of his
(co-authored by Dmitry Torokhov):
https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git/commit/?h=next&id=056115daede8d01f71732bc7d778fb85acee8eb6
https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git/commit/?h=next&id=e4c9062717feda88900b566463228d1c4910af6d
I applied those to 5.10.17 and trackpoint works like a charm.
So I guess theese patches are worth being backported to the longterm
5.10 branch.
I'm really sorry for the noise.
--
Best regards,
Nikolai Kostrigin
> Happily Jingle Wu has pointed me to a couple of patches of his
> (co-authored by Dmitry Torokhov):
Yep, this looks like the proper place to fix things. Good it is already
solved.
Hi,
resending this once again, hoping it wouldn't contain any HTML and
wouldn't be filtered by LKML.
03.03.2021 13:11, Nikolai Kostrigin пишет:
> Hi,
>
> 25.02.2021 12:38, Wolfram Sang пишет:
>> Hi,
>>
>>> I had a preliminary discussion with Benjamin Tissoires and according to
>>> our agreement I repost it for wider audience.
>>> Blacklisting the device was decided to be a bad idea.
>>> But actually I managed to get touchpad totally operational via SMBus
>>> using a following hack:
>>>
>>> providing a parameter to i2c_i801 driver:
>>>
>>> modprobe i2c_i801 disable_features=0x2 (i.e. disable the block buffer).
>> So, from an I2C perspective, there are two things to mention here:
>>
>> a) I am in the process of extending the I2C core to allow block
>> transfers > 32 byte. This is a slow process, though, because we need to
>> pay attention to not break userspace ABI. If this is done *and* the i801
>> driver supports length > 32 bytes, too, then it would work natively. If
>> the i801 can do this, this is a question for Jean Delvare.
>>
>> b) I don't know Elantech HW but there are devices out there which allow
>> configuration for the block size. Something like a bit specifying if
>> block transfers > 32 are allowed. Or the SMBus version to support. Block
>> transfers > 32 are SMBus 3.0+ only. If your HW does not have that,
>> disabling SMBus is an option, too. Disabling it in the i801 driver is
>> too much of a hammer, I'd say.
>>
>> Hope this helps! Happy hacking,
>>
>> Wolfram
> Thank you for the information, Wolfram!
>
> Finally it turned out that the solution was near me from the very
> beginning, but I failed to check mainline code at that moment (which is
> now 5.11).
> Happily Jingle Wu has pointed me to a couple of patches of his
> (co-authored by Dmitry Torokhov):
>
> https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git/commit/?h=next&id=056115daede8d01f71732bc7d778fb85acee8eb6
>
> https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git/commit/?h=next&id=e4c9062717feda88900b566463228d1c4910af6d
>
> I applied those to 5.10.17 and trackpoint works like a charm.
> So I guess theese patches are worth being backported to the longterm
> 5.10 branch.
> I'm really sorry for the noise.
>
--
Best regards,
Nikolai Kostrigin