From c015f543bc978135e3a904d09a2c26d22a4a9555 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 27 Jul 2010 18:35:23 +0800 Subject: [PATCH] =?utf8?q?=E6=95=B4=E7=90=86=E5=B1=8F=EF=BC=8C=E8=A7=A6?= =?utf8?q?=E6=91=B8=E5=B1=8F=EF=BC=8C=E6=8C=89=E9=94=AE=E9=A9=B1=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- arch/arm/mach-rk2818/board-midsdk.c | 77 +++++++++ arch/arm/mach-rk2818/board-phonesdk.c | 77 +++++++++ arch/arm/mach-rk2818/board-raho.c | 78 +++++++++ arch/arm/mach-rk2818/include/mach/board.h | 42 +++++ drivers/i2c/busses/i2c-rk2818.c | 5 +- drivers/input/keyboard/rk2818_adckey.c | 148 +++++------------- drivers/video/display/screen/lcd_hx8357.c | 134 ++++++++-------- drivers/video/display/screen/lcd_td043mgea1.c | 130 ++------------- 8 files changed, 391 insertions(+), 300 deletions(-) diff --git a/arch/arm/mach-rk2818/board-midsdk.c b/arch/arm/mach-rk2818/board-midsdk.c index 6e0236b7cd8c..c0cc1091eea0 100644 --- a/arch/arm/mach-rk2818/board-midsdk.c +++ b/arch/arm/mach-rk2818/board-midsdk.c @@ -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(); diff --git a/arch/arm/mach-rk2818/board-phonesdk.c b/arch/arm/mach-rk2818/board-phonesdk.c index 1690ebd58c45..ec9a3cacdfbe 100755 --- a/arch/arm/mach-rk2818/board-phonesdk.c +++ b/arch/arm/mach-rk2818/board-phonesdk.c @@ -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(); diff --git a/arch/arm/mach-rk2818/board-raho.c b/arch/arm/mach-rk2818/board-raho.c index c8f43c9e5f7f..27b3dd4334cf 100644 --- a/arch/arm/mach-rk2818/board-raho.c +++ b/arch/arm/mach-rk2818/board-raho.c @@ -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(); diff --git a/arch/arm/mach-rk2818/include/mach/board.h b/arch/arm/mach-rk2818/include/mach/board.h index 8b8d379cedba..d9db53fed7c5 100644 --- a/arch/arm/mach-rk2818/include/mach/board.h +++ b/arch/arm/mach-rk2818/include/mach/board.h @@ -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); diff --git a/drivers/i2c/busses/i2c-rk2818.c b/drivers/i2c/busses/i2c-rk2818.c index 29a7f7c896a4..cf79536d3494 100755 --- a/drivers/i2c/busses/i2c-rk2818.c +++ b/drivers/i2c/busses/i2c-rk2818.c @@ -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); diff --git a/drivers/input/keyboard/rk2818_adckey.c b/drivers/input/keyboard/rk2818_adckey.c index 33c87fd8da98..cbc3f2a43b57 100755 --- a/drivers/input/keyboard/rk2818_adckey.c +++ b/drivers/input/keyboard/rk2818_adckey.c @@ -25,93 +25,29 @@ #include #include #include +#include -#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; } diff --git a/drivers/video/display/screen/lcd_hx8357.c b/drivers/video/display/screen/lcd_hx8357.c index 531119d7ea4b..921521f31e26 100644 --- a/drivers/video/display/screen/lcd_hx8357.c +++ b/drivers/video/display/screen/lcd_hx8357.c @@ -4,7 +4,9 @@ #include #include #include "screen.h" +#include +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, 4upper_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, 4upper_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; } diff --git a/drivers/video/display/screen/lcd_td043mgea1.c b/drivers/video/display/screen/lcd_td043mgea1.c index 221ec30db12c..e3e152cd5800 100755 --- a/drivers/video/display/screen/lcd_td043mgea1.c +++ b/drivers/video/display/screen/lcd_td043mgea1.c @@ -4,6 +4,9 @@ #include #include #include "screen.h" +#include + +extern struct lcd_td043mgea1_data lcd_td043mgea1; /* Base */ #define OUT_TYPE SCREEN_RGB @@ -25,132 +28,23 @@ #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; } -- 2.34.1