Lines Matching refs:encoder
60 static void rotary_encoder_report_event(struct rotary_encoder *encoder) in rotary_encoder_report_event() argument
62 const struct rotary_encoder_platform_data *pdata = encoder->pdata; in rotary_encoder_report_event()
65 input_report_rel(encoder->input, in rotary_encoder_report_event()
66 pdata->axis, encoder->dir ? -1 : 1); in rotary_encoder_report_event()
68 unsigned int pos = encoder->pos; in rotary_encoder_report_event()
70 if (encoder->dir) { in rotary_encoder_report_event()
85 encoder->pos = pos; in rotary_encoder_report_event()
86 input_report_abs(encoder->input, pdata->axis, encoder->pos); in rotary_encoder_report_event()
89 input_sync(encoder->input); in rotary_encoder_report_event()
94 struct rotary_encoder *encoder = dev_id; in rotary_encoder_irq() local
97 state = rotary_encoder_get_state(encoder->pdata); in rotary_encoder_irq()
101 if (encoder->armed) { in rotary_encoder_irq()
102 rotary_encoder_report_event(encoder); in rotary_encoder_irq()
103 encoder->armed = false; in rotary_encoder_irq()
109 if (encoder->armed) in rotary_encoder_irq()
110 encoder->dir = state - 1; in rotary_encoder_irq()
114 encoder->armed = true; in rotary_encoder_irq()
123 struct rotary_encoder *encoder = dev_id; in rotary_encoder_half_period_irq() local
126 state = rotary_encoder_get_state(encoder->pdata); in rotary_encoder_half_period_irq()
131 if (state != encoder->last_stable) { in rotary_encoder_half_period_irq()
132 rotary_encoder_report_event(encoder); in rotary_encoder_half_period_irq()
133 encoder->last_stable = state; in rotary_encoder_half_period_irq()
139 encoder->dir = (encoder->last_stable + state) & 0x01; in rotary_encoder_half_period_irq()
148 struct rotary_encoder *encoder = dev_id; in rotary_encoder_quarter_period_irq() local
152 state = rotary_encoder_get_state(encoder->pdata); in rotary_encoder_quarter_period_irq()
159 sum = (encoder->last_stable << 4) + state; in rotary_encoder_quarter_period_irq()
165 encoder->dir = 0; /* clockwise */ in rotary_encoder_quarter_period_irq()
172 encoder->dir = 1; /* counter-clockwise */ in rotary_encoder_quarter_period_irq()
188 rotary_encoder_report_event(encoder); in rotary_encoder_quarter_period_irq()
191 encoder->last_stable = state; in rotary_encoder_quarter_period_irq()
264 struct rotary_encoder *encoder; in rotary_encoder_probe() local
280 encoder = kzalloc(sizeof(struct rotary_encoder), GFP_KERNEL); in rotary_encoder_probe()
282 if (!encoder || !input) { in rotary_encoder_probe()
287 encoder->input = input; in rotary_encoder_probe()
288 encoder->pdata = pdata; in rotary_encoder_probe()
299 input_set_abs_params(encoder->input, in rotary_encoder_probe()
316 encoder->irq_a = gpio_to_irq(pdata->gpio_a); in rotary_encoder_probe()
317 encoder->irq_b = gpio_to_irq(pdata->gpio_b); in rotary_encoder_probe()
322 encoder->last_stable = rotary_encoder_get_state(pdata); in rotary_encoder_probe()
326 encoder->last_stable = rotary_encoder_get_state(pdata); in rotary_encoder_probe()
338 err = request_irq(encoder->irq_a, handler, in rotary_encoder_probe()
340 DRV_NAME, encoder); in rotary_encoder_probe()
342 dev_err(dev, "unable to request IRQ %d\n", encoder->irq_a); in rotary_encoder_probe()
346 err = request_irq(encoder->irq_b, handler, in rotary_encoder_probe()
348 DRV_NAME, encoder); in rotary_encoder_probe()
350 dev_err(dev, "unable to request IRQ %d\n", encoder->irq_b); in rotary_encoder_probe()
362 platform_set_drvdata(pdev, encoder); in rotary_encoder_probe()
367 free_irq(encoder->irq_b, encoder); in rotary_encoder_probe()
369 free_irq(encoder->irq_a, encoder); in rotary_encoder_probe()
376 kfree(encoder); in rotary_encoder_probe()
385 struct rotary_encoder *encoder = platform_get_drvdata(pdev); in rotary_encoder_remove() local
386 const struct rotary_encoder_platform_data *pdata = encoder->pdata; in rotary_encoder_remove()
390 free_irq(encoder->irq_a, encoder); in rotary_encoder_remove()
391 free_irq(encoder->irq_b, encoder); in rotary_encoder_remove()
395 input_unregister_device(encoder->input); in rotary_encoder_remove()
396 kfree(encoder); in rotary_encoder_remove()
407 struct rotary_encoder *encoder = dev_get_drvdata(dev); in rotary_encoder_suspend() local
410 enable_irq_wake(encoder->irq_a); in rotary_encoder_suspend()
411 enable_irq_wake(encoder->irq_b); in rotary_encoder_suspend()
419 struct rotary_encoder *encoder = dev_get_drvdata(dev); in rotary_encoder_resume() local
422 disable_irq_wake(encoder->irq_a); in rotary_encoder_resume()
423 disable_irq_wake(encoder->irq_b); in rotary_encoder_resume()