enum iqs7222_reg_grp_id {
        IQS7222_REG_GRP_STAT,
-       IQS7222_REG_GRP_FILT,
        IQS7222_REG_GRP_CYCLE,
        IQS7222_REG_GRP_GLBL,
        IQS7222_REG_GRP_BTN,
        IQS7222_REG_GRP_CHAN,
+       IQS7222_REG_GRP_FILT,
        IQS7222_REG_GRP_SLDR,
        IQS7222_REG_GRP_TPAD,
        IQS7222_REG_GRP_GPIO,
 
 struct iqs7222_reg_grp_desc {
        u16 base;
+       u16 val_len;
        int num_row;
        int num_col;
 };
                        },
                        [IQS7222_REG_GRP_FILT] = {
                                .base = 0xAC00,
+                               .val_len = 3,
                                .num_row = 1,
                                .num_col = 2,
                        },
                        },
                        [IQS7222_REG_GRP_FILT] = {
                                .base = 0xAC00,
+                               .val_len = 3,
                                .num_row = 1,
                                .num_col = 2,
                        },
                        },
                        [IQS7222_REG_GRP_FILT] = {
                                .base = 0xC400,
+                               .val_len = 3,
                                .num_row = 1,
                                .num_col = 2,
                        },
                        },
                        [IQS7222_REG_GRP_FILT] = {
                                .base = 0xC400,
+                               .val_len = 3,
                                .num_row = 1,
                                .num_col = 2,
                        },
                        },
                        [IQS7222_REG_GRP_FILT] = {
                                .base = 0xAA00,
+                               .val_len = 3,
                                .num_row = 1,
                                .num_col = 2,
                        },
                        },
                        [IQS7222_REG_GRP_FILT] = {
                                .base = 0xAA00,
+                               .val_len = 3,
                                .num_row = 1,
                                .num_col = 2,
                        },
                        },
                        [IQS7222_REG_GRP_FILT] = {
                                .base = 0xAE00,
+                               .val_len = 3,
                                .num_row = 1,
                                .num_col = 2,
                        },
                        },
                        [IQS7222_REG_GRP_FILT] = {
                                .base = 0xAE00,
+                               .val_len = 3,
                                .num_row = 1,
                                .num_col = 2,
                        },
                        },
                        [IQS7222_REG_GRP_FILT] = {
                                .base = 0xAE00,
+                               .val_len = 3,
                                .num_row = 1,
                                .num_col = 2,
                        },
 }
 
 static int iqs7222_read_burst(struct iqs7222_private *iqs7222,
-                             u16 reg, void *val, u16 num_val)
+                             u16 reg, void *val, u16 val_len)
 {
        u8 reg_buf[sizeof(__be16)];
        int ret, i;
                {
                        .addr = client->addr,
                        .flags = I2C_M_RD,
-                       .len = num_val * sizeof(__le16),
+                       .len = val_len,
                        .buf = (u8 *)val,
                },
        };
        __le16 val_buf;
        int error;
 
-       error = iqs7222_read_burst(iqs7222, reg, &val_buf, 1);
+       error = iqs7222_read_burst(iqs7222, reg, &val_buf, sizeof(val_buf));
        if (error)
                return error;
 
 }
 
 static int iqs7222_write_burst(struct iqs7222_private *iqs7222,
-                              u16 reg, const void *val, u16 num_val)
+                              u16 reg, const void *val, u16 val_len)
 {
        int reg_len = reg > U8_MAX ? sizeof(reg) : sizeof(u8);
-       int val_len = num_val * sizeof(__le16);
        int msg_len = reg_len + val_len;
        int ret, i;
        struct i2c_client *client = iqs7222->client;
 {
        __le16 val_buf = cpu_to_le16(val);
 
-       return iqs7222_write_burst(iqs7222, reg, &val_buf, 1);
+       return iqs7222_write_burst(iqs7222, reg, &val_buf, sizeof(val_buf));
 }
 
 static int iqs7222_ati_trigger(struct iqs7222_private *iqs7222)
 
        /*
         * Acknowledge reset before writing any registers in case the device
-        * suffers a spurious reset during initialization. Because this step
-        * may change the reserved fields of the second filter beta register,
-        * its cache must be updated.
-        *
-        * Writing the second filter beta register, in turn, may clobber the
-        * system status register. As such, the filter beta register pair is
-        * written first to protect against this hazard.
+        * suffers a spurious reset during initialization.
         */
        if (dir == WRITE) {
-               u16 reg = dev_desc->reg_grps[IQS7222_REG_GRP_FILT].base + 1;
-               u16 filt_setup;
-
                error = iqs7222_write_word(iqs7222, IQS7222_SYS_SETUP,
                                           iqs7222->sys_setup[0] |
                                           IQS7222_SYS_SETUP_ACK_RESET);
                if (error)
                        return error;
-
-               error = iqs7222_read_word(iqs7222, reg, &filt_setup);
-               if (error)
-                       return error;
-
-               iqs7222->filt_setup[1] &= GENMASK(7, 0);
-               iqs7222->filt_setup[1] |= (filt_setup & ~GENMASK(7, 0));
        }
 
        /*
                int num_col = dev_desc->reg_grps[i].num_col;
                u16 reg = dev_desc->reg_grps[i].base;
                __le16 *val_buf;
+               u16 val_len = dev_desc->reg_grps[i].val_len ? : num_col * sizeof(*val_buf);
                u16 *val;
 
                if (!num_col)
                        switch (dir) {
                        case READ:
                                error = iqs7222_read_burst(iqs7222, reg,
-                                                          val_buf, num_col);
+                                                          val_buf, val_len);
                                for (k = 0; k < num_col; k++)
                                        val[k] = le16_to_cpu(val_buf[k]);
                                break;
                                for (k = 0; k < num_col; k++)
                                        val_buf[k] = cpu_to_le16(val[k]);
                                error = iqs7222_write_burst(iqs7222, reg,
-                                                           val_buf, num_col);
+                                                           val_buf, val_len);
                                break;
 
                        default:
        int error, i;
 
        error = iqs7222_read_burst(iqs7222, IQS7222_PROD_NUM, dev_id,
-                                  ARRAY_SIZE(dev_id));
+                                  sizeof(dev_id));
        if (error)
                return error;
 
        __le16 status[IQS7222_MAX_COLS_STAT];
 
        error = iqs7222_read_burst(iqs7222, IQS7222_SYS_STATUS, status,
-                                  num_stat);
+                                  num_stat * sizeof(*status));
        if (error)
                return error;