drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c

Source file repositories/reference/linux-study-clean/drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c

File Facts

System
Linux kernel
Corpus path
drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c
Extension
.c
Size
24558 bytes
Lines
495
Domain
Driver Families
Bucket
drivers/hid
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct i2c_hid_desc_override {
	union {
		struct i2c_hid_desc *i2c_hid_desc;
		uint8_t             *i2c_hid_desc_buffer;
	};
	uint8_t              *hid_report_desc;
	unsigned int          hid_report_desc_size;
	uint8_t              *i2c_name;
};


/*
 * descriptors for the SIPODEV SP1064 touchpad
 *
 * This device does not supply any descriptors and on windows a filter
 * driver operates between the i2c-hid layer and the device and injects
 * these descriptors when the device is prompted. The descriptors were
 * extracted by listening to the i2c-hid traffic that occurs between the
 * windows filter driver and the windows i2c-hid driver.
 */

static const struct i2c_hid_desc_override sipodev_desc = {
	.i2c_hid_desc_buffer = (uint8_t [])
	{0x1e, 0x00,                  /* Length of descriptor                 */
	 0x00, 0x01,                  /* Version of descriptor                */
	 0xdb, 0x01,                  /* Length of report descriptor          */
	 0x21, 0x00,                  /* Location of report descriptor        */
	 0x24, 0x00,                  /* Location of input report             */
	 0x1b, 0x00,                  /* Max input report length              */
	 0x25, 0x00,                  /* Location of output report            */
	 0x11, 0x00,                  /* Max output report length             */
	 0x22, 0x00,                  /* Location of command register         */
	 0x23, 0x00,                  /* Location of data register            */
	 0x11, 0x09,                  /* Vendor ID                            */
	 0x88, 0x52,                  /* Product ID                           */
	 0x06, 0x00,                  /* Version ID                           */
	 0x00, 0x00, 0x00, 0x00       /* Reserved                             */
	},

	.hid_report_desc = (uint8_t [])
	{0x05, 0x01,                  /* Usage Page (Desktop),                */
	 0x09, 0x02,                  /* Usage (Mouse),                       */
	 0xA1, 0x01,                  /* Collection (Application),            */
	 0x85, 0x01,                  /*     Report ID (1),                   */
	 0x09, 0x01,                  /*     Usage (Pointer),                 */
	 0xA1, 0x00,                  /*     Collection (Physical),           */
	 0x05, 0x09,                  /*         Usage Page (Button),         */
	 0x19, 0x01,                  /*         Usage Minimum (01h),         */
	 0x29, 0x02,                  /*         Usage Maximum (02h),         */
	 0x25, 0x01,                  /*         Logical Maximum (1),         */
	 0x75, 0x01,                  /*         Report Size (1),             */
	 0x95, 0x02,                  /*         Report Count (2),            */
	 0x81, 0x02,                  /*         Input (Variable),            */
	 0x95, 0x06,                  /*         Report Count (6),            */
	 0x81, 0x01,                  /*         Input (Constant),            */
	 0x05, 0x01,                  /*         Usage Page (Desktop),        */
	 0x09, 0x30,                  /*         Usage (X),                   */
	 0x09, 0x31,                  /*         Usage (Y),                   */
	 0x15, 0x81,                  /*         Logical Minimum (-127),      */
	 0x25, 0x7F,                  /*         Logical Maximum (127),       */
	 0x75, 0x08,                  /*         Report Size (8),             */
	 0x95, 0x02,                  /*         Report Count (2),            */
	 0x81, 0x06,                  /*         Input (Variable, Relative),  */
	 0xC0,                        /*     End Collection,                  */
	 0xC0,                        /* End Collection,                      */
	 0x05, 0x0D,                  /* Usage Page (Digitizer),              */
	 0x09, 0x05,                  /* Usage (Touchpad),                    */
	 0xA1, 0x01,                  /* Collection (Application),            */
	 0x85, 0x04,                  /*     Report ID (4),                   */
	 0x05, 0x0D,                  /*     Usage Page (Digitizer),          */
	 0x09, 0x22,                  /*     Usage (Finger),                  */
	 0xA1, 0x02,                  /*     Collection (Logical),            */
	 0x15, 0x00,                  /*         Logical Minimum (0),         */
	 0x25, 0x01,                  /*         Logical Maximum (1),         */
	 0x09, 0x47,                  /*         Usage (Touch Valid),         */
	 0x09, 0x42,                  /*         Usage (Tip Switch),          */
	 0x95, 0x02,                  /*         Report Count (2),            */
	 0x75, 0x01,                  /*         Report Size (1),             */
	 0x81, 0x02,                  /*         Input (Variable),            */
	 0x95, 0x01,                  /*         Report Count (1),            */
	 0x75, 0x03,                  /*         Report Size (3),             */
	 0x25, 0x05,                  /*         Logical Maximum (5),         */
	 0x09, 0x51,                  /*         Usage (Contact Identifier),  */
	 0x81, 0x02,                  /*         Input (Variable),            */
	 0x75, 0x01,                  /*         Report Size (1),             */
	 0x95, 0x03,                  /*         Report Count (3),            */
	 0x81, 0x03,                  /*         Input (Constant, Variable),  */
	 0x05, 0x01,                  /*         Usage Page (Desktop),        */
	 0x26, 0x44, 0x0A,            /*         Logical Maximum (2628),      */
	 0x75, 0x10,                  /*         Report Size (16),            */

Annotation

Implementation Notes