mfd: sec: Use devm_mfd_add_devices and devm_regmap_add_irq_chip
Use devm_mfd_add_devices() for adding MFD child devices and devm_regmap_add_irq_chip() for IRQ chip registration. This reduces the error code path and .remove callback for removing MFD child devices and deleting IRQ chip data. Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Tested-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Signed-off-by: Lee Jones <lee.jones@linaro.org>
This commit is contained in:
parent
b36c82724f
commit
3dc6f4aaaf
@ -481,29 +481,16 @@ static int sec_pmic_probe(struct i2c_client *i2c,
|
|||||||
/* If this happens the probe function is problem */
|
/* If this happens the probe function is problem */
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
ret = mfd_add_devices(sec_pmic->dev, -1, sec_devs, num_sec_devs, NULL,
|
ret = devm_mfd_add_devices(sec_pmic->dev, -1, sec_devs, num_sec_devs,
|
||||||
0, NULL);
|
NULL, 0, NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_mfd;
|
return ret;
|
||||||
|
|
||||||
device_init_wakeup(sec_pmic->dev, sec_pmic->wakeup);
|
device_init_wakeup(sec_pmic->dev, sec_pmic->wakeup);
|
||||||
sec_pmic_configure(sec_pmic);
|
sec_pmic_configure(sec_pmic);
|
||||||
sec_pmic_dump_rev(sec_pmic);
|
sec_pmic_dump_rev(sec_pmic);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
err_mfd:
|
|
||||||
sec_irq_exit(sec_pmic);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int sec_pmic_remove(struct i2c_client *i2c)
|
|
||||||
{
|
|
||||||
struct sec_pmic_dev *sec_pmic = i2c_get_clientdata(i2c);
|
|
||||||
|
|
||||||
mfd_remove_devices(sec_pmic->dev);
|
|
||||||
sec_irq_exit(sec_pmic);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sec_pmic_shutdown(struct i2c_client *i2c)
|
static void sec_pmic_shutdown(struct i2c_client *i2c)
|
||||||
@ -583,7 +570,6 @@ static struct i2c_driver sec_pmic_driver = {
|
|||||||
.of_match_table = of_match_ptr(sec_dt_match),
|
.of_match_table = of_match_ptr(sec_dt_match),
|
||||||
},
|
},
|
||||||
.probe = sec_pmic_probe,
|
.probe = sec_pmic_probe,
|
||||||
.remove = sec_pmic_remove,
|
|
||||||
.shutdown = sec_pmic_shutdown,
|
.shutdown = sec_pmic_shutdown,
|
||||||
.id_table = sec_pmic_id,
|
.id_table = sec_pmic_id,
|
||||||
};
|
};
|
||||||
|
@ -483,10 +483,11 @@ int sec_irq_init(struct sec_pmic_dev *sec_pmic)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = regmap_add_irq_chip(sec_pmic->regmap_pmic, sec_pmic->irq,
|
ret = devm_regmap_add_irq_chip(sec_pmic->dev, sec_pmic->regmap_pmic,
|
||||||
IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
|
sec_pmic->irq,
|
||||||
sec_pmic->irq_base, sec_irq_chip,
|
IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
|
||||||
&sec_pmic->irq_data);
|
sec_pmic->irq_base, sec_irq_chip,
|
||||||
|
&sec_pmic->irq_data);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
dev_err(sec_pmic->dev, "Failed to register IRQ chip: %d\n", ret);
|
dev_err(sec_pmic->dev, "Failed to register IRQ chip: %d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
@ -500,8 +501,3 @@ int sec_irq_init(struct sec_pmic_dev *sec_pmic)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sec_irq_exit(struct sec_pmic_dev *sec_pmic)
|
|
||||||
{
|
|
||||||
regmap_del_irq_chip(sec_pmic->irq, sec_pmic->irq_data);
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user