reset: add devm_reset_controller_register API
Add a device managed API for reset_controller_register(). This helps in reducing code in .remove callbacks and sometimes dropping .remove callbacks entirely. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Acked-by: Laxman Dewangan <ldewangan@nvidia.com> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
This commit is contained in:
parent
1a695a905c
commit
8d5b5d5ce5
@ -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()
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user