static int pmic8058_kp_read_matrix(struct pmic8058_kp *kp, u16 *new_state, u16 *old_state) { int rc, read_rows; u8 scan_val; static u8 rows[] = { 5, 6, 7, 8, 10, 10, 12, 12, 15, 15, 15, 18, 18, 18 }; if (kp->flags & KEYF_FIX_LAST_ROW && (kp->pdata->num_rows != PM8058_MAX_ROWS)) read_rows = rows[kp->pdata->num_rows - KEYP_CTRL_SCAN_ROWS_MIN + 1]; #if 1 //Qualcomm patch for keypad matrix 2*5 else if (kp->pdata->num_rows < PM8058_MIN_ROWS) read_rows = PM8058_MIN_ROWS; #endif else read_rows = kp->pdata->num_rows; if (pm8058_rev(kp->pm_chip) > PM_8058_REV_1p0) pmic8058_chk_sync_read(kp); if (old_state) rc = pmic8058_kp_read_data(kp, old_state, KEYP_OLD_DATA, read_rows); rc = pmic8058_kp_read_data(kp, new_state, KEYP_RECENT_DATA, read_rows); if (pm8058_rev(kp->pm_chip) > PM_8058_REV_1p0) { /* 4 * 32KHz clocks */ udelay((4 * USEC_PER_SEC / KEYP_CLOCK_FREQ) + 1); rc = pmic8058_kp_read(kp, &scan_val, KEYP_SCAN, 1); scan_val &= 0xFE; rc = pmic8058_kp_write_u8(kp, scan_val, KEYP_SCAN); } return rc; }
static int pmic8058_kp_read_matrix(struct pmic8058_kp *kp, u16 *new_state, u16 *old_state) { /* SHARP Add. use 1 Row Line. other key data clear. start */ #ifdef CONFIG_KEYBOARD_SCKEY #if (defined(CONFIG_QWERTY_KEYPAD) || defined(CONFIG_QWERTY2_KEYPAD) || defined(CONFIG_QWERTY3_KEYPAD)) volatile int j,i,k = 0; volatile int bits_changed1; volatile int bits_changed2; volatile int bits_changed_old1; volatile int bits_changed_old2; volatile int board_state; volatile int result; #else int j; #endif /* (defined(CONFIG_QWERTY_KEYPAD) || defined(CONFIG_QWERTY2_KEYPAD) || defined(CONFIG_QWERTY3_KEYPAD)) */ #endif /* #ifdef CONFIG_KEYBOARD_SCKEY */ /* SHARP Add. use 1 Row Line. end */ int rc, read_rows; u8 scan_val; static u8 rows[] = { 5, 6, 7, 8, 10, 10, 12, 12, 15, 15, 15, 18, 18, 18 }; if (kp->flags & KEYF_FIX_LAST_ROW && (kp->pdata->num_rows != PM8058_MAX_ROWS)) read_rows = rows[kp->pdata->num_rows - KEYP_CTRL_SCAN_ROWS_MIN + 1]; else read_rows = kp->pdata->num_rows; if (pm8058_rev(kp->pm_chip) > PM_8058_REV_1p0) pmic8058_chk_sync_read(kp); if (old_state) rc = pmic8058_kp_read_data(kp, old_state, KEYP_OLD_DATA, read_rows); rc = pmic8058_kp_read_data(kp, new_state, KEYP_RECENT_DATA, read_rows); if (pm8058_rev(kp->pm_chip) > PM_8058_REV_1p0) { /* 4 * 32KHz clocks */ udelay((4 * USEC_PER_SEC / KEYP_CLOCK_FREQ) + 1); rc = pmic8058_kp_read(kp, &scan_val, KEYP_SCAN, 1); scan_val &= 0xFE; rc = pmic8058_kp_write_u8(kp, scan_val, KEYP_SCAN); } /* SHARP Add. use 1 Row Line. other key data clear. start */ #ifdef CONFIG_KEYBOARD_SCKEY #if (defined(CONFIG_TENKEY_KEYPAD) || defined(CONFIG_TENKEY2_KEYPAD) || defined(CONFIG_TENKEY3_KEYPAD)) /* depend on target system */ for( j = 6; j <MATRIX_MAX_ROWS; j++) { if (old_state) { old_state[j] = 0xff; } new_state[j] = 0xff; } #elif (defined(CONFIG_QWERTY_KEYPAD) || defined(CONFIG_QWERTY2_KEYPAD) || defined(CONFIG_QWERTY3_KEYPAD)) result = sh_boot_get_hw_revision(); if( (result & 0x0002) == 0 ) { board_state = 0; } else { board_state =1; } SHDBG_KEY_HAL(printk(KERN_DEBUG "[shkey]result:0x%x,board_state:0x%x\n", result ,board_state);) /* depend on target system */ for( j = 10; j <MATRIX_MAX_ROWS; j++)