diff options
Diffstat (limited to 'drivers/regulator/max8952.c')
| -rw-r--r-- | drivers/regulator/max8952.c | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/drivers/regulator/max8952.c b/drivers/regulator/max8952.c index 788e5ae2af1b..d920f5a32ec8 100644 --- a/drivers/regulator/max8952.c +++ b/drivers/regulator/max8952.c | |||
| @@ -48,9 +48,7 @@ enum { | |||
| 48 | 48 | ||
| 49 | struct max8952_data { | 49 | struct max8952_data { |
| 50 | struct i2c_client *client; | 50 | struct i2c_client *client; |
| 51 | struct device *dev; | ||
| 52 | struct max8952_platform_data *pdata; | 51 | struct max8952_platform_data *pdata; |
| 53 | struct regulator_dev *rdev; | ||
| 54 | 52 | ||
| 55 | bool vid0; | 53 | bool vid0; |
| 56 | bool vid1; | 54 | bool vid1; |
| @@ -59,6 +57,7 @@ struct max8952_data { | |||
| 59 | static int max8952_read_reg(struct max8952_data *max8952, u8 reg) | 57 | static int max8952_read_reg(struct max8952_data *max8952, u8 reg) |
| 60 | { | 58 | { |
| 61 | int ret = i2c_smbus_read_byte_data(max8952->client, reg); | 59 | int ret = i2c_smbus_read_byte_data(max8952->client, reg); |
| 60 | |||
| 62 | if (ret > 0) | 61 | if (ret > 0) |
| 63 | ret &= 0xff; | 62 | ret &= 0xff; |
| 64 | 63 | ||
| @@ -144,10 +143,8 @@ static struct max8952_platform_data *max8952_parse_dt(struct device *dev) | |||
| 144 | int i; | 143 | int i; |
| 145 | 144 | ||
| 146 | pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL); | 145 | pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL); |
| 147 | if (!pd) { | 146 | if (!pd) |
| 148 | dev_err(dev, "Failed to allocate platform data\n"); | ||
| 149 | return NULL; | 147 | return NULL; |
| 150 | } | ||
| 151 | 148 | ||
| 152 | pd->gpio_vid0 = of_get_named_gpio(np, "max8952,vid-gpios", 0); | 149 | pd->gpio_vid0 = of_get_named_gpio(np, "max8952,vid-gpios", 0); |
| 153 | pd->gpio_vid1 = of_get_named_gpio(np, "max8952,vid-gpios", 1); | 150 | pd->gpio_vid1 = of_get_named_gpio(np, "max8952,vid-gpios", 1); |
| @@ -199,6 +196,7 @@ static int max8952_pmic_probe(struct i2c_client *client, | |||
| 199 | struct max8952_platform_data *pdata = dev_get_platdata(&client->dev); | 196 | struct max8952_platform_data *pdata = dev_get_platdata(&client->dev); |
| 200 | struct regulator_config config = { }; | 197 | struct regulator_config config = { }; |
| 201 | struct max8952_data *max8952; | 198 | struct max8952_data *max8952; |
| 199 | struct regulator_dev *rdev; | ||
| 202 | 200 | ||
| 203 | int ret = 0, err = 0; | 201 | int ret = 0, err = 0; |
| 204 | 202 | ||
| @@ -219,10 +217,9 @@ static int max8952_pmic_probe(struct i2c_client *client, | |||
| 219 | return -ENOMEM; | 217 | return -ENOMEM; |
| 220 | 218 | ||
| 221 | max8952->client = client; | 219 | max8952->client = client; |
| 222 | max8952->dev = &client->dev; | ||
| 223 | max8952->pdata = pdata; | 220 | max8952->pdata = pdata; |
| 224 | 221 | ||
| 225 | config.dev = max8952->dev; | 222 | config.dev = &client->dev; |
| 226 | config.init_data = pdata->reg_data; | 223 | config.init_data = pdata->reg_data; |
| 227 | config.driver_data = max8952; | 224 | config.driver_data = max8952; |
| 228 | config.of_node = client->dev.of_node; | 225 | config.of_node = client->dev.of_node; |
| @@ -231,11 +228,11 @@ static int max8952_pmic_probe(struct i2c_client *client, | |||
| 231 | if (pdata->reg_data->constraints.boot_on) | 228 | if (pdata->reg_data->constraints.boot_on) |
| 232 | config.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH; | 229 | config.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH; |
| 233 | 230 | ||
| 234 | max8952->rdev = regulator_register(®ulator, &config); | 231 | rdev = devm_regulator_register(&client->dev, ®ulator, &config); |
| 235 | 232 | ||
| 236 | if (IS_ERR(max8952->rdev)) { | 233 | if (IS_ERR(rdev)) { |
| 237 | ret = PTR_ERR(max8952->rdev); | 234 | ret = PTR_ERR(rdev); |
| 238 | dev_err(max8952->dev, "regulator init failed (%d)\n", ret); | 235 | dev_err(&client->dev, "regulator init failed (%d)\n", ret); |
| 239 | return ret; | 236 | return ret; |
| 240 | } | 237 | } |
| 241 | 238 | ||
| @@ -263,7 +260,7 @@ static int max8952_pmic_probe(struct i2c_client *client, | |||
| 263 | err = 3; | 260 | err = 3; |
| 264 | 261 | ||
| 265 | if (err) { | 262 | if (err) { |
| 266 | dev_warn(max8952->dev, "VID0/1 gpio invalid: " | 263 | dev_warn(&client->dev, "VID0/1 gpio invalid: " |
| 267 | "DVS not available.\n"); | 264 | "DVS not available.\n"); |
| 268 | max8952->vid0 = 0; | 265 | max8952->vid0 = 0; |
| 269 | max8952->vid1 = 0; | 266 | max8952->vid1 = 0; |
| @@ -274,7 +271,7 @@ static int max8952_pmic_probe(struct i2c_client *client, | |||
| 274 | /* Disable Pulldown of EN only */ | 271 | /* Disable Pulldown of EN only */ |
| 275 | max8952_write_reg(max8952, MAX8952_REG_CONTROL, 0x60); | 272 | max8952_write_reg(max8952, MAX8952_REG_CONTROL, 0x60); |
| 276 | 273 | ||
| 277 | dev_err(max8952->dev, "DVS modes disabled because VID0 and VID1" | 274 | dev_err(&client->dev, "DVS modes disabled because VID0 and VID1" |
| 278 | " do not have proper controls.\n"); | 275 | " do not have proper controls.\n"); |
| 279 | } else { | 276 | } else { |
| 280 | /* | 277 | /* |
| @@ -321,9 +318,6 @@ static int max8952_pmic_remove(struct i2c_client *client) | |||
| 321 | { | 318 | { |
| 322 | struct max8952_data *max8952 = i2c_get_clientdata(client); | 319 | struct max8952_data *max8952 = i2c_get_clientdata(client); |
| 323 | struct max8952_platform_data *pdata = max8952->pdata; | 320 | struct max8952_platform_data *pdata = max8952->pdata; |
| 324 | struct regulator_dev *rdev = max8952->rdev; | ||
| 325 | |||
| 326 | regulator_unregister(rdev); | ||
| 327 | 321 | ||
| 328 | gpio_free(pdata->gpio_vid0); | 322 | gpio_free(pdata->gpio_vid0); |
| 329 | gpio_free(pdata->gpio_vid1); | 323 | gpio_free(pdata->gpio_vid1); |
