mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 02:20:53 +07:00
iio:trigger: add resource managed (un)register
Add resource managed devm_iio_trigger_register() and devm_iio_triger_unregister() to automatically clean up registered triggers allocated by IIO drivers, thus leading to simplified IIO drivers code. Signed-off-by: Gregor Boirie <gregor.boirie@parrot.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
parent
2535cc7ae0
commit
9083325f11
@ -268,6 +268,8 @@ IIO
|
||||
devm_iio_kfifo_free()
|
||||
devm_iio_trigger_alloc()
|
||||
devm_iio_trigger_free()
|
||||
devm_iio_trigger_register()
|
||||
devm_iio_trigger_unregister()
|
||||
devm_iio_channel_get()
|
||||
devm_iio_channel_release()
|
||||
devm_iio_channel_get_all()
|
||||
|
@ -642,6 +642,65 @@ void devm_iio_trigger_free(struct device *dev, struct iio_trigger *iio_trig)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_iio_trigger_free);
|
||||
|
||||
static void devm_iio_trigger_unreg(struct device *dev, void *res)
|
||||
{
|
||||
iio_trigger_unregister(*(struct iio_trigger **)res);
|
||||
}
|
||||
|
||||
/**
|
||||
* devm_iio_trigger_register - Resource-managed iio_trigger_register()
|
||||
* @dev: device this trigger was allocated for
|
||||
* @trig_info: trigger to register
|
||||
*
|
||||
* Managed iio_trigger_register(). The IIO trigger registered with this
|
||||
* function is automatically unregistered on driver detach. This function
|
||||
* calls iio_trigger_register() internally. Refer to that function for more
|
||||
* information.
|
||||
*
|
||||
* If an iio_trigger registered with this function needs to be unregistered
|
||||
* separately, devm_iio_trigger_unregister() must be used.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 on success, negative error number on failure.
|
||||
*/
|
||||
int devm_iio_trigger_register(struct device *dev, struct iio_trigger *trig_info)
|
||||
{
|
||||
struct iio_trigger **ptr;
|
||||
int ret;
|
||||
|
||||
ptr = devres_alloc(devm_iio_trigger_unreg, sizeof(*ptr), GFP_KERNEL);
|
||||
if (!ptr)
|
||||
return -ENOMEM;
|
||||
|
||||
*ptr = trig_info;
|
||||
ret = iio_trigger_register(trig_info);
|
||||
if (!ret)
|
||||
devres_add(dev, ptr);
|
||||
else
|
||||
devres_free(ptr);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_iio_trigger_register);
|
||||
|
||||
/**
|
||||
* devm_iio_trigger_unregister - Resource-managed iio_trigger_unregister()
|
||||
* @dev: device this iio_trigger belongs to
|
||||
* @trig_info: the trigger associated with the device
|
||||
*
|
||||
* Unregister trigger registered with devm_iio_trigger_register().
|
||||
*/
|
||||
void devm_iio_trigger_unregister(struct device *dev,
|
||||
struct iio_trigger *trig_info)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = devres_release(dev, devm_iio_trigger_unreg, devm_iio_trigger_match,
|
||||
trig_info);
|
||||
WARN_ON(rc);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_iio_trigger_unregister);
|
||||
|
||||
void iio_device_register_trigger_consumer(struct iio_dev *indio_dev)
|
||||
{
|
||||
indio_dev->groups[indio_dev->groupcounter++] =
|
||||
|
@ -125,12 +125,18 @@ static inline void *iio_trigger_get_drvdata(struct iio_trigger *trig)
|
||||
**/
|
||||
int iio_trigger_register(struct iio_trigger *trig_info);
|
||||
|
||||
int devm_iio_trigger_register(struct device *dev,
|
||||
struct iio_trigger *trig_info);
|
||||
|
||||
/**
|
||||
* iio_trigger_unregister() - unregister a trigger from the core
|
||||
* @trig_info: trigger to be unregistered
|
||||
**/
|
||||
void iio_trigger_unregister(struct iio_trigger *trig_info);
|
||||
|
||||
void devm_iio_trigger_unregister(struct device *dev,
|
||||
struct iio_trigger *trig_info);
|
||||
|
||||
/**
|
||||
* iio_trigger_set_immutable() - set an immutable trigger on destination
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user