Input: adp5589-keys - fix pull mask setting
authorGuido Martínez <guido@vanguardiasur.com.ar>
Wed, 6 May 2015 23:33:40 +0000 (16:33 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 6 May 2015 23:39:28 +0000 (16:39 -0700)
The pull mask is created by looping each row (column) and building an
8-bit integer with the configuration. It is written byte-by-byte, when
we reach the end of the rows (columns) or we're at the 3rd line (which
finishes the first byte, since each pin is 2bits on the mask).

However, this only works if we have at most 8 pins (2 bytes), which is
not the case for the ADP5589. So, write the byte at each boundary (every
4 rows/columns).

Signed-off-by: Guido Martínez <guido@vanguardiasur.com.ar>
Acked-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/keyboard/adp5589-keys.c

index a45267729dfcfde8bcc6b1799b69b53de14f9f58..50bc0a0c598b629dc6d71837a8d69a117203816d 100644 (file)
@@ -726,7 +726,7 @@ static int adp5589_setup(struct adp5589_kpad *kpad)
 
                pull_mask |= val << (2 * (i & 0x3));
 
-               if (i == 3 || i == kpad->var->max_row_num) {
+               if (i % 4 == 3 || i == kpad->var->max_row_num) {
                        ret |= adp5589_write(client, reg(ADP5585_RPULL_CONFIG_A)
                                             + (i >> 2), pull_mask);
                        pull_mask = 0;
@@ -746,7 +746,7 @@ static int adp5589_setup(struct adp5589_kpad *kpad)
 
                pull_mask |= val << (2 * (i & 0x3));
 
-               if (i == 3 || i == kpad->var->max_col_num) {
+               if (i % 4 == 3 || i == kpad->var->max_col_num) {
                        ret |= adp5589_write(client,
                                             reg(ADP5585_RPULL_CONFIG_C) +
                                             (i >> 2), pull_mask);