整理屏,触摸屏,按键驱动
authorroot <root@dxj.(none)>
Tue, 27 Jul 2010 10:35:23 +0000 (18:35 +0800)
committerroot <root@dxj.(none)>
Tue, 27 Jul 2010 10:36:12 +0000 (18:36 +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/i2c/busses/i2c-rk2818.c
drivers/input/keyboard/rk2818_adckey.c
drivers/video/display/screen/lcd_hx8357.c
drivers/video/display/screen/lcd_td043mgea1.c

index 6e0236b7cd8c7fed7204a387b606cc1326fa006d..c0cc1091eea0ccb7be0cabba7532a6518845437c 100644 (file)
@@ -518,6 +518,83 @@ static void rk2818_power_off(void)
        gpio_set_value(POWER_PIN, 0);/*power down*/
 }
 
+void lcd_set_iomux(u8 enable)
+{
+    int ret=-1;
+    
+    if(enable)
+    {
+        rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 0);
+        ret = gpio_request(RK2818_PIN_PA4, NULL); 
+        if(0)//(ret != 0)
+        {
+            gpio_free(RK2818_PIN_PA4);
+            printk(">>>>>> lcd cs gpio_request err \n ");           
+            goto pin_err;
+        }  
+        
+        rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, 0);    
+
+        ret = gpio_request(RK2818_PIN_PE7, NULL); 
+        if(0)//(ret != 0)
+        {
+            gpio_free(RK2818_PIN_PE7);
+            printk(">>>>>> lcd clk gpio_request err \n "); 
+            goto pin_err;
+        }  
+        
+        ret = gpio_request(RK2818_PIN_PE6, NULL); 
+        if(0)//(ret != 0)
+        {
+            gpio_free(RK2818_PIN_PE6);
+            printk(">>>>>> lcd txd gpio_request err \n "); 
+            goto pin_err;
+        }        
+    }
+    else
+    {
+         gpio_free(RK2818_PIN_PA4); 
+         rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 1);
+
+         gpio_free(RK2818_PIN_PE7);   
+         gpio_free(RK2818_PIN_PE6); 
+         rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, 2);
+    }
+    return ;
+pin_err:
+    return ;
+
+}
+
+struct lcd_td043mgea1_data lcd_td043mgea1 = {
+    .pin_txd    = RK2818_PIN_PE6,
+    .pin_clk    = RK2818_PIN_PE7,
+    .pin_cs     = RK2818_PIN_PA4,
+    .screen_set_iomux = lcd_set_iomux,
+};
+
+//     adc      ---> key       
+static  ADC_keyst gAdcValueTab[] = 
+{
+       {95,  AD2KEY1},///VOLUME_DOWN
+       {192, AD2KEY2},///VOLUME_UP
+       {280, AD2KEY3},///MENU
+       {376, AD2KEY4},///HOME
+       {467, AD2KEY5},///BACK
+       {560, AD2KEY6},///CALL
+       {0,0}
+};
+
+struct adc_key_data rk2818_adc_key = {
+    .pin_playon     = RK2818_PIN_PA3,
+    .playon_level   = 1,
+    .adc_empty      = 900,
+    .adc_invalid    = 20,
+    .adc_drift      = 50,
+    .adc_chn        = 1,
+    .adc_key_table  = gAdcValueTab,
+};
+
 static void __init machine_rk2818_init_irq(void)
 {
        rk2818_init_irq();
index 1690ebd58c45416c76a704e3ff3ea73b7f68f748..ec9a3cacdfbecb8fb73ae3b3d3d8287e214c033d 100755 (executable)
@@ -524,6 +524,83 @@ static void rk2818_power_off(void)
        gpio_set_value(POWER_PIN, 0);/*power down*/
 }
 
