Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d2fffd6c authored by Jonathan Cameron's avatar Jonathan Cameron Committed by Greg Kroah-Hartman
Browse files

staging:iio: fix removal path to allow correct freeing.



Fix a dumb lack of consideration of the effect of combining
the iio_device_unregister and iio_free_device calls into
one.  There is no valid place to free some of the sysfs
array elements.

Signed-off-by: default avatarJonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent cdea0bec
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -532,10 +532,11 @@ static int adis16201_remove(struct spi_device *spi)
{
	struct iio_dev *indio_dev = spi_get_drvdata(spi);

	iio_device_unregister(indio_dev);
	adis16201_remove_trigger(indio_dev);
	iio_buffer_unregister(indio_dev);
	adis16201_unconfigure_ring(indio_dev);
	iio_device_unregister(indio_dev);
	iio_free_device(indio_dev);

	return 0;
}
+2 −1
Original line number Diff line number Diff line
@@ -487,10 +487,11 @@ static int adis16203_remove(struct spi_device *spi)
{
	struct iio_dev *indio_dev = spi_get_drvdata(spi);

	iio_device_unregister(indio_dev);
	adis16203_remove_trigger(indio_dev);
	iio_buffer_unregister(indio_dev);
	adis16203_unconfigure_ring(indio_dev);
	iio_device_unregister(indio_dev);
	iio_free_device(indio_dev);

	return 0;
}
+2 −1
Original line number Diff line number Diff line
@@ -560,10 +560,11 @@ static int adis16204_remove(struct spi_device *spi)
{
	struct iio_dev *indio_dev = spi_get_drvdata(spi);

	iio_device_unregister(indio_dev);
	adis16204_remove_trigger(indio_dev);
	iio_buffer_unregister(indio_dev);
	adis16204_unconfigure_ring(indio_dev);
	iio_device_unregister(indio_dev);
	iio_free_device(indio_dev);

	return 0;
}
+2 −1
Original line number Diff line number Diff line
@@ -536,10 +536,11 @@ static int adis16209_remove(struct spi_device *spi)

	flush_scheduled_work();

	iio_device_unregister(indio_dev);
	adis16209_remove_trigger(indio_dev);
	iio_buffer_unregister(indio_dev);
	adis16209_unconfigure_ring(indio_dev);
	iio_device_unregister(indio_dev);
	iio_free_device(indio_dev);

	return 0;
}
+6 −7
Original line number Diff line number Diff line
@@ -624,7 +624,7 @@ static const struct iio_info adis16220_info = {

static int __devinit adis16220_probe(struct spi_device *spi)
{
	int ret, regdone = 0;
	int ret;
	struct adis16220_state *st;
	struct iio_dev *indio_dev;

@@ -652,11 +652,10 @@ static int __devinit adis16220_probe(struct spi_device *spi)
	ret = iio_device_register(indio_dev);
	if (ret)
		goto error_free_dev;
	regdone = 1;

	ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &accel_bin);
	if (ret)
		goto error_free_dev;
		goto error_unregister_dev;

	ret = sysfs_create_bin_file(&indio_dev->dev.kobj, &adc1_bin);
	if (ret)
@@ -678,10 +677,9 @@ static int __devinit adis16220_probe(struct spi_device *spi)
	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc1_bin);
error_rm_accel_bin:
	sysfs_remove_bin_file(&indio_dev->dev.kobj, &accel_bin);
error_free_dev:
	if (regdone)
error_unregister_dev:
	iio_device_unregister(indio_dev);
	else
error_free_dev:
	iio_free_device(indio_dev);
error_ret:
	return ret;
@@ -697,6 +695,7 @@ static int adis16220_remove(struct spi_device *spi)
	sysfs_remove_bin_file(&indio_dev->dev.kobj, &adc1_bin);
	sysfs_remove_bin_file(&indio_dev->dev.kobj, &accel_bin);
	iio_device_unregister(indio_dev);
	iio_free_device(indio_dev);

	return 0;
}
Loading