@@ -601,6 +601,11 @@ static int lm75_i2c_reg_write(void *context, unsigned int reg, unsigned int val)
601
601
return i2c_smbus_write_word_swapped (client , reg , val );
602
602
}
603
603
604
+ static const struct regmap_bus lm75_i2c_regmap_bus = {
605
+ .reg_read = lm75_i2c_reg_read ,
606
+ .reg_write = lm75_i2c_reg_write ,
607
+ };
608
+
604
609
static const struct regmap_config lm75_regmap_config = {
605
610
.reg_bits = 8 ,
606
611
.val_bits = 16 ,
@@ -613,47 +618,34 @@ static const struct regmap_config lm75_regmap_config = {
613
618
.use_single_write = true,
614
619
};
615
620
616
- static const struct regmap_bus lm75_i2c_regmap_bus = {
617
- .reg_read = lm75_i2c_reg_read ,
618
- .reg_write = lm75_i2c_reg_write ,
619
- };
620
-
621
621
static void lm75_remove (void * data )
622
622
{
623
623
struct lm75_data * lm75 = data ;
624
624
625
625
regmap_write (lm75 -> regmap , LM75_REG_CONF , lm75 -> orig_conf );
626
626
}
627
627
628
- static int lm75_probe (struct i2c_client * client )
628
+ static int lm75_generic_probe (struct device * dev , const char * name ,
629
+ const void * kind_ptr , int irq , struct regmap * regmap )
629
630
{
630
- struct device * dev = & client -> dev ;
631
631
struct device * hwmon_dev ;
632
632
struct lm75_data * data ;
633
633
int status , err ;
634
634
635
- if (!i2c_check_functionality (client -> adapter ,
636
- I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA ))
637
- return - EIO ;
638
-
639
635
data = devm_kzalloc (dev , sizeof (struct lm75_data ), GFP_KERNEL );
640
636
if (!data )
641
637
return - ENOMEM ;
642
638
643
639
/* needed by custom regmap callbacks */
644
640
dev_set_drvdata (dev , data );
645
641
646
- data -> kind = (uintptr_t )i2c_get_match_data (client );
642
+ data -> kind = (uintptr_t )kind_ptr ;
643
+ data -> regmap = regmap ;
647
644
648
645
err = devm_regulator_get_enable (dev , "vs" );
649
646
if (err )
650
647
return err ;
651
648
652
- data -> regmap = devm_regmap_init (dev , & lm75_i2c_regmap_bus , client ,
653
- & lm75_regmap_config );
654
- if (IS_ERR (data -> regmap ))
655
- return PTR_ERR (data -> regmap );
656
-
657
649
/* Set to LM75 resolution (9 bits, 1/2 degree C) and range.
658
650
* Then tweak to be more precise when appropriate.
659
651
*/
@@ -679,20 +671,19 @@ static int lm75_probe(struct i2c_client *client)
679
671
if (err )
680
672
return err ;
681
673
682
- hwmon_dev = devm_hwmon_device_register_with_info (dev , client -> name ,
683
- data , & lm75_chip_info ,
684
- NULL );
674
+ hwmon_dev = devm_hwmon_device_register_with_info (dev , name , data ,
675
+ & lm75_chip_info , NULL );
685
676
if (IS_ERR (hwmon_dev ))
686
677
return PTR_ERR (hwmon_dev );
687
678
688
- if (client -> irq ) {
679
+ if (irq ) {
689
680
if (data -> params -> alarm ) {
690
681
err = devm_request_threaded_irq (dev ,
691
- client -> irq ,
682
+ irq ,
692
683
NULL ,
693
684
& lm75_alarm_handler ,
694
685
IRQF_ONESHOT ,
695
- client -> name ,
686
+ name ,
696
687
hwmon_dev );
697
688
if (err )
698
689
return err ;
@@ -702,12 +693,29 @@ static int lm75_probe(struct i2c_client *client)
702
693
}
703
694
}
704
695
705
- dev_info (dev , "%s: sensor '%s'\n" , dev_name (hwmon_dev ), client -> name );
696
+ dev_info (dev , "%s: sensor '%s'\n" , dev_name (hwmon_dev ), name );
706
697
707
698
return 0 ;
708
699
}
709
700
710
- static const struct i2c_device_id lm75_ids [] = {
701
+ static int lm75_i2c_probe (struct i2c_client * client )
702
+ {
703
+ struct device * dev = & client -> dev ;
704
+ struct regmap * regmap ;
705
+
706
+ if (!i2c_check_functionality (client -> adapter ,
707
+ I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA ))
708
+ return - EOPNOTSUPP ;
709
+
710
+ regmap = devm_regmap_init (dev , & lm75_i2c_regmap_bus , client , & lm75_regmap_config );
711
+ if (IS_ERR (regmap ))
712
+ return PTR_ERR (regmap );
713
+
714
+ return lm75_generic_probe (dev , client -> name , i2c_get_match_data (client ),
715
+ client -> irq , regmap );
716
+ }
717
+
718
+ static const struct i2c_device_id lm75_i2c_ids [] = {
711
719
{ "adt75" , adt75 , },
712
720
{ "as6200" , as6200 , },
713
721
{ "at30ts74" , at30ts74 , },
@@ -740,7 +748,7 @@ static const struct i2c_device_id lm75_ids[] = {
740
748
{ "tmp1075" , tmp1075 , },
741
749
{ /* LIST END */ }
742
750
};
743
- MODULE_DEVICE_TABLE (i2c , lm75_ids );
751
+ MODULE_DEVICE_TABLE (i2c , lm75_i2c_ids );
744
752
745
753
static const struct of_device_id __maybe_unused lm75_of_match [] = {
746
754
{
@@ -987,20 +995,20 @@ static const struct dev_pm_ops lm75_dev_pm_ops = {
987
995
#define LM75_DEV_PM_OPS NULL
988
996
#endif /* CONFIG_PM */
989
997
990
- static struct i2c_driver lm75_driver = {
998
+ static struct i2c_driver lm75_i2c_driver = {
991
999
.class = I2C_CLASS_HWMON ,
992
1000
.driver = {
993
1001
.name = "lm75" ,
994
1002
.of_match_table = of_match_ptr (lm75_of_match ),
995
1003
.pm = LM75_DEV_PM_OPS ,
996
1004
},
997
- .probe = lm75_probe ,
998
- .id_table = lm75_ids ,
1005
+ .probe = lm75_i2c_probe ,
1006
+ .id_table = lm75_i2c_ids ,
999
1007
.detect = lm75_detect ,
1000
1008
.address_list = normal_i2c ,
1001
1009
};
1002
1010
1003
- module_i2c_driver (lm75_driver );
1011
+ module_i2c_driver (lm75_i2c_driver );
1004
1012
1005
1013
MODULE_AUTHOR (
"Frodo Looijaard <[email protected] >" );
1006
1014
MODULE_DESCRIPTION ("LM75 driver" );
0 commit comments