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