Reset controller changes for v4.8
- add devm_reset_controller_register API to get rid of a good amount of boilerplate across reset drivers. - move reset controller Kconfig options into a sub-menu - fix inconsistent return values, let all reset_control_get stubs return -ENOTSUPP -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJXTwd2AAoJEFDCiBxwnmDrcF8P/iczOzX6fWYRTCRETqXTwBcc 284ZNn9qnM8H9Rk+XBdB9hK1QEiXNuAunU8ILD8wlmBSRfN5O0tMAJaQtZ55NOD0 Pn5CBSAcooq9WSPCL6qhmOfRZntHbqcgL/pVsOtOEa+HC3PLNe5uJytBoBIsQa6P 4Z08YdA1zz+NN9hGbnKa8XSBtNHTNfq7dAePLLXfezYLvxCgiUbEHkdCTYRYz6ZX 2b60ydaOW7XayyetKO0LuoB/Xk20Q5t9vKkf+BIE6mTdVdlVPSQXiFvq6vd67MBH fGKsSJUi7xtAh1Lo1v7lBkA8fwuytrFwJLiCoKBLsizraQXFH+hYserTsMNQj+iO SM6e2cQVsKp/CcO13OdFGaP/fBa0sdaKInT28foU0xXaXmaWovQcFJfs0Qo4wmv6 hu2rPXONofT0+8ksqbighmPqF1Ov4ImH1izEtqjirPRq5KtRbvFbTFpTfxDeIEpI qWYSTopagEIs2xMI2grxdS2Ar13kLDI2oEWF7vhUQF9c53Mc3DeJQXuw2X2956YE Ea5UbbwJT90Z++Iu/0lUGcG+j8l8mlVXX39XcMpsbfou/wMCKEJml+sck0CJgChn ZDK8LYz8sNyr/vALUKg+HDEVWG1gijYA7BSABh6eOnUY1wFsTTxxCpWaZzj3qNJb +YHti+gHUYYIlfgSA2RM =sBMZ -----END PGP SIGNATURE----- Merge tag 'reset-for-4.8' of git://git.pengutronix.de/git/pza/linux into next/drivers Reset controller changes for v4.8 - add devm_reset_controller_register API to get rid of a good amount of boilerplate across reset drivers. - move reset controller Kconfig options into a sub-menu - fix inconsistent return values, let all reset_control_get stubs return -ENOTSUPP * tag 'reset-for-4.8' of git://git.pengutronix.de/git/pza/linux: reset: Return -ENOTSUPP when not configured reset: oxnas: Use devm register API and get rid of platform remove reset: fix Kconfig menu to include reset drivers in sub-menu reset: zynq: use devm_reset_controller_register() reset: socfpga: use devm_reset_controller_register() reset: sunxi: use devm_reset_controller_register() reset: pistachio: use devm_reset_controller_register() reset: ath79: use devm_reset_controller_register() reset: add devm_reset_controller_register API Signed-off-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
Коммит
e7a6bb9a05
|
@ -352,6 +352,10 @@ REGULATOR
|
|||
devm_regulator_put()
|
||||
devm_regulator_register()
|
||||
|
||||
RESET
|
||||
devm_reset_control_get()
|
||||
devm_reset_controller_register()
|
||||
|
||||
SLAVE DMA ENGINE
|
||||
devm_acpi_dma_controller_register()
|
||||
|
||||
|
|
|
@ -12,8 +12,12 @@ menuconfig RESET_CONTROLLER
|
|||
|
||||
If unsure, say no.
|
||||
|
||||
if RESET_CONTROLLER
|
||||
|
||||
config RESET_OXNAS
|
||||
bool
|
||||
|
||||
source "drivers/reset/sti/Kconfig"
|
||||
source "drivers/reset/hisilicon/Kconfig"
|
||||
|
||||
endif
|
||||
|
|
|
@ -93,6 +93,43 @@ void reset_controller_unregister(struct reset_controller_dev *rcdev)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(reset_controller_unregister);
|
||||
|
||||
static void devm_reset_controller_release(struct device *dev, void *res)
|
||||
{
|
||||
reset_controller_unregister(*(struct reset_controller_dev **)res);
|
||||
}
|
||||
|
||||
/**
|
||||
* devm_reset_controller_register - resource managed reset_controller_register()
|
||||
* @dev: device that is registering this reset controller
|
||||
* @rcdev: a pointer to the initialized reset controller device
|
||||
*
|
||||
* Managed reset_controller_register(). For reset controllers registered by
|
||||
* this function, reset_controller_unregister() is automatically called on
|
||||
* driver detach. See reset_controller_register() for more information.
|
||||
*/
|
||||
int devm_reset_controller_register(struct device *dev,
|
||||
struct reset_controller_dev *rcdev)
|
||||
{
|
||||
struct reset_controller_dev **rcdevp;
|
||||
int ret;
|
||||
|
||||
rcdevp = devres_alloc(devm_reset_controller_release, sizeof(*rcdevp),
|
||||
GFP_KERNEL);
|
||||
if (!rcdevp)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = reset_controller_register(rcdev);
|
||||
if (!ret) {
|
||||
*rcdevp = rcdev;
|
||||
devres_add(dev, rcdevp);
|
||||
} else {
|
||||
devres_free(rcdevp);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_reset_controller_register);
|
||||
|
||||
/**
|
||||
* reset_control_reset - reset the controlled device
|
||||
* @rstc: reset controller
|
||||
|
|
|
@ -112,7 +112,7 @@ static int ath79_reset_probe(struct platform_device *pdev)
|
|||
ath79_reset->rcdev.of_reset_n_cells = 1;
|
||||
ath79_reset->rcdev.nr_resets = 32;
|
||||
|
||||
err = reset_controller_register(&ath79_reset->rcdev);
|
||||
err = devm_reset_controller_register(&pdev->dev, &ath79_reset->rcdev);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
@ -131,7 +131,6 @@ static int ath79_reset_remove(struct platform_device *pdev)
|
|||
struct ath79_reset *ath79_reset = platform_get_drvdata(pdev);
|
||||
|
||||
unregister_restart_handler(&ath79_reset->restart_nb);
|
||||
reset_controller_unregister(&ath79_reset->rcdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -112,21 +112,11 @@ static int oxnas_reset_probe(struct platform_device *pdev)
|
|||
data->rcdev.ops = &oxnas_reset_ops;
|
||||
data->rcdev.of_node = pdev->dev.of_node;
|
||||
|
||||
return reset_controller_register(&data->rcdev);
|
||||
}
|
||||
|
||||
static int oxnas_reset_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct oxnas_reset *data = platform_get_drvdata(pdev);
|
||||
|
||||
reset_controller_unregister(&data->rcdev);
|
||||
|
||||
return 0;
|
||||
return devm_reset_controller_register(&pdev->dev, &data->rcdev);
|
||||
}
|
||||
|
||||
static struct platform_driver oxnas_reset_driver = {
|
||||
.probe = oxnas_reset_probe,
|
||||
.remove = oxnas_reset_remove,
|
||||
.driver = {
|
||||
.name = "oxnas-reset",
|
||||
.of_match_table = oxnas_reset_dt_ids,
|
||||
|
|
|
@ -121,16 +121,7 @@ static int pistachio_reset_probe(struct platform_device *pdev)
|
|||
rd->rcdev.ops = &pistachio_reset_ops;
|
||||
rd->rcdev.of_node = np;
|
||||
|
||||
return reset_controller_register(&rd->rcdev);
|
||||
}
|
||||
|
||||
static int pistachio_reset_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct pistachio_reset_data *data = platform_get_drvdata(pdev);
|
||||
|
||||
reset_controller_unregister(&data->rcdev);
|
||||
|
||||
return 0;
|
||||
return devm_reset_controller_register(dev, &rd->rcdev);
|
||||
}
|
||||
|
||||
static const struct of_device_id pistachio_reset_dt_ids[] = {
|
||||
|
@ -141,7 +132,6 @@ MODULE_DEVICE_TABLE(of, pistachio_reset_dt_ids);
|
|||
|
||||
static struct platform_driver pistachio_reset_driver = {
|
||||
.probe = pistachio_reset_probe,
|
||||
.remove = pistachio_reset_remove,
|
||||
.driver = {
|
||||
.name = "pistachio-reset",
|
||||
.of_match_table = pistachio_reset_dt_ids,
|
||||
|
|
|
@ -134,16 +134,7 @@ static int socfpga_reset_probe(struct platform_device *pdev)
|
|||
data->rcdev.ops = &socfpga_reset_ops;
|
||||
data->rcdev.of_node = pdev->dev.of_node;
|
||||
|
||||
return reset_controller_register(&data->rcdev);
|
||||
}
|
||||
|
||||
static int socfpga_reset_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct socfpga_reset_data *data = platform_get_drvdata(pdev);
|
||||
|
||||
reset_controller_unregister(&data->rcdev);
|
||||
|
||||
return 0;
|
||||
return devm_reset_controller_register(dev, &data->rcdev);
|
||||
}
|
||||
|
||||
static const struct of_device_id socfpga_reset_dt_ids[] = {
|
||||
|
@ -153,7 +144,6 @@ static const struct of_device_id socfpga_reset_dt_ids[] = {
|
|||
|
||||
static struct platform_driver socfpga_reset_driver = {
|
||||
.probe = socfpga_reset_probe,
|
||||
.remove = socfpga_reset_remove,
|
||||
.driver = {
|
||||
.name = "socfpga-reset",
|
||||
.of_match_table = socfpga_reset_dt_ids,
|
||||
|
|
|
@ -165,21 +165,11 @@ static int sunxi_reset_probe(struct platform_device *pdev)
|
|||
data->rcdev.ops = &sunxi_reset_ops;
|
||||
data->rcdev.of_node = pdev->dev.of_node;
|
||||
|
||||
return reset_controller_register(&data->rcdev);
|
||||
}
|
||||
|
||||
static int sunxi_reset_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct sunxi_reset_data *data = platform_get_drvdata(pdev);
|
||||
|
||||
reset_controller_unregister(&data->rcdev);
|
||||
|
||||
return 0;
|
||||
return devm_reset_controller_register(&pdev->dev, &data->rcdev);
|
||||
}
|
||||
|
||||
static struct platform_driver sunxi_reset_driver = {
|
||||
.probe = sunxi_reset_probe,
|
||||
.remove = sunxi_reset_remove,
|
||||
.driver = {
|
||||
.name = "sunxi-reset",
|
||||
.of_match_table = sunxi_reset_dt_ids,
|
||||
|
|
|
@ -122,16 +122,7 @@ static int zynq_reset_probe(struct platform_device *pdev)
|
|||
priv->rcdev.ops = &zynq_reset_ops;
|
||||
priv->rcdev.of_node = pdev->dev.of_node;
|
||||
|
||||
return reset_controller_register(&priv->rcdev);
|
||||
}
|
||||
|
||||
static int zynq_reset_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct zynq_reset_data *priv = platform_get_drvdata(pdev);
|
||||
|
||||
reset_controller_unregister(&priv->rcdev);
|
||||
|
||||
return 0;
|
||||
return devm_reset_controller_register(&pdev->dev, &priv->rcdev);
|
||||
}
|
||||
|
||||
static const struct of_device_id zynq_reset_dt_ids[] = {
|
||||
|
@ -141,7 +132,6 @@ static const struct of_device_id zynq_reset_dt_ids[] = {
|
|||
|
||||
static struct platform_driver zynq_reset_driver = {
|
||||
.probe = zynq_reset_probe,
|
||||
.remove = zynq_reset_remove,
|
||||
.driver = {
|
||||
.name = KBUILD_MODNAME,
|
||||
.of_match_table = zynq_reset_dt_ids,
|
||||
|
|
|
@ -2,7 +2,6 @@ if ARCH_STI
|
|||
|
||||
config STI_RESET_SYSCFG
|
||||
bool
|
||||
select RESET_CONTROLLER
|
||||
|
||||
config STIH415_RESET
|
||||
bool
|
||||
|
|
|
@ -53,4 +53,8 @@ struct reset_controller_dev {
|
|||
int reset_controller_register(struct reset_controller_dev *rcdev);
|
||||
void reset_controller_unregister(struct reset_controller_dev *rcdev);
|
||||
|
||||
struct device;
|
||||
int devm_reset_controller_register(struct device *dev,
|
||||
struct reset_controller_dev *rcdev);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -71,14 +71,14 @@ static inline struct reset_control *__of_reset_control_get(
|
|||
struct device_node *node,
|
||||
const char *id, int index, int shared)
|
||||
{
|
||||
return ERR_PTR(-EINVAL);
|
||||
return ERR_PTR(-ENOTSUPP);
|
||||
}
|
||||
|
||||
static inline struct reset_control *__devm_reset_control_get(
|
||||
struct device *dev,
|
||||
const char *id, int index, int shared)
|
||||
{
|
||||
return ERR_PTR(-EINVAL);
|
||||
return ERR_PTR(-ENOTSUPP);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_RESET_CONTROLLER */
|
||||
|
|
Загрузка…
Ссылка в новой задаче