13
13
#include <linux/platform_device.h>
14
14
#include <linux/regulator/driver.h>
15
15
#include <linux/mfd/lp8788.h>
16
- #include <linux/gpio.h>
16
+ #include <linux/gpio/consumer .h>
17
17
18
18
/* register address */
19
19
#define LP8788_EN_BUCK 0x0C
69
69
#define BUCK_FPWM_SHIFT (x ) (x)
70
70
71
71
enum lp8788_dvs_state {
72
- DVS_LOW = GPIOF_OUT_INIT_LOW ,
73
- DVS_HIGH = GPIOF_OUT_INIT_HIGH ,
72
+ DVS_LOW = 0 ,
73
+ DVS_HIGH = 1 ,
74
74
};
75
75
76
76
enum lp8788_dvs_mode {
@@ -89,6 +89,8 @@ struct lp8788_buck {
89
89
struct lp8788 * lp ;
90
90
struct regulator_dev * regulator ;
91
91
void * dvs ;
92
+ struct gpio_desc * gpio1 ;
93
+ struct gpio_desc * gpio2 ; /* Only used on BUCK2 */
92
94
};
93
95
94
96
/* BUCK 1 ~ 4 voltage ranges */
@@ -106,8 +108,7 @@ static void lp8788_buck1_set_dvs(struct lp8788_buck *buck)
106
108
return ;
107
109
108
110
pinstate = dvs -> vsel == DVS_SEL_V0 ? DVS_LOW : DVS_HIGH ;
109
- if (gpio_is_valid (dvs -> gpio ))
110
- gpio_set_value (dvs -> gpio , pinstate );
111
+ gpiod_set_value (buck -> gpio1 , pinstate );
111
112
}
112
113
113
114
static void lp8788_buck2_set_dvs (struct lp8788_buck * buck )
@@ -139,11 +140,8 @@ static void lp8788_buck2_set_dvs(struct lp8788_buck *buck)
139
140
return ;
140
141
}
141
142
142
- if (gpio_is_valid (dvs -> gpio [0 ]))
143
- gpio_set_value (dvs -> gpio [0 ], pin1 );
144
-
145
- if (gpio_is_valid (dvs -> gpio [1 ]))
146
- gpio_set_value (dvs -> gpio [1 ], pin2 );
143
+ gpiod_set_value (buck -> gpio1 , pin1 );
144
+ gpiod_set_value (buck -> gpio2 , pin2 );
147
145
}
148
146
149
147
static void lp8788_set_dvs (struct lp8788_buck * buck , enum lp8788_buck_id id )
@@ -202,19 +200,13 @@ static u8 lp8788_select_buck_vout_addr(struct lp8788_buck *buck,
202
200
enum lp8788_buck_id id )
203
201
{
204
202
enum lp8788_dvs_mode mode = lp8788_get_buck_dvs_ctrl_mode (buck , id );
205
- struct lp8788_buck1_dvs * b1_dvs ;
206
- struct lp8788_buck2_dvs * b2_dvs ;
207
203
u8 val , idx , addr ;
208
204
int pin1 , pin2 ;
209
205
210
206
switch (id ) {
211
207
case BUCK1 :
212
208
if (mode == EXTPIN ) {
213
- b1_dvs = (struct lp8788_buck1_dvs * )buck -> dvs ;
214
- if (!b1_dvs )
215
- goto err ;
216
-
217
- idx = gpio_get_value (b1_dvs -> gpio ) ? 1 : 0 ;
209
+ idx = gpiod_get_value (buck -> gpio1 );
218
210
} else {
219
211
lp8788_read_byte (buck -> lp , LP8788_BUCK_DVS_SEL , & val );
220
212
idx = (val & LP8788_BUCK1_DVS_M ) >> LP8788_BUCK1_DVS_S ;
@@ -223,12 +215,8 @@ static u8 lp8788_select_buck_vout_addr(struct lp8788_buck *buck,
223
215
break ;
224
216
case BUCK2 :
225
217
if (mode == EXTPIN ) {
226
- b2_dvs = (struct lp8788_buck2_dvs * )buck -> dvs ;
227
- if (!b2_dvs )
228
- goto err ;
229
-
230
- pin1 = gpio_get_value (b2_dvs -> gpio [0 ]);
231
- pin2 = gpio_get_value (b2_dvs -> gpio [1 ]);
218
+ pin1 = gpiod_get_value (buck -> gpio1 );
219
+ pin2 = gpiod_get_value (buck -> gpio2 );
232
220
233
221
if (pin1 == PIN_LOW && pin2 == PIN_LOW )
234
222
idx = 0 ;
@@ -424,28 +412,28 @@ static int lp8788_dvs_gpio_request(struct platform_device *pdev,
424
412
enum lp8788_buck_id id )
425
413
{
426
414
struct lp8788_platform_data * pdata = buck -> lp -> pdata ;
427
- char * b1_name = "LP8788_B1_DVS" ;
428
- char * b2_name [] = { "LP8788_B2_DVS1" , "LP8788_B2_DVS2" };
429
- int i , gpio , ret ;
415
+ struct device * dev = & pdev -> dev ;
430
416
431
417
switch (id ) {
432
418
case BUCK1 :
433
- gpio = pdata -> buck1_dvs -> gpio ;
434
- ret = devm_gpio_request_one (& pdev -> dev , gpio , DVS_LOW ,
435
- b1_name );
436
- if (ret )
437
- return ret ;
419
+ buck -> gpio1 = devm_gpiod_get (dev , "dvs" , GPIOD_OUT_LOW );
420
+ if (IS_ERR (buck -> gpio1 ))
421
+ return PTR_ERR (buck -> gpio1 );
422
+ gpiod_set_consumer_name (buck -> gpio1 , "LP8788_B1_DVS" );
438
423
439
424
buck -> dvs = pdata -> buck1_dvs ;
440
425
break ;
441
426
case BUCK2 :
442
- for (i = 0 ; i < LP8788_NUM_BUCK2_DVS ; i ++ ) {
443
- gpio = pdata -> buck2_dvs -> gpio [i ];
444
- ret = devm_gpio_request_one (& pdev -> dev , gpio ,
445
- DVS_LOW , b2_name [i ]);
446
- if (ret )
447
- return ret ;
448
- }
427
+ buck -> gpio1 = devm_gpiod_get_index (dev , "dvs" , 0 , GPIOD_OUT_LOW );
428
+ if (IS_ERR (buck -> gpio1 ))
429
+ return PTR_ERR (buck -> gpio1 );
430
+ gpiod_set_consumer_name (buck -> gpio1 , "LP8788_B2_DVS1" );
431
+
432
+ buck -> gpio2 = devm_gpiod_get_index (dev , "dvs" , 1 , GPIOD_OUT_LOW );
433
+ if (IS_ERR (buck -> gpio1 ))
434
+ return PTR_ERR (buck -> gpio1 );
435
+ gpiod_set_consumer_name (buck -> gpio1 , "LP8788_B2_DVS2" );
436
+
449
437
buck -> dvs = pdata -> buck2_dvs ;
450
438
break ;
451
439
default :
0 commit comments