Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

staging: iio: remove timestamp field from trigger and pass instead through pollfuncs

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Jonathan Cameron and committed by
Greg Kroah-Hartman
7b2c33b1 c3db00cc

+39 -42
+2 -2
drivers/staging/iio/accel/adis16209_ring.c
··· 68 68 * adis16209_poll_func_th() top half interrupt handler called by trigger 69 69 * @private_data: iio_dev 70 70 **/ 71 - static void adis16209_poll_func_th(struct iio_dev *indio_dev) 71 + static void adis16209_poll_func_th(struct iio_dev *indio_dev, s64 time) 72 72 { 73 73 struct adis16209_state *st = iio_dev_get_devdata(indio_dev); 74 - st->last_timestamp = indio_dev->trig->timestamp; 74 + st->last_timestamp = time; 75 75 schedule_work(&st->work_trigger_to_ring); 76 76 } 77 77
+1 -2
drivers/staging/iio/accel/adis16209_trigger.c
··· 23 23 struct adis16209_state *st = iio_dev_get_devdata(dev_info); 24 24 struct iio_trigger *trig = st->trig; 25 25 26 - trig->timestamp = timestamp; 27 - iio_trigger_poll(trig); 26 + iio_trigger_poll(trig, timestamp); 28 27 29 28 return IRQ_HANDLED; 30 29 }
+2 -2
drivers/staging/iio/accel/adis16240_ring.c
··· 62 62 * adis16240_poll_func_th() top half interrupt handler called by trigger 63 63 * @private_data: iio_dev 64 64 **/ 65 - static void adis16240_poll_func_th(struct iio_dev *indio_dev) 65 + static void adis16240_poll_func_th(struct iio_dev *indio_dev, s64 time) 66 66 { 67 67 struct adis16240_state *st = iio_dev_get_devdata(indio_dev); 68 - st->last_timestamp = indio_dev->trig->timestamp; 68 + st->last_timestamp = time; 69 69 schedule_work(&st->work_trigger_to_ring); 70 70 } 71 71
+1 -2
drivers/staging/iio/accel/adis16240_trigger.c
··· 23 23 struct adis16240_state *st = iio_dev_get_devdata(dev_info); 24 24 struct iio_trigger *trig = st->trig; 25 25 26 - trig->timestamp = timestamp; 27 - iio_trigger_poll(trig); 26 + iio_trigger_poll(trig, timestamp); 28 27 29 28 return IRQ_HANDLED; 30 29 }
+4 -5
drivers/staging/iio/accel/lis3l02dq_ring.c
··· 103 103 * lis3l02dq_poll_func_th() top half interrupt handler called by trigger 104 104 * @private_data: iio_dev 105 105 **/ 106 - static void lis3l02dq_poll_func_th(struct iio_dev *indio_dev) 106 + static void lis3l02dq_poll_func_th(struct iio_dev *indio_dev, s64 time) 107 107 { 108 - struct lis3l02dq_state *st = iio_dev_get_devdata(indio_dev); 109 - st->last_timestamp = indio_dev->trig->timestamp; 108 + struct lis3l02dq_state *st = iio_dev_get_devdata(indio_dev); 109 + st->last_timestamp = time; 110 110 schedule_work(&st->work_trigger_to_ring); 111 111 /* Indicate that this interrupt is being handled */ 112 112 ··· 128 128 struct lis3l02dq_state *st = iio_dev_get_devdata(dev_info); 129 129 struct iio_trigger *trig = st->trig; 130 130 131 - trig->timestamp = timestamp; 132 - iio_trigger_poll(trig); 131 + iio_trigger_poll(trig, timestamp); 133 132 134 133 return IRQ_HANDLED; 135 134 }
+1 -1
drivers/staging/iio/adc/max1363_ring.c
··· 113 113 * then. Some triggers will generate their own time stamp. Currently 114 114 * there is no way of notifying them when no one cares. 115 115 **/ 116 - static void max1363_poll_func_th(struct iio_dev *indio_dev) 116 + static void max1363_poll_func_th(struct iio_dev *indio_dev, s64 time) 117 117 { 118 118 struct max1363_state *st = indio_dev->dev_data; 119 119
+2 -2
drivers/staging/iio/gyro/adis16260_ring.c
··· 59 59 * adis16260_poll_func_th() top half interrupt handler called by trigger 60 60 * @private_data: iio_dev 61 61 **/ 62 - static void adis16260_poll_func_th(struct iio_dev *indio_dev) 62 + static void adis16260_poll_func_th(struct iio_dev *indio_dev, s64 time) 63 63 { 64 64 struct adis16260_state *st = iio_dev_get_devdata(indio_dev); 65 - st->last_timestamp = indio_dev->trig->timestamp; 65 + st->last_timestamp = time; 66 66 schedule_work(&st->work_trigger_to_ring); 67 67 } 68 68
+1 -2
drivers/staging/iio/gyro/adis16260_trigger.c
··· 23 23 struct adis16260_state *st = iio_dev_get_devdata(dev_info); 24 24 struct iio_trigger *trig = st->trig; 25 25 26 - trig->timestamp = timestamp; 27 - iio_trigger_poll(trig); 26 + iio_trigger_poll(trig, timestamp); 28 27 29 28 return IRQ_HANDLED; 30 29 }
+2 -2
drivers/staging/iio/imu/adis16300_ring.c
··· 75 75 * adis16300_poll_func_th() top half interrupt handler called by trigger 76 76 * @private_data: iio_dev 77 77 **/ 78 - static void adis16300_poll_func_th(struct iio_dev *indio_dev) 78 + static void adis16300_poll_func_th(struct iio_dev *indio_dev, s64 time) 79 79 { 80 80 struct adis16300_state *st = iio_dev_get_devdata(indio_dev); 81 - st->last_timestamp = indio_dev->trig->timestamp; 81 + st->last_timestamp = time; 82 82 schedule_work(&st->work_trigger_to_ring); 83 83 /* Indicate that this interrupt is being handled */ 84 84
+1 -2
drivers/staging/iio/imu/adis16300_trigger.c
··· 23 23 struct adis16300_state *st = iio_dev_get_devdata(dev_info); 24 24 struct iio_trigger *trig = st->trig; 25 25 26 - trig->timestamp = timestamp; 27 - iio_trigger_poll(trig); 26 + iio_trigger_poll(trig, timestamp); 28 27 29 28 return IRQ_HANDLED; 30 29 }
+2 -2
drivers/staging/iio/imu/adis16350_ring.c
··· 81 81 * adis16350_poll_func_th() top half interrupt handler called by trigger 82 82 * @private_data: iio_dev 83 83 **/ 84 - static void adis16350_poll_func_th(struct iio_dev *indio_dev) 84 + static void adis16350_poll_func_th(struct iio_dev *indio_dev, s64 time) 85 85 { 86 86 struct adis16350_state *st = iio_dev_get_devdata(indio_dev); 87 - st->last_timestamp = indio_dev->trig->timestamp; 87 + st->last_timestamp = time; 88 88 schedule_work(&st->work_trigger_to_ring); 89 89 } 90 90
+1 -2
drivers/staging/iio/imu/adis16350_trigger.c
··· 23 23 struct adis16350_state *st = iio_dev_get_devdata(dev_info); 24 24 struct iio_trigger *trig = st->trig; 25 25 26 - trig->timestamp = timestamp; 27 - iio_trigger_poll(trig); 26 + iio_trigger_poll(trig, timestamp); 28 27 29 28 return IRQ_HANDLED; 30 29 }
+2 -2
drivers/staging/iio/imu/adis16400_ring.c
··· 84 84 * adis16400_poll_func_th() top half interrupt handler called by trigger 85 85 * @private_data: iio_dev 86 86 **/ 87 - static void adis16400_poll_func_th(struct iio_dev *indio_dev) 87 + static void adis16400_poll_func_th(struct iio_dev *indio_dev, s64 time) 88 88 { 89 89 struct adis16400_state *st = iio_dev_get_devdata(indio_dev); 90 - st->last_timestamp = indio_dev->trig->timestamp; 90 + st->last_timestamp = time; 91 91 schedule_work(&st->work_trigger_to_ring); 92 92 /* Indicate that this interrupt is being handled */ 93 93
+1 -2
drivers/staging/iio/imu/adis16400_trigger.c
··· 23 23 struct adis16400_state *st = iio_dev_get_devdata(dev_info); 24 24 struct iio_trigger *trig = st->trig; 25 25 26 - trig->timestamp = timestamp; 27 - iio_trigger_poll(trig); 26 + iio_trigger_poll(trig, timestamp); 28 27 29 28 return IRQ_HANDLED; 30 29 }
+5 -5
drivers/staging/iio/industrialio-trigger.c
··· 172 172 } 173 173 EXPORT_SYMBOL(iio_trigger_find_by_name); 174 174 175 - void iio_trigger_poll(struct iio_trigger *trig) 175 + void iio_trigger_poll(struct iio_trigger *trig, s64 time) 176 176 { 177 177 struct iio_poll_func *pf_cursor; 178 178 ··· 184 184 } 185 185 list_for_each_entry(pf_cursor, &trig->pollfunc_list, list) { 186 186 if (pf_cursor->poll_func_main) { 187 - pf_cursor->poll_func_main(pf_cursor->private_data); 187 + pf_cursor->poll_func_main(pf_cursor->private_data, 188 + time); 188 189 trig->use_count++; 189 190 } 190 191 } ··· 198 197 if (trig->use_count == 0 && trig->try_reenable) 199 198 if (trig->try_reenable(trig)) { 200 199 /* Missed and interrupt so launch new poll now */ 201 - trig->timestamp = 0; 202 - iio_trigger_poll(trig); 200 + iio_trigger_poll(trig, 0); 203 201 } 204 202 } 205 203 EXPORT_SYMBOL(iio_trigger_notify_done); ··· 400 400 401 401 int iio_alloc_pollfunc(struct iio_dev *indio_dev, 402 402 void (*immediate)(struct iio_dev *indio_dev), 403 - void (*main)(struct iio_dev *private_data)) 403 + void (*main)(struct iio_dev *private_data, s64 time)) 404 404 { 405 405 indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); 406 406 if (indio_dev->pollfunc == NULL)
+7 -5
drivers/staging/iio/trigger.h
··· 21 21 * @pollfunc_list_lock: [INTERN] protection of the polling function list 22 22 * @pollfunc_list: [INTERN] list of functions to run on trigger. 23 23 * @control_attrs: [DRIVER] sysfs attributes relevant to trigger type 24 - * @timestamp: [INTERN] timestamp usesd by some trigs (e.g. datardy) 25 24 * @owner: [DRIVER] used to monitor usage count of the trigger. 26 25 * @use_count: use count for the trigger 27 26 * @set_trigger_state: [DRIVER] switch on/off the trigger on demand ··· 38 39 spinlock_t pollfunc_list_lock; 39 40 struct list_head pollfunc_list; 40 41 const struct attribute_group *control_attrs; 41 - s64 timestamp; 42 42 struct module *owner; 43 43 int use_count; 44 44 ··· 118 120 * 119 121 * Typically called in relevant hardware interrupt handler. 120 122 **/ 121 - void iio_trigger_poll(struct iio_trigger *trig); 123 + void iio_trigger_poll(struct iio_trigger *trig, s64 time); 122 124 void iio_trigger_notify_done(struct iio_trigger *trig); 123 125 124 126 /** ··· 142 144 struct list_head list; 143 145 void *private_data; 144 146 void (*poll_func_immediate)(struct iio_dev *indio_dev); 145 - void (*poll_func_main)(struct iio_dev *private_data); 147 + void (*poll_func_main)(struct iio_dev *private_data, s64 time); 146 148 147 149 }; 148 150 149 151 int iio_alloc_pollfunc(struct iio_dev *indio_dev, 150 152 void (*immediate)(struct iio_dev *indio_dev), 151 - void (*main)(struct iio_dev *private_data)); 153 + void (*main)(struct iio_dev *private_data, s64 time)); 152 154 153 155 /* 154 156 * Two functions for common case where all that happens is a pollfunc ··· 161 163 162 164 void iio_free_trigger(struct iio_trigger *trig); 163 165 166 + 167 + struct iio_simple_trigger { 168 + struct iio_trigger trig; 169 + }; 164 170 #endif /* _IIO_TRIGGER_H_ */
+2 -1
drivers/staging/iio/trigger/iio-trig-gpio.c
··· 42 42 43 43 static irqreturn_t iio_gpio_trigger_poll(int irq, void *private) 44 44 { 45 - iio_trigger_poll(private); 45 + /* Timestamp not currently provided */ 46 + iio_trigger_poll(private, 0); 46 47 return IRQ_HANDLED; 47 48 } 48 49
+2 -1
drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
··· 98 98 99 99 static void iio_prtc_trigger_poll(void *private_data) 100 100 { 101 - iio_trigger_poll(private_data); 101 + /* Timestamp is not provided currently */ 102 + iio_trigger_poll(private_data, 0); 102 103 } 103 104 104 105 static int iio_trig_periodic_rtc_probe(struct platform_device *dev)