diff options
author | Matt Ranostay <mranostay@gmail.com> | 2016-08-19 23:17:02 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2016-08-21 06:47:19 -0400 |
commit | adca058b56108eb3458165c6a9e5d78558be8b52 (patch) | |
tree | 979cca3ed01fb1ea688b170d34e0d7bfdc5d30a4 | |
parent | a4fa6509dda47e51c3582409e8630b24702970c5 (diff) |
iio: buffer-callback: allow getting underlying iio_dev
Add iio_channel_cb_get_iio_dev function to allow getting the
underlying iio_dev. This is useful for setting the trigger of the
consumer ADC device.
Signed-off-by: Matt Ranostay <mranostay@gmail.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r-- | drivers/iio/buffer/industrialio-buffer-cb.c | 24 | ||||
-rw-r--r-- | include/linux/iio/consumer.h | 12 |
2 files changed, 26 insertions, 10 deletions
diff --git a/drivers/iio/buffer/industrialio-buffer-cb.c b/drivers/iio/buffer/industrialio-buffer-cb.c index 323079c3ccce..b8f550e47d3d 100644 --- a/drivers/iio/buffer/industrialio-buffer-cb.c +++ b/drivers/iio/buffer/industrialio-buffer-cb.c | |||
@@ -18,6 +18,7 @@ struct iio_cb_buffer { | |||
18 | int (*cb)(const void *data, void *private); | 18 | int (*cb)(const void *data, void *private); |
19 | void *private; | 19 | void *private; |
20 | struct iio_channel *channels; | 20 | struct iio_channel *channels; |
21 | struct iio_dev *indio_dev; | ||
21 | }; | 22 | }; |
22 | 23 | ||
23 | static struct iio_cb_buffer *buffer_to_cb_buffer(struct iio_buffer *buffer) | 24 | static struct iio_cb_buffer *buffer_to_cb_buffer(struct iio_buffer *buffer) |
@@ -52,7 +53,6 @@ struct iio_cb_buffer *iio_channel_get_all_cb(struct device *dev, | |||
52 | { | 53 | { |
53 | int ret; | 54 | int ret; |
54 | struct iio_cb_buffer *cb_buff; | 55 | struct iio_cb_buffer *cb_buff; |
55 | struct iio_dev *indio_dev; | ||
56 | struct iio_channel *chan; | 56 | struct iio_channel *chan; |
57 | 57 | ||
58 | cb_buff = kzalloc(sizeof(*cb_buff), GFP_KERNEL); | 58 | cb_buff = kzalloc(sizeof(*cb_buff), GFP_KERNEL); |
@@ -72,17 +72,17 @@ struct iio_cb_buffer *iio_channel_get_all_cb(struct device *dev, | |||
72 | goto error_free_cb_buff; | 72 | goto error_free_cb_buff; |
73 | } | 73 | } |
74 | 74 | ||
75 | indio_dev = cb_buff->channels[0].indio_dev; | 75 | cb_buff->indio_dev = cb_buff->channels[0].indio_dev; |
76 | cb_buff->buffer.scan_mask | 76 | cb_buff->buffer.scan_mask |
77 | = kcalloc(BITS_TO_LONGS(indio_dev->masklength), sizeof(long), | 77 | = kcalloc(BITS_TO_LONGS(cb_buff->indio_dev->masklength), |
78 | GFP_KERNEL); | 78 | sizeof(long), GFP_KERNEL); |
79 | if (cb_buff->buffer.scan_mask == NULL) { | 79 | if (cb_buff->buffer.scan_mask == NULL) { |
80 | ret = -ENOMEM; | 80 | ret = -ENOMEM; |
81 | goto error_release_channels; | 81 | goto error_release_channels; |
82 | } | 82 | } |
83 | chan = &cb_buff->channels[0]; | 83 | chan = &cb_buff->channels[0]; |
84 | while (chan->indio_dev) { | 84 | while (chan->indio_dev) { |
85 | if (chan->indio_dev != indio_dev) { | 85 | if (chan->indio_dev != cb_buff->indio_dev) { |
86 | ret = -EINVAL; | 86 | ret = -EINVAL; |
87 | goto error_free_scan_mask; | 87 | goto error_free_scan_mask; |
88 | } | 88 | } |
@@ -105,17 +105,14 @@ EXPORT_SYMBOL_GPL(iio_channel_get_all_cb); | |||
105 | 105 | ||
106 | int iio_channel_start_all_cb(struct iio_cb_buffer *cb_buff) | 106 | int iio_channel_start_all_cb(struct iio_cb_buffer *cb_buff) |
107 | { | 107 | { |
108 | return iio_update_buffers(cb_buff->channels[0].indio_dev, | 108 | return iio_update_buffers(cb_buff->indio_dev, &cb_buff->buffer, |
109 | &cb_buff->buffer, | ||
110 | NULL); | 109 | NULL); |
111 | } | 110 | } |
112 | EXPORT_SYMBOL_GPL(iio_channel_start_all_cb); | 111 | EXPORT_SYMBOL_GPL(iio_channel_start_all_cb); |
113 | 112 | ||
114 | void iio_channel_stop_all_cb(struct iio_cb_buffer *cb_buff) | 113 | void iio_channel_stop_all_cb(struct iio_cb_buffer *cb_buff) |
115 | { | 114 | { |
116 | iio_update_buffers(cb_buff->channels[0].indio_dev, | 115 | iio_update_buffers(cb_buff->indio_dev, NULL, &cb_buff->buffer); |
117 | NULL, | ||
118 | &cb_buff->buffer); | ||
119 | } | 116 | } |
120 | EXPORT_SYMBOL_GPL(iio_channel_stop_all_cb); | 117 | EXPORT_SYMBOL_GPL(iio_channel_stop_all_cb); |
121 | 118 | ||
@@ -133,6 +130,13 @@ struct iio_channel | |||
133 | } | 130 | } |
134 | EXPORT_SYMBOL_GPL(iio_channel_cb_get_channels); | 131 | EXPORT_SYMBOL_GPL(iio_channel_cb_get_channels); |
135 | 132 | ||
133 | struct iio_dev | ||
134 | *iio_channel_cb_get_iio_dev(const struct iio_cb_buffer *cb_buffer) | ||
135 | { | ||
136 | return cb_buffer->indio_dev; | ||
137 | } | ||
138 | EXPORT_SYMBOL_GPL(iio_channel_cb_get_iio_dev); | ||
139 | |||
136 | MODULE_AUTHOR("Jonathan Cameron <jic23@kernel.org>"); | 140 | MODULE_AUTHOR("Jonathan Cameron <jic23@kernel.org>"); |
137 | MODULE_DESCRIPTION("Industrial I/O callback buffer"); | 141 | MODULE_DESCRIPTION("Industrial I/O callback buffer"); |
138 | MODULE_LICENSE("GPL"); | 142 | MODULE_LICENSE("GPL"); |
diff --git a/include/linux/iio/consumer.h b/include/linux/iio/consumer.h index 3d672f72e7ec..9edccfba1ffb 100644 --- a/include/linux/iio/consumer.h +++ b/include/linux/iio/consumer.h | |||
@@ -165,6 +165,18 @@ struct iio_channel | |||
165 | *iio_channel_cb_get_channels(const struct iio_cb_buffer *cb_buffer); | 165 | *iio_channel_cb_get_channels(const struct iio_cb_buffer *cb_buffer); |
166 | 166 | ||
167 | /** | 167 | /** |
168 | * iio_channel_cb_get_iio_dev() - get access to the underlying device. | ||
169 | * @cb_buffer: The callback buffer from whom we want the device | ||
170 | * information. | ||
171 | * | ||
172 | * This function allows one to obtain information about the device. | ||
173 | * The primary aim is to allow drivers that are consuming a device to query | ||
174 | * things like current trigger. | ||
175 | */ | ||
176 | struct iio_dev | ||
177 | *iio_channel_cb_get_iio_dev(const struct iio_cb_buffer *cb_buffer); | ||
178 | |||
179 | /** | ||
168 | * iio_read_channel_raw() - read from a given channel | 180 | * iio_read_channel_raw() - read from a given channel |
169 | * @chan: The channel being queried. | 181 | * @chan: The channel being queried. |
170 | * @val: Value read back. | 182 | * @val: Value read back. |