+void lcd_set_iomux(u8 enable)
+{
+    int ret=-1;
+    
+    if(enable)
+    {
+        rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 0);
+        ret = gpio_request(RK2818_PIN_PA4, NULL); 
+        if(0)//(ret != 0)
+        {
+            gpio_free(RK2818_PIN_PA4);
+            printk(">>>>>> lcd cs gpio_request err \n ");           
+            goto pin_err;
+        }  
+        
+        rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, 0);    
+
+        ret = gpio_request(RK2818_PIN_PE7, NULL); 
+        if(0)//(ret != 0)
+        {
+            gpio_free(RK2818_PIN_PE7);
+            printk(">>>>>> lcd clk gpio_request err \n "); 
+            goto pin_err;
+        }  
+        
+        ret = gpio_request(RK2818_PIN_PE6, NULL); 
+        if(0)//(ret != 0)
+        {
+            gpio_free(RK2818_PIN_PE6);
+            printk(">>>>>> lcd txd gpio_request err \n "); 
+            goto pin_err;
+        }        
+    }
+    else
+    {
+         gpio_free(RK2818_PIN_PA4); 
+         rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 1);
+
+         gpio_free(RK2818_PIN_PE7);   
+         gpio_free(RK2818_PIN_PE6); 
+         rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, 2);
+    }
+    return ;
+pin_err:
+    return ;
+
+}
+
+struct lcd_td043mgea1_data lcd_td043mgea1 = {
+    .pin_txd    = RK2818_PIN_PE6,
+    .pin_clk    = RK2818_PIN_PE7,
+    .pin_cs     = RK2818_PIN_PA4,
+    .screen_set_iomux = lcd_set_iomux,
+};
+
+//     adc      ---> key       
+static  ADC_keyst gAdcValueTab[] = 
+{
+       {95,  AD2KEY1},///VOLUME_DOWN
+       {192, AD2KEY2},///VOLUME_UP
+       {280, AD2KEY3},///MENU
+       {376, AD2KEY4},///HOME
+       {467, AD2KEY5},///BACK
+       {560, AD2KEY6},///CALL
+       {0,0}
+};
+
+struct adc_key_data rk2818_adc_key = {
+    .pin_playon     = RK2818_PIN_PA3,
+    .playon_level   = 1,
+    .adc_empty      = 900,
+    .adc_invalid    = 20,
+    .adc_drift      = 50,
+    .adc_chn        = 1,
+    .adc_key_table  = gAdcValueTab,
+};
+
 static void __init machine_rk2818_init_irq(void)
 {
        rk2818_init_irq();
index c8f43c9e5f7fce3106eb14b44bb8b97475ed8a32..27b3dd4334cf7e56103bbcea643ca3ae54360138 100644 (file)
@@ -548,6 +548,84 @@ static void rk2818_power_off(void)
        gpio_set_value(POWER_PIN, 0);/*power down*/
 }
 
