aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/power/max8903_charger.c93
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
339err_usb_irq:
340 if (pdata->usb_valid)
341 free_irq(gpio_to_irq(pdata->uok), data);
342err_dc_irq:
343 if (pdata->dc_valid)
344 free_irq(gpio_to_irq(pdata->dok), data);
345err_psy:
346 power_supply_unregister(data->psy);
347err:
348 return ret;
349}
350
351static 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
370static struct platform_driver max8903_driver = { 334static 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 },