Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: pmic8xxx-keypad - migrate to regmap APIs

Use the regmap APIs for this driver instead of custom pm8xxx
APIs. This breaks this driver's dependency on the pm8xxx APIs and
allows us to easily port it to other bus protocols in the future.

Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

authored by

Stephen Boyd and committed by
Dmitry Torokhov
a5dde0c7 c7f6ee26

+29 -52
+29 -52
drivers/input/keyboard/pmic8xxx-keypad.c
··· 19 19 #include <linux/bitops.h> 20 20 #include <linux/delay.h> 21 21 #include <linux/mutex.h> 22 + #include <linux/regmap.h> 22 23 23 - #include <linux/mfd/pm8xxx/core.h> 24 24 #include <linux/input/pmic8xxx-keypad.h> 25 25 26 26 #define PM8XXX_MAX_ROWS 18 ··· 86 86 * struct pmic8xxx_kp - internal keypad data structure 87 87 * @pdata - keypad platform data pointer 88 88 * @input - input device pointer for keypad 89 + * @regmap - regmap handle 89 90 * @key_sense_irq - key press/release irq number 90 91 * @key_stuck_irq - key stuck notification irq number 91 92 * @keycodes - array to hold the key codes ··· 98 97 struct pmic8xxx_kp { 99 98 const struct pm8xxx_keypad_platform_data *pdata; 100 99 struct input_dev *input; 100 + struct regmap *regmap; 101 101 int key_sense_irq; 102 102 int key_stuck_irq; 103 103 ··· 110 108 111 109 u8 ctrl_reg; 112 110 }; 113 - 114 - static int pmic8xxx_kp_write_u8(struct pmic8xxx_kp *kp, 115 - u8 data, u16 reg) 116 - { 117 - int rc; 118 - 119 - rc = pm8xxx_writeb(kp->dev->parent, reg, data); 120 - return rc; 121 - } 122 - 123 - static int pmic8xxx_kp_read(struct pmic8xxx_kp *kp, 124 - u8 *data, u16 reg, unsigned num_bytes) 125 - { 126 - int rc; 127 - 128 - rc = pm8xxx_read_buf(kp->dev->parent, reg, data, num_bytes); 129 - return rc; 130 - } 131 - 132 - static int pmic8xxx_kp_read_u8(struct pmic8xxx_kp *kp, 133 - u8 *data, u16 reg) 134 - { 135 - int rc; 136 - 137 - rc = pmic8xxx_kp_read(kp, data, reg, 1); 138 - return rc; 139 - } 140 111 141 112 static u8 pmic8xxx_col_state(struct pmic8xxx_kp *kp, u8 col) 142 113 { ··· 135 160 static int pmic8xxx_chk_sync_read(struct pmic8xxx_kp *kp) 136 161 { 137 162 int rc; 138 - u8 scan_val; 163 + unsigned int scan_val; 139 164 140 - rc = pmic8xxx_kp_read_u8(kp, &scan_val, KEYP_SCAN); 165 + rc = regmap_read(kp->regmap, KEYP_SCAN, &scan_val); 141 166 if (rc < 0) { 142 167 dev_err(kp->dev, "Error reading KEYP_SCAN reg, rc=%d\n", rc); 143 168 return rc; ··· 145 170 146 171 scan_val |= 0x1; 147 172 148 - rc = pmic8xxx_kp_write_u8(kp, scan_val, KEYP_SCAN); 173 + rc = regmap_write(kp->regmap, KEYP_SCAN, scan_val); 149 174 if (rc < 0) { 150 175 dev_err(kp->dev, "Error writing KEYP_SCAN reg, rc=%d\n", rc); 151 176 return rc; ··· 161 186 u16 data_reg, int read_rows) 162 187 { 163 188 int rc, row; 164 - u8 new_data[PM8XXX_MAX_ROWS]; 189 + unsigned int val; 165 190 166 - rc = pmic8xxx_kp_read(kp, new_data, data_reg, read_rows); 167 - if (rc) 168 - return rc; 169 - 170 - for (row = 0; row < kp->pdata->num_rows; row++) { 171 - dev_dbg(kp->dev, "new_data[%d] = %d\n", row, 172 - new_data[row]); 173 - state[row] = pmic8xxx_col_state(kp, new_data[row]); 191 + for (row = 0; row < read_rows; row++) { 192 + rc = regmap_read(kp->regmap, data_reg, &val); 193 + if (rc) 194 + return rc; 195 + dev_dbg(kp->dev, "%d = %d\n", row, val); 196 + state[row] = pmic8xxx_col_state(kp, val); 174 197 } 175 198 176 - return rc; 199 + return 0; 177 200 } 178 201 179 202 static int pmic8xxx_kp_read_matrix(struct pmic8xxx_kp *kp, u16 *new_state, 180 203 u16 *old_state) 181 204 { 182 205 int rc, read_rows; 183 - u8 scan_val; 206 + unsigned int scan_val; 184 207 185 208 if (kp->pdata->num_rows < PM8XXX_MIN_ROWS) 186 209 read_rows = PM8XXX_MIN_ROWS; ··· 208 235 /* 4 * 32KHz clocks */ 209 236 udelay((4 * DIV_ROUND_UP(USEC_PER_SEC, KEYP_CLOCK_FREQ)) + 1); 210 237 211 - rc = pmic8xxx_kp_read_u8(kp, &scan_val, KEYP_SCAN); 238 + rc = regmap_read(kp->regmap, KEYP_SCAN, &scan_val); 212 239 if (rc < 0) { 213 240 dev_err(kp->dev, "Error reading KEYP_SCAN reg, rc=%d\n", rc); 214 241 return rc; 215 242 } 216 243 217 244 scan_val &= 0xFE; 218 - rc = pmic8xxx_kp_write_u8(kp, scan_val, KEYP_SCAN); 245 + rc = regmap_write(kp->regmap, KEYP_SCAN, scan_val); 219 246 if (rc < 0) 220 247 dev_err(kp->dev, "Error writing KEYP_SCAN reg, rc=%d\n", rc); 221 248 ··· 351 378 static irqreturn_t pmic8xxx_kp_irq(int irq, void *data) 352 379 { 353 380 struct pmic8xxx_kp *kp = data; 354 - u8 ctrl_val, events; 381 + unsigned int ctrl_val, events; 355 382 int rc; 356 383 357 - rc = pmic8xxx_kp_read(kp, &ctrl_val, KEYP_CTRL, 1); 384 + rc = regmap_read(kp->regmap, KEYP_CTRL, &ctrl_val); 358 385 if (rc < 0) { 359 386 dev_err(kp->dev, "failed to read keyp_ctrl register\n"); 360 387 return IRQ_HANDLED; ··· 393 420 394 421 ctrl_val |= (bits << KEYP_CTRL_SCAN_ROWS_SHIFT); 395 422 396 - rc = pmic8xxx_kp_write_u8(kp, ctrl_val, KEYP_CTRL); 423 + rc = regmap_write(kp->regmap, KEYP_CTRL, ctrl_val); 397 424 if (rc < 0) { 398 425 dev_err(kp->dev, "Error writing KEYP_CTRL reg, rc=%d\n", rc); 399 426 return rc; ··· 411 438 412 439 scan_val |= (cycles << KEYP_SCAN_ROW_HOLD_SHIFT); 413 440 414 - rc = pmic8xxx_kp_write_u8(kp, scan_val, KEYP_SCAN); 441 + rc = regmap_write(kp->regmap, KEYP_SCAN, scan_val); 415 442 if (rc) 416 443 dev_err(kp->dev, "Error writing KEYP_SCAN reg, rc=%d\n", rc); 417 444 ··· 425 452 426 453 kp->ctrl_reg |= KEYP_CTRL_KEYP_EN; 427 454 428 - rc = pmic8xxx_kp_write_u8(kp, kp->ctrl_reg, KEYP_CTRL); 455 + rc = regmap_write(kp->regmap, KEYP_CTRL, kp->ctrl_reg); 429 456 if (rc < 0) 430 457 dev_err(kp->dev, "Error writing KEYP_CTRL reg, rc=%d\n", rc); 431 458 ··· 438 465 439 466 kp->ctrl_reg &= ~KEYP_CTRL_KEYP_EN; 440 467 441 - rc = pmic8xxx_kp_write_u8(kp, kp->ctrl_reg, KEYP_CTRL); 468 + rc = regmap_write(kp->regmap, KEYP_CTRL, kp->ctrl_reg); 442 469 if (rc < 0) 443 470 return rc; 444 471 ··· 476 503 const struct matrix_keymap_data *keymap_data; 477 504 struct pmic8xxx_kp *kp; 478 505 int rc; 479 - u8 ctrl_val; 506 + unsigned int ctrl_val; 480 507 481 508 if (!pdata || !pdata->num_cols || !pdata->num_rows || 482 509 pdata->num_cols > PM8XXX_MAX_COLS || ··· 519 546 kp = devm_kzalloc(&pdev->dev, sizeof(*kp), GFP_KERNEL); 520 547 if (!kp) 521 548 return -ENOMEM; 549 + 550 + kp->regmap = dev_get_regmap(pdev->dev.parent, NULL); 551 + if (!kp->regmap) 552 + return -ENODEV; 522 553 523 554 platform_set_drvdata(pdev, kp); 524 555 ··· 598 621 return rc; 599 622 } 600 623 601 - rc = pmic8xxx_kp_read_u8(kp, &ctrl_val, KEYP_CTRL); 624 + rc = regmap_read(kp->regmap, KEYP_CTRL, &ctrl_val); 602 625 if (rc < 0) { 603 626 dev_err(&pdev->dev, "failed to read KEYP_CTRL register\n"); 604 627 return rc;