+void lcd_set_iomux(u8 enable)
+{
+    int ret=-1;
+
+    if(enable)
+    {
+        rk2818_mux_api_set(GPIOH6_IQ_SEL_NAME, 0);
+        ret = gpio_request(RK2818_PIN_PH6, NULL); 
+        if(ret != 0)
+        {
+            gpio_free(RK2818_PIN_PH6);
+            printk(">>>>>> lcd cs gpio_request err \n ");           
+            goto pin_err;
+        }  
+        
+        rk2818_mux_api_set(GPIOE_I2C0_SEL_NAME, 1);    
+
+        ret = gpio_request(RK2818_PIN_PE4, NULL); 
+        if(ret != 0)
+        {
+            gpio_free(RK2818_PIN_PE4);
+            printk(">>>>>> lcd clk gpio_request err \n "); 
+            goto pin_err;
+        }  
+        
+        ret = gpio_request(RK2818_PIN_PE5, NULL); 
+        if(ret != 0)
+        {
+            gpio_free(RK2818_PIN_PE5);
+            printk(">>>>>> lcd txd gpio_request err \n "); 
+            goto pin_err;
+        }        
+    }
+    else
+    {
+         gpio_free(RK2818_PIN_PH6); 
+         rk2818_mux_api_set(GPIOH6_IQ_SEL_NAME, 1);
+
+         gpio_free(RK2818_PIN_PE4);   
+         gpio_free(RK2818_PIN_PE5); 
+         rk2818_mux_api_set(GPIOE_I2C0_SEL_NAME, 0);
+    }
+    return ;
+pin_err:
+    return ;
+
+}
+
+struct lcd_td043mgea1_data lcd_td043mgea1 = {
+    .pin_txd    = RK2818_PIN_PE4,
+    .pin_clk    = RK2818_PIN_PE5,
+    .pin_cs     = RK2818_PIN_PH6,
+    .screen_set_iomux = lcd_set_iomux,
+};
+
+//     adc      ---> key       
+static  ADC_keyst gAdcValueTab[] = 
+{
+       {0x5c,  AD2KEY1},///VOLUME_DOWN
+       {0xbf,  AD2KEY2},///VOLUME_UP
+       {0x115, AD2KEY3},///MENU
+       {0x177, AD2KEY4},///HOME
+       {0x1d3, AD2KEY5},///BACK
+       {0x290, AD2KEY6},///CALL
+       {0x230, AD2KEY7},///SEARCH
+       {0,     0}///table end
+};
+
+struct adc_key_data rk2818_adc_key = {
+    .pin_playon     = RK2818_PIN_PA3,
+    .playon_level   = 1,
+    .adc_empty      = 927,
+    .adc_invalid    = 20,
+    .adc_drift      = 50,
+    .adc_chn        = 1,
+    .adc_key_table  = gAdcValueTab,
+};
+
 static void __init machine_rk2818_init_irq(void)
 {
        rk2818_init_irq();
index 8b8d379cedbafe2c70293abb0da426d64b452756..d9db53fed7c515117eacda87a2dc439aab977f33 100644 (file)
@@ -104,6 +104,48 @@ struct pca9554_platform_data {
        int             (*teardown)(struct i2c_client *client,unsigned gpio, unsigned ngpio,void *context);
        char            **names;
 };
+
+/*lcd*/
+struct lcd_td043mgea1_data{
+    u32 pin_txd;
+    u32 pin_clk;
+    u32 pin_cs;
+    void (*screen_set_iomux)(u8 enable);
+};
+
+//ROCKCHIP AD KEY CODE ,for demo board
+//      key            --->    EV      
+#define AD2KEY1                 114   ///VOLUME_DOWN
+#define AD2KEY2                 115   ///VOLUME_UP
+#define AD2KEY3                 59    ///MENU
+#define AD2KEY4                 102   ///HOME
+#define AD2KEY5                 158   ///BACK
+#define AD2KEY6                 61    ///CALL
+#define AD2KEY7                 127   ///SEARCH
+#define ENDCALL                                        62
+#define        KEYSTART                                28                      //ENTER
+#define KEYMENU                                        AD2KEY6         ///CALL
+#define        KEY_PLAY_SHORT_PRESS    KEYSTART        //code for short press the play key
+#define        KEY_PLAY_LONG_PRESS             ENDCALL         //code for long press the play key
+
+//ADC Registers
+typedef  struct tagADC_keyst
+{
+       unsigned int adc_value;
+       unsigned int adc_keycode;
+}ADC_keyst,*pADC_keyst;
+
+/*ad key*/
+struct adc_key_data{
+    u32 pin_playon;
+    u32 playon_level;
+    u32 adc_empty;
+    u32 adc_invalid;
+    u32 adc_drift;
+    u32 adc_chn;
+    ADC_keyst * adc_key_table;
+};
+
 /* common init routines for use by arch/arm/mach-msm/board-*.c */
 void __init rk2818_add_devices(void);
 void __init rk2818_map_common_io(void);
index 29a7f7c896a43b9d2eeb70e8751a0d60ff8ba3b8..cf79536d3494709b5f83e761e9fc6c5ba73723d5 100755 (executable)
@@ -465,8 +465,9 @@ static int rk2818_i2c_xfer(struct i2c_adapter *adap,
        }
        else
        {
-               dev_info(i2c->dev, "Scl_rate(%uKhz) is failed to change[0 -- 400Khz],  current rate(%luKhz)\n",
-                               msgs[0].scl_rate/1000, i2c->scl_rate/1000);
+               //dev_info(i2c->dev, "Scl_rate(%uKhz) is failed to change[0 -- 400Khz],  current rate(%luKhz)\n",
+               //              msgs[0].scl_rate/1000, i2c->scl_rate/1000);
+               i2c->scl_rate = 400000;
        }
 
        ret = rk2818_i2c_init_hw(i2c);
index 33c87fd8da983fa9081bcf25e5b04297b0d2bc49..cbc3f2a43b57da8ac806d2a6076d91ef08177d41 100755 (executable)
 #include <asm/mach/map.h>
 #include <mach/gpio.h>
 #include <mach/adc.h>
+#include <mach/board.h>
 
-#if 0 
+extern struct adc_key_data rk2818_adc_key;
+
+#if 0
 #define DBG(x...)   printk(x)
 #else
 #define DBG(x...)
 #endif
 
-//ROCKCHIP AD KEY CODE ,for demo board
-//      key            --->    EV      
-#define AD2KEY1                 114   ///VOLUME_DOWN
-#define AD2KEY2                 115   ///VOLUME_UP
-#define AD2KEY3                 59    ///MENU
-#define AD2KEY4                 102   ///HOME
-#define AD2KEY5                 158   ///BACK
-#define AD2KEY6                 61    ///CALL
-
-#define ENDCALL                                        62
-#define        KEYSTART                                28                      //ENTER
-#define KEYMENU                                        AD2KEY6         ///CALL
-#ifndef CONFIG_MACH_RK2818PHONE
-#define KEY_PLAYON_PIN                 RK2818_PIN_PE1
-#else
-#define KEY_PLAYON_PIN                 RK2818_PIN_PA3
-#endif
-#define        KEY_PLAY_SHORT_PRESS    KEYSTART        //code for short press the play key
-#define        KEY_PLAY_LONG_PRESS             ENDCALL         //code for long press the play key
-
-
-#define Valuedrift             50
-#ifndef CONFIG_MACH_RK2818PHONE
-#define ADEmpty                        1000
-#else
-#define ADEmpty                        900
-#endif
-#define ADInvalid              20
-#define ADKEYNUM               10
-
-#define ADKEYCH                        1       //ADͨµÀ
-#ifndef CONFIG_MACH_RK2818PHONE
-#define KEYPLAY_ON             0       //°´¼ü½ÓͨʱµÄµçƽֵ
-#else
-#define KEYPLAY_ON             1       //°´¼ü½ÓͨʱµÄµçƽֵ
-#endif
 #define KEY_PHYS_NAME  "rk2818_adckey/input0"
 
 volatile int gADSampleTimes = 0;
 volatile int gStatePlaykey = 0;
-
 volatile unsigned int gCodeCount = 0;
 volatile unsigned int gThisCode = 0;
 volatile unsigned int gLastCode = 0;
 volatile unsigned int gFlagShortPlay = 0;
 volatile unsigned int gFlagLongPlay = 0;
 volatile unsigned int gPlayCount = 0;
-//ADC Registers
-typedef  struct tagADC_keyst
-{
-       unsigned int adc_value;
-       unsigned int adc_keycode;
-}ADC_keyst,*pADC_keyst;
-
-#ifndef CONFIG_MACH_RK2818PHONE
-//     adc      ---> key       
-static  ADC_keyst gAdcValueTab[] = 
-{
-       {95,  AD2KEY1},
-       {249, AD2KEY2},
-       {406, AD2KEY3},
-       {561, AD2KEY4},
-       {726, AD2KEY5},
-       {899, AD2KEY6},
-       {ADEmpty,0}
-};
-#else
-static  ADC_keyst gAdcValueTab[] = 
-{
-       {95,  AD2KEY1},
-       {192, AD2KEY2},
-       {280, AD2KEY3},
-       {376, AD2KEY4},
-       {467, AD2KEY5},
-       {560, AD2KEY6},
-       {ADEmpty,0}
-};
-#endif
 
 //key code tab
+#define ADKEYNUM               10
 static unsigned char gInitKeyCode[ADKEYNUM] = 
 {
        AD2KEY1,AD2KEY2,AD2KEY3,AD2KEY4,AD2KEY5,AD2KEY6,        
@@ -133,9 +69,9 @@ struct rk28_adckey *pRk28AdcKey;
 
 unsigned int rk28_get_keycode(unsigned int advalue,pADC_keyst ptab)
 {      
-       while(ptab->adc_value != ADEmpty)
+       while(ptab->adc_value != 0)
        {
-               if((advalue > ptab->adc_value - Valuedrift) && (advalue < ptab->adc_value + Valuedrift))
+               if((advalue > ptab->adc_value - rk2818_adc_key.adc_drift) && (advalue < ptab->adc_value + rk2818_adc_key.adc_drift))
                return ptab->adc_keycode;
                ptab++;
        }
@@ -143,7 +79,6 @@ unsigned int rk28_get_keycode(unsigned int advalue,pADC_keyst ptab)
        return 0;
 }
 
-#if 1
 static irqreturn_t rk28_playkey_irq(int irq, void *handle)
 { 
        
@@ -153,7 +88,6 @@ static irqreturn_t rk28_playkey_irq(int irq, void *handle)
        return IRQ_HANDLED;
 }
 
-#endif
 void rk28_send_wakeup_key( void ) 
 {
     input_report_key(pRk28AdcKey->input_dev,KEY_WAKEUP,1);
@@ -207,7 +141,7 @@ static void rk28_adkeyscan_timer(unsigned long data)
        add_timer(&pRk28AdcKey->timer);
 
        /*handle long press of play key*/
-       if(gpio_get_value(KEY_PLAYON_PIN) == KEYPLAY_ON) 
+       if(gpio_get_value(rk2818_adc_key.pin_playon) == rk2818_adc_key.playon_level)
        {
                if(++gPlayCount > 20000)
                        gPlayCount = 101;
@@ -252,7 +186,6 @@ static void rk28_adkeyscan_timer(unsigned long data)
                gFlagLongPlay = 0;
                gPlayCount = 0;
        }
-       
 
        /*handle long press of adc key*/
        if (gADSampleTimes < 4)
@@ -264,10 +197,10 @@ static void rk28_adkeyscan_timer(unsigned long data)
        gADSampleTimes = 0;
 
        //rk28_read_adc(pRk28AdcKey);   
-       adcvalue = gAdcValue[ADKEYCH];
+       adcvalue = gAdcValue[rk2818_adc_key.adc_chn];
        DBG("=========== adcvalue=0x%x ===========\n",adcvalue);
 
-       if((adcvalue > ADEmpty) || (adcvalue < ADInvalid))
+       if((adcvalue > rk2818_adc_key.adc_empty) || (adcvalue < rk2818_adc_key.adc_invalid))
        {
                if(gLastCode == 0) {
                        return;
@@ -298,7 +231,7 @@ static void rk28_adkeyscan_timer(unsigned long data)
        
        //DBG("adcvalue=0x%x\n",adcvalue);
        
-       code=rk28_get_keycode(adcvalue,gAdcValueTab);
+       code=rk28_get_keycode(adcvalue,rk2818_adc_key.adc_key_table);
        if(code)
        {
                if(code == KEYMENU)
@@ -382,37 +315,39 @@ static int __devinit rk28_adckey_probe(struct platform_device *pdev)
                dev_err(&pdev->dev, "failed to register input device\n");
                goto failed_free_dev;
        }
-
-       error = gpio_request(KEY_PLAYON_PIN, "play key gpio");
+       
+       error = gpio_request(rk2818_adc_key.pin_playon, "play key gpio");
        if (error) {
                dev_err(&pdev->dev, "failed to request play key gpio\n");
                goto free_gpio;
        }
-#if KEYPLAY_ON 
-       gpio_pull_updown(KEY_PLAYON_PIN,GPIOPullDown);
-       error = request_irq(gpio_to_irq(KEY_PLAYON_PIN),rk28_playkey_irq,IRQF_TRIGGER_RISING,NULL,NULL);
-       if(error)
-       {
-               printk("unable to request play key irq\n");
-               goto free_gpio_irq;
-       }       
-#else
-       gpio_pull_updown(KEY_PLAYON_PIN,GPIOPullUp);
-       error = request_irq(gpio_to_irq(KEY_PLAYON_PIN),rk28_playkey_irq,IRQF_TRIGGER_FALLING,NULL,NULL);  
-       if(error)
-       {
-               printk("unable to request play key irq\n");
-               goto free_gpio_irq;
-       }
-#endif
-
-       enable_irq_wake(gpio_to_irq(KEY_PLAYON_PIN)); // so play/wakeup key can wake up system
-
+    if(rk2818_adc_key.playon_level)
+    {
+       gpio_pull_updown(rk2818_adc_key.pin_playon,GPIOPullDown);
+       error = request_irq(gpio_to_irq(rk2818_adc_key.pin_playon),rk28_playkey_irq,IRQF_TRIGGER_RISING,NULL,NULL);
+       if(error)
+       {
+               printk("unable to request play key irq\n");
+               goto free_gpio_irq;
+       }       
+    }
+    else
+    {
+       gpio_pull_updown(rk2818_adc_key.pin_playon,GPIOPullUp);
+       error = request_irq(gpio_to_irq(rk2818_adc_key.pin_playon),rk28_playkey_irq,IRQF_TRIGGER_FALLING,NULL,NULL);  
+       if(error)
+       {
+               printk("unable to request play key irq\n");
+               goto free_gpio_irq;
+       }
+    }
+
+       enable_irq_wake(gpio_to_irq(rk2818_adc_key.pin_playon)); // so play/wakeup key can wake up system
 #if 0
-       error = gpio_direction_input(KEY_PLAYON_PIN);
+       error = gpio_direction_input(rk2818_adc_key.pin_playon);
        if (error) 
        {
-               printk("failed to set gpio KEY_PLAYON_PIN input\n");
+               printk("failed to set gpio rk2818_adc_key.pin_playon input\n");
                goto free_gpio_irq;
        }
 #endif
@@ -423,9 +358,9 @@ static int __devinit rk28_adckey_probe(struct platform_device *pdev)
        return 0;
        
 free_gpio_irq:
-       free_irq(gpio_to_irq(KEY_PLAYON_PIN),NULL);
+       free_irq(gpio_to_irq(rk2818_adc_key.pin_playon),NULL);
 free_gpio:     
-       gpio_free(KEY_PLAYON_PIN);
+       gpio_free(rk2818_adc_key.pin_playon);
 failed_free_dev:
        platform_set_drvdata(pdev, NULL);
        input_free_device(input_dev);
@@ -442,9 +377,8 @@ static int __devexit rk28_adckey_remove(struct platform_device *pdev)
        input_free_device(adckey->input_dev);
        platform_set_drvdata(pdev, NULL);
        kfree(adckey);
-       free_irq(gpio_to_irq(KEY_PLAYON_PIN),NULL);
-       gpio_free(KEY_PLAYON_PIN);
-       
+       free_irq(gpio_to_irq(rk2818_adc_key.pin_playon),NULL);
+       gpio_free(rk2818_adc_key.pin_playon);
        return 0;
 }
 
index 531119d7ea4b60f30f69a4ecee98567f2712a055..921521f31e26d897537289dd6eb6b067c1dcf12c 100644 (file)
@@ -4,7 +4,9 @@
 #include <mach/gpio.h>
 #include <mach/iomux.h>
 #include "screen.h"
+#include <mach/board.h>
 
+extern struct lcd_td043mgea1_data lcd_td043mgea1;
 
 /* Base */
 #define OUT_TYPE               SCREEN_RGB
@@ -30,6 +32,21 @@ int init(void);
 int standby(u8 enable);
 void set_lcd_info(struct rk28fb_screen *screen);
 
+#define TXD_PORT        lcd_td043mgea1.pin_txd
+#define CLK_PORT        lcd_td043mgea1.pin_clk
+#define CS_PORT         lcd_td043mgea1.pin_cs
+
+#define CS_OUT()        gpio_direction_output(CS_PORT, 0)
+#define CS_SET()        gpio_set_value(CS_PORT, GPIO_HIGH)
+#define CS_CLR()        gpio_set_value(CS_PORT, GPIO_LOW)
+#define CLK_OUT()       gpio_direction_output(CLK_PORT, 0) 
+#define CLK_SET()       gpio_set_value(CLK_PORT, GPIO_HIGH)
+#define CLK_CLR()       gpio_set_value(CLK_PORT, GPIO_LOW)
+#define TXD_OUT()       gpio_direction_output(TXD_PORT, 0) 
+#define TXD_SET()       gpio_set_value(TXD_PORT, GPIO_HIGH)
+#define TXD_CLR()       gpio_set_value(TXD_PORT, GPIO_LOW)
+
+#if 0
 static void screen_set_iomux(u8 enable)
 {
     int ret=-1;
@@ -76,56 +93,10 @@ pin_err:
     return ;
 
 }
-void set_lcd_info(struct rk28fb_screen *screen)
-{
-       printk("lcd_hx8357 set_lcd_info \n"); 
-    /* screen type & face */
-    screen->type = OUT_TYPE;
-    screen->face = OUT_FACE;
-    /* Screen size */
-    screen->x_res = H_VD;
-    screen->y_res = V_VD;
-
-    /* Timing */
-    screen->pixclock = OUT_CLK;
-       screen->left_margin = H_BP;             /*>2*/ 
-       screen->right_margin = H_FP;    /*>2*/ 
-       screen->hsync_len = H_PW;               /*>2*/ //***all > 326, 4<PW+BP<15, 
-       screen->upper_margin = V_BP;    /*>2*/ 
-       screen->lower_margin = V_FP;    /*>2*/ 
-       screen->vsync_len = V_PW;               /*>6*/ 
-
-       /* Pin polarity */
-       screen->pin_hsync = 0; 
-       screen->pin_vsync = 0; 
-       screen->pin_den = 0;
-       screen->pin_dclk = DCLK_POL;
-
-       /* Swap rule */
-    screen->swap_rb = SWAP_RB;
-    screen->swap_rg = 0;
-    screen->swap_gb = 0;
-    screen->swap_delta = 0;
-    screen->swap_dumy = 0;
-
-    /* Operation function*/
-    screen->init = init;
-    screen->standby = standby;
-}
+#endif
 
 void spi_screenreg_set(u32 Addr, u32 Data)
 {
-#define CS_OUT()        gpio_direction_output(RK2818_PIN_PH6, GPIO_OUT)
-#define CS_SET()        gpio_set_value(RK2818_PIN_PH6, GPIO_HIGH)
-#define CS_CLR()        gpio_set_value(RK2818_PIN_PH6, GPIO_LOW)
-#define CLK_OUT()       gpio_direction_output(RK2818_PIN_PE5, GPIO_OUT)  //I2C0_SCL
-#define CLK_SET()       gpio_set_value(RK2818_PIN_PE5, GPIO_HIGH)
-#define CLK_CLR()       gpio_set_value(RK2818_PIN_PE5, GPIO_LOW)
-#define TXD_OUT()       gpio_direction_output(RK2818_PIN_PE4, GPIO_OUT)  //I2C0_SDA
-#define TXD_SET()       gpio_set_value(RK2818_PIN_PE4, GPIO_HIGH)
-#define TXD_CLR()       gpio_set_value(RK2818_PIN_PE4, GPIO_LOW)
-
 #define DRVDelayUs(i)   udelay(i*2)
 
     u32 i;
@@ -167,24 +138,6 @@ void spi_screenreg_set(u32 Addr, u32 Data)
        DRVDelayUs(2);
        CS_CLR(); 
        
-#if 0 
-       TXD_CLR();  //write
-
-       // \u6a21\u62dfCLK
-    CLK_CLR();
-    DRVDelayUs(2);
-    CLK_SET();
-    DRVDelayUs(2);
-
-       TXD_SET();  //highz
-
-       // \u6a21\u62dfCLK
-    CLK_CLR();
-    DRVDelayUs(2);
-    CLK_SET();
-    DRVDelayUs(2);
-#endif 
-
        control_bit = 0x72<<8; 
        Data = (control_bit | Data); 
        //printk("data is 0x%x \n", Data); 
@@ -206,16 +159,51 @@ void spi_screenreg_set(u32 Addr, u32 Data)
        CLK_CLR();
        TXD_CLR();
        DRVDelayUs(2);
-
 }
 
+void set_lcd_info(struct rk28fb_screen *screen)
+{
+       //printk("lcd_hx8357 set_lcd_info \n"); 
+    /* screen type & face */
+    screen->type = OUT_TYPE;
+    screen->face = OUT_FACE;
+    /* Screen size */
+    screen->x_res = H_VD;
+    screen->y_res = V_VD;
+
+    /* Timing */
+    screen->pixclock = OUT_CLK;
+       screen->left_margin = H_BP;             /*>2*/ 
+       screen->right_margin = H_FP;    /*>2*/ 
+       screen->hsync_len = H_PW;               /*>2*/ //***all > 326, 4<PW+BP<15, 
+       screen->upper_margin = V_BP;    /*>2*/ 
+       screen->lower_margin = V_FP;    /*>2*/ 
+       screen->vsync_len = V_PW;               /*>6*/ 
+
+       /* Pin polarity */
+       screen->pin_hsync = 0; 
+       screen->pin_vsync = 0; 
+       screen->pin_den = 0;
+       screen->pin_dclk = DCLK_POL;
 
+       /* Swap rule */
+    screen->swap_rb = SWAP_RB;
+    screen->swap_rg = 0;
+    screen->swap_gb = 0;
+    screen->swap_delta = 0;
+    screen->swap_dumy = 0;
+
+    /* Operation function*/
+    screen->init = init;
+    screen->standby = standby;
+}
 
 int init(void)
 { 
 
-       printk("lcd_hx8357 init \n"); 
-       screen_set_iomux(1);
+       //printk("lcd_hx8357 init \n"); 
+       lcd_td043mgea1.screen_set_iomux(1);
 
 #if 0                                                                                  //***Õâ¾ä´úÂëÊDz»ÊÇд´íÁË 
     spi_screenreg_set(0x02, 0x07);
@@ -341,7 +329,7 @@ int init(void)
        spi_screenreg_set(0x2d, 0x1f); 
        spi_screenreg_set(0xe8, 0x90); 
 #endif 
-       screen_set_iomux(0);
+       lcd_td043mgea1.screen_set_iomux(0);
 
     return 0;
 }
@@ -349,9 +337,9 @@ int init(void)
 int standby(u8 enable) //***enable =1 means suspend, 0 means resume 
 {
        
-     screen_set_iomux(1);
+     lcd_td043mgea1.screen_set_iomux(1);
        if(enable) {
-               printk("---------screen suspend--------------\n");
+               //printk("---------screen suspend--------------\n");
                #if 0 
                spi_screenreg_set(0x03, 0xde); 
                #else 
@@ -359,7 +347,7 @@ int standby(u8 enable)      //***enable =1 means suspend, 0 means resume
                spi_screenreg_set(0x19, 0x00); 
                #endif 
        } else { 
-               printk("---------screen resume--------------\n ");
+               //printk("---------screen resume--------------\n ");
                #if 0 
                spi_screenreg_set(0x03, 0x5f); 
                #else 
@@ -370,7 +358,7 @@ int standby(u8 enable)      //***enable =1 means suspend, 0 means resume
                #endif 
        }
 
-   screen_set_iomux(0);
+   lcd_td043mgea1.screen_set_iomux(0);
     return 0;
 }
 
index 221ec30db12c655068bd8a5b97b4b6c36789b3de..e3e152cd580082c80f9fea8dc80b93363e7cc8bd 100755 (executable)
@@ -4,6 +4,9 @@
 #include <mach/gpio.h>
 #include <mach/iomux.h>
 #include "screen.h"
+#include <mach/board.h>
+
+extern struct lcd_td043mgea1_data lcd_td043mgea1;
 
 /* Base */
 #define OUT_TYPE               SCREEN_RGB
 #define DCLK_POL               0
 #define SWAP_RB                        0
 
-
-#if defined (CONFIG_MACH_RK2818PHONE)  
-
-#define TXD_PORT        RK2818_PIN_PE6
-#define CLK_PORT        RK2818_PIN_PE7
-#define CS_PORT         RK2818_PIN_PA4
-
-#define CS_OUT()        gpio_direction_output(CS_PORT, 0)
-#define CS_SET()        gpio_set_value(CS_PORT, GPIO_HIGH)
-#define CS_CLR()        gpio_set_value(CS_PORT, GPIO_LOW)
-#define CLK_OUT()       gpio_direction_output(CLK_PORT, 0)  //I2C1_SCL
-#define CLK_SET()       gpio_set_value(CLK_PORT, GPIO_HIGH)
-#define CLK_CLR()       gpio_set_value(CLK_PORT, GPIO_LOW)
-#define TXD_OUT()       gpio_direction_output(TXD_PORT, 0)  //I2C1_SDA
-#define TXD_SET()       gpio_set_value(TXD_PORT, GPIO_HIGH)
-#define TXD_CLR()       gpio_set_value(TXD_PORT, GPIO_LOW)
-
-#elif defined(CONFIG_MACH_RAHO)
-
-#define TXD_PORT        RK2818_PIN_PE4
-#define CLK_PORT        RK2818_PIN_PE5
-#define CS_PORT         RK2818_PIN_PH6
+#define TXD_PORT        lcd_td043mgea1.pin_txd
+#define CLK_PORT        lcd_td043mgea1.pin_clk
+#define CS_PORT         lcd_td043mgea1.pin_cs
 
 #define CS_OUT()        gpio_direction_output(CS_PORT, 0)
 #define CS_SET()        gpio_set_value(CS_PORT, GPIO_HIGH)
 #define CS_CLR()        gpio_set_value(CS_PORT, GPIO_LOW)
-#define CLK_OUT()       gpio_direction_output(CLK_PORT, 0)  //I2C1_SCL
+#define CLK_OUT()       gpio_direction_output(CLK_PORT, 0) 
 #define CLK_SET()       gpio_set_value(CLK_PORT, GPIO_HIGH)
 #define CLK_CLR()       gpio_set_value(CLK_PORT, GPIO_LOW)
-#define TXD_OUT()       gpio_direction_output(TXD_PORT, 0)  //I2C1_SDA
+#define TXD_OUT()       gpio_direction_output(TXD_PORT, 0) 
 #define TXD_SET()       gpio_set_value(TXD_PORT, GPIO_HIGH)
 #define TXD_CLR()       gpio_set_value(TXD_PORT, GPIO_LOW)
 
-#endif
-
 int init(void);
 int standby(u8 enable);
 
-void screen_set_iomux(u8 enable)
-{
-    int ret=-1;
-#if defined (CONFIG_MACH_RK2818PHONE)    
-    if(enable)
-    {
-        rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 0);
-        ret = gpio_request(RK2818_PIN_PA4, NULL); 
-        if(0)//(ret != 0)
-        {
-            gpio_free(RK2818_PIN_PA4);
-            printk(">>>>>> lcd cs gpio_request err \n ");           
-            goto pin_err;
-        }  
-        
-        rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, 0);    
-
-        ret = gpio_request(TXD_PORT, NULL); 
-        if(0)//(ret != 0)
-        {
-            gpio_free(RK2818_PIN_PE7);
-            printk(">>>>>> lcd clk gpio_request err \n "); 
-            goto pin_err;
-        }  
-        
-        ret = gpio_request(RK2818_PIN_PE6, NULL); 
-        if(0)//(ret != 0)
-        {
-            gpio_free(RK2818_PIN_PE6);
-            printk(">>>>>> lcd txd gpio_request err \n "); 
-            goto pin_err;
-        }        
-    }
-    else
-    {
-         gpio_free(RK2818_PIN_PA4); 
-         rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 1);
-
-         gpio_free(RK2818_PIN_PE7);   
-         gpio_free(RK2818_PIN_PE6); 
-         rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, 2);
-    }
-#elif defined(CONFIG_MACH_RAHO)    
-    if(enable)
-    {
-        rk2818_mux_api_set(GPIOH6_IQ_SEL_NAME, 0);
-        ret = gpio_request(CS_PORT, NULL); 
-        if(ret != 0)
-        {
-            gpio_free(CS_PORT);
-            printk(">>>>>> lcd cs gpio_request err \n ");           
-            goto pin_err;
-        }  
-        
-        rk2818_mux_api_set(GPIOE_I2C0_SEL_NAME, 1);    
-
-        ret = gpio_request(TXD_PORT, NULL); 
-        if(ret != 0)
-        {
-            gpio_free(TXD_PORT);
-            printk(">>>>>> lcd clk gpio_request err \n "); 
-            goto pin_err;
-        }  
-        
-        ret = gpio_request(CLK_PORT, NULL); 
-        if(ret != 0)
-        {
-            gpio_free(CLK_PORT);
-            printk(">>>>>> lcd txd gpio_request err \n "); 
-            goto pin_err;
-        }        
-    }
-    else
-    {
-         gpio_free(CS_PORT); 
-         rk2818_mux_api_set(GPIOH6_IQ_SEL_NAME, 1);
-
-         gpio_free(TXD_PORT);   
-         gpio_free(CLK_PORT); 
-         rk2818_mux_api_set(GPIOE_I2C0_SEL_NAME, 0);
-    }
-#endif
-    return ;
-pin_err:
-    return ;
-
-}
-
 void set_lcd_info(struct rk28fb_screen *screen)
 {
     /* screen type & face */
@@ -263,7 +157,7 @@ void spi_screenreg_set(u32 Addr, u32 Data)
 
 int init(void)
 {    
-    screen_set_iomux(1);
+    lcd_td043mgea1.screen_set_iomux(1);
 
     spi_screenreg_set(0x02, 0x07);
     spi_screenreg_set(0x03, 0x5f);
@@ -301,19 +195,19 @@ int init(void)
     spi_screenreg_set(0x21, 0xF0);
     spi_screenreg_set(0x22, 0x09);
 
-    screen_set_iomux(0);
+    lcd_td043mgea1.screen_set_iomux(0);
     return 0;
 }
 
 int standby(u8 enable)
 {       
-    screen_set_iomux(1);
+    lcd_td043mgea1.screen_set_iomux(1);
        if(enable) {
                spi_screenreg_set(0x03, 0xde);
        } else {
                spi_screenreg_set(0x03, 0x5f);
        }
-    screen_set_iomux(0);
+    lcd_td043mgea1.screen_set_iomux(0);
     return 0;
 }