diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2016-09-01 05:44:37 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2016-09-18 06:07:50 -0400 |
commit | 154021a317564a600fb5b8e6eba9a76ca6888310 (patch) | |
tree | 7eaa0ca4eb0daddf9a91c09e72f0b30d3441ac3a /drivers/iio | |
parent | 9f9079720a4b802555ffc6f71ce3dd8adfd78f60 (diff) |
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 = { | |||
220 | 220 | ||
221 | static int kxsd9_common_probe(struct device *parent, | 221 | static int kxsd9_common_probe(struct device *parent, |
222 | struct kxsd9_transport *transport, | 222 | struct kxsd9_transport *transport, |
223 | const char *name, | 223 | const char *name) |
224 | struct iio_dev **retdev) | ||
225 | { | 224 | { |
226 | struct iio_dev *indio_dev; | 225 | struct iio_dev *indio_dev; |
227 | struct kxsd9_state *st; | 226 | struct kxsd9_state *st; |
@@ -248,7 +247,17 @@ static int kxsd9_common_probe(struct device *parent, | |||
248 | if (ret) | 247 | if (ret) |
249 | return ret; | 248 | return ret; |
250 | 249 | ||
251 | *retdev = indio_dev; | 250 | dev_set_drvdata(parent, indio_dev); |
251 | |||
252 | return 0; | ||
253 | } | ||
254 | |||
255 | static int kxsd9_common_remove(struct device *parent) | ||
256 | { | ||
257 | struct iio_dev *indio_dev = dev_get_drvdata(parent); | ||
258 | |||
259 | iio_device_unregister(indio_dev); | ||
260 | |||
252 | return 0; | 261 | return 0; |
253 | } | 262 | } |
254 | 263 | ||
@@ -295,7 +304,6 @@ static int kxsd9_spi_readval(struct kxsd9_transport *tr, u8 address) | |||
295 | static int kxsd9_spi_probe(struct spi_device *spi) | 304 | static int kxsd9_spi_probe(struct spi_device *spi) |
296 | { | 305 | { |
297 | struct kxsd9_transport *transport; | 306 | struct kxsd9_transport *transport; |
298 | struct iio_dev *indio_dev; | ||
299 | int ret; | 307 | int ret; |
300 | 308 | ||
301 | transport = devm_kzalloc(&spi->dev, sizeof(*transport), GFP_KERNEL); | 309 | transport = devm_kzalloc(&spi->dev, sizeof(*transport), GFP_KERNEL); |
@@ -311,20 +319,16 @@ static int kxsd9_spi_probe(struct spi_device *spi) | |||
311 | 319 | ||
312 | ret = kxsd9_common_probe(&spi->dev, | 320 | ret = kxsd9_common_probe(&spi->dev, |
313 | transport, | 321 | transport, |
314 | spi_get_device_id(spi)->name, | 322 | spi_get_device_id(spi)->name); |
315 | &indio_dev); | ||
316 | if (ret) | 323 | if (ret) |
317 | return ret; | 324 | return ret; |
318 | 325 | ||
319 | spi_set_drvdata(spi, indio_dev); | ||
320 | return 0; | 326 | return 0; |
321 | } | 327 | } |
322 | 328 | ||
323 | static int kxsd9_spi_remove(struct spi_device *spi) | 329 | static int kxsd9_spi_remove(struct spi_device *spi) |
324 | { | 330 | { |
325 | iio_device_unregister(spi_get_drvdata(spi)); | 331 | return kxsd9_common_remove(&spi->dev); |
326 | |||
327 | return 0; | ||
328 | } | 332 | } |
329 | 333 | ||
330 | static const struct spi_device_id kxsd9_spi_id[] = { | 334 | static const struct spi_device_id kxsd9_spi_id[] = { |