rotary_encoder: added initial_value, min_value and max_value
Subsystems (2)
PATCH 2/3 rotary_encoder: added initial_value, min_value and max_value
Added initial_value, min_value and max_value. This would replace "steps".
The steps parameter is still allowed as it will be copied in the max_value for backwards compatibility. The max_value parameter is one higher than the steps parameter, and will better match the "input_set_abs_params" function.
Signed-off-by Jelle Martijn Kok <[email protected]>
--- drivers/input/misc/rotary_encoder.c | 21 +++++++++++++-------- include/linux/rotary_encoder.h | 5 ++++- 2 files changed, 17 insertions(+), 9 deletions(-)
drivers/input/misc/rotary_encoder.c +13 -8
@@ -70,17 +70,18 @@ static irqreturn_t rotary_encoder_irq(int irq, void *dev_id)if (dir ==-1 ) {/* turning counter-clockwise */ -if (pdata->rollover) - pos += pdata->steps; -if (pos) +if (pos > pdata->min_value) pos--; - }else { +else if (pdata->rollover) + pos = pdata->max_value; + } +else {/* turning clockwise */ -if (pdata->rollover || pos < pdata->steps) +if (pos < pdata->max_value) pos++; +else if (pdata->rollover) + pos = pdata->min_value; } -if (pdata->rollover) - pos %= pdata->steps; encoder->pos = pos;input_report_abs (encoder->input, pdata->axis, encoder->pos);
@@ -119,6 +120,10 @@ static int __devinit rotary_encoder_probe(struct platform_device *pdev) encoder->pdata = pdata; encoder->irq_a =gpio_to_irq (pdata->gpio_a); encoder->irq_b =gpio_to_irq (pdata->gpio_b); + encoder->pos = pdata->initial_value; +/* ensure backwards compatibility with the steps parameter */ +if (!pdata->max_value) + pdata->max_value = pdata->steps-1 ;/* create and register the input driver */ input->name = pdev->name;
@@ -131,7 +136,7 @@ static int __devinit rotary_encoder_probe(struct platform_device *pdev) }else { input->evbit[0 ] =BIT_MASK (EV_ABS );input_set_abs_params (encoder->input, - pdata->axis,0 , pdata->steps,0 ,1 ); + pdata->axis, pdata->min_value, pdata->max_value,0 ,1 ); } err =input_register_device (input);
include/linux/rotary_encoder.h +4 -1
@@ -2,7 +2,10 @@#define __ROTARY_ENCODER_H__struct rotary_encoder_platform_data { -unsigned int steps; +unsigned int steps;/* deprecated, use max_value instead */ +unsigned int initial_value; +unsigned int min_value; +unsigned int max_value;unsigned int axis;unsigned int gpio_a;unsigned int gpio_b;
Signature · 1 line
1.7.0.4