Input: iqs7222 - add support for IQS7222A v1.13+
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: e505edaedc
("Input: add support for Azoteq IQS7222A/B/C")
Signed-off-by: Jeff LaBundy <jeff@labundy.com>
Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
Link: https://lore.kernel.org/r/Y1SRdbK1Dp2q7O8o@nixie71
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
97384a65c5
commit
8d4c313c03
@ -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",
|
||||
},
|
||||
@ -2115,8 +2216,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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user