// SPDX-License-Identifier: GPL-2.0-only /* * drivers/extcon/devres.c - EXTCON device's resource management * * Copyright (C) 2016 Samsung Electronics * Author: Chanwoo Choi <[email protected]> */ #include "extcon.h" static int devm_extcon_dev_match(struct device *dev, void *res, void *data) { … } static void devm_extcon_dev_release(struct device *dev, void *res) { … } static void devm_extcon_dev_unreg(struct device *dev, void *res) { … } struct extcon_dev_notifier_devres { … }; static void devm_extcon_dev_notifier_unreg(struct device *dev, void *res) { … } static void devm_extcon_dev_notifier_all_unreg(struct device *dev, void *res) { … } /** * devm_extcon_dev_allocate - Allocate managed extcon device * @dev: the device owning the extcon device being created * @supported_cable: the array of the supported external connectors * ending with EXTCON_NONE. * * This function manages automatically the memory of extcon device using device * resource management and simplify the control of freeing the memory of extcon * device. * * Returns the pointer memory of allocated extcon_dev if success * or ERR_PTR(err) if fail */ struct extcon_dev *devm_extcon_dev_allocate(struct device *dev, const unsigned int *supported_cable) { … } EXPORT_SYMBOL_GPL(…); /** * devm_extcon_dev_free() - Resource-managed extcon_dev_unregister() * @dev: the device owning the extcon device being created * @edev: the extcon device to be freed * * Free the memory that is allocated with devm_extcon_dev_allocate() * function. */ void devm_extcon_dev_free(struct device *dev, struct extcon_dev *edev) { … } EXPORT_SYMBOL_GPL(…); /** * devm_extcon_dev_register() - Resource-managed extcon_dev_register() * @dev: the device owning the extcon device being created * @edev: the extcon device to be registered * * this function, that extcon device is automatically unregistered on driver * detach. Internally this function calls extcon_dev_register() function. * To get more information, refer that function. * * If extcon device is registered with this function and the device needs to be * unregistered separately, devm_extcon_dev_unregister() should be used. * * Returns 0 if success or negaive error number if failure. */ int devm_extcon_dev_register(struct device *dev, struct extcon_dev *edev) { … } EXPORT_SYMBOL_GPL(…); /** * devm_extcon_dev_unregister() - Resource-managed extcon_dev_unregister() * @dev: the device owning the extcon device being created * @edev: the extcon device to unregistered * * Unregister extcon device that is registered with devm_extcon_dev_register() * function. */ void devm_extcon_dev_unregister(struct device *dev, struct extcon_dev *edev) { … } EXPORT_SYMBOL_GPL(…); /** * devm_extcon_register_notifier() - Resource-managed extcon_register_notifier() * @dev: the device owning the extcon device being created * @edev: the extcon device * @id: the unique id among the extcon enumeration * @nb: a notifier block to be registered * * This function manages automatically the notifier of extcon device using * device resource management and simplify the control of unregistering * the notifier of extcon device. * * Note that the second parameter given to the callback of nb (val) is * "old_state", not the current state. The current state can be retrieved * by looking at the third pameter (edev pointer)'s state value. * * Returns 0 if success or negaive error number if failure. */ int devm_extcon_register_notifier(struct device *dev, struct extcon_dev *edev, unsigned int id, struct notifier_block *nb) { … } EXPORT_SYMBOL(…); /** * devm_extcon_unregister_notifier() * - Resource-managed extcon_unregister_notifier() * @dev: the device owning the extcon device being created * @edev: the extcon device * @id: the unique id among the extcon enumeration * @nb: a notifier block to be registered */ void devm_extcon_unregister_notifier(struct device *dev, struct extcon_dev *edev, unsigned int id, struct notifier_block *nb) { … } EXPORT_SYMBOL(…); /** * devm_extcon_register_notifier_all() * - Resource-managed extcon_register_notifier_all() * @dev: the device owning the extcon device being created * @edev: the extcon device * @nb: a notifier block to be registered * * This function manages automatically the notifier of extcon device using * device resource management and simplify the control of unregistering * the notifier of extcon device. To get more information, refer that function. * * Returns 0 if success or negaive error number if failure. */ int devm_extcon_register_notifier_all(struct device *dev, struct extcon_dev *edev, struct notifier_block *nb) { … } EXPORT_SYMBOL(…); /** * devm_extcon_unregister_notifier_all() * - Resource-managed extcon_unregister_notifier_all() * @dev: the device owning the extcon device being created * @edev: the extcon device * @nb: a notifier block to be registered */ void devm_extcon_unregister_notifier_all(struct device *dev, struct extcon_dev *edev, struct notifier_block *nb) { … } EXPORT_SYMBOL(…);