diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2016-09-01 11:44:37 +0200 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2016-09-18 11:07:50 +0100 |
commit | 154021a317564a600fb5b8e6eba9a76ca6888310 (patch) | |
tree | 7eaa0ca4eb0daddf9a91c09e72f0b30d3441ac3a /drivers/iio | |
parent | 9f9079720a4b802555ffc6f71ce3dd8adfd78f60 (diff) | |
download | linux-rpi-154021a317564a600fb5b8e6eba9a76ca6888310.tar.gz linux-rpi-154021a317564a600fb5b8e6eba9a76ca6888310.tar.bz2 linux-rpi-154021a317564a600fb5b8e6eba9a76ca6888310.zip |
iio: accel: kxsd9: split out a common remove() function
This makes it possible to later split the transport mechanism
using a generic probe() and a generic remove().
Use dev_set_drvdata() and dev_get_drvdata() as a paired
accessor to operate on the abstract struct device * regardless
of the transport mechanism in use.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Tested-by: Jonathan Cameron <jic23@kernel.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/iio')
-rw-r--r-- | drivers/iio/accel/kxsd9.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/iio/accel/kxsd9.c b/drivers/iio/accel/kxsd9.c index df8a31e84c7d..1f9e9a867f34 100644 --- a/drivers/iio/accel/kxsd9.c +++ b/drivers/iio/accel/kxsd9.c @@ -220,8 +220,7 @@ static const struct iio_info kxsd9_info = { static int kxsd9_common_probe(struct device *parent, struct kxsd9_transport *transport, - const char *name, - struct iio_dev **retdev) + const char *name) { struct iio_dev *indio_dev; struct kxsd9_state *st; @@ -248,7 +247,17 @@ static int kxsd9_common_probe(struct device *parent, if (ret) return ret; - *retdev = indio_dev; + dev_set_drvdata(parent, indio_dev); + + return 0; +} + +static int kxsd9_common_remove(struct device *parent) +{ + struct iio_dev *indio_dev = dev_get_drvdata(parent); + + iio_device_unregister(indio_dev); + return 0; } @@ -295,7 +304,6 @@ static int kxsd9_spi_readval(struct kxsd9_transport *tr, u8 address) static int kxsd9_spi_probe(struct spi_device *spi) { struct kxsd9_transport *transport; - struct iio_dev *indio_dev; int ret; transport = devm_kzalloc(&spi->dev, sizeof(*transport), GFP_KERNEL); @@ -311,20 +319,16 @@ static int kxsd9_spi_probe(struct spi_device *spi) ret = kxsd9_common_probe(&spi->dev, transport, - spi_get_device_id(spi)->name, - &indio_dev); + spi_get_device_id(spi)->name); if (ret) return ret; - spi_set_drvdata(spi, indio_dev); return 0; } static int kxsd9_spi_remove(struct spi_device *spi) { - iio_device_unregister(spi_get_drvdata(spi)); - - return 0; + return kxsd9_common_remove(&spi->dev); } static const struct spi_device_id kxsd9_spi_id[] = { |