mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08: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_kfifo_free()
|
||||||
devm_iio_trigger_alloc()
|
devm_iio_trigger_alloc()
|
||||||
devm_iio_trigger_free()
|
devm_iio_trigger_free()
|
||||||
|
devm_iio_trigger_register()
|
||||||
|
devm_iio_trigger_unregister()
|
||||||
devm_iio_channel_get()
|
devm_iio_channel_get()
|
||||||
devm_iio_channel_release()
|
devm_iio_channel_release()
|
||||||
devm_iio_channel_get_all()
|
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);
|
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)
|
void iio_device_register_trigger_consumer(struct iio_dev *indio_dev)
|
||||||
{
|
{
|
||||||
indio_dev->groups[indio_dev->groupcounter++] =
|
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 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
|
* iio_trigger_unregister() - unregister a trigger from the core
|
||||||
* @trig_info: trigger to be unregistered
|
* @trig_info: trigger to be unregistered
|
||||||
**/
|
**/
|
||||||
void iio_trigger_unregister(struct iio_trigger *trig_info);
|
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
|
* iio_trigger_set_immutable() - set an immutable trigger on destination
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user