Message ID | YyP8Sc6k4lF9e72H@nixie71 |
---|---|
State | Superseded |
Headers | show |
Series | Additional fixes for Azoteq IQS7222A/B/C | expand |
On Thu, Sep 15, 2022 at 23:32, Jeff LaBundy <jeff@labundy.com> wrote: > IQS7222A revisions 1.13 and later widen the gesture multiplier from > x4 ms to x16 ms. Add a means to scale the gesture timings specified > in the device tree based on the revision of the device. > > Fixes: e505edaedcb9 ("Input: add support for Azoteq IQS7222A/B/C") > Signed-off-by: Jeff LaBundy <jeff@labundy.com> > --- > Changes in v2: > - Rebased to account for changes earlier in series > > drivers/input/misc/iqs7222.c | 111 +++++++++++++++++++++++++++++++++++ > 1 file changed, 111 insertions(+) Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> > > diff --git a/drivers/input/misc/iqs7222.c b/drivers/input/misc/iqs7222.c > index 0a592b90f471..3340de51fb2d 100644 > --- a/drivers/input/misc/iqs7222.c > +++ b/drivers/input/misc/iqs7222.c > @@ -86,7 +86,9 @@ enum iqs7222_reg_key_id { > IQS7222_REG_KEY_TOUCH, > IQS7222_REG_KEY_DEBOUNCE, > IQS7222_REG_KEY_TAP, > + IQS7222_REG_KEY_TAP_LEGACY, > IQS7222_REG_KEY_AXIAL, > + IQS7222_REG_KEY_AXIAL_LEGACY, > IQS7222_REG_KEY_WHEEL, > IQS7222_REG_KEY_NO_WHEEL, > IQS7222_REG_KEY_RESERVED > @@ -202,10 +204,68 @@ struct iqs7222_dev_desc { > int allow_offset; > int event_offset; > int comms_offset; > + bool legacy_gesture; > struct iqs7222_reg_grp_desc reg_grps[IQS7222_NUM_REG_GRPS]; > }; > > static const struct iqs7222_dev_desc iqs7222_devs[] = { > + { > + .prod_num = IQS7222_PROD_NUM_A, > + .fw_major = 1, > + .fw_minor = 13, > + .sldr_res = U8_MAX * 16, > + .touch_link = 1768, > + .allow_offset = 9, > + .event_offset = 10, > + .comms_offset = 12, > + .reg_grps = { > + [IQS7222_REG_GRP_STAT] = { > + .base = IQS7222_SYS_STATUS, > + .num_row = 1, > + .num_col = 8, > + }, > + [IQS7222_REG_GRP_CYCLE] = { > + .base = 0x8000, > + .num_row = 7, > + .num_col = 3, > + }, > + [IQS7222_REG_GRP_GLBL] = { > + .base = 0x8700, > + .num_row = 1, > + .num_col = 3, > + }, > + [IQS7222_REG_GRP_BTN] = { > + .base = 0x9000, > + .num_row = 12, > + .num_col = 3, > + }, > + [IQS7222_REG_GRP_CHAN] = { > + .base = 0xA000, > + .num_row = 12, > + .num_col = 6, > + }, > + [IQS7222_REG_GRP_FILT] = { > + .base = 0xAC00, > + .num_row = 1, > + .num_col = 2, > + }, > + [IQS7222_REG_GRP_SLDR] = { > + .base = 0xB000, > + .num_row = 2, > + .num_col = 11, > + }, > + [IQS7222_REG_GRP_GPIO] = { > + .base = 0xC000, > + .num_row = 1, > + .num_col = 3, > + }, > + [IQS7222_REG_GRP_SYS] = { > + .base = IQS7222_SYS_SETUP, > + .num_row = 1, > + .num_col = 13, > + }, > + }, > + }, > { > .prod_num = IQS7222_PROD_NUM_A, > .fw_major = 1, > @@ -215,6 +275,7 @@ static const struct iqs7222_dev_desc iqs7222_devs[] = { > .allow_offset = 9, > .event_offset = 10, > .comms_offset = 12, > + .legacy_gesture = true, > .reg_grps = { > [IQS7222_REG_GRP_STAT] = { > .base = IQS7222_SYS_STATUS, > @@ -874,6 +935,16 @@ static const struct iqs7222_prop_desc iqs7222_props[] = { > .reg_offset = 9, > .reg_shift = 8, > .reg_width = 8, > + .val_pitch = 16, > + .label = "maximum gesture time", > + }, > + { > + .name = "azoteq,gesture-max-ms", > + .reg_grp = IQS7222_REG_GRP_SLDR, > + .reg_key = IQS7222_REG_KEY_TAP_LEGACY, > + .reg_offset = 9, > + .reg_shift = 8, > + .reg_width = 8, > .val_pitch = 4, > .label = "maximum gesture time", > }, > @@ -884,6 +955,16 @@ static const struct iqs7222_prop_desc iqs7222_props[] = { > .reg_offset = 9, > .reg_shift = 3, > .reg_width = 5, > + .val_pitch = 16, > + .label = "minimum gesture time", > + }, > + { > + .name = "azoteq,gesture-min-ms", > + .reg_grp = IQS7222_REG_GRP_SLDR, > + .reg_key = IQS7222_REG_KEY_TAP_LEGACY, > + .reg_offset = 9, > + .reg_shift = 3, > + .reg_width = 5, > .val_pitch = 4, > .label = "minimum gesture time", > }, > @@ -897,6 +978,16 @@ static const struct iqs7222_prop_desc iqs7222_props[] = { > .val_pitch = 16, > .label = "gesture distance", > }, > + { > + .name = "azoteq,gesture-dist", > + .reg_grp = IQS7222_REG_GRP_SLDR, > + .reg_key = IQS7222_REG_KEY_AXIAL_LEGACY, > + .reg_offset = 10, > + .reg_shift = 8, > + .reg_width = 8, > + .val_pitch = 16, > + .label = "gesture distance", > + }, > { > .name = "azoteq,gesture-max-ms", > .reg_grp = IQS7222_REG_GRP_SLDR, > @@ -904,6 +995,16 @@ static const struct iqs7222_prop_desc iqs7222_props[] = { > .reg_offset = 10, > .reg_shift = 0, > .reg_width = 8, > + .val_pitch = 16, > + .label = "maximum gesture time", > + }, > + { > + .name = "azoteq,gesture-max-ms", > + .reg_grp = IQS7222_REG_GRP_SLDR, > + .reg_key = IQS7222_REG_KEY_AXIAL_LEGACY, > + .reg_offset = 10, > + .reg_shift = 0, > + .reg_width = 8, > .val_pitch = 4, > .label = "maximum gesture time", > }, > @@ -2133,8 +2234,18 @@ static int iqs7222_parse_sldr(struct iqs7222_private *iqs7222, > if (!event_node) > continue; > > + /* > + * Depending on the device, gestures are either offered using > + * one of two timing resolutions, or are not supported at all. > + */ > if (reg_offset) > reg_key = IQS7222_REG_KEY_RESERVED; > + else if (dev_desc->legacy_gesture && > + iqs7222_sl_events[i].reg_key == IQS7222_REG_KEY_TAP) > + reg_key = IQS7222_REG_KEY_TAP_LEGACY; > + else if (dev_desc->legacy_gesture && > + iqs7222_sl_events[i].reg_key == IQS7222_REG_KEY_AXIAL) > + reg_key = IQS7222_REG_KEY_AXIAL_LEGACY; > else > reg_key = iqs7222_sl_events[i].reg_key; > > -- > 2.34.1
diff --git a/drivers/input/misc/iqs7222.c b/drivers/input/misc/iqs7222.c index 0a592b90f471..3340de51fb2d 100644 --- a/drivers/input/misc/iqs7222.c +++ b/drivers/input/misc/iqs7222.c @@ -86,7 +86,9 @@ enum iqs7222_reg_key_id { IQS7222_REG_KEY_TOUCH, IQS7222_REG_KEY_DEBOUNCE, IQS7222_REG_KEY_TAP, + IQS7222_REG_KEY_TAP_LEGACY, IQS7222_REG_KEY_AXIAL, + IQS7222_REG_KEY_AXIAL_LEGACY, IQS7222_REG_KEY_WHEEL, IQS7222_REG_KEY_NO_WHEEL, IQS7222_REG_KEY_RESERVED @@ -202,10 +204,68 @@ struct iqs7222_dev_desc { int allow_offset; int event_offset; int comms_offset; + bool legacy_gesture; struct iqs7222_reg_grp_desc reg_grps[IQS7222_NUM_REG_GRPS]; }; static const struct iqs7222_dev_desc iqs7222_devs[] = { + { + .prod_num = IQS7222_PROD_NUM_A, + .fw_major = 1, + .fw_minor = 13, + .sldr_res = U8_MAX * 16, + .touch_link = 1768, + .allow_offset = 9, + .event_offset = 10, + .comms_offset = 12, + .reg_grps = { + [IQS7222_REG_GRP_STAT] = { + .base = IQS7222_SYS_STATUS, + .num_row = 1, + .num_col = 8, + }, + [IQS7222_REG_GRP_CYCLE] = { + .base = 0x8000, + .num_row = 7, + .num_col = 3, + }, + [IQS7222_REG_GRP_GLBL] = { + .base = 0x8700, + .num_row = 1, + .num_col = 3, + }, + [IQS7222_REG_GRP_BTN] = { + .base = 0x9000, + .num_row = 12, + .num_col = 3, + }, + [IQS7222_REG_GRP_CHAN] = { + .base = 0xA000, + .num_row = 12, + .num_col = 6, + }, + [IQS7222_REG_GRP_FILT] = { + .base = 0xAC00, + .num_row = 1, + .num_col = 2, + }, + [IQS7222_REG_GRP_SLDR] = { + .base = 0xB000, + .num_row = 2, + .num_col = 11, + }, + [IQS7222_REG_GRP_GPIO] = { + .base = 0xC000, + .num_row = 1, + .num_col = 3, + }, + [IQS7222_REG_GRP_SYS] = { + .base = IQS7222_SYS_SETUP, + .num_row = 1, + .num_col = 13, + }, + }, + }, { .prod_num = IQS7222_PROD_NUM_A, .fw_major = 1, @@ -215,6 +275,7 @@ static const struct iqs7222_dev_desc iqs7222_devs[] = { .allow_offset = 9, .event_offset = 10, .comms_offset = 12, + .legacy_gesture = true, .reg_grps = { [IQS7222_REG_GRP_STAT] = { .base = IQS7222_SYS_STATUS, @@ -874,6 +935,16 @@ static const struct iqs7222_prop_desc iqs7222_props[] = { .reg_offset = 9, .reg_shift = 8, .reg_width = 8, + .val_pitch = 16, + .label = "maximum gesture time", + }, + { + .name = "azoteq,gesture-max-ms", + .reg_grp = IQS7222_REG_GRP_SLDR, + .reg_key = IQS7222_REG_KEY_TAP_LEGACY, + .reg_offset = 9, + .reg_shift = 8, + .reg_width = 8, .val_pitch = 4, .label = "maximum gesture time", }, @@ -884,6 +955,16 @@ static const struct iqs7222_prop_desc iqs7222_props[] = { .reg_offset = 9, .reg_shift = 3, .reg_width = 5, + .val_pitch = 16, + .label = "minimum gesture time", + }, + { + .name = "azoteq,gesture-min-ms", + .reg_grp = IQS7222_REG_GRP_SLDR, + .reg_key = IQS7222_REG_KEY_TAP_LEGACY, + .reg_offset = 9, + .reg_shift = 3, + .reg_width = 5, .val_pitch = 4, .label = "minimum gesture time", }, @@ -897,6 +978,16 @@ static const struct iqs7222_prop_desc iqs7222_props[] = { .val_pitch = 16, .label = "gesture distance", }, + { + .name = "azoteq,gesture-dist", + .reg_grp = IQS7222_REG_GRP_SLDR, + .reg_key = IQS7222_REG_KEY_AXIAL_LEGACY, + .reg_offset = 10, + .reg_shift = 8, + .reg_width = 8, + .val_pitch = 16, + .label = "gesture distance", + }, { .name = "azoteq,gesture-max-ms", .reg_grp = IQS7222_REG_GRP_SLDR, @@ -904,6 +995,16 @@ static const struct iqs7222_prop_desc iqs7222_props[] = { .reg_offset = 10, .reg_shift = 0, .reg_width = 8, + .val_pitch = 16, + .label = "maximum gesture time", + }, + { + .name = "azoteq,gesture-max-ms", + .reg_grp = IQS7222_REG_GRP_SLDR, + .reg_key = IQS7222_REG_KEY_AXIAL_LEGACY, + .reg_offset = 10, + .reg_shift = 0, + .reg_width = 8, .val_pitch = 4, .label = "maximum gesture time", }, @@ -2133,8 +2234,18 @@ static int iqs7222_parse_sldr(struct iqs7222_private *iqs7222, if (!event_node) continue; + /* + * Depending on the device, gestures are either offered using + * one of two timing resolutions, or are not supported at all. + */ if (reg_offset) reg_key = IQS7222_REG_KEY_RESERVED; + else if (dev_desc->legacy_gesture && + iqs7222_sl_events[i].reg_key == IQS7222_REG_KEY_TAP) + reg_key = IQS7222_REG_KEY_TAP_LEGACY; + else if (dev_desc->legacy_gesture && + iqs7222_sl_events[i].reg_key == IQS7222_REG_KEY_AXIAL) + reg_key = IQS7222_REG_KEY_AXIAL_LEGACY; else reg_key = iqs7222_sl_events[i].reg_key;
IQS7222A revisions 1.13 and later widen the gesture multiplier from x4 ms to x16 ms. Add a means to scale the gesture timings specified in the device tree based on the revision of the device. Fixes: e505edaedcb9 ("Input: add support for Azoteq IQS7222A/B/C") Signed-off-by: Jeff LaBundy <jeff@labundy.com> --- Changes in v2: - Rebased to account for changes earlier in series drivers/input/misc/iqs7222.c | 111 +++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+)