static int pmic8058_kp_read_matrix(struct pmic8058_kp *kp, u16 *new_state, u16 *old_state) { int rc, row, read_rows; u8 new_data[MATRIX_MAX_ROWS]; u8 old_data[MATRIX_MAX_ROWS]; if (kp->flags & KEYF_FIX_LAST_ROW) read_rows = MATRIX_MAX_ROWS; else read_rows = kp->pdata->num_rows; rc = pmic8058_kp_read(kp, new_data, KEYP_RECENT_DATA, read_rows); if (!rc) { pmic8058_chk_read_state(kp, 1); for (row = 0; row < kp->pdata->num_rows; row++) { dev_dbg(kp->dev, "new_data[%d] = %d\n", row, new_data[row]); new_state[row] = pmic8058_col_state(kp, new_data[row]); } } if (old_state) { rc = pmic8058_kp_read(kp, old_data, KEYP_OLD_DATA, read_rows); if (!rc) { pmic8058_chk_read_state(kp, 0); for (row = 0; row < kp->pdata->num_rows; row++) { dev_dbg(kp->dev, "old_data[%d] = %d\n", row, old_data[row]); old_state[row] = pmic8058_col_state(kp, old_data[row]); } } } return rc; }
static int pmic8058_kp_read_data(struct pmic8058_kp *kp, u16 *state, u16 data_reg, int read_rows) { int rc, row; u8 new_data[PM8058_MAX_ROWS]; rc = pmic8058_kp_read(kp, new_data, data_reg, read_rows); if (!rc) { if (pm8058_rev(kp->pm_chip) == PM_8058_REV_1p0) pmic8058_chk_read_state(kp, data_reg); for (row = 0; row < kp->pdata->num_rows; row++) { dev_dbg(kp->dev, "new_data[%d] = %d\n", row, new_data[row]); state[row] = pmic8058_col_state(kp, new_data[row]); } } return rc; }