Messages in this thread Patch in this message | | | From | Jingoo Han <> | Subject | [PATCH 07/11] mfd: menelaus: use devm_request_irq() and devm_kzalloc() | Date | Wed, 20 Feb 2013 15:12:38 +0900 |
| |
Use devm_request_irq() and devm_kzalloc() to make cleanup paths more simple.
Signed-off-by: Jingoo Han <jg1.han@samsung.com> --- drivers/mfd/menelaus.c | 23 +++++++++-------------- 1 files changed, 9 insertions(+), 14 deletions(-)
diff --git a/drivers/mfd/menelaus.c b/drivers/mfd/menelaus.c index 998ce8c..28bac1c 100644 --- a/drivers/mfd/menelaus.c +++ b/drivers/mfd/menelaus.c @@ -1197,7 +1197,8 @@ static int menelaus_probe(struct i2c_client *client, return -ENODEV; } - menelaus = kzalloc(sizeof *menelaus, GFP_KERNEL); + menelaus = devm_kzalloc(&client->dev, sizeof(*menelaus), + GFP_KERNEL); if (!menelaus) return -ENOMEM; @@ -1210,8 +1211,7 @@ static int menelaus_probe(struct i2c_client *client, rev = menelaus_read_reg(MENELAUS_REV); if (rev < 0) { pr_err(DRIVER_NAME ": device not found"); - err = -ENODEV; - goto fail1; + return -ENODEV; } /* Ack and disable all Menelaus interrupts */ @@ -1226,12 +1226,12 @@ static int menelaus_probe(struct i2c_client *client, menelaus_write_reg(MENELAUS_MCT_CTRL1, 0x73); if (client->irq > 0) { - err = request_irq(client->irq, menelaus_irq, 0, - DRIVER_NAME, menelaus); + err = devm_request_irq(&client->dev, client->irq, menelaus_irq, + 0, DRIVER_NAME, menelaus); if (err) { dev_dbg(&client->dev, "can't get IRQ %d, err %d\n", client->irq, err); - goto fail1; + return err; } } @@ -1242,7 +1242,7 @@ static int menelaus_probe(struct i2c_client *client, val = menelaus_read_reg(MENELAUS_VCORE_CTRL1); if (val < 0) - goto fail2; + goto fail1; if (val & (1 << 7)) menelaus->vcore_hw_mode = 1; else @@ -1251,17 +1251,14 @@ static int menelaus_probe(struct i2c_client *client, if (menelaus_pdata != NULL && menelaus_pdata->late_init != NULL) { err = menelaus_pdata->late_init(&client->dev); if (err < 0) - goto fail2; + goto fail1; } menelaus_rtc_init(menelaus); return 0; -fail2: - free_irq(client->irq, menelaus); - flush_work(&menelaus->work); fail1: - kfree(menelaus); + flush_work(&menelaus->work); return err; } @@ -1269,9 +1266,7 @@ static int __exit menelaus_remove(struct i2c_client *client) { struct menelaus_chip *menelaus = i2c_get_clientdata(client); - free_irq(client->irq, menelaus); flush_work(&menelaus->work); - kfree(menelaus); the_menelaus = NULL; return 0; } -- 1.7.2.5
| |