@@ -216,12 +216,15 @@ static int tca6416_keypad_probe(struct i2c_client *client)
216
216
return - EINVAL ;
217
217
}
218
218
219
- chip = kzalloc (struct_size (chip , buttons , pdata -> nbuttons ), GFP_KERNEL );
220
- input = input_allocate_device ();
221
- if (!chip || !input ) {
222
- error = - ENOMEM ;
223
- goto fail1 ;
224
- }
219
+ chip = devm_kzalloc (& client -> dev ,
220
+ struct_size (chip , buttons , pdata -> nbuttons ),
221
+ GFP_KERNEL );
222
+ if (!chip )
223
+ return - ENOMEM ;
224
+
225
+ input = devm_input_allocate_device (& client -> dev );
226
+ if (!input )
227
+ return - ENOMEM ;
225
228
226
229
chip -> client = client ;
227
230
chip -> input = input ;
@@ -233,7 +236,6 @@ static int tca6416_keypad_probe(struct i2c_client *client)
233
236
234
237
input -> phys = "tca6416-keys/input0" ;
235
238
input -> name = client -> name ;
236
- input -> dev .parent = & client -> dev ;
237
239
238
240
input -> open = tca6416_keys_open ;
239
241
input -> close = tca6416_keys_close ;
@@ -263,59 +265,40 @@ static int tca6416_keypad_probe(struct i2c_client *client)
263
265
*/
264
266
error = tca6416_setup_registers (chip );
265
267
if (error )
266
- goto fail1 ;
268
+ return error ;
267
269
268
270
if (!chip -> use_polling ) {
269
- error = request_threaded_irq (client -> irq , NULL ,
270
- tca6416_keys_isr ,
271
- IRQF_TRIGGER_FALLING |
272
- IRQF_ONESHOT | IRQF_NO_AUTOEN ,
273
- "tca6416-keypad" , chip );
271
+ error = devm_request_threaded_irq (& client -> dev , client -> irq ,
272
+ NULL , tca6416_keys_isr ,
273
+ IRQF_TRIGGER_FALLING |
274
+ IRQF_ONESHOT |
275
+ IRQF_NO_AUTOEN ,
276
+ "tca6416-keypad" , chip );
274
277
if (error ) {
275
278
dev_dbg (& client -> dev ,
276
279
"Unable to claim irq %d; error %d\n" ,
277
280
client -> irq , error );
278
- goto fail1 ;
281
+ return error ;
279
282
}
280
283
}
281
284
282
285
error = input_register_device (input );
283
286
if (error ) {
284
287
dev_dbg (& client -> dev ,
285
288
"Unable to register input device, error: %d\n" , error );
286
- goto fail2 ;
289
+ return error ;
287
290
}
288
291
289
292
i2c_set_clientdata (client , chip );
290
293
291
294
return 0 ;
292
-
293
- fail2 :
294
- if (!chip -> use_polling )
295
- free_irq (client -> irq , chip );
296
- fail1 :
297
- input_free_device (input );
298
- kfree (chip );
299
- return error ;
300
- }
301
-
302
- static void tca6416_keypad_remove (struct i2c_client * client )
303
- {
304
- struct tca6416_keypad_chip * chip = i2c_get_clientdata (client );
305
-
306
- if (!chip -> use_polling )
307
- free_irq (client -> irq , chip );
308
-
309
- input_unregister_device (chip -> input );
310
- kfree (chip );
311
295
}
312
296
313
297
static struct i2c_driver tca6416_keypad_driver = {
314
298
.driver = {
315
299
.name = "tca6416-keypad" ,
316
300
},
317
301
.probe = tca6416_keypad_probe ,
318
- .remove = tca6416_keypad_remove ,
319
302
.id_table = tca6416_id ,
320
303
};
321
304
0 commit comments