示例#1
0
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;
}
示例#2
0
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;
}