diff options
-rw-r--r-- | drivers/mfd/da903x.c | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/drivers/mfd/da903x.c b/drivers/mfd/da903x.c index 05176cd2862b..f1a316e0d6a6 100644 --- a/drivers/mfd/da903x.c +++ b/drivers/mfd/da903x.c | |||
@@ -499,7 +499,8 @@ static int da903x_probe(struct i2c_client *client, | |||
499 | unsigned int tmp; | 499 | unsigned int tmp; |
500 | int ret; | 500 | int ret; |
501 | 501 | ||
502 | chip = kzalloc(sizeof(struct da903x_chip), GFP_KERNEL); | 502 | chip = devm_kzalloc(&client->dev, sizeof(struct da903x_chip), |
503 | GFP_KERNEL); | ||
503 | if (chip == NULL) | 504 | if (chip == NULL) |
504 | return -ENOMEM; | 505 | return -ENOMEM; |
505 | 506 | ||
@@ -515,33 +516,27 @@ static int da903x_probe(struct i2c_client *client, | |||
515 | 516 | ||
516 | ret = chip->ops->init_chip(chip); | 517 | ret = chip->ops->init_chip(chip); |
517 | if (ret) | 518 | if (ret) |
518 | goto out_free_chip; | 519 | return ret; |
519 | 520 | ||
520 | /* mask and clear all IRQs */ | 521 | /* mask and clear all IRQs */ |
521 | chip->events_mask = 0xffffffff; | 522 | chip->events_mask = 0xffffffff; |
522 | chip->ops->mask_events(chip, chip->events_mask); | 523 | chip->ops->mask_events(chip, chip->events_mask); |
523 | chip->ops->read_events(chip, &tmp); | 524 | chip->ops->read_events(chip, &tmp); |
524 | 525 | ||
525 | ret = request_irq(client->irq, da903x_irq_handler, | 526 | ret = devm_request_irq(&client->dev, client->irq, da903x_irq_handler, |
526 | IRQF_TRIGGER_FALLING, | 527 | IRQF_TRIGGER_FALLING, |
527 | "da903x", chip); | 528 | "da903x", chip); |
528 | if (ret) { | 529 | if (ret) { |
529 | dev_err(&client->dev, "failed to request irq %d\n", | 530 | dev_err(&client->dev, "failed to request irq %d\n", |
530 | client->irq); | 531 | client->irq); |
531 | goto out_free_chip; | 532 | return ret; |
532 | } | 533 | } |
533 | 534 | ||
534 | ret = da903x_add_subdevs(chip, pdata); | 535 | ret = da903x_add_subdevs(chip, pdata); |
535 | if (ret) | 536 | if (ret) |
536 | goto out_free_irq; | 537 | return ret; |
537 | 538 | ||
538 | return 0; | 539 | return 0; |
539 | |||
540 | out_free_irq: | ||
541 | free_irq(client->irq, chip); | ||
542 | out_free_chip: | ||
543 | kfree(chip); | ||
544 | return ret; | ||
545 | } | 540 | } |
546 | 541 | ||
547 | static int da903x_remove(struct i2c_client *client) | 542 | static int da903x_remove(struct i2c_client *client) |
@@ -549,8 +544,6 @@ static int da903x_remove(struct i2c_client *client) | |||
549 | struct da903x_chip *chip = i2c_get_clientdata(client); | 544 | struct da903x_chip *chip = i2c_get_clientdata(client); |
550 | 545 | ||
551 | da903x_remove_subdevs(chip); | 546 | da903x_remove_subdevs(chip); |
552 | free_irq(client->irq, chip); | ||
553 | kfree(chip); | ||
554 | return 0; | 547 | return 0; |
555 | } | 548 | } |
556 | 549 | ||