5
5
6
6
#include <linux/cleanup.h>
7
7
#include <linux/err.h>
8
- #include <linux/of_gpio .h>
8
+ #include <linux/of .h>
9
9
#include <linux/gpio/consumer.h>
10
10
#include <linux/module.h>
11
11
#include <linux/platform_device.h>
@@ -35,8 +35,8 @@ struct s5m8767_info {
35
35
u8 buck2_vol [8 ];
36
36
u8 buck3_vol [8 ];
37
37
u8 buck4_vol [8 ];
38
- int buck_gpios [3 ];
39
- int buck_ds [3 ];
38
+ struct gpio_desc * buck_gpios [3 ];
39
+ struct gpio_desc * buck_ds [3 ];
40
40
int buck_gpioindex ;
41
41
};
42
42
@@ -272,9 +272,9 @@ static inline int s5m8767_set_high(struct s5m8767_info *s5m8767)
272
272
{
273
273
int temp_index = s5m8767 -> buck_gpioindex ;
274
274
275
- gpio_set_value (s5m8767 -> buck_gpios [0 ], (temp_index >> 2 ) & 0x1 );
276
- gpio_set_value (s5m8767 -> buck_gpios [1 ], (temp_index >> 1 ) & 0x1 );
277
- gpio_set_value (s5m8767 -> buck_gpios [2 ], temp_index & 0x1 );
275
+ gpiod_set_value (s5m8767 -> buck_gpios [0 ], !! (temp_index & BIT ( 2 )) );
276
+ gpiod_set_value (s5m8767 -> buck_gpios [1 ], !! (temp_index & BIT ( 1 )) );
277
+ gpiod_set_value (s5m8767 -> buck_gpios [2 ], !!( temp_index & BIT ( 0 )) );
278
278
279
279
return 0 ;
280
280
}
@@ -283,9 +283,9 @@ static inline int s5m8767_set_low(struct s5m8767_info *s5m8767)
283
283
{
284
284
int temp_index = s5m8767 -> buck_gpioindex ;
285
285
286
- gpio_set_value (s5m8767 -> buck_gpios [2 ], temp_index & 0x1 );
287
- gpio_set_value (s5m8767 -> buck_gpios [1 ], (temp_index >> 1 ) & 0x1 );
288
- gpio_set_value (s5m8767 -> buck_gpios [0 ], (temp_index >> 2 ) & 0x1 );
286
+ gpiod_set_value (s5m8767 -> buck_gpios [2 ], !!( temp_index & BIT ( 0 )) );
287
+ gpiod_set_value (s5m8767 -> buck_gpios [1 ], !! (temp_index & BIT ( 1 )) );
288
+ gpiod_set_value (s5m8767 -> buck_gpios [0 ], !! (temp_index & BIT ( 2 )) );
289
289
290
290
return 0 ;
291
291
}
@@ -482,50 +482,14 @@ static int s5m8767_enable_ext_control(struct s5m8767_info *s5m8767,
482
482
483
483
484
484
#ifdef CONFIG_OF
485
- static int s5m8767_pmic_dt_parse_dvs_gpio (struct sec_pmic_dev * iodev ,
486
- struct sec_platform_data * pdata ,
487
- struct device_node * pmic_np )
488
- {
489
- int i , gpio ;
490
-
491
- for (i = 0 ; i < 3 ; i ++ ) {
492
- gpio = of_get_named_gpio (pmic_np ,
493
- "s5m8767,pmic-buck-dvs-gpios" , i );
494
- if (!gpio_is_valid (gpio )) {
495
- dev_err (iodev -> dev , "invalid gpio[%d]: %d\n" , i , gpio );
496
- return - EINVAL ;
497
- }
498
- pdata -> buck_gpios [i ] = gpio ;
499
- }
500
- return 0 ;
501
- }
502
-
503
- static int s5m8767_pmic_dt_parse_ds_gpio (struct sec_pmic_dev * iodev ,
504
- struct sec_platform_data * pdata ,
505
- struct device_node * pmic_np )
506
- {
507
- int i , gpio ;
508
-
509
- for (i = 0 ; i < 3 ; i ++ ) {
510
- gpio = of_get_named_gpio (pmic_np ,
511
- "s5m8767,pmic-buck-ds-gpios" , i );
512
- if (!gpio_is_valid (gpio )) {
513
- dev_err (iodev -> dev , "invalid gpio[%d]: %d\n" , i , gpio );
514
- return - EINVAL ;
515
- }
516
- pdata -> buck_ds [i ] = gpio ;
517
- }
518
- return 0 ;
519
- }
520
-
521
485
static int s5m8767_pmic_dt_parse_pdata (struct platform_device * pdev ,
522
486
struct sec_platform_data * pdata )
523
487
{
524
488
struct sec_pmic_dev * iodev = dev_get_drvdata (pdev -> dev .parent );
525
489
struct device_node * pmic_np , * reg_np ;
526
490
struct sec_regulator_data * rdata ;
527
491
struct sec_opmode_data * rmode ;
528
- unsigned int i , dvs_voltage_nr = 8 , ret ;
492
+ unsigned int i , dvs_voltage_nr = 8 ;
529
493
530
494
pmic_np = iodev -> dev -> of_node ;
531
495
if (!pmic_np ) {
@@ -635,10 +599,6 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev,
635
599
636
600
if (pdata -> buck2_gpiodvs || pdata -> buck3_gpiodvs ||
637
601
pdata -> buck4_gpiodvs ) {
638
- ret = s5m8767_pmic_dt_parse_dvs_gpio (iodev , pdata , pmic_np );
639
- if (ret )
640
- return - EINVAL ;
641
-
642
602
if (of_property_read_u32 (pmic_np ,
643
603
"s5m8767,pmic-buck-default-dvs-idx" ,
644
604
& pdata -> buck_default_idx )) {
@@ -652,10 +612,6 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev,
652
612
}
653
613
}
654
614
655
- ret = s5m8767_pmic_dt_parse_ds_gpio (iodev , pdata , pmic_np );
656
- if (ret )
657
- return - EINVAL ;
658
-
659
615
pdata -> buck2_ramp_enable = of_property_read_bool (pmic_np , "s5m8767,pmic-buck2-ramp-enable" );
660
616
pdata -> buck3_ramp_enable = of_property_read_bool (pmic_np , "s5m8767,pmic-buck3-ramp-enable" );
661
617
pdata -> buck4_ramp_enable = of_property_read_bool (pmic_np , "s5m8767,pmic-buck4-ramp-enable" );
@@ -684,6 +640,8 @@ static int s5m8767_pmic_probe(struct platform_device *pdev)
684
640
struct regulator_config config = { };
685
641
struct s5m8767_info * s5m8767 ;
686
642
int i , ret , buck_init ;
643
+ const char * gpiods_names [3 ] = { "S5M8767 DS2" , "S5M8767 DS3" , "S5M8767 DS4" };
644
+ const char * gpiodvs_names [3 ] = { "S5M8767 SET1" , "S5M8767 SET2" , "S5M8767 SET3" };
687
645
688
646
if (!pdata ) {
689
647
dev_err (pdev -> dev .parent , "Platform data not supplied\n" );
@@ -731,12 +689,6 @@ static int s5m8767_pmic_probe(struct platform_device *pdev)
731
689
s5m8767 -> buck2_gpiodvs = pdata -> buck2_gpiodvs ;
732
690
s5m8767 -> buck3_gpiodvs = pdata -> buck3_gpiodvs ;
733
691
s5m8767 -> buck4_gpiodvs = pdata -> buck4_gpiodvs ;
734
- s5m8767 -> buck_gpios [0 ] = pdata -> buck_gpios [0 ];
735
- s5m8767 -> buck_gpios [1 ] = pdata -> buck_gpios [1 ];
736
- s5m8767 -> buck_gpios [2 ] = pdata -> buck_gpios [2 ];
737
- s5m8767 -> buck_ds [0 ] = pdata -> buck_ds [0 ];
738
- s5m8767 -> buck_ds [1 ] = pdata -> buck_ds [1 ];
739
- s5m8767 -> buck_ds [2 ] = pdata -> buck_ds [2 ];
740
692
741
693
s5m8767 -> ramp_delay = pdata -> buck_ramp_delay ;
742
694
s5m8767 -> buck2_ramp = pdata -> buck2_ramp_enable ;
@@ -787,58 +739,36 @@ static int s5m8767_pmic_probe(struct platform_device *pdev)
787
739
788
740
if (pdata -> buck2_gpiodvs || pdata -> buck3_gpiodvs ||
789
741
pdata -> buck4_gpiodvs ) {
742
+ for (i = 0 ; i < 3 ; i ++ ) {
743
+ enum gpiod_flags flags ;
790
744
791
- if (!gpio_is_valid (pdata -> buck_gpios [0 ]) ||
792
- !gpio_is_valid (pdata -> buck_gpios [1 ]) ||
793
- !gpio_is_valid (pdata -> buck_gpios [2 ])) {
794
- dev_err (& pdev -> dev , "GPIO NOT VALID\n" );
795
- return - EINVAL ;
796
- }
797
-
798
- ret = devm_gpio_request (& pdev -> dev , pdata -> buck_gpios [0 ],
799
- "S5M8767 SET1" );
800
- if (ret )
801
- return ret ;
802
-
803
- ret = devm_gpio_request (& pdev -> dev , pdata -> buck_gpios [1 ],
804
- "S5M8767 SET2" );
805
- if (ret )
806
- return ret ;
807
-
808
- ret = devm_gpio_request (& pdev -> dev , pdata -> buck_gpios [2 ],
809
- "S5M8767 SET3" );
810
- if (ret )
811
- return ret ;
745
+ if (s5m8767 -> buck_gpioindex & BIT (2 - i ))
746
+ flags = GPIOD_OUT_HIGH ;
747
+ else
748
+ flags = GPIOD_OUT_LOW ;
749
+
750
+ s5m8767 -> buck_gpios [i ] = devm_gpiod_get_index (iodev -> dev ,
751
+ "s5m8767,pmic-buck-dvs" , i ,
752
+ flags );
753
+ if (IS_ERR (s5m8767 -> buck_gpios [i ])) {
754
+ return dev_err_probe (iodev -> dev , PTR_ERR (s5m8767 -> buck_gpios [i ]),
755
+ "invalid gpio[%d]\n" , i );
756
+ }
812
757
813
- /* SET1 GPIO */
814
- gpio_direction_output (pdata -> buck_gpios [0 ],
815
- (s5m8767 -> buck_gpioindex >> 2 ) & 0x1 );
816
- /* SET2 GPIO */
817
- gpio_direction_output (pdata -> buck_gpios [1 ],
818
- (s5m8767 -> buck_gpioindex >> 1 ) & 0x1 );
819
- /* SET3 GPIO */
820
- gpio_direction_output (pdata -> buck_gpios [2 ],
821
- (s5m8767 -> buck_gpioindex >> 0 ) & 0x1 );
758
+ gpiod_set_consumer_name (s5m8767 -> buck_gpios [i ], gpiodvs_names [i ]);
759
+ }
822
760
}
823
761
824
- ret = devm_gpio_request (& pdev -> dev , pdata -> buck_ds [0 ], "S5M8767 DS2" );
825
- if (ret )
826
- return ret ;
827
-
828
- ret = devm_gpio_request (& pdev -> dev , pdata -> buck_ds [1 ], "S5M8767 DS3" );
829
- if (ret )
830
- return ret ;
831
-
832
- ret = devm_gpio_request (& pdev -> dev , pdata -> buck_ds [2 ], "S5M8767 DS4" );
833
- if (ret )
834
- return ret ;
835
-
836
- /* DS2 GPIO */
837
- gpio_direction_output (pdata -> buck_ds [0 ], 0x0 );
838
- /* DS3 GPIO */
839
- gpio_direction_output (pdata -> buck_ds [1 ], 0x0 );
840
- /* DS4 GPIO */
841
- gpio_direction_output (pdata -> buck_ds [2 ], 0x0 );
762
+ for (i = 0 ; i < 3 ; i ++ ) {
763
+ s5m8767 -> buck_ds [i ] = devm_gpiod_get_index (iodev -> dev ,
764
+ "s5m8767,pmic-buck-ds" , i ,
765
+ GPIOD_OUT_LOW );
766
+ if (IS_ERR (s5m8767 -> buck_ds [i ])) {
767
+ return dev_err_probe (iodev -> dev , PTR_ERR (s5m8767 -> buck_ds [i ]),
768
+ "can't get GPIO %d\n" , i );
769
+ }
770
+ gpiod_set_consumer_name (s5m8767 -> buck_ds [i ], gpiods_names [i ]);
771
+ }
842
772
843
773
regmap_update_bits (s5m8767 -> iodev -> regmap_pmic ,
844
774
S5M8767_REG_BUCK2CTRL , 1 << 1 ,
0 commit comments