修改raho板子的按键驱动
authorroot <root@dxj.(none)>
Tue, 27 Jul 2010 13:42:39 +0000 (21:42 +0800)
committerroot <root@dxj.(none)>
Tue, 27 Jul 2010 13:42:39 +0000 (21:42 +0800)
arch/arm/mach-rk2818/board-midsdk.c
arch/arm/mach-rk2818/board-phonesdk.c
arch/arm/mach-rk2818/board-raho.c
arch/arm/mach-rk2818/include/mach/board.h
drivers/input/keyboard/rk2818_adckey.c

index c0cc1091eea0ccb7be0cabba7532a6518845437c..7c26c8f3716946fff625326883ef9c42afce3174 100644 (file)
@@ -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)
index ec9a3cacdfbecb8fb73ae3b3d3d8287e214c033d..630857812099cde2f5664592045be02db8ff63cf 100755 (executable)
@@ -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)
index 27b3dd4334cf7e56103bbcea643ca3ae54360138..c9a61d72e0a7c5ecb97c90cff42eb6458ef7d2f7 100644 (file)
@@ -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)
index d9db53fed7c515117eacda87a2dc439aab977f33..398bf579bc308f7f8206b74fea91889bb20cef86 100644 (file)
@@ -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 */
index cbc3f2a43b57da8ac806d2a6076d91ef08177d41..75502669d295db977cdfe46a0c0e8069c7f4a236 100755 (executable)
@@ -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;