Lines Matching refs:encoder

59 static void rotary_encoder_report_event(struct rotary_encoder *encoder)  in rotary_encoder_report_event()  argument
61 const struct rotary_encoder_platform_data *pdata = encoder->pdata; in rotary_encoder_report_event()
64 input_report_rel(encoder->input, in rotary_encoder_report_event()
65 pdata->axis, encoder->dir ? -1 : 1); in rotary_encoder_report_event()
67 unsigned int pos = encoder->pos; in rotary_encoder_report_event()
69 if (encoder->dir) { in rotary_encoder_report_event()
84 encoder->pos = pos; in rotary_encoder_report_event()
85 input_report_abs(encoder->input, pdata->axis, encoder->pos); in rotary_encoder_report_event()
88 input_sync(encoder->input); in rotary_encoder_report_event()
93 struct rotary_encoder *encoder = dev_id; in rotary_encoder_irq() local
96 state = rotary_encoder_get_state(encoder->pdata); in rotary_encoder_irq()
100 if (encoder->armed) { in rotary_encoder_irq()
101 rotary_encoder_report_event(encoder); in rotary_encoder_irq()
102 encoder->armed = false; in rotary_encoder_irq()
108 if (encoder->armed) in rotary_encoder_irq()
109 encoder->dir = state - 1; in rotary_encoder_irq()
113 encoder->armed = true; in rotary_encoder_irq()
122 struct rotary_encoder *encoder = dev_id; in rotary_encoder_half_period_irq() local
125 state = rotary_encoder_get_state(encoder->pdata); in rotary_encoder_half_period_irq()
130 if (state != encoder->last_stable) { in rotary_encoder_half_period_irq()
131 rotary_encoder_report_event(encoder); in rotary_encoder_half_period_irq()
132 encoder->last_stable = state; in rotary_encoder_half_period_irq()
138 encoder->dir = (encoder->last_stable + state) & 0x01; in rotary_encoder_half_period_irq()
198 struct rotary_encoder *encoder; in rotary_encoder_probe() local
214 encoder = kzalloc(sizeof(struct rotary_encoder), GFP_KERNEL); in rotary_encoder_probe()
216 if (!encoder || !input) { in rotary_encoder_probe()
221 encoder->input = input; in rotary_encoder_probe()
222 encoder->pdata = pdata; in rotary_encoder_probe()
233 input_set_abs_params(encoder->input, in rotary_encoder_probe()
250 encoder->irq_a = gpio_to_irq(pdata->gpio_a); in rotary_encoder_probe()
251 encoder->irq_b = gpio_to_irq(pdata->gpio_b); in rotary_encoder_probe()
256 encoder->last_stable = rotary_encoder_get_state(pdata); in rotary_encoder_probe()
261 err = request_irq(encoder->irq_a, handler, in rotary_encoder_probe()
263 DRV_NAME, encoder); in rotary_encoder_probe()
265 dev_err(dev, "unable to request IRQ %d\n", encoder->irq_a); in rotary_encoder_probe()
269 err = request_irq(encoder->irq_b, handler, in rotary_encoder_probe()
271 DRV_NAME, encoder); in rotary_encoder_probe()
273 dev_err(dev, "unable to request IRQ %d\n", encoder->irq_b); in rotary_encoder_probe()
283 platform_set_drvdata(pdev, encoder); in rotary_encoder_probe()
288 free_irq(encoder->irq_b, encoder); in rotary_encoder_probe()
290 free_irq(encoder->irq_a, encoder); in rotary_encoder_probe()
297 kfree(encoder); in rotary_encoder_probe()
306 struct rotary_encoder *encoder = platform_get_drvdata(pdev); in rotary_encoder_remove() local
307 const struct rotary_encoder_platform_data *pdata = encoder->pdata; in rotary_encoder_remove()
309 free_irq(encoder->irq_a, encoder); in rotary_encoder_remove()
310 free_irq(encoder->irq_b, encoder); in rotary_encoder_remove()
314 input_unregister_device(encoder->input); in rotary_encoder_remove()
315 kfree(encoder); in rotary_encoder_remove()