Commit 82bcb7fb authored by Alexandru Ardelean's avatar Alexandru Ardelean Committed by Jonathan Cameron
Browse files

iio: st_sensors: remove st_sensors_deallocate_trigger() function



This change converts the st_sensors_allocate_trigger() to use
device-managed functions.

The parent device of the IIO device object is used. This is based on the
assumption that all other devm_ calls in the ST sensors use this reference.

That makes the st_sensors_deallocate_trigger() function un-needed, so it
can be removed.

Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: default avatarAlexandru Ardelean <aardelean@deviqon.com>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20210823112204.243255-3-aardelean@deviqon.com


Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 9f0b3e0c
Loading
Loading
Loading
Loading
+1 −17
Original line number Diff line number Diff line
@@ -1380,29 +1380,13 @@ int st_accel_common_probe(struct iio_dev *indio_dev)
			return err;
	}

	err = iio_device_register(indio_dev);
	if (err)
		goto st_accel_device_register_error;

	dev_info(&indio_dev->dev, "registered accelerometer %s\n",
		 indio_dev->name);

	return 0;

st_accel_device_register_error:
	if (adata->irq > 0)
		st_sensors_deallocate_trigger(indio_dev);
	return err;
	return iio_device_register(indio_dev);
}
EXPORT_SYMBOL(st_accel_common_probe);

void st_accel_common_remove(struct iio_dev *indio_dev)
{
	struct st_sensor_data *adata = iio_priv(indio_dev);

	iio_device_unregister(indio_dev);
	if (adata->irq > 0)
		st_sensors_deallocate_trigger(indio_dev);
}
EXPORT_SYMBOL(st_accel_common_remove);

+15 −30
Original line number Diff line number Diff line
@@ -119,10 +119,11 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
				const struct iio_trigger_ops *trigger_ops)
{
	struct st_sensor_data *sdata = iio_priv(indio_dev);
	struct device *parent = indio_dev->dev.parent;
	unsigned long irq_trig;
	int err;

	sdata->trig = iio_trigger_alloc(sdata->dev, "%s-trigger",
	sdata->trig = devm_iio_trigger_alloc(parent, "%s-trigger",
					     indio_dev->name);
	if (sdata->trig == NULL) {
		dev_err(&indio_dev->dev, "failed to allocate iio trigger.\n");
@@ -153,7 +154,7 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
				sdata->sensor_settings->drdy_irq.addr_ihl,
				sdata->sensor_settings->drdy_irq.mask_ihl, 1);
			if (err < 0)
				goto iio_trigger_free;
				return err;
			dev_info(&indio_dev->dev,
				 "interrupts on the falling edge or active low level\n");
		}
@@ -179,8 +180,7 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
		if (!sdata->sensor_settings->drdy_irq.stat_drdy.addr) {
			dev_err(&indio_dev->dev,
				"edge IRQ not supported w/o stat register.\n");
			err = -EOPNOTSUPP;
			goto iio_trigger_free;
			return -EOPNOTSUPP;
		}
		sdata->edge_irq = true;
	} else {
@@ -205,7 +205,8 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
	    sdata->sensor_settings->drdy_irq.stat_drdy.addr)
		irq_trig |= IRQF_SHARED;

	err = request_threaded_irq(sdata->irq,
	err = devm_request_threaded_irq(parent,
					sdata->irq,
					st_sensors_irq_handler,
					st_sensors_irq_thread,
					irq_trig,
@@ -213,36 +214,20 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
					sdata->trig);
	if (err) {
		dev_err(&indio_dev->dev, "failed to request trigger IRQ.\n");
		goto iio_trigger_free;
		return err;
	}

	err = iio_trigger_register(sdata->trig);
	err = devm_iio_trigger_register(parent, sdata->trig);
	if (err < 0) {
		dev_err(&indio_dev->dev, "failed to register iio trigger.\n");
		goto iio_trigger_register_error;
		return err;
	}
	indio_dev->trig = iio_trigger_get(sdata->trig);

	return 0;

iio_trigger_register_error:
	free_irq(sdata->irq, sdata->trig);
iio_trigger_free:
	iio_trigger_free(sdata->trig);
	return err;
}
EXPORT_SYMBOL(st_sensors_allocate_trigger);

void st_sensors_deallocate_trigger(struct iio_dev *indio_dev)
{
	struct st_sensor_data *sdata = iio_priv(indio_dev);

	iio_trigger_unregister(sdata->trig);
	free_irq(sdata->irq, sdata->trig);
	iio_trigger_free(sdata->trig);
}
EXPORT_SYMBOL(st_sensors_deallocate_trigger);

int st_sensors_validate_device(struct iio_trigger *trig,
			       struct iio_dev *indio_dev)
{
+1 −17
Original line number Diff line number Diff line
@@ -515,29 +515,13 @@ int st_gyro_common_probe(struct iio_dev *indio_dev)
			return err;
	}

	err = iio_device_register(indio_dev);
	if (err)
		goto st_gyro_device_register_error;

	dev_info(&indio_dev->dev, "registered gyroscope %s\n",
		 indio_dev->name);

	return 0;

st_gyro_device_register_error:
	if (gdata->irq > 0)
		st_sensors_deallocate_trigger(indio_dev);
	return err;
	return iio_device_register(indio_dev);
}
EXPORT_SYMBOL(st_gyro_common_probe);

void st_gyro_common_remove(struct iio_dev *indio_dev)
{
	struct st_sensor_data *gdata = iio_priv(indio_dev);

	iio_device_unregister(indio_dev);
	if (gdata->irq > 0)
		st_sensors_deallocate_trigger(indio_dev);
}
EXPORT_SYMBOL(st_gyro_common_remove);

+1 −17
Original line number Diff line number Diff line
@@ -650,29 +650,13 @@ int st_magn_common_probe(struct iio_dev *indio_dev)
			return err;
	}

	err = iio_device_register(indio_dev);
	if (err)
		goto st_magn_device_register_error;

	dev_info(&indio_dev->dev, "registered magnetometer %s\n",
		 indio_dev->name);

	return 0;

st_magn_device_register_error:
	if (mdata->irq > 0)
		st_sensors_deallocate_trigger(indio_dev);
	return err;
	return iio_device_register(indio_dev);
}
EXPORT_SYMBOL(st_magn_common_probe);

void st_magn_common_remove(struct iio_dev *indio_dev)
{
	struct st_sensor_data *mdata = iio_priv(indio_dev);

	iio_device_unregister(indio_dev);
	if (mdata->irq > 0)
		st_sensors_deallocate_trigger(indio_dev);
}
EXPORT_SYMBOL(st_magn_common_remove);

+1 −17
Original line number Diff line number Diff line
@@ -721,29 +721,13 @@ int st_press_common_probe(struct iio_dev *indio_dev)
			return err;
	}

	err = iio_device_register(indio_dev);
	if (err)
		goto st_press_device_register_error;

	dev_info(&indio_dev->dev, "registered pressure sensor %s\n",
		 indio_dev->name);

	return err;

st_press_device_register_error:
	if (press_data->irq > 0)
		st_sensors_deallocate_trigger(indio_dev);
	return err;
	return iio_device_register(indio_dev);
}
EXPORT_SYMBOL(st_press_common_probe);

void st_press_common_remove(struct iio_dev *indio_dev)
{
	struct st_sensor_data *press_data = iio_priv(indio_dev);

	iio_device_unregister(indio_dev);
	if (press_data->irq > 0)
		st_sensors_deallocate_trigger(indio_dev);
}
EXPORT_SYMBOL(st_press_common_remove);

Loading