@@ -116,6 +116,10 @@ static int huion_tablet_enable(struct hid_device *hdev)
116116 struct usb_device * usb_dev = hid_to_usb_dev (hdev );
117117 struct huion_drvdata * drvdata = hid_get_drvdata (hdev );
118118 __le16 buf [6 ];
119+ s32 params [HUION_PH_ID_NUM ];
120+ s32 resolution ;
121+ __u8 * p ;
122+ s32 v ;
119123
120124 /*
121125 * Read string descriptor containing tablet parameters. The specific
@@ -128,56 +132,54 @@ static int huion_tablet_enable(struct hid_device *hdev)
128132 (USB_DT_STRING << 8 ) + 0x64 ,
129133 0x0409 , buf , sizeof (buf ),
130134 USB_CTRL_GET_TIMEOUT );
131- if (rc == - EPIPE )
132- hid_warn (hdev , "device parameters not found\n" );
133- else if (rc < 0 )
134- hid_warn (hdev , "failed to get device parameters: %d\n" , rc );
135- else if (rc != sizeof (buf ))
136- hid_warn (hdev , "invalid device parameters\n" );
137- else {
138- s32 params [HUION_PH_ID_NUM ];
139- s32 resolution ;
140- __u8 * p ;
141- s32 v ;
135+ if (rc == - EPIPE ) {
136+ hid_err (hdev , "device parameters not found\n" );
137+ return - ENODEV ;
138+ } else if (rc < 0 ) {
139+ hid_err (hdev , "failed to get device parameters: %d\n" , rc );
140+ return - ENODEV ;
141+ } else if (rc != sizeof (buf )) {
142+ hid_err (hdev , "invalid device parameters\n" );
143+ return - ENODEV ;
144+ }
142145
143- /* Extract device parameters */
144- params [HUION_PH_ID_X_LM ] = le16_to_cpu (buf [1 ]);
145- params [HUION_PH_ID_Y_LM ] = le16_to_cpu (buf [2 ]);
146- params [HUION_PH_ID_PRESSURE_LM ] = le16_to_cpu (buf [4 ]);
147- resolution = le16_to_cpu (buf [5 ]);
148- if (resolution == 0 ) {
149- params [HUION_PH_ID_X_PM ] = 0 ;
150- params [HUION_PH_ID_Y_PM ] = 0 ;
151- } else {
152- params [HUION_PH_ID_X_PM ] = params [HUION_PH_ID_X_LM ] *
153- 1000 / resolution ;
154- params [HUION_PH_ID_Y_PM ] = params [HUION_PH_ID_Y_LM ] *
155- 1000 / resolution ;
156- }
146+ /* Extract device parameters */
147+ params [HUION_PH_ID_X_LM ] = le16_to_cpu (buf [1 ]);
148+ params [HUION_PH_ID_Y_LM ] = le16_to_cpu (buf [2 ]);
149+ params [HUION_PH_ID_PRESSURE_LM ] = le16_to_cpu (buf [4 ]);
150+ resolution = le16_to_cpu (buf [5 ]);
151+ if (resolution == 0 ) {
152+ params [HUION_PH_ID_X_PM ] = 0 ;
153+ params [HUION_PH_ID_Y_PM ] = 0 ;
154+ } else {
155+ params [HUION_PH_ID_X_PM ] = params [HUION_PH_ID_X_LM ] *
156+ 1000 / resolution ;
157+ params [HUION_PH_ID_Y_PM ] = params [HUION_PH_ID_Y_LM ] *
158+ 1000 / resolution ;
159+ }
157160
158- /* Allocate fixed report descriptor */
159- drvdata -> rdesc = devm_kmalloc (& hdev -> dev ,
160- sizeof (huion_tablet_rdesc_template ),
161- GFP_KERNEL );
162- if (drvdata -> rdesc == NULL ) {
163- hid_err (hdev , "failed to allocate fixed rdesc\n" );
164- return - ENOMEM ;
165- }
166- drvdata -> rsize = sizeof (huion_tablet_rdesc_template );
161+ /* Allocate fixed report descriptor */
162+ drvdata -> rdesc = devm_kmalloc (& hdev -> dev ,
163+ sizeof (huion_tablet_rdesc_template ),
164+ GFP_KERNEL );
165+ if (drvdata -> rdesc == NULL ) {
166+ hid_err (hdev , "failed to allocate fixed rdesc\n" );
167+ return - ENOMEM ;
168+ }
169+ drvdata -> rsize = sizeof (huion_tablet_rdesc_template );
167170
168- /* Format fixed report descriptor */
169- memcpy (drvdata -> rdesc , huion_tablet_rdesc_template ,
170- drvdata -> rsize );
171- for (p = drvdata -> rdesc ;
172- p <= drvdata -> rdesc + drvdata -> rsize - 4 ;) {
173- if (p [0 ] == 0xFE && p [1 ] == 0xED && p [2 ] == 0x1D &&
174- p [3 ] < sizeof (params )) {
175- v = params [p [3 ]];
176- put_unaligned (cpu_to_le32 (v ), (s32 * )p );
177- p += 4 ;
178- } else {
179- p ++ ;
180- }
171+ /* Format fixed report descriptor */
172+ memcpy (drvdata -> rdesc , huion_tablet_rdesc_template ,
173+ drvdata -> rsize );
174+ for (p = drvdata -> rdesc ;
175+ p <= drvdata -> rdesc + drvdata -> rsize - 4 ;) {
176+ if (p [0 ] == 0xFE && p [1 ] == 0xED && p [2 ] == 0x1D &&
177+ p [3 ] < sizeof (params )) {
178+ v = params [p [3 ]];
179+ put_unaligned (cpu_to_le32 (v ), (s32 * )p );
180+ p += 4 ;
181+ } else {
182+ p ++ ;
181183 }
182184 }
183185
0 commit comments