@@ -104,14 +104,6 @@ struct i2c_hid_cmd {
104104 .opcode = opcode_, .length = 4, \
105105 .registerIndex = offsetof(struct i2c_hid_desc, wCommandRegister)
106106
107- /* fetch HID descriptor */
108- static const struct i2c_hid_cmd hid_descr_cmd = { .length = 2 };
109- /* fetch report descriptors */
110- static const struct i2c_hid_cmd hid_report_descr_cmd = {
111- .registerIndex = offsetof(struct i2c_hid_desc ,
112- wReportDescRegister ),
113- .opcode = 0x00 ,
114- .length = 2 };
115107/* commands */
116108static const struct i2c_hid_cmd hid_reset_cmd = { I2C_HID_CMD (0x01 ) };
117109static const struct i2c_hid_cmd hid_get_report_cmd = { I2C_HID_CMD (0x02 ) };
@@ -243,6 +235,14 @@ static int i2c_hid_xfer(struct i2c_hid *ihid,
243235 return 0 ;
244236}
245237
238+ static int i2c_hid_read_register (struct i2c_hid * ihid , __le16 reg ,
239+ void * buf , size_t len )
240+ {
241+ * (__le16 * )ihid -> cmdbuf = reg ;
242+
243+ return i2c_hid_xfer (ihid , ihid -> cmdbuf , sizeof (__le16 ), buf , len );
244+ }
245+
246246static size_t i2c_hid_encode_command (u8 * buf , u8 opcode ,
247247 int report_type , int report_id )
248248{
@@ -268,13 +268,8 @@ static int __i2c_hid_command(struct i2c_hid *ihid,
268268 int length = command -> length ;
269269 unsigned int registerIndex = command -> registerIndex ;
270270
271- /* special case for hid_descr_cmd */
272- if (command == & hid_descr_cmd ) {
273- * (__le16 * )ihid -> cmdbuf = ihid -> wHIDDescRegister ;
274- } else {
275- ihid -> cmdbuf [0 ] = ihid -> hdesc_buffer [registerIndex ];
276- ihid -> cmdbuf [1 ] = ihid -> hdesc_buffer [registerIndex + 1 ];
277- }
271+ ihid -> cmdbuf [0 ] = ihid -> hdesc_buffer [registerIndex ];
272+ ihid -> cmdbuf [1 ] = ihid -> hdesc_buffer [registerIndex + 1 ];
278273
279274 if (length > 2 ) {
280275 length = sizeof (__le16 ) + /* register */
@@ -794,8 +789,9 @@ static int i2c_hid_parse(struct hid_device *hid)
794789
795790 i2c_hid_dbg (ihid , "asking HID report descriptor\n" );
796791
797- ret = i2c_hid_command (ihid , & hid_report_descr_cmd ,
798- rdesc , rsize );
792+ ret = i2c_hid_read_register (ihid ,
793+ ihid -> hdesc .wReportDescRegister ,
794+ rdesc , rsize );
799795 if (ret ) {
800796 hid_err (hid , "reading report descriptor failed\n" );
801797 kfree (rdesc );
@@ -905,7 +901,7 @@ static int i2c_hid_fetch_hid_descriptor(struct i2c_hid *ihid)
905901 struct i2c_client * client = ihid -> client ;
906902 struct i2c_hid_desc * hdesc = & ihid -> hdesc ;
907903 unsigned int dsize ;
908- int ret ;
904+ int error ;
909905
910906 /* i2c hid fetch using a fixed descriptor size (30 bytes) */
911907 if (i2c_hid_get_dmi_i2c_hid_desc_override (client -> name )) {
@@ -914,11 +910,14 @@ static int i2c_hid_fetch_hid_descriptor(struct i2c_hid *ihid)
914910 * i2c_hid_get_dmi_i2c_hid_desc_override (client -> name );
915911 } else {
916912 i2c_hid_dbg (ihid , "Fetching the HID descriptor\n" );
917- ret = i2c_hid_command (ihid , & hid_descr_cmd ,
918- ihid -> hdesc_buffer ,
919- sizeof (struct i2c_hid_desc ));
920- if (ret ) {
921- dev_err (& ihid -> client -> dev , "hid_descr_cmd failed\n" );
913+ error = i2c_hid_read_register (ihid ,
914+ ihid -> wHIDDescRegister ,
915+ & ihid -> hdesc ,
916+ sizeof (ihid -> hdesc ));
917+ if (error ) {
918+ dev_err (& ihid -> client -> dev ,
919+ "failed to fetch HID descriptor: %d\n" ,
920+ error );
922921 return - ENODEV ;
923922 }
924923 }
0 commit comments