mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-08 14:13:53 +00:00
iio: set default trig->dev.parent
When allocated with [devm_]iio_trigger_alloc(), set trig device parent to the device the trigger is allocated for by default. It can always be reassigned in the probe routine. Change iio_trigger_alloc() API to add the device pointer to be coherent with devm_iio_trigger_alloc, using similar interface to iio_device_alloc(). Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Link: https://lore.kernel.org/r/20210309193620.2176163-2-gwendal@chromium.org Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
7b8d045e49
commit
995071d36b
@ -1044,7 +1044,7 @@ static int bma180_probe(struct i2c_client *client,
|
|||||||
indio_dev->info = &bma180_info;
|
indio_dev->info = &bma180_info;
|
||||||
|
|
||||||
if (client->irq > 0) {
|
if (client->irq > 0) {
|
||||||
data->trig = iio_trigger_alloc("%s-dev%d", indio_dev->name,
|
data->trig = iio_trigger_alloc(dev, "%s-dev%d", indio_dev->name,
|
||||||
indio_dev->id);
|
indio_dev->id);
|
||||||
if (!data->trig) {
|
if (!data->trig) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
@ -1059,7 +1059,6 @@ static int bma180_probe(struct i2c_client *client,
|
|||||||
goto err_trigger_free;
|
goto err_trigger_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
data->trig->dev.parent = dev;
|
|
||||||
data->trig->ops = &bma180_trigger_ops;
|
data->trig->ops = &bma180_trigger_ops;
|
||||||
iio_trigger_set_drvdata(data->trig, indio_dev);
|
iio_trigger_set_drvdata(data->trig, indio_dev);
|
||||||
indio_dev->trig = iio_trigger_get(data->trig);
|
indio_dev->trig = iio_trigger_get(data->trig);
|
||||||
|
@ -475,7 +475,8 @@ static int ad_sd_probe_trigger(struct iio_dev *indio_dev)
|
|||||||
struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
|
struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
sigma_delta->trig = iio_trigger_alloc("%s-dev%d", indio_dev->name,
|
sigma_delta->trig = iio_trigger_alloc(&sigma_delta->spi->dev,
|
||||||
|
"%s-dev%d", indio_dev->name,
|
||||||
indio_dev->id);
|
indio_dev->id);
|
||||||
if (sigma_delta->trig == NULL) {
|
if (sigma_delta->trig == NULL) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
@ -496,7 +497,6 @@ static int ad_sd_probe_trigger(struct iio_dev *indio_dev)
|
|||||||
sigma_delta->irq_dis = true;
|
sigma_delta->irq_dis = true;
|
||||||
disable_irq_nosync(sigma_delta->spi->irq);
|
disable_irq_nosync(sigma_delta->spi->irq);
|
||||||
}
|
}
|
||||||
sigma_delta->trig->dev.parent = &sigma_delta->spi->dev;
|
|
||||||
iio_trigger_set_drvdata(sigma_delta->trig, sigma_delta);
|
iio_trigger_set_drvdata(sigma_delta->trig, sigma_delta);
|
||||||
|
|
||||||
ret = iio_trigger_register(sigma_delta->trig);
|
ret = iio_trigger_register(sigma_delta->trig);
|
||||||
|
@ -625,12 +625,11 @@ static struct iio_trigger *at91_adc_allocate_trigger(struct iio_dev *idev,
|
|||||||
struct iio_trigger *trig;
|
struct iio_trigger *trig;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
trig = iio_trigger_alloc("%s-dev%d-%s", idev->name,
|
trig = iio_trigger_alloc(idev->dev.parent, "%s-dev%d-%s", idev->name,
|
||||||
idev->id, trigger->name);
|
idev->id, trigger->name);
|
||||||
if (trig == NULL)
|
if (trig == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
trig->dev.parent = idev->dev.parent;
|
|
||||||
iio_trigger_set_drvdata(trig, idev);
|
iio_trigger_set_drvdata(trig, idev);
|
||||||
trig->ops = &at91_adc_trigger_ops;
|
trig->ops = &at91_adc_trigger_ops;
|
||||||
|
|
||||||
|
@ -255,14 +255,14 @@ int hid_sensor_setup_trigger(struct iio_dev *indio_dev, const char *name,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
trig = iio_trigger_alloc("%s-dev%d", name, indio_dev->id);
|
trig = iio_trigger_alloc(indio_dev->dev.parent,
|
||||||
|
"%s-dev%d", name, indio_dev->id);
|
||||||
if (trig == NULL) {
|
if (trig == NULL) {
|
||||||
dev_err(&indio_dev->dev, "Trigger Allocate Failed\n");
|
dev_err(&indio_dev->dev, "Trigger Allocate Failed\n");
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto error_triggered_buffer_cleanup;
|
goto error_triggered_buffer_cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
trig->dev.parent = indio_dev->dev.parent;
|
|
||||||
iio_trigger_set_drvdata(trig, attrb);
|
iio_trigger_set_drvdata(trig, attrb);
|
||||||
trig->ops = &hid_sensor_trigger_ops;
|
trig->ops = &hid_sensor_trigger_ops;
|
||||||
ret = iio_trigger_register(trig);
|
ret = iio_trigger_register(trig);
|
||||||
|
@ -123,7 +123,8 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
|
|||||||
unsigned long irq_trig;
|
unsigned long irq_trig;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
sdata->trig = iio_trigger_alloc("%s-trigger", indio_dev->name);
|
sdata->trig = iio_trigger_alloc(sdata->dev, "%s-trigger",
|
||||||
|
indio_dev->name);
|
||||||
if (sdata->trig == NULL) {
|
if (sdata->trig == NULL) {
|
||||||
dev_err(&indio_dev->dev, "failed to allocate iio trigger.\n");
|
dev_err(&indio_dev->dev, "failed to allocate iio trigger.\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@ -131,7 +132,6 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
|
|||||||
|
|
||||||
iio_trigger_set_drvdata(sdata->trig, indio_dev);
|
iio_trigger_set_drvdata(sdata->trig, indio_dev);
|
||||||
sdata->trig->ops = trigger_ops;
|
sdata->trig->ops = trigger_ops;
|
||||||
sdata->trig->dev.parent = sdata->dev;
|
|
||||||
|
|
||||||
irq_trig = irqd_get_trigger_type(irq_get_irq_data(sdata->irq));
|
irq_trig = irqd_get_trigger_type(irq_get_irq_data(sdata->irq));
|
||||||
/*
|
/*
|
||||||
|
@ -113,7 +113,7 @@ int itg3200_probe_trigger(struct iio_dev *indio_dev)
|
|||||||
int ret;
|
int ret;
|
||||||
struct itg3200 *st = iio_priv(indio_dev);
|
struct itg3200 *st = iio_priv(indio_dev);
|
||||||
|
|
||||||
st->trig = iio_trigger_alloc("%s-dev%d", indio_dev->name,
|
st->trig = iio_trigger_alloc(&st->i2c->dev, "%s-dev%d", indio_dev->name,
|
||||||
indio_dev->id);
|
indio_dev->id);
|
||||||
if (!st->trig)
|
if (!st->trig)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@ -127,7 +127,6 @@ int itg3200_probe_trigger(struct iio_dev *indio_dev)
|
|||||||
goto error_free_trig;
|
goto error_free_trig;
|
||||||
|
|
||||||
|
|
||||||
st->trig->dev.parent = &st->i2c->dev;
|
|
||||||
st->trig->ops = &itg3200_trigger_ops;
|
st->trig->ops = &itg3200_trigger_ops;
|
||||||
iio_trigger_set_drvdata(st->trig, indio_dev);
|
iio_trigger_set_drvdata(st->trig, indio_dev);
|
||||||
ret = iio_trigger_register(st->trig);
|
ret = iio_trigger_register(st->trig);
|
||||||
|
@ -514,8 +514,10 @@ static void iio_trig_subirqunmask(struct irq_data *d)
|
|||||||
trig->subirqs[d->irq - trig->subirq_base].enabled = true;
|
trig->subirqs[d->irq - trig->subirq_base].enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __printf(1, 0)
|
static __printf(2, 0)
|
||||||
struct iio_trigger *viio_trigger_alloc(const char *fmt, va_list vargs)
|
struct iio_trigger *viio_trigger_alloc(struct device *parent,
|
||||||
|
const char *fmt,
|
||||||
|
va_list vargs)
|
||||||
{
|
{
|
||||||
struct iio_trigger *trig;
|
struct iio_trigger *trig;
|
||||||
int i;
|
int i;
|
||||||
@ -524,6 +526,7 @@ struct iio_trigger *viio_trigger_alloc(const char *fmt, va_list vargs)
|
|||||||
if (!trig)
|
if (!trig)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
trig->dev.parent = parent;
|
||||||
trig->dev.type = &iio_trig_type;
|
trig->dev.type = &iio_trig_type;
|
||||||
trig->dev.bus = &iio_bus_type;
|
trig->dev.bus = &iio_bus_type;
|
||||||
device_initialize(&trig->dev);
|
device_initialize(&trig->dev);
|
||||||
@ -559,13 +562,23 @@ struct iio_trigger *viio_trigger_alloc(const char *fmt, va_list vargs)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct iio_trigger *iio_trigger_alloc(const char *fmt, ...)
|
/**
|
||||||
|
* iio_trigger_alloc - Allocate a trigger
|
||||||
|
* @parent: Device to allocate iio_trigger for
|
||||||
|
* @fmt: trigger name format. If it includes format
|
||||||
|
* specifiers, the additional arguments following
|
||||||
|
* format are formatted and inserted in the resulting
|
||||||
|
* string replacing their respective specifiers.
|
||||||
|
* RETURNS:
|
||||||
|
* Pointer to allocated iio_trigger on success, NULL on failure.
|
||||||
|
*/
|
||||||
|
struct iio_trigger *iio_trigger_alloc(struct device *parent, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
struct iio_trigger *trig;
|
struct iio_trigger *trig;
|
||||||
va_list vargs;
|
va_list vargs;
|
||||||
|
|
||||||
va_start(vargs, fmt);
|
va_start(vargs, fmt);
|
||||||
trig = viio_trigger_alloc(fmt, vargs);
|
trig = viio_trigger_alloc(parent, fmt, vargs);
|
||||||
va_end(vargs);
|
va_end(vargs);
|
||||||
|
|
||||||
return trig;
|
return trig;
|
||||||
@ -586,20 +599,19 @@ static void devm_iio_trigger_release(struct device *dev, void *res)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* devm_iio_trigger_alloc - Resource-managed iio_trigger_alloc()
|
* devm_iio_trigger_alloc - Resource-managed iio_trigger_alloc()
|
||||||
* @dev: Device to allocate iio_trigger for
|
* Managed iio_trigger_alloc. iio_trigger allocated with this function is
|
||||||
|
* automatically freed on driver detach.
|
||||||
|
* @parent: Device to allocate iio_trigger for
|
||||||
* @fmt: trigger name format. If it includes format
|
* @fmt: trigger name format. If it includes format
|
||||||
* specifiers, the additional arguments following
|
* specifiers, the additional arguments following
|
||||||
* format are formatted and inserted in the resulting
|
* format are formatted and inserted in the resulting
|
||||||
* string replacing their respective specifiers.
|
* string replacing their respective specifiers.
|
||||||
*
|
*
|
||||||
* Managed iio_trigger_alloc. iio_trigger allocated with this function is
|
|
||||||
* automatically freed on driver detach.
|
|
||||||
*
|
*
|
||||||
* RETURNS:
|
* RETURNS:
|
||||||
* Pointer to allocated iio_trigger on success, NULL on failure.
|
* Pointer to allocated iio_trigger on success, NULL on failure.
|
||||||
*/
|
*/
|
||||||
struct iio_trigger *devm_iio_trigger_alloc(struct device *dev,
|
struct iio_trigger *devm_iio_trigger_alloc(struct device *parent, const char *fmt, ...)
|
||||||
const char *fmt, ...)
|
|
||||||
{
|
{
|
||||||
struct iio_trigger **ptr, *trig;
|
struct iio_trigger **ptr, *trig;
|
||||||
va_list vargs;
|
va_list vargs;
|
||||||
@ -611,11 +623,11 @@ struct iio_trigger *devm_iio_trigger_alloc(struct device *dev,
|
|||||||
|
|
||||||
/* use raw alloc_dr for kmalloc caller tracing */
|
/* use raw alloc_dr for kmalloc caller tracing */
|
||||||
va_start(vargs, fmt);
|
va_start(vargs, fmt);
|
||||||
trig = viio_trigger_alloc(fmt, vargs);
|
trig = viio_trigger_alloc(parent, fmt, vargs);
|
||||||
va_end(vargs);
|
va_end(vargs);
|
||||||
if (trig) {
|
if (trig) {
|
||||||
*ptr = trig;
|
*ptr = trig;
|
||||||
devres_add(dev, ptr);
|
devres_add(parent, ptr);
|
||||||
} else {
|
} else {
|
||||||
devres_free(ptr);
|
devres_free(ptr);
|
||||||
}
|
}
|
||||||
|
@ -135,7 +135,7 @@ static struct iio_sw_trigger *iio_trig_hrtimer_probe(const char *name)
|
|||||||
if (!trig_info)
|
if (!trig_info)
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
trig_info->swt.trigger = iio_trigger_alloc("%s", name);
|
trig_info->swt.trigger = iio_trigger_alloc(NULL, "%s", name);
|
||||||
if (!trig_info->swt.trigger) {
|
if (!trig_info->swt.trigger) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto err_free_trig_info;
|
goto err_free_trig_info;
|
||||||
|
@ -45,7 +45,7 @@ static int iio_interrupt_trigger_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
irq = irq_res->start;
|
irq = irq_res->start;
|
||||||
|
|
||||||
trig = iio_trigger_alloc("irqtrig%d", irq);
|
trig = iio_trigger_alloc(NULL, "irqtrig%d", irq);
|
||||||
if (!trig) {
|
if (!trig) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto error_ret;
|
goto error_ret;
|
||||||
|
@ -84,7 +84,7 @@ static struct iio_sw_trigger *iio_trig_loop_probe(const char *name)
|
|||||||
if (!trig_info)
|
if (!trig_info)
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
trig_info->swt.trigger = iio_trigger_alloc("%s", name);
|
trig_info->swt.trigger = iio_trigger_alloc(NULL, "%s", name);
|
||||||
if (!trig_info->swt.trigger) {
|
if (!trig_info->swt.trigger) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto err_free_trig_info;
|
goto err_free_trig_info;
|
||||||
|
@ -149,7 +149,7 @@ static int iio_sysfs_trigger_probe(int id)
|
|||||||
goto out1;
|
goto out1;
|
||||||
}
|
}
|
||||||
t->id = id;
|
t->id = id;
|
||||||
t->trig = iio_trigger_alloc("sysfstrig%d", id);
|
t->trig = iio_trigger_alloc(&iio_sysfs_trig_dev, "sysfstrig%d", id);
|
||||||
if (!t->trig) {
|
if (!t->trig) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto free_t;
|
goto free_t;
|
||||||
@ -157,7 +157,6 @@ static int iio_sysfs_trigger_probe(int id)
|
|||||||
|
|
||||||
t->trig->dev.groups = iio_sysfs_trigger_attr_groups;
|
t->trig->dev.groups = iio_sysfs_trigger_attr_groups;
|
||||||
t->trig->ops = &iio_sysfs_trigger_ops;
|
t->trig->ops = &iio_sysfs_trigger_ops;
|
||||||
t->trig->dev.parent = &iio_sysfs_trig_dev;
|
|
||||||
iio_trigger_set_drvdata(t->trig, t);
|
iio_trigger_set_drvdata(t->trig, t);
|
||||||
|
|
||||||
t->work = IRQ_WORK_INIT_HARD(iio_sysfs_trigger_work);
|
t->work = IRQ_WORK_INIT_HARD(iio_sysfs_trigger_work);
|
||||||
|
@ -693,7 +693,7 @@ static inline void *iio_priv(const struct iio_dev *indio_dev)
|
|||||||
void iio_device_free(struct iio_dev *indio_dev);
|
void iio_device_free(struct iio_dev *indio_dev);
|
||||||
struct iio_dev *devm_iio_device_alloc(struct device *parent, int sizeof_priv);
|
struct iio_dev *devm_iio_device_alloc(struct device *parent, int sizeof_priv);
|
||||||
__printf(2, 3)
|
__printf(2, 3)
|
||||||
struct iio_trigger *devm_iio_trigger_alloc(struct device *dev,
|
struct iio_trigger *devm_iio_trigger_alloc(struct device *parent,
|
||||||
const char *fmt, ...);
|
const char *fmt, ...);
|
||||||
/**
|
/**
|
||||||
* iio_buffer_enabled() - helper function to test if the buffer is enabled
|
* iio_buffer_enabled() - helper function to test if the buffer is enabled
|
||||||
|
@ -161,7 +161,8 @@ void iio_trigger_poll_chained(struct iio_trigger *trig);
|
|||||||
|
|
||||||
irqreturn_t iio_trigger_generic_data_rdy_poll(int irq, void *private);
|
irqreturn_t iio_trigger_generic_data_rdy_poll(int irq, void *private);
|
||||||
|
|
||||||
__printf(1, 2) struct iio_trigger *iio_trigger_alloc(const char *fmt, ...);
|
__printf(2, 3)
|
||||||
|
struct iio_trigger *iio_trigger_alloc(struct device *parent, const char *fmt, ...);
|
||||||
void iio_trigger_free(struct iio_trigger *trig);
|
void iio_trigger_free(struct iio_trigger *trig);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user