static int keypad_scan(void) { u32 col,cval,rval,col_offset; DPRINTK("H3C %x H2C %x \n",readl(S5PV210_GPH3CON),readl(S5PV210_GPH2CON)); DPRINTK("keypad_scan() is called\n"); DPRINTK("row val = %x",readl(key_base + S3C_KEYIFROW)); for (col=0; col < KEYPAD_COLUMNS; col++) { #if defined(CONFIG_MACH_CHIEF) && !defined(CONFIG_TIKAL_MPCS) keypad_scan_activate_column(col) ; #elif defined(CONFIG_TIKAL_MPCS) col_offset=col+2; /*In TIKAL_MPCS H/W Keyad column lines are connected to XEINT[18] & XEINT[19], so we need to make COL_OUT[2] & COL_OUT[3] as high, so this col_offset is needed only for TIKAL_MPCS*/ cval = KEYCOL_DMASK & ~((1 << col_offset) | (1 << (col_offset+8))); // clear that column number and writel(cval, key_base+S3C_KEYIFCOL); #else cval = KEYCOL_DMASK & ~((1 << col) | (1 << (col+8))); writel(cval, key_base+S3C_KEYIFCOL); // make that Normal output. // others shuld be High-Z output. #endif udelay(KEYPAD_DELAY); //rval = ~(readl(key_base+S3C_KEYIFROW)) & ((1<<KEYPAD_ROWS)-1) ; #if defined(CONFIG_MACH_CHIEF) && !defined(CONFIG_TIKAL_MPCS) rval = ~(readl(key_base+S3C_KEYIFROW)) & ((1<<KEYPAD_ROWS)-1) ; #else rval = ~(readl(key_base+S3C_KEYIFROW)) & (0xE /* KBR(0) is not used*/); #endif keymask[col] = rval; } #if defined(CONFIG_MACH_CHIEF) && !defined(CONFIG_TIKAL_MPCS) keypad_scan_activate_column(-1) ; /* All Column Low */ #else writel(KEYIFCOL_CLEAR, key_base+S3C_KEYIFCOL); #endif return 0; }
static int keypad_scan(void) { u32 col,cval,rval; DPRINTK("H3C %x H2C %x \n",readl(S5PV210_GPH3CON),readl(S5PV210_GPH2CON)); DPRINTK("keypad_scan() is called\n"); DPRINTK("row val = %x",readl(key_base + S3C_KEYIFROW)); for (col=0; col < KEYPAD_COLUMNS; col++) { #ifdef CONFIG_MACH_CHIEF keypad_scan_activate_column(col) ; #else cval = KEYCOL_DMASK & ~((1 << col) | (1 << (col+8))); // clear that column number and writel(cval, key_base+S3C_KEYIFCOL); // make that Normal output. // others shuld be High-Z output. #endif udelay(KEYPAD_DELAY); //rval = ~(readl(key_base+S3C_KEYIFROW)) & ((1<<KEYPAD_ROWS)-1) ; #ifdef CONFIG_MACH_CHIEF rval = ~(readl(key_base+S3C_KEYIFROW)) & ((1<<KEYPAD_ROWS)-1) ; #else rval = ~(readl(key_base+S3C_KEYIFROW)) & (0xE /* KBR(0) is not used*/); #endif keymask[col] = rval; } #ifdef CONFIG_MACH_CHIEF keypad_scan_activate_column(-1) ; /* All Column Low */ #else writel(KEYIFCOL_CLEAR, key_base+S3C_KEYIFCOL); #endif return 0; }