diff options
author | Jonathan Cameron <jic23@cam.ac.uk> | 2011-05-18 09:42:32 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-05-19 19:15:04 -0400 |
commit | 21b185f8d5951ebbf76d61f431fb541dce5113d1 (patch) | |
tree | c9337b56b2835849657da639d6ed64bad4a339fe | |
parent | e3796e6bbba213ba2aad7212de0bdae2833ac45e (diff) |
staging:iio: poll func allocation clean up.
Add a function to neatly deal with allocation of poll functions.
Ultimately this allows us to more easily change the implementation.
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/iio/accel/adis16201_ring.c | 22 | ||||
-rw-r--r-- | drivers/staging/iio/accel/adis16203_ring.c | 23 | ||||
-rw-r--r-- | drivers/staging/iio/accel/adis16204_ring.c | 23 | ||||
-rw-r--r-- | drivers/staging/iio/accel/adis16209_ring.c | 24 | ||||
-rw-r--r-- | drivers/staging/iio/accel/adis16240_ring.c | 26 | ||||
-rw-r--r-- | drivers/staging/iio/imu/adis16400_ring.c | 23 | ||||
-rw-r--r-- | drivers/staging/iio/industrialio-trigger.c | 36 | ||||
-rw-r--r-- | drivers/staging/iio/trigger.h | 8 |
8 files changed, 95 insertions, 90 deletions
diff --git a/drivers/staging/iio/accel/adis16201_ring.c b/drivers/staging/iio/accel/adis16201_ring.c index 83b53365d8ed..c61f981255ca 100644 --- a/drivers/staging/iio/accel/adis16201_ring.c +++ b/drivers/staging/iio/accel/adis16201_ring.c | |||
@@ -96,8 +96,7 @@ static irqreturn_t adis16201_trigger_handler(int irq, void *p) | |||
96 | 96 | ||
97 | void adis16201_unconfigure_ring(struct iio_dev *indio_dev) | 97 | void adis16201_unconfigure_ring(struct iio_dev *indio_dev) |
98 | { | 98 | { |
99 | kfree(indio_dev->pollfunc->name); | 99 | iio_dealloc_pollfunc(indio_dev->pollfunc); |
100 | kfree(indio_dev->pollfunc); | ||
101 | iio_sw_rb_free(indio_dev->ring); | 100 | iio_sw_rb_free(indio_dev->ring); |
102 | } | 101 | } |
103 | 102 | ||
@@ -134,26 +133,19 @@ int adis16201_configure_ring(struct iio_dev *indio_dev) | |||
134 | iio_scan_mask_set(ring, ADIS16201_SCAN_INCLI_X); | 133 | iio_scan_mask_set(ring, ADIS16201_SCAN_INCLI_X); |
135 | iio_scan_mask_set(ring, ADIS16201_SCAN_INCLI_Y); | 134 | iio_scan_mask_set(ring, ADIS16201_SCAN_INCLI_Y); |
136 | 135 | ||
137 | indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); | 136 | indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time, |
137 | &adis16201_trigger_handler, | ||
138 | IRQF_ONESHOT, | ||
139 | indio_dev, | ||
140 | "adis16201_consumer%d", | ||
141 | indio_dev->id); | ||
138 | if (indio_dev->pollfunc == NULL) { | 142 | if (indio_dev->pollfunc == NULL) { |
139 | ret = -ENOMEM; | 143 | ret = -ENOMEM; |
140 | goto error_iio_sw_rb_free; | 144 | goto error_iio_sw_rb_free; |
141 | } | 145 | } |
142 | indio_dev->pollfunc->private_data = indio_dev; | ||
143 | indio_dev->pollfunc->h = &iio_pollfunc_store_time; | ||
144 | indio_dev->pollfunc->thread = &adis16201_trigger_handler; | ||
145 | indio_dev->pollfunc->type = IRQF_ONESHOT; | ||
146 | indio_dev->pollfunc->name = | ||
147 | kasprintf(GFP_KERNEL, "adis16201_consumer%d", indio_dev->id); | ||
148 | if (indio_dev->pollfunc->name == NULL) { | ||
149 | ret = -ENOMEM; | ||
150 | goto error_free_poll_func; | ||
151 | } | ||
152 | 146 | ||
153 | indio_dev->modes |= INDIO_RING_TRIGGERED; | 147 | indio_dev->modes |= INDIO_RING_TRIGGERED; |
154 | return 0; | 148 | return 0; |
155 | error_free_poll_func: | ||
156 | kfree(indio_dev->pollfunc); | ||
157 | error_iio_sw_rb_free: | 149 | error_iio_sw_rb_free: |
158 | iio_sw_rb_free(indio_dev->ring); | 150 | iio_sw_rb_free(indio_dev->ring); |
159 | return ret; | 151 | return ret; |
diff --git a/drivers/staging/iio/accel/adis16203_ring.c b/drivers/staging/iio/accel/adis16203_ring.c index 1b8863d2ff09..a9a789d79c09 100644 --- a/drivers/staging/iio/accel/adis16203_ring.c +++ b/drivers/staging/iio/accel/adis16203_ring.c | |||
@@ -103,8 +103,7 @@ static irqreturn_t adis16203_trigger_handler(int irq, void *p) | |||
103 | 103 | ||
104 | void adis16203_unconfigure_ring(struct iio_dev *indio_dev) | 104 | void adis16203_unconfigure_ring(struct iio_dev *indio_dev) |
105 | { | 105 | { |
106 | kfree(indio_dev->pollfunc->name); | 106 | iio_dealloc_pollfunc(indio_dev->pollfunc); |
107 | kfree(indio_dev->pollfunc); | ||
108 | iio_sw_rb_free(indio_dev->ring); | 107 | iio_sw_rb_free(indio_dev->ring); |
109 | } | 108 | } |
110 | 109 | ||
@@ -139,26 +138,20 @@ int adis16203_configure_ring(struct iio_dev *indio_dev) | |||
139 | iio_scan_mask_set(ring, ADIS16203_SCAN_INCLI_X); | 138 | iio_scan_mask_set(ring, ADIS16203_SCAN_INCLI_X); |
140 | iio_scan_mask_set(ring, ADIS16203_SCAN_INCLI_Y); | 139 | iio_scan_mask_set(ring, ADIS16203_SCAN_INCLI_Y); |
141 | 140 | ||
142 | indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); | 141 | indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time, |
142 | &adis16203_trigger_handler, | ||
143 | IRQF_ONESHOT, | ||
144 | indio_dev, | ||
145 | "adis16203_consumer%d", | ||
146 | indio_dev->id); | ||
143 | if (indio_dev->pollfunc == NULL) { | 147 | if (indio_dev->pollfunc == NULL) { |
144 | ret = -ENOMEM; | 148 | ret = -ENOMEM; |
145 | goto error_iio_sw_rb_free; | 149 | goto error_iio_sw_rb_free; |
146 | } | 150 | } |
147 | indio_dev->pollfunc->private_data = indio_dev; | ||
148 | indio_dev->pollfunc->h = &iio_pollfunc_store_time; | ||
149 | indio_dev->pollfunc->thread = &adis16203_trigger_handler; | ||
150 | indio_dev->pollfunc->type = IRQF_ONESHOT; | ||
151 | indio_dev->pollfunc->name = | ||
152 | kasprintf(GFP_KERNEL, "adis16203_consumer%d", indio_dev->id); | ||
153 | if (indio_dev->pollfunc->name == NULL) { | ||
154 | ret = -ENOMEM; | ||
155 | goto error_free_poll_func; | ||
156 | } | ||
157 | 151 | ||
158 | indio_dev->modes |= INDIO_RING_TRIGGERED; | 152 | indio_dev->modes |= INDIO_RING_TRIGGERED; |
159 | return 0; | 153 | return 0; |
160 | error_free_poll_func: | 154 | |
161 | kfree(indio_dev->pollfunc); | ||
162 | error_iio_sw_rb_free: | 155 | error_iio_sw_rb_free: |
163 | iio_sw_rb_free(indio_dev->ring); | 156 | iio_sw_rb_free(indio_dev->ring); |
164 | return ret; | 157 | return ret; |
diff --git a/drivers/staging/iio/accel/adis16204_ring.c b/drivers/staging/iio/accel/adis16204_ring.c index 7d99b4884f94..a2d36fb822e5 100644 --- a/drivers/staging/iio/accel/adis16204_ring.c +++ b/drivers/staging/iio/accel/adis16204_ring.c | |||
@@ -98,8 +98,7 @@ static irqreturn_t adis16204_trigger_handler(int irq, void *p) | |||
98 | 98 | ||
99 | void adis16204_unconfigure_ring(struct iio_dev *indio_dev) | 99 | void adis16204_unconfigure_ring(struct iio_dev *indio_dev) |
100 | { | 100 | { |
101 | kfree(indio_dev->pollfunc->name); | 101 | iio_dealloc_pollfunc(indio_dev->pollfunc); |
102 | kfree(indio_dev->pollfunc); | ||
103 | iio_sw_rb_free(indio_dev->ring); | 102 | iio_sw_rb_free(indio_dev->ring); |
104 | } | 103 | } |
105 | 104 | ||
@@ -134,27 +133,21 @@ int adis16204_configure_ring(struct iio_dev *indio_dev) | |||
134 | iio_scan_mask_set(ring, ADIS16204_SCAN_AUX_ADC); | 133 | iio_scan_mask_set(ring, ADIS16204_SCAN_AUX_ADC); |
135 | iio_scan_mask_set(ring, ADIS16204_SCAN_TEMP); | 134 | iio_scan_mask_set(ring, ADIS16204_SCAN_TEMP); |
136 | 135 | ||
137 | indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); | 136 | indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time, |
137 | &adis16204_trigger_handler, | ||
138 | IRQF_ONESHOT, | ||
139 | indio_dev, | ||
140 | "%s_consumer%d", | ||
141 | indio_dev->name, | ||
142 | indio_dev->id); | ||
138 | if (indio_dev->pollfunc == NULL) { | 143 | if (indio_dev->pollfunc == NULL) { |
139 | ret = -ENOMEM; | 144 | ret = -ENOMEM; |
140 | goto error_iio_sw_rb_free; | 145 | goto error_iio_sw_rb_free; |
141 | } | 146 | } |
142 | indio_dev->pollfunc->private_data = indio_dev; | ||
143 | indio_dev->pollfunc->h = &iio_pollfunc_store_time; | ||
144 | indio_dev->pollfunc->thread = &adis16204_trigger_handler; | ||
145 | indio_dev->pollfunc->type = IRQF_ONESHOT; | ||
146 | indio_dev->pollfunc->name = | ||
147 | kasprintf(GFP_KERNEL, "adis16204_consumer%d", indio_dev->id); | ||
148 | if (indio_dev->pollfunc->name == NULL) { | ||
149 | ret = -ENOMEM; | ||
150 | goto error_free_poll_func; | ||
151 | } | ||
152 | 147 | ||
153 | indio_dev->modes |= INDIO_RING_TRIGGERED; | 148 | indio_dev->modes |= INDIO_RING_TRIGGERED; |
154 | return 0; | 149 | return 0; |
155 | 150 | ||
156 | error_free_poll_func: | ||
157 | kfree(indio_dev->pollfunc); | ||
158 | error_iio_sw_rb_free: | 151 | error_iio_sw_rb_free: |
159 | iio_sw_rb_free(indio_dev->ring); | 152 | iio_sw_rb_free(indio_dev->ring); |
160 | return ret; | 153 | return ret; |
diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging/iio/accel/adis16209_ring.c index 26028e9a9056..390908b3f02f 100644 --- a/drivers/staging/iio/accel/adis16209_ring.c +++ b/drivers/staging/iio/accel/adis16209_ring.c | |||
@@ -98,8 +98,7 @@ static irqreturn_t adis16209_trigger_handler(int irq, void *p) | |||
98 | 98 | ||
99 | void adis16209_unconfigure_ring(struct iio_dev *indio_dev) | 99 | void adis16209_unconfigure_ring(struct iio_dev *indio_dev) |
100 | { | 100 | { |
101 | kfree(indio_dev->pollfunc->name); | 101 | iio_dealloc_pollfunc(indio_dev->pollfunc); |
102 | kfree(indio_dev->pollfunc); | ||
103 | iio_sw_rb_free(indio_dev->ring); | 102 | iio_sw_rb_free(indio_dev->ring); |
104 | } | 103 | } |
105 | 104 | ||
@@ -137,26 +136,21 @@ int adis16209_configure_ring(struct iio_dev *indio_dev) | |||
137 | iio_scan_mask_set(ring, ADIS16209_SCAN_INCLI_Y); | 136 | iio_scan_mask_set(ring, ADIS16209_SCAN_INCLI_Y); |
138 | iio_scan_mask_set(ring, ADIS16209_SCAN_ROT); | 137 | iio_scan_mask_set(ring, ADIS16209_SCAN_ROT); |
139 | 138 | ||
140 | indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); | 139 | indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time, |
140 | &adis16209_trigger_handler, | ||
141 | IRQF_ONESHOT, | ||
142 | indio_dev, | ||
143 | "%s_consumer%d", | ||
144 | indio_dev->name, | ||
145 | indio_dev->id); | ||
141 | if (indio_dev->pollfunc == NULL) { | 146 | if (indio_dev->pollfunc == NULL) { |
142 | ret = -ENOMEM; | 147 | ret = -ENOMEM; |
143 | goto error_iio_sw_rb_free; | 148 | goto error_iio_sw_rb_free; |
144 | } | 149 | } |
145 | indio_dev->pollfunc->private_data = indio_dev; | ||
146 | indio_dev->pollfunc->h = &iio_pollfunc_store_time; | ||
147 | indio_dev->pollfunc->thread = &adis16209_trigger_handler; | ||
148 | indio_dev->pollfunc->type = IRQF_ONESHOT; | ||
149 | indio_dev->pollfunc->name = | ||
150 | kasprintf(GFP_KERNEL, "adis16209_consumer%d", indio_dev->id); | ||
151 | if (indio_dev->pollfunc->name == NULL) { | ||
152 | ret = -ENOMEM; | ||
153 | goto error_free_poll_func; | ||
154 | } | ||
155 | 150 | ||
156 | indio_dev->modes |= INDIO_RING_TRIGGERED; | 151 | indio_dev->modes |= INDIO_RING_TRIGGERED; |
157 | return 0; | 152 | return 0; |
158 | error_free_poll_func: | 153 | |
159 | kfree(indio_dev->pollfunc); | ||
160 | error_iio_sw_rb_free: | 154 | error_iio_sw_rb_free: |
161 | iio_sw_rb_free(indio_dev->ring); | 155 | iio_sw_rb_free(indio_dev->ring); |
162 | return ret; | 156 | return ret; |
diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging/iio/accel/adis16240_ring.c index 8450f7f0e538..0c6d781d94c6 100644 --- a/drivers/staging/iio/accel/adis16240_ring.c +++ b/drivers/staging/iio/accel/adis16240_ring.c | |||
@@ -95,8 +95,7 @@ static irqreturn_t adis16240_trigger_handler(int irq, void *p) | |||
95 | 95 | ||
96 | void adis16240_unconfigure_ring(struct iio_dev *indio_dev) | 96 | void adis16240_unconfigure_ring(struct iio_dev *indio_dev) |
97 | { | 97 | { |
98 | kfree(indio_dev->pollfunc->name); | 98 | iio_dealloc_pollfunc(indio_dev->pollfunc); |
99 | kfree(indio_dev->pollfunc); | ||
100 | iio_sw_rb_free(indio_dev->ring); | 99 | iio_sw_rb_free(indio_dev->ring); |
101 | } | 100 | } |
102 | 101 | ||
@@ -132,27 +131,22 @@ int adis16240_configure_ring(struct iio_dev *indio_dev) | |||
132 | iio_scan_mask_set(ring, ADIS16240_SCAN_AUX_ADC); | 131 | iio_scan_mask_set(ring, ADIS16240_SCAN_AUX_ADC); |
133 | iio_scan_mask_set(ring, ADIS16240_SCAN_TEMP); | 132 | iio_scan_mask_set(ring, ADIS16240_SCAN_TEMP); |
134 | 133 | ||
135 | indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); | 134 | indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time, |
135 | &adis16240_trigger_handler, | ||
136 | IRQF_ONESHOT, | ||
137 | indio_dev, | ||
138 | "%s_consumer%d", | ||
139 | indio_dev->name, | ||
140 | indio_dev->id); | ||
136 | if (indio_dev->pollfunc == NULL) { | 141 | if (indio_dev->pollfunc == NULL) { |
137 | ret = -ENOMEM; | 142 | ret = -ENOMEM; |
138 | goto error_iio_sw_rb_free; | 143 | goto error_iio_sw_rb_free; |
139 | } | 144 | } |
140 | indio_dev->pollfunc->private_data = indio_dev; | 145 | |
141 | indio_dev->pollfunc->h = &iio_pollfunc_store_time; | ||
142 | indio_dev->pollfunc->thread = &adis16240_trigger_handler; | ||
143 | indio_dev->pollfunc->type = IRQF_ONESHOT; | ||
144 | indio_dev->pollfunc->name = | ||
145 | kasprintf(GFP_KERNEL, "adis16240_consumer%d", indio_dev->id); | ||
146 | if (indio_dev->pollfunc->name == NULL) { | ||
147 | ret = -ENOMEM; | ||
148 | goto error_free_poll_func; | ||
149 | } | ||
150 | indio_dev->modes |= INDIO_RING_TRIGGERED; | 146 | indio_dev->modes |= INDIO_RING_TRIGGERED; |
151 | return 0; | 147 | return 0; |
152 | error_free_poll_func: | 148 | |
153 | kfree(indio_dev->pollfunc); | ||
154 | error_iio_sw_rb_free: | 149 | error_iio_sw_rb_free: |
155 | iio_sw_rb_free(indio_dev->ring); | 150 | iio_sw_rb_free(indio_dev->ring); |
156 | return ret; | 151 | return ret; |
157 | } | 152 | } |
158 | |||
diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c index 5d99fba8cc29..2589a7e167e4 100644 --- a/drivers/staging/iio/imu/adis16400_ring.c +++ b/drivers/staging/iio/imu/adis16400_ring.c | |||
@@ -165,8 +165,7 @@ static irqreturn_t adis16400_trigger_handler(int irq, void *p) | |||
165 | 165 | ||
166 | void adis16400_unconfigure_ring(struct iio_dev *indio_dev) | 166 | void adis16400_unconfigure_ring(struct iio_dev *indio_dev) |
167 | { | 167 | { |
168 | kfree(indio_dev->pollfunc->name); | 168 | iio_dealloc_pollfunc(indio_dev->pollfunc); |
169 | kfree(indio_dev->pollfunc); | ||
170 | iio_sw_rb_free(indio_dev->ring); | 169 | iio_sw_rb_free(indio_dev->ring); |
171 | } | 170 | } |
172 | 171 | ||
@@ -194,28 +193,24 @@ int adis16400_configure_ring(struct iio_dev *indio_dev) | |||
194 | ring->scan_timestamp = true; | 193 | ring->scan_timestamp = true; |
195 | ring->setup_ops = &adis16400_ring_setup_ops; | 194 | ring->setup_ops = &adis16400_ring_setup_ops; |
196 | ring->owner = THIS_MODULE; | 195 | ring->owner = THIS_MODULE; |
196 | /* Set default scan mode */ | ||
197 | ring->scan_mask = st->variant->default_scan_mask; | 197 | ring->scan_mask = st->variant->default_scan_mask; |
198 | ring->scan_count = hweight_long(st->variant->default_scan_mask); | 198 | ring->scan_count = hweight_long(st->variant->default_scan_mask); |
199 | /* Set default scan mode */ | ||
200 | 199 | ||
201 | indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); | 200 | indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time, |
201 | &adis16400_trigger_handler, | ||
202 | IRQF_ONESHOT, | ||
203 | indio_dev, | ||
204 | "%s_consumer%d", | ||
205 | indio_dev->name, | ||
206 | indio_dev->id); | ||
202 | if (indio_dev->pollfunc == NULL) { | 207 | if (indio_dev->pollfunc == NULL) { |
203 | ret = -ENOMEM; | 208 | ret = -ENOMEM; |
204 | goto error_iio_sw_rb_free; | 209 | goto error_iio_sw_rb_free; |
205 | } | 210 | } |
206 | indio_dev->pollfunc->private_data = indio_dev; | ||
207 | indio_dev->pollfunc->h = &iio_pollfunc_store_time; | ||
208 | indio_dev->pollfunc->thread = &adis16400_trigger_handler; | ||
209 | indio_dev->pollfunc->type = IRQF_ONESHOT; | ||
210 | indio_dev->pollfunc->name = | ||
211 | kasprintf(GFP_KERNEL, "adis16400_consumer%d", indio_dev->id); | ||
212 | if (ret) | ||
213 | goto error_iio_free_pollfunc; | ||
214 | 211 | ||
215 | indio_dev->modes |= INDIO_RING_TRIGGERED; | 212 | indio_dev->modes |= INDIO_RING_TRIGGERED; |
216 | return 0; | 213 | return 0; |
217 | error_iio_free_pollfunc: | ||
218 | kfree(indio_dev->pollfunc); | ||
219 | error_iio_sw_rb_free: | 214 | error_iio_sw_rb_free: |
220 | iio_sw_rb_free(indio_dev->ring); | 215 | iio_sw_rb_free(indio_dev->ring); |
221 | return ret; | 216 | return ret; |
diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c index e83edacaec89..615902333fb0 100644 --- a/drivers/staging/iio/industrialio-trigger.c +++ b/drivers/staging/iio/industrialio-trigger.c | |||
@@ -270,6 +270,42 @@ irqreturn_t iio_pollfunc_store_time(int irq, void *p) | |||
270 | } | 270 | } |
271 | EXPORT_SYMBOL(iio_pollfunc_store_time); | 271 | EXPORT_SYMBOL(iio_pollfunc_store_time); |
272 | 272 | ||
273 | struct iio_poll_func | ||
274 | *iio_alloc_pollfunc(irqreturn_t (*h)(int irq, void *p), | ||
275 | irqreturn_t (*thread)(int irq, void *p), | ||
276 | int type, | ||
277 | void *private, | ||
278 | const char *fmt, | ||
279 | ...) | ||
280 | { | ||
281 | va_list vargs; | ||
282 | struct iio_poll_func *pf; | ||
283 | |||
284 | pf = kmalloc(sizeof *pf, GFP_KERNEL); | ||
285 | if (pf == NULL) | ||
286 | return NULL; | ||
287 | va_start(vargs, fmt); | ||
288 | pf->name = kvasprintf(GFP_KERNEL, fmt, vargs); | ||
289 | va_end(vargs); | ||
290 | if (pf->name == NULL) { | ||
291 | kfree(pf); | ||
292 | return NULL; | ||
293 | } | ||
294 | pf->h = h; | ||
295 | pf->thread = thread; | ||
296 | pf->type = type; | ||
297 | |||
298 | return pf; | ||
299 | } | ||
300 | EXPORT_SYMBOL_GPL(iio_alloc_pollfunc); | ||
301 | |||
302 | void iio_dealloc_pollfunc(struct iio_poll_func *pf) | ||
303 | { | ||
304 | kfree(pf->name); | ||
305 | kfree(pf); | ||
306 | } | ||
307 | EXPORT_SYMBOL_GPL(iio_dealloc_pollfunc); | ||
308 | |||
273 | /** | 309 | /** |
274 | * iio_trigger_read_currrent() - trigger consumer sysfs query which trigger | 310 | * iio_trigger_read_currrent() - trigger consumer sysfs query which trigger |
275 | * | 311 | * |
diff --git a/drivers/staging/iio/trigger.h b/drivers/staging/iio/trigger.h index 7faa31a2421e..f329fe10fa2f 100644 --- a/drivers/staging/iio/trigger.h +++ b/drivers/staging/iio/trigger.h | |||
@@ -160,6 +160,14 @@ struct iio_poll_func { | |||
160 | s64 timestamp; | 160 | s64 timestamp; |
161 | }; | 161 | }; |
162 | 162 | ||
163 | struct iio_poll_func | ||
164 | *iio_alloc_pollfunc(irqreturn_t (*h)(int irq, void *p), | ||
165 | irqreturn_t (*thread)(int irq, void *p), | ||
166 | int type, | ||
167 | void *private, | ||
168 | const char *fmt, | ||
169 | ...); | ||
170 | void iio_dealloc_pollfunc(struct iio_poll_func *pf); | ||
163 | irqreturn_t iio_pollfunc_store_time(int irq, void *p); | 171 | irqreturn_t iio_pollfunc_store_time(int irq, void *p); |
164 | 172 | ||
165 | /* | 173 | /* |