diff options
-rw-r--r-- | drivers/power/max8903_charger.c | 93 |
1 files changed, 28 insertions, 65 deletions
diff --git a/drivers/power/max8903_charger.c b/drivers/power/max8903_charger.c index bf2b4b3a7cae..6d39d52040d4 100644 --- a/drivers/power/max8903_charger.c +++ b/drivers/power/max8903_charger.c | |||
@@ -201,8 +201,7 @@ static int max8903_probe(struct platform_device *pdev) | |||
201 | 201 | ||
202 | if (pdata->dc_valid == false && pdata->usb_valid == false) { | 202 | if (pdata->dc_valid == false && pdata->usb_valid == false) { |
203 | dev_err(dev, "No valid power sources.\n"); | 203 | dev_err(dev, "No valid power sources.\n"); |
204 | ret = -EINVAL; | 204 | return -EINVAL; |
205 | goto err; | ||
206 | } | 205 | } |
207 | 206 | ||
208 | if (pdata->dc_valid) { | 207 | if (pdata->dc_valid) { |
@@ -216,8 +215,7 @@ static int max8903_probe(struct platform_device *pdev) | |||
216 | } else { | 215 | } else { |
217 | dev_err(dev, "When DC is wired, DOK and DCM should" | 216 | dev_err(dev, "When DC is wired, DOK and DCM should" |
218 | " be wired as well.\n"); | 217 | " be wired as well.\n"); |
219 | ret = -EINVAL; | 218 | return -EINVAL; |
220 | goto err; | ||
221 | } | 219 | } |
222 | } else { | 220 | } else { |
223 | if (pdata->dcm) { | 221 | if (pdata->dcm) { |
@@ -225,8 +223,7 @@ static int max8903_probe(struct platform_device *pdev) | |||
225 | gpio_set_value(pdata->dcm, 0); | 223 | gpio_set_value(pdata->dcm, 0); |
226 | else { | 224 | else { |
227 | dev_err(dev, "Invalid pin: dcm.\n"); | 225 | dev_err(dev, "Invalid pin: dcm.\n"); |
228 | ret = -EINVAL; | 226 | return -EINVAL; |
229 | goto err; | ||
230 | } | 227 | } |
231 | } | 228 | } |
232 | } | 229 | } |
@@ -238,8 +235,7 @@ static int max8903_probe(struct platform_device *pdev) | |||
238 | } else { | 235 | } else { |
239 | dev_err(dev, "When USB is wired, UOK should be wired." | 236 | dev_err(dev, "When USB is wired, UOK should be wired." |
240 | "as well.\n"); | 237 | "as well.\n"); |
241 | ret = -EINVAL; | 238 | return -EINVAL; |
242 | goto err; | ||
243 | } | 239 | } |
244 | } | 240 | } |
245 | 241 | ||
@@ -248,32 +244,28 @@ static int max8903_probe(struct platform_device *pdev) | |||
248 | gpio_set_value(pdata->cen, (ta_in || usb_in) ? 0 : 1); | 244 | gpio_set_value(pdata->cen, (ta_in || usb_in) ? 0 : 1); |
249 | } else { | 245 | } else { |
250 | dev_err(dev, "Invalid pin: cen.\n"); | 246 | dev_err(dev, "Invalid pin: cen.\n"); |
251 | ret = -EINVAL; | 247 | return -EINVAL; |
252 | goto err; | ||
253 | } | 248 | } |
254 | } | 249 | } |
255 | 250 | ||
256 | if (pdata->chg) { | 251 | if (pdata->chg) { |
257 | if (!gpio_is_valid(pdata->chg)) { | 252 | if (!gpio_is_valid(pdata->chg)) { |
258 | dev_err(dev, "Invalid pin: chg.\n"); | 253 | dev_err(dev, "Invalid pin: chg.\n"); |
259 | ret = -EINVAL; | 254 | return -EINVAL; |
260 | goto err; | ||
261 | } | 255 | } |
262 | } | 256 | } |
263 | 257 | ||
264 | if (pdata->flt) { | 258 | if (pdata->flt) { |
265 | if (!gpio_is_valid(pdata->flt)) { | 259 | if (!gpio_is_valid(pdata->flt)) { |
266 | dev_err(dev, "Invalid pin: flt.\n"); | 260 | dev_err(dev, "Invalid pin: flt.\n"); |
267 | ret = -EINVAL; | 261 | return -EINVAL; |
268 | goto err; | ||
269 | } | 262 | } |
270 | } | 263 | } |
271 | 264 | ||
272 | if (pdata->usus) { | 265 | if (pdata->usus) { |
273 | if (!gpio_is_valid(pdata->usus)) { | 266 | if (!gpio_is_valid(pdata->usus)) { |
274 | dev_err(dev, "Invalid pin: usus.\n"); | 267 | dev_err(dev, "Invalid pin: usus.\n"); |
275 | ret = -EINVAL; | 268 | return -EINVAL; |
276 | goto err; | ||
277 | } | 269 | } |
278 | } | 270 | } |
279 | 271 | ||
@@ -291,85 +283,56 @@ static int max8903_probe(struct platform_device *pdev) | |||
291 | 283 | ||
292 | psy_cfg.drv_data = data; | 284 | psy_cfg.drv_data = data; |
293 | 285 | ||
294 | data->psy = power_supply_register(dev, &data->psy_desc, &psy_cfg); | 286 | data->psy = devm_power_supply_register(dev, &data->psy_desc, &psy_cfg); |
295 | if (IS_ERR(data->psy)) { | 287 | if (IS_ERR(data->psy)) { |
296 | dev_err(dev, "failed: power supply register.\n"); | 288 | dev_err(dev, "failed: power supply register.\n"); |
297 | ret = PTR_ERR(data->psy); | 289 | return PTR_ERR(data->psy); |
298 | goto err; | ||
299 | } | 290 | } |
300 | 291 | ||
301 | if (pdata->dc_valid) { | 292 | if (pdata->dc_valid) { |
302 | ret = request_threaded_irq(gpio_to_irq(pdata->dok), | 293 | ret = devm_request_threaded_irq(dev, gpio_to_irq(pdata->dok), |
303 | NULL, max8903_dcin, | 294 | NULL, max8903_dcin, |
304 | IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, | 295 | IRQF_TRIGGER_FALLING | |
305 | "MAX8903 DC IN", data); | 296 | IRQF_TRIGGER_RISING, |
297 | "MAX8903 DC IN", data); | ||
306 | if (ret) { | 298 | if (ret) { |
307 | dev_err(dev, "Cannot request irq %d for DC (%d)\n", | 299 | dev_err(dev, "Cannot request irq %d for DC (%d)\n", |
308 | gpio_to_irq(pdata->dok), ret); | 300 | gpio_to_irq(pdata->dok), ret); |
309 | goto err_psy; | 301 | return ret; |
310 | } | 302 | } |
311 | } | 303 | } |
312 | 304 | ||
313 | if (pdata->usb_valid) { | 305 | if (pdata->usb_valid) { |
314 | ret = request_threaded_irq(gpio_to_irq(pdata->uok), | 306 | ret = devm_request_threaded_irq(dev, gpio_to_irq(pdata->uok), |
315 | NULL, max8903_usbin, | 307 | NULL, max8903_usbin, |
316 | IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, | 308 | IRQF_TRIGGER_FALLING | |
317 | "MAX8903 USB IN", data); | 309 | IRQF_TRIGGER_RISING, |
310 | "MAX8903 USB IN", data); | ||
318 | if (ret) { | 311 | if (ret) { |
319 | dev_err(dev, "Cannot request irq %d for USB (%d)\n", | 312 | dev_err(dev, "Cannot request irq %d for USB (%d)\n", |
320 | gpio_to_irq(pdata->uok), ret); | 313 | gpio_to_irq(pdata->uok), ret); |
321 | goto err_dc_irq; | 314 | return ret; |
322 | } | 315 | } |
323 | } | 316 | } |
324 | 317 | ||
325 | if (pdata->flt) { | 318 | if (pdata->flt) { |
326 | ret = request_threaded_irq(gpio_to_irq(pdata->flt), | 319 | ret = devm_request_threaded_irq(dev, gpio_to_irq(pdata->flt), |
327 | NULL, max8903_fault, | 320 | NULL, max8903_fault, |
328 | IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, | 321 | IRQF_TRIGGER_FALLING | |
329 | "MAX8903 Fault", data); | 322 | IRQF_TRIGGER_RISING, |
323 | "MAX8903 Fault", data); | ||
330 | if (ret) { | 324 | if (ret) { |
331 | dev_err(dev, "Cannot request irq %d for Fault (%d)\n", | 325 | dev_err(dev, "Cannot request irq %d for Fault (%d)\n", |
332 | gpio_to_irq(pdata->flt), ret); | 326 | gpio_to_irq(pdata->flt), ret); |
333 | goto err_usb_irq; | 327 | return ret; |
334 | } | 328 | } |
335 | } | 329 | } |
336 | 330 | ||
337 | return 0; | 331 | return 0; |
338 | |||
339 | err_usb_irq: | ||
340 | if (pdata->usb_valid) | ||
341 | free_irq(gpio_to_irq(pdata->uok), data); | ||
342 | err_dc_irq: | ||
343 | if (pdata->dc_valid) | ||
344 | free_irq(gpio_to_irq(pdata->dok), data); | ||
345 | err_psy: | ||
346 | power_supply_unregister(data->psy); | ||
347 | err: | ||
348 | return ret; | ||
349 | } | ||
350 | |||
351 | static int max8903_remove(struct platform_device *pdev) | ||
352 | { | ||
353 | struct max8903_data *data = platform_get_drvdata(pdev); | ||
354 | |||
355 | if (data) { | ||
356 | struct max8903_pdata *pdata = &data->pdata; | ||
357 | |||
358 | if (pdata->flt) | ||
359 | free_irq(gpio_to_irq(pdata->flt), data); | ||
360 | if (pdata->usb_valid) | ||
361 | free_irq(gpio_to_irq(pdata->uok), data); | ||
362 | if (pdata->dc_valid) | ||
363 | free_irq(gpio_to_irq(pdata->dok), data); | ||
364 | power_supply_unregister(data->psy); | ||
365 | } | ||
366 | |||
367 | return 0; | ||
368 | } | 332 | } |
369 | 333 | ||
370 | static struct platform_driver max8903_driver = { | 334 | static struct platform_driver max8903_driver = { |
371 | .probe = max8903_probe, | 335 | .probe = max8903_probe, |
372 | .remove = max8903_remove, | ||
373 | .driver = { | 336 | .driver = { |
374 | .name = "max8903-charger", | 337 | .name = "max8903-charger", |
375 | }, | 338 | }, |