From: root <root@dxj.(none)>
Date: Tue, 27 Jul 2010 13:42:39 +0000 (+0800)
Subject: 修改raho板子的按键驱动
X-Git-Tag: firefly_0821_release~11333
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=762321e08aa97a2fa400ad5d0b51b22d18b3ae68;p=firefly-linux-kernel-4.4.55.git

修改raho板子的按键驱动
---

diff --git a/arch/arm/mach-rk2818/board-midsdk.c b/arch/arm/mach-rk2818/board-midsdk.c
index c0cc1091eea0..7c26c8f37169 100644
--- a/arch/arm/mach-rk2818/board-midsdk.c
+++ b/arch/arm/mach-rk2818/board-midsdk.c
@@ -585,6 +585,12 @@ static  ADC_keyst gAdcValueTab[] =
 	{0,0}
 };
 
+static unsigned char gInitKeyCode[] = 
+{
+	AD2KEY1,AD2KEY2,AD2KEY3,AD2KEY4,AD2KEY5,AD2KEY6,
+	ENDCALL,KEYSTART,KEY_WAKEUP,
+};
+
 struct adc_key_data rk2818_adc_key = {
     .pin_playon     = RK2818_PIN_PA3,
     .playon_level   = 1,
@@ -593,6 +599,8 @@ struct adc_key_data rk2818_adc_key = {
     .adc_drift      = 50,
     .adc_chn        = 1,
     .adc_key_table  = gAdcValueTab,
+    .initKeyCode    = gInitKeyCode,
+    .adc_key_cnt    = 9,
 };
 
 static void __init machine_rk2818_init_irq(void)
diff --git a/arch/arm/mach-rk2818/board-phonesdk.c b/arch/arm/mach-rk2818/board-phonesdk.c
index ec9a3cacdfbe..630857812099 100755
--- a/arch/arm/mach-rk2818/board-phonesdk.c
+++ b/arch/arm/mach-rk2818/board-phonesdk.c
@@ -591,6 +591,12 @@ static  ADC_keyst gAdcValueTab[] =
 	{0,0}
 };
 
+static unsigned char gInitKeyCode[] = 
+{
+	AD2KEY1,AD2KEY2,AD2KEY3,AD2KEY4,AD2KEY5,AD2KEY6,
+	ENDCALL,KEYSTART,KEY_WAKEUP,
+};
+
 struct adc_key_data rk2818_adc_key = {
     .pin_playon     = RK2818_PIN_PA3,
     .playon_level   = 1,
@@ -599,6 +605,8 @@ struct adc_key_data rk2818_adc_key = {
     .adc_drift      = 50,
     .adc_chn        = 1,
     .adc_key_table  = gAdcValueTab,
+    .initKeyCode    = gInitKeyCode,
+    .adc_key_cnt    = 9,
 };
 
 static void __init machine_rk2818_init_irq(void)
diff --git a/arch/arm/mach-rk2818/board-raho.c b/arch/arm/mach-rk2818/board-raho.c
index 27b3dd4334cf..c9a61d72e0a7 100644
--- a/arch/arm/mach-rk2818/board-raho.c
+++ b/arch/arm/mach-rk2818/board-raho.c
@@ -393,12 +393,12 @@ static void spi_xpt2046_cs_control(u32 command)
 {
 	if(command == 3)	
 	    {
-	    //printk("spi_xpt2046_cs_control cs \n");
+	    printk("spi_xpt2046_cs_control cs \n");
 	    gpio_direction_output(RK2818_PIN_PF5, GPIO_LOW);
 	    }
 	if(command == 0)
 	    {
-	    //printk("spi_xpt2046_cs_control decs \n");
+	    printk("spi_xpt2046_cs_control decs \n");
 	    gpio_direction_output(RK2818_PIN_PF5, GPIO_HIGH);
 	    }
 }
@@ -616,14 +616,22 @@ static  ADC_keyst gAdcValueTab[] =
 	{0,     0}///table end
 };
 
+static unsigned char gInitKeyCode[] = 
+{
+	AD2KEY1,AD2KEY2,AD2KEY3,AD2KEY4,AD2KEY5,AD2KEY6,AD2KEY7,
+	ENDCALL,KEYSTART,KEY_WAKEUP,
+};
+
 struct adc_key_data rk2818_adc_key = {
     .pin_playon     = RK2818_PIN_PA3,
     .playon_level   = 1,
-    .adc_empty      = 927,
+    .adc_empty      = 900,
     .adc_invalid    = 20,
     .adc_drift      = 50,
     .adc_chn        = 1,
     .adc_key_table  = gAdcValueTab,
+    .initKeyCode    = gInitKeyCode,
+    .adc_key_cnt    = 10,
 };
 
 static void __init machine_rk2818_init_irq(void)
