@@ -292,15 +292,14 @@ static void kxtj9_init_input_device(struct kxtj9_data *tj9,
292
292
293
293
input_dev -> name = "kxtj9_accel" ;
294
294
input_dev -> id .bustype = BUS_I2C ;
295
- input_dev -> dev .parent = & tj9 -> client -> dev ;
296
295
}
297
296
298
297
static int kxtj9_setup_input_device (struct kxtj9_data * tj9 )
299
298
{
300
299
struct input_dev * input_dev ;
301
300
int err ;
302
301
303
- input_dev = input_allocate_device ( );
302
+ input_dev = devm_input_allocate_device ( & tj9 -> client -> dev );
304
303
if (!input_dev ) {
305
304
dev_err (& tj9 -> client -> dev , "input device allocate failed\n" );
306
305
return - ENOMEM ;
@@ -319,7 +318,6 @@ static int kxtj9_setup_input_device(struct kxtj9_data *tj9)
319
318
dev_err (& tj9 -> client -> dev ,
320
319
"unable to register input polled device %s: %d\n" ,
321
320
tj9 -> input_dev -> name , err );
322
- input_free_device (tj9 -> input_dev );
323
321
return err ;
324
322
}
325
323
@@ -424,8 +422,8 @@ static int kxtj9_setup_polled_device(struct kxtj9_data *tj9)
424
422
{
425
423
int err ;
426
424
struct input_polled_dev * poll_dev ;
427
- poll_dev = input_allocate_polled_device ();
428
425
426
+ poll_dev = devm_input_allocate_polled_device (& tj9 -> client -> dev );
429
427
if (!poll_dev ) {
430
428
dev_err (& tj9 -> client -> dev ,
431
429
"Failed to allocate polled device\n" );
@@ -446,31 +444,28 @@ static int kxtj9_setup_polled_device(struct kxtj9_data *tj9)
446
444
if (err ) {
447
445
dev_err (& tj9 -> client -> dev ,
448
446
"Unable to register polled device, err=%d\n" , err );
449
- input_free_polled_device (poll_dev );
450
447
return err ;
451
448
}
452
449
453
450
return 0 ;
454
451
}
455
452
456
- static void kxtj9_teardown_polled_device (struct kxtj9_data * tj9 )
457
- {
458
- input_unregister_polled_device (tj9 -> poll_dev );
459
- input_free_polled_device (tj9 -> poll_dev );
460
- }
461
-
462
453
#else
463
454
464
455
static inline int kxtj9_setup_polled_device (struct kxtj9_data * tj9 )
465
456
{
466
457
return - ENOSYS ;
467
458
}
468
459
469
- static inline void kxtj9_teardown_polled_device (struct kxtj9_data * tj9 )
460
+ #endif
461
+
462
+ static void kxtj9_platform_exit (void * data )
470
463
{
471
- }
464
+ struct kxtj9_data * tj9 = data ;
472
465
473
- #endif
466
+ if (tj9 -> pdata .exit )
467
+ tj9 -> pdata .exit ();
468
+ }
474
469
475
470
static int kxtj9_verify (struct kxtj9_data * tj9 )
476
471
{
@@ -494,7 +489,7 @@ static int kxtj9_verify(struct kxtj9_data *tj9)
494
489
}
495
490
496
491
static int kxtj9_probe (struct i2c_client * client ,
497
- const struct i2c_device_id * id )
492
+ const struct i2c_device_id * id )
498
493
{
499
494
const struct kxtj9_platform_data * pdata =
500
495
dev_get_platdata (& client -> dev );
@@ -512,7 +507,7 @@ static int kxtj9_probe(struct i2c_client *client,
512
507
return - EINVAL ;
513
508
}
514
509
515
- tj9 = kzalloc ( sizeof (* tj9 ), GFP_KERNEL );
510
+ tj9 = devm_kzalloc ( & client -> dev , sizeof (* tj9 ), GFP_KERNEL );
516
511
if (!tj9 ) {
517
512
dev_err (& client -> dev ,
518
513
"failed to allocate memory for module data\n" );
@@ -525,13 +520,17 @@ static int kxtj9_probe(struct i2c_client *client,
525
520
if (pdata -> init ) {
526
521
err = pdata -> init ();
527
522
if (err < 0 )
528
- goto err_free_mem ;
523
+ return err ;
529
524
}
530
525
526
+ err = devm_add_action_or_reset (& client -> dev , kxtj9_platform_exit , tj9 );
527
+ if (err )
528
+ return err ;
529
+
531
530
err = kxtj9_verify (tj9 );
532
531
if (err < 0 ) {
533
532
dev_err (& client -> dev , "device not recognized\n" );
534
- goto err_pdata_exit ;
533
+ return err ;
535
534
}
536
535
537
536
i2c_set_clientdata (client , tj9 );
@@ -546,59 +545,31 @@ static int kxtj9_probe(struct i2c_client *client,
546
545
547
546
err = kxtj9_setup_input_device (tj9 );
548
547
if (err )
549
- goto err_pdata_exit ;
548
+ return err ;
550
549
551
- err = request_threaded_irq (client -> irq , NULL , kxtj9_isr ,
552
- IRQF_TRIGGER_RISING | IRQF_ONESHOT ,
553
- "kxtj9-irq" , tj9 );
550
+ err = devm_request_threaded_irq (& client -> dev , client -> irq ,
551
+ NULL , kxtj9_isr ,
552
+ IRQF_TRIGGER_RISING |
553
+ IRQF_ONESHOT ,
554
+ "kxtj9-irq" , tj9 );
554
555
if (err ) {
555
556
dev_err (& client -> dev , "request irq failed: %d\n" , err );
556
- goto err_destroy_input ;
557
+ return err ;
557
558
}
558
559
559
- err = sysfs_create_group (& client -> dev .kobj , & kxtj9_attribute_group );
560
+ err = devm_device_add_group (& client -> dev ,
561
+ & kxtj9_attribute_group );
560
562
if (err ) {
561
563
dev_err (& client -> dev , "sysfs create failed: %d\n" , err );
562
- goto err_free_irq ;
564
+ return err ;
563
565
}
564
566
565
567
} else {
566
568
err = kxtj9_setup_polled_device (tj9 );
567
569
if (err )
568
- goto err_pdata_exit ;
569
- }
570
-
571
- return 0 ;
572
-
573
- err_free_irq :
574
- free_irq (client -> irq , tj9 );
575
- err_destroy_input :
576
- input_unregister_device (tj9 -> input_dev );
577
- err_pdata_exit :
578
- if (tj9 -> pdata .exit )
579
- tj9 -> pdata .exit ();
580
- err_free_mem :
581
- kfree (tj9 );
582
- return err ;
583
- }
584
-
585
- static int kxtj9_remove (struct i2c_client * client )
586
- {
587
- struct kxtj9_data * tj9 = i2c_get_clientdata (client );
588
-
589
- if (client -> irq ) {
590
- sysfs_remove_group (& client -> dev .kobj , & kxtj9_attribute_group );
591
- free_irq (client -> irq , tj9 );
592
- input_unregister_device (tj9 -> input_dev );
593
- } else {
594
- kxtj9_teardown_polled_device (tj9 );
570
+ return err ;
595
571
}
596
572
597
- if (tj9 -> pdata .exit )
598
- tj9 -> pdata .exit ();
599
-
600
- kfree (tj9 );
601
-
602
573
return 0 ;
603
574
}
604
575
@@ -647,7 +618,6 @@ static struct i2c_driver kxtj9_driver = {
647
618
.pm = & kxtj9_pm_ops ,
648
619
},
649
620
.probe = kxtj9_probe ,
650
- .remove = kxtj9_remove ,
651
621
.id_table = kxtj9_id ,
652
622
};
653
623
0 commit comments