13
13
#include <linux/gpio/consumer.h>
14
14
#include <linux/mfd/sy7636a.h>
15
15
16
+ struct sy7636a_data {
17
+ struct sy7636a * sy7636a ;
18
+ struct gpio_desc * pgood_gpio ;
19
+ };
20
+
16
21
static int sy7636a_get_vcom_voltage_op (struct regulator_dev * rdev )
17
22
{
18
23
int ret ;
@@ -33,10 +38,10 @@ static int sy7636a_get_vcom_voltage_op(struct regulator_dev *rdev)
33
38
34
39
static int sy7636a_get_status (struct regulator_dev * rdev )
35
40
{
36
- struct sy7636a * sy7636a = dev_get_drvdata (rdev -> dev .parent );
41
+ struct sy7636a_data * data = dev_get_drvdata (rdev -> dev .parent );
37
42
int ret = 0 ;
38
43
39
- ret = gpiod_get_value_cansleep (sy7636a -> pgood_gpio );
44
+ ret = gpiod_get_value_cansleep (data -> pgood_gpio );
40
45
if (ret < 0 )
41
46
dev_err (& rdev -> dev , "Failed to read pgood gpio: %d\n" , ret );
42
47
@@ -69,20 +74,26 @@ static int sy7636a_regulator_probe(struct platform_device *pdev)
69
74
struct regulator_config config = { };
70
75
struct regulator_dev * rdev ;
71
76
struct gpio_desc * gdp ;
77
+ struct sy7636a_data * data ;
72
78
int ret ;
73
79
74
80
if (!sy7636a )
75
81
return - EPROBE_DEFER ;
76
82
77
- platform_set_drvdata (pdev , sy7636a );
78
-
79
83
gdp = devm_gpiod_get (pdev -> dev .parent , "epd-pwr-good" , GPIOD_IN );
80
84
if (IS_ERR (gdp )) {
81
85
dev_err (pdev -> dev .parent , "Power good GPIO fault %ld\n" , PTR_ERR (gdp ));
82
86
return PTR_ERR (gdp );
83
87
}
84
88
85
- sy7636a -> pgood_gpio = gdp ;
89
+ data = devm_kzalloc (& pdev -> dev , sizeof (struct sy7636a_data ), GFP_KERNEL );
90
+ if (!data )
91
+ return - ENOMEM ;
92
+
93
+ data -> sy7636a = sy7636a ;
94
+ data -> pgood_gpio = gdp ;
95
+
96
+ platform_set_drvdata (pdev , data );
86
97
87
98
ret = regmap_write (sy7636a -> regmap , SY7636A_REG_POWER_ON_DELAY_TIME , 0x0 );
88
99
if (ret ) {
0 commit comments