linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* elan_i2c: failed to read report data: -71
@ 2021-03-02 21:09 Uwe Kleine-König
  2021-03-03  1:26 ` Dmitry Torokhov
  2021-03-03  3:13 ` jingle
  0 siblings, 2 replies; 13+ messages in thread
From: Uwe Kleine-König @ 2021-03-02 21:09 UTC (permalink / raw)
  To: Jingle Wu, Dmitry Torokhov, kernel; +Cc: linux-input

[-- Attachment #1: Type: text/plain, Size: 2368 bytes --]

Hello,

I just installed Linux on a new Thinkpad E15 and I experience a
non-working touchpad. I can move the mouse just fine, but when I press
one of the three buttons or move the trackpoint the kernel log gets
flooded with:

	elan_i2c 0-0015: failed to read report data: -71

and nothing happens in the GUI.

This is a kernel from Debian testing, i.e. 5.10.13, during probe of the
device the following is reported:

	elan_i2c 0-0015: supply vcc not found, using dummy regulator
	elan_i2c 0-0015: Elan Touchpad: Module ID: 0x000e, Firmware: 0x0001, Sample: 0x0000, IAP: 0x0000
	input: Elan Touchpad as /devices/pci0000:00/0000:00:1f.4/i2c-0/0-0015/input/input21
	input: Elan TrackPoint as /devices/pci0000:00/0000:00:1f.4/i2c-0/0-0015/input/input22

I backported commits

	056115daede8 Input: elan_i2c - add new trackpoint report type 0x5F
	c7f0169e3bd2 Input: elan_i2c_core - move header inclusion inside

to this kernel, but this didn't help.

When enabling smbus tracing the matching events are:

 irq/159-elan_i2-2207    [003] ....   963.625641: smbus_read: i2c-0 a=015 f=0040 c=a8 BLOCK_DATA
 irq/159-elan_i2-2207    [003] ....   963.629247: smbus_result: i2c-0 a=015 f=0000 c=a8 BLOCK_DATA rd res=-71

The relevant code is:

        len = i2c_smbus_read_block_data(client,
                                        ETP_SMBUS_PACKET_QUERY,
                                        &report[ETP_SMBUS_REPORT_OFFSET]);
        if (len < 0) {
                dev_err(&client->dev, "failed to read report data: %d\n", len);
                return len;
        }

I think the failing location in the i2c driver is

        if (read_write == I2C_SMBUS_READ ||
            command == I2C_SMBUS_BLOCK_PROC_CALL) {
                len = inb_p(SMBHSTDAT0(priv));
                if (len < 1 || len > I2C_SMBUS_BLOCK_MAX)
                        return -EPROTO;

                data->block[0] = len;
                for (i = 0; i < len; i++)
                        data->block[i + 1] = inb_p(SMBBLKDAT(priv));
        }

in i801_block_transaction_by_block().

Does this ring a bell? Does someone know if there is documentation
available?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2021-03-26  9:08 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-03-02 21:09 elan_i2c: failed to read report data: -71 Uwe Kleine-König
2021-03-03  1:26 ` Dmitry Torokhov
2021-03-03 10:41   ` Nikolai Kostrigin
2021-03-03  3:13 ` jingle
2021-03-03 18:32   ` Uwe Kleine-König
2021-03-03 20:03     ` Uwe Kleine-König
2021-03-04  1:53       ` 'Dmitry Torokhov'
2021-03-04  6:59         ` Uwe Kleine-König
2021-03-04  8:49           ` Nikolai Kostrigin
2021-03-04 13:38             ` Greg KH
2021-03-05 19:18             ` Uwe Kleine-König
2021-03-04 13:38           ` Greg KH
2021-03-26  9:00   ` Egor Ignatov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).