diff --git a/arch/arm/mach-rk2818/include/mach/board.h b/arch/arm/mach-rk2818/include/mach/board.h
index d9db53fed7c5..398bf579bc30 100644
--- a/arch/arm/mach-rk2818/include/mach/board.h
+++ b/arch/arm/mach-rk2818/include/mach/board.h
@@ -144,6 +144,8 @@ struct adc_key_data{
     u32 adc_drift;
     u32 adc_chn;
     ADC_keyst * adc_key_table;
+    unsigned char *initKeyCode;
+    u32 adc_key_cnt;
 };
 
 /* common init routines for use by arch/arm/mach-msm/board-*.c */
diff --git a/drivers/input/keyboard/rk2818_adckey.c b/drivers/input/keyboard/rk2818_adckey.c
index cbc3f2a43b57..75502669d295 100755
--- a/drivers/input/keyboard/rk2818_adckey.c
+++ b/drivers/input/keyboard/rk2818_adckey.c
@@ -47,21 +47,13 @@ volatile unsigned int gFlagLongPlay = 0;
 volatile unsigned int gPlayCount = 0;
 
 //key code tab
-#define ADKEYNUM		10
-static unsigned char gInitKeyCode[ADKEYNUM] = 
-{
-	AD2KEY1,AD2KEY2,AD2KEY3,AD2KEY4,AD2KEY5,AD2KEY6,	
-	ENDCALL,KEYSTART,KEY_WAKEUP,
-};
-
-
 struct rk28_adckey 
 {
 	struct semaphore	lock;
 	struct rk28_adc_client	*client;
 	struct input_dev *input_dev;
 	struct timer_list timer;
-	unsigned char keycodes[ADKEYNUM];
+	unsigned char * keycodes;
 	void __iomem *mmio_base;
 };
 
@@ -72,7 +64,7 @@ unsigned int rk28_get_keycode(unsigned int advalue,pADC_keyst ptab)
 	while(ptab->adc_value != 0)
 	{
 		if((advalue > ptab->adc_value - rk2818_adc_key.adc_drift) && (advalue < ptab->adc_value + rk2818_adc_key.adc_drift))
-		return ptab->adc_keycode;
+		    return ptab->adc_keycode;
 		ptab++;
 	}
 
@@ -198,10 +190,11 @@ static void rk28_adkeyscan_timer(unsigned long data)
 
 	//rk28_read_adc(pRk28AdcKey);	
 	adcvalue = gAdcValue[rk2818_adc_key.adc_chn];
-	DBG("=========== adcvalue=0x%x ===========\n",adcvalue);
+	//DBG("=========== adcvalue=0x%x ===========\n",adcvalue);
 
 	if((adcvalue > rk2818_adc_key.adc_empty) || (adcvalue < rk2818_adc_key.adc_invalid))
 	{
+	    //DBG("adcvalue invalid !!!\n");
 		if(gLastCode == 0) {
 			return;
 		}
@@ -272,7 +265,8 @@ static int __devinit rk28_adckey_probe(struct platform_device *pdev)
 		return -ENOMEM;
 	}
 	
-	memcpy(adckey->keycodes, gInitKeyCode, sizeof(adckey->keycodes));
+	//memcpy(adckey->keycodes, gInitKeyCode, sizeof(adckey->keycodes));
+	adckey->keycodes = rk2818_adc_key.initKeyCode;
 	
 	/* Create and register the input driver. */
 	input_dev = input_allocate_device();
@@ -294,9 +288,9 @@ static int __devinit rk28_adckey_probe(struct platform_device *pdev)
 
 	input_dev->keycode = adckey->keycodes;
 	input_dev->keycodesize = sizeof(unsigned char);
-	input_dev->keycodemax = ARRAY_SIZE(gInitKeyCode);
-	for (i = 0; i < ARRAY_SIZE(gInitKeyCode); i++)
-		set_bit(gInitKeyCode[i], input_dev->keybit);
+	input_dev->keycodemax = rk2818_adc_key.adc_key_cnt;
+	for (i = 0; i < rk2818_adc_key.adc_key_cnt; i++)
+		set_bit(rk2818_adc_key.initKeyCode[i], input_dev->keybit);
 	clear_bit(0, input_dev->keybit);
 
 	adckey->input_dev = input_dev;