From 98d46e17f3a804d14f484e3ed29e3e808c46dfa0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=92=9F=E5=8B=87=E6=B1=AA?= Date: Wed, 26 May 2010 08:04:16 +0000 Subject: [PATCH] update lcd driver --- drivers/video/display/screen/Makefile | 9 +- drivers/video/display/screen/hdmi_anx7150.c | 10 +- drivers/video/display/screen/lcd_a060se02.c | 10 +- drivers/video/display/screen/lcd_hl070vm4.c | 96 +++++++++++++------ drivers/video/display/screen/lcd_hsd800x480.c | 96 ++++++++++++++----- drivers/video/display/screen/lcd_nt35580.c | 49 +++++----- drivers/video/display/screen/lcd_nt35582.c | 18 ++-- drivers/video/display/screen/lcd_null.c | 9 +- drivers/video/display/screen/lcd_s1d13521.c | 82 ++++++++++------ drivers/video/display/screen/lcd_td043mgea1.c | 2 - .../video/display/screen/lcd_tj048nc01ca.c | 95 +++++++++++++----- 11 files changed, 305 insertions(+), 171 deletions(-) diff --git a/drivers/video/display/screen/Makefile b/drivers/video/display/screen/Makefile index 6cad992cf25b..f5017e103f91 100755 --- a/drivers/video/display/screen/Makefile +++ b/drivers/video/display/screen/Makefile @@ -6,15 +6,8 @@ obj-$(CONFIG_HDMI_NULL) += hdmi_null.o obj-$(CONFIG_LCD_TD043MGEA1) += lcd_td043mgea1.o obj-$(CONFIG_LCD_HSD070IDW1) += lcd_hsd800x480.o obj-$(CONFIG_LCD_HL070VM4AU) += lcd_hl070vm4.o -ifeq ($(CONFIG_MACH_RK2808SDK),y) -obj-$(CONFIG_LCD_TJ048NC01CA) += lcd_tj048nc01ca.o -endif -ifeq ($(CONFIG_MACH_PWS700AA),y) + obj-$(CONFIG_LCD_TJ048NC01CA) += lcd_tj048nc01ca.o -endif -ifeq ($(CONFIG_MACH_LANMO_W7),y) -obj-$(CONFIG_LCD_TJ048NC01CA) += lanmow7_lcd048.o -endif obj-$(CONFIG_LCD_A060SE02) += lcd_a060se02.o obj-$(CONFIG_LCD_S1D13521) += lcd_s1d13521.o diff --git a/drivers/video/display/screen/hdmi_anx7150.c b/drivers/video/display/screen/hdmi_anx7150.c index 24da4a6cbc8c..5752803189fa 100755 --- a/drivers/video/display/screen/hdmi_anx7150.c +++ b/drivers/video/display/screen/hdmi_anx7150.c @@ -1,10 +1,8 @@ #include #include -#include -#include -#include -#include -#include +#include "../../rk2818_fb.h" +#include +#include #include "screen.h" @@ -12,7 +10,7 @@ #define OUT_TYPE SCREEN_RGB #define OUT_FACE OUT_P888 #define DCLK_POL 0 -#define SWAP_RB 1 +#define SWAP_RB 0 /* 576p Timing */ #define OUT_CLK 27 diff --git a/drivers/video/display/screen/lcd_a060se02.c b/drivers/video/display/screen/lcd_a060se02.c index f67ff453bcc6..ac386386f5be 100755 --- a/drivers/video/display/screen/lcd_a060se02.c +++ b/drivers/video/display/screen/lcd_a060se02.c @@ -1,10 +1,8 @@ #include #include -#include -#include -#include -#include -#include +#include "../../rk2818_fb.h" +#include +#include #include "screen.h" /* Base */ @@ -26,7 +24,7 @@ /* Other */ #define DCLK_POL 0 -#define SWAP_RB 1 +#define SWAP_RB 0 diff --git a/drivers/video/display/screen/lcd_hl070vm4.c b/drivers/video/display/screen/lcd_hl070vm4.c index 8d5b43b242d3..5e487d736adf 100755 --- a/drivers/video/display/screen/lcd_hl070vm4.c +++ b/drivers/video/display/screen/lcd_hl070vm4.c @@ -1,10 +1,8 @@ #include #include -#include -#include -#include -#include -#include +#include "../../rk2818_fb.h" +#include +#include #include "screen.h" /* Base */ @@ -25,11 +23,70 @@ /* Other */ #define DCLK_POL 1 ///0 -#define SWAP_RB 1 +#define SWAP_RB 0 + +#define CS_OUT() gpio_direction_output(RK2818_PIN_PA4, 0) +#define CS_SET() gpio_set_value(RK2818_PIN_PA4, GPIO_HIGH) +#define CS_CLR() gpio_set_value(RK2818_PIN_PA4, GPIO_LOW) +#define CLK_OUT() gpio_direction_output(RK2818_PIN_PE7, 0) //I2C0_SCL +#define CLK_SET() gpio_set_value(RK2818_PIN_PE7, GPIO_HIGH) +#define CLK_CLR() gpio_set_value(RK2818_PIN_PE7, GPIO_LOW) +#define TXD_OUT() gpio_direction_output(RK2818_PIN_PE6, 0) //I2C0_SDA +#define TXD_SET() gpio_set_value(RK2818_PIN_PE6, GPIO_HIGH) +#define TXD_CLR() gpio_set_value(RK2818_PIN_PE6, GPIO_LOW) + +#define DRVDelayUs(i) udelay(i*2) int init(void); int standby(u8 enable); +void screen_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 ; + +} + void set_lcd_info(struct rk28fb_screen *screen) { /* screen type & face */ @@ -69,23 +126,9 @@ void set_lcd_info(struct rk28fb_screen *screen) //void spi_screenreg_set(uint32 Addr, uint32 Data) -void spi_screenreg_set(uint32 Data) +void spi_screenreg_set(u32 Data) { -//#define CS_OUT() GPIOSetPinDirection(GPIOPortB_Pin3, GPIO_OUT) //CS -#define CS_OUT() GPIOSetPinDirection(GPIOPortB_Pin2, GPIO_OUT) -#define CS_SET() GPIOSetPinLevel(GPIOPortB_Pin2, GPIO_HIGH) -#define CS_CLR() GPIOSetPinLevel(GPIOPortB_Pin2, GPIO_LOW) -//#define CLK_OUT() GPIOSetPinDirection(GPIOPortE_Pin7, GPIO_OUT) //I2C0_SCL -#define CLK_OUT() GPIOSetPinDirection(GPIOPortE_Pin5, GPIO_OUT) -#define CLK_SET() GPIOSetPinLevel(GPIOPortE_Pin5, GPIO_HIGH) -#define CLK_CLR() GPIOSetPinLevel(GPIOPortE_Pin5, GPIO_LOW) -//#define TXD_OUT() GPIOSetPinDirection(GPIOPortE_Pin6, GPIO_OUT) //I2C0_SDA -#define TXD_OUT() GPIOSetPinDirection(GPIOPortE_Pin4, GPIO_OUT) -#define TXD_SET() GPIOSetPinLevel(GPIOPortE_Pin4, GPIO_HIGH) -#define TXD_CLR() GPIOSetPinLevel(GPIOPortE_Pin4, GPIO_LOW) - -#define DRVDelayUs(i) udelay(i*2) - uint32 i; + u32 i; TXD_OUT(); CLK_OUT(); CS_OUT(); @@ -155,8 +198,7 @@ void spi_screenreg_set(uint32 Data) int init(void) { - rockchip_mux_api_set(GPIOB2_U0CTSN_SEL_NAME, IOMUXB_GPIO0_B2); - rockchip_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_GPIO1_A45); + screen_set_iomux(1); /* r0 00000010 11011011 r1 00010001 01101111 @@ -171,19 +213,19 @@ r5 01100001 11001110 spi_screenreg_set(0x3008); spi_screenreg_set(0x419f); spi_screenreg_set(0x61ce); - rockchip_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_I2C0); + screen_set_iomux(0); return 0; } int standby(u8 enable) { - rockchip_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_GPIO1_A45); + screen_set_iomux(1); if(!enable) { init(); } //else { // spi_screenreg_set(0x03, 0x5f); // } - rockchip_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_I2C0); + screen_set_iomux(0); return 0; } diff --git a/drivers/video/display/screen/lcd_hsd800x480.c b/drivers/video/display/screen/lcd_hsd800x480.c index 5fd7fa771560..7113e8511c1c 100755 --- a/drivers/video/display/screen/lcd_hsd800x480.c +++ b/drivers/video/display/screen/lcd_hsd800x480.c @@ -1,13 +1,12 @@ /* This Lcd Driver is HSD070IDW1 write by cst 2009.10.27 */ #include #include -#include -#include -#include -#include -#include +#include "../../rk2818_fb.h" +#include +#include #include "screen.h" + /* Base */ #define OUT_TYPE SCREEN_RGB #define OUT_FACE OUT_P888 @@ -26,11 +25,70 @@ /* Other */ #define DCLK_POL 1 -#define SWAP_RB 1 +#define SWAP_RB 0 + +#define CS_OUT() gpio_direction_output(RK2818_PIN_PA4, 0) +#define CS_SET() gpio_set_value(RK2818_PIN_PA4, GPIO_HIGH) +#define CS_CLR() gpio_set_value(RK2818_PIN_PA4, GPIO_LOW) +#define CLK_OUT() gpio_direction_output(RK2818_PIN_PE7, 0) //I2C0_SCL +#define CLK_SET() gpio_set_value(RK2818_PIN_PE7, GPIO_HIGH) +#define CLK_CLR() gpio_set_value(RK2818_PIN_PE7, GPIO_LOW) +#define TXD_OUT() gpio_direction_output(RK2818_PIN_PE6, 0) //I2C0_SDA +#define TXD_SET() gpio_set_value(RK2818_PIN_PE6, GPIO_HIGH) +#define TXD_CLR() gpio_set_value(RK2818_PIN_PE6, GPIO_LOW) + +#define DRVDelayUs(i) udelay(i*2) int init(void); int standby(u8 enable); +void screen_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 ; + +} + void set_lcd_info(struct rk28fb_screen *screen) { /* screen type & face */ @@ -70,21 +128,9 @@ void set_lcd_info(struct rk28fb_screen *screen) } //cannot need init,so set screen->init = null at rk28_fb.c file -void spi_screenreg_set(uint32 Addr, uint32 Data) +void spi_screenreg_set(u32 Addr, u32 Data) { -#define CS_OUT() GPIOSetPinDirection(GPIOPortB_Pin3, GPIO_OUT) -#define CS_SET() GPIOSetPinLevel(GPIOPortB_Pin3, GPIO_HIGH) -#define CS_CLR() GPIOSetPinLevel(GPIOPortB_Pin3, GPIO_LOW) -#define CLK_OUT() GPIOSetPinDirection(GPIOPortE_Pin7, GPIO_OUT) //I2C0_SCL -#define CLK_SET() GPIOSetPinLevel(GPIOPortE_Pin7, GPIO_HIGH) -#define CLK_CLR() GPIOSetPinLevel(GPIOPortE_Pin7, GPIO_LOW) -#define TXD_OUT() GPIOSetPinDirection(GPIOPortE_Pin6, GPIO_OUT) //I2C0_SDA -#define TXD_SET() GPIOSetPinLevel(GPIOPortE_Pin6, GPIO_HIGH) -#define TXD_CLR() GPIOSetPinLevel(GPIOPortE_Pin6, GPIO_LOW) - -#define DRVDelayUs(i) udelay(i*2) - - uint32 i; + u32 i; TXD_OUT(); CLK_OUT(); @@ -153,7 +199,7 @@ void spi_screenreg_set(uint32 Addr, uint32 Data) int init(void) { - rockchip_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_GPIO1_A45); + screen_set_iomux(1); spi_screenreg_set(0x02, 0x07); spi_screenreg_set(0x03, 0x5f); @@ -191,20 +237,20 @@ int init(void) spi_screenreg_set(0x21, 0xF0); spi_screenreg_set(0x22, 0x09); - rockchip_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_I2C0); + screen_set_iomux(0); return 0; } int standby(u8 enable) { -#if 0 - rockchip_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_GPIO1_A45); +#if 1 + screen_set_iomux(1); if(enable) { spi_screenreg_set(0x03, 0xde); } else { spi_screenreg_set(0x03, 0x5f); } - rockchip_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_I2C0); + screen_set_iomux(0); #else GPIOSetPinDirection(GPIOPortB_Pin3, GPIO_OUT); diff --git a/drivers/video/display/screen/lcd_nt35580.c b/drivers/video/display/screen/lcd_nt35580.c index ef2d2d1bc349..92c537ae5df0 100755 --- a/drivers/video/display/screen/lcd_nt35580.c +++ b/drivers/video/display/screen/lcd_nt35580.c @@ -1,12 +1,11 @@ #include #include -#include -#include -#include -#include -#include +#include "../../rk2818_fb.h" +#include +#include #include "screen.h" + /* Base */ #define OUT_TYPE SCREEN_RGB #define OUT_FACE OUT_P888 @@ -25,29 +24,28 @@ /* Other */ #define DCLK_POL 0 -#define SWAP_RB 1 - +#define SWAP_RB 0 -#define CS_OUT() GPIOSetPinDirection(GPIOPortB_Pin3, GPIO_OUT) -#define CS_SET() GPIOSetPinLevel(GPIOPortB_Pin3, GPIO_HIGH) -#define CS_CLR() GPIOSetPinLevel(GPIOPortB_Pin3, GPIO_LOW) -#define CLK_OUT() GPIOSetPinDirection(GPIOPortE_Pin7, GPIO_OUT) //I2C0_SCL -#define CLK_SET() GPIOSetPinLevel(GPIOPortE_Pin7, GPIO_HIGH) -#define CLK_CLR() GPIOSetPinLevel(GPIOPortE_Pin7, GPIO_LOW) -#define TXD_OUT() GPIOSetPinDirection(GPIOPortE_Pin6, GPIO_OUT) //I2C0_SDA -#define TXD_SET() GPIOSetPinLevel(GPIOPortE_Pin6, GPIO_HIGH) -#define TXD_CLR() GPIOSetPinLevel(GPIOPortE_Pin6, GPIO_LOW) -#define TXD_IN() GPIOSetPinDirection(GPIOPortE_Pin6, GPIO_IN) -#define TXD_GET() GPIOGetPinLevel(GPIOPortE_Pin6) +#define CS_OUT() gpio_direction_output(RK2818_PIN_PA4, 0) +#define CS_SET() gpio_set_value(RK2818_PIN_PA4, GPIO_HIGH) +#define CS_CLR() gpio_set_value(RK2818_PIN_PA4, GPIO_LOW) +#define CLK_OUT() gpio_direction_output(RK2818_PIN_PE7, 0) //I2C0_SCL +#define CLK_SET() gpio_set_value(RK2818_PIN_PE7, GPIO_HIGH) +#define CLK_CLR() gpio_set_value(RK2818_PIN_PE7, GPIO_LOW) +#define TXD_OUT() gpio_direction_output(RK2818_PIN_PE6, 0) //I2C0_SDA +#define TXD_SET() gpio_set_value(RK2818_PIN_PE6, GPIO_HIGH) +#define TXD_CLR() gpio_set_value(RK2818_PIN_PE6, GPIO_LOW) +#define TXD_IN() gpio_direction_input(RK2818_PIN_PE6) +#define TXD_GET() gpio_get_value(RK2818_PIN_PE6) #define delay_us(i) udelay(i) -uint32 spi_screenreg_get(uint32 Addr) +u32 spi_screenreg_get(u32 Addr) { - uint32 i; + u32 i; u8 addr_h = (Addr>>8) & 0x000000ff; u8 addr_l = Addr & 0x000000ff; u8 cmd1 = 0x20; //0010 0000 @@ -171,9 +169,9 @@ uint32 spi_screenreg_get(uint32 Addr) } -void spi_screenreg_set(uint32 Addr, uint32 Data) +void spi_screenreg_set(u32 Addr, u32 Data) { - uint32 i; + u32 i; u8 addr_h = (Addr>>8) & 0x000000ff; u8 addr_l = Addr & 0x000000ff; u8 data_l = Data & 0x000000ff; @@ -310,7 +308,7 @@ int lcd_init(void) GPIO_SetPinLevel(reset_pin,GPIO_HIGH); #endif - rockchip_mux_api_set(GPIOE_U1IR_I2C1_NAME, IOMUXA_GPIO1_A67); + rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, IOMUXA_GPIO1_A67); spi_screenreg_set(0x2E80, 0x0001); spi_screenreg_set(0x0680, 0x002D); @@ -407,7 +405,7 @@ int lcd_init(void) } #endif - rockchip_mux_api_set(GPIOE_U1IR_I2C1_NAME, IOMUXA_I2C1); + rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, IOMUXA_I2C1); return 0; } @@ -456,6 +454,3 @@ void set_lcd_info(struct rk28fb_screen *screen) } - - - diff --git a/drivers/video/display/screen/lcd_nt35582.c b/drivers/video/display/screen/lcd_nt35582.c index ad02e73c9725..99ed77bc62fa 100755 --- a/drivers/video/display/screen/lcd_nt35582.c +++ b/drivers/video/display/screen/lcd_nt35582.c @@ -1,10 +1,8 @@ #include #include -#include -#include -#include -#include -#include +#include "../../rk2818_fb.h" +#include +#include #include "screen.h" /* Base */ @@ -29,11 +27,11 @@ /* Other */ #define DCLK_POL 0 -#define SWAP_RB 1 +#define SWAP_RB 0 -void Set_LCD_8B_REG(unsigned char regh,unsigned char regl, uint32 data) +void Set_LCD_8B_REG(unsigned char regh,unsigned char regl, u32 data) { - uint32 cmd; + u32 cmd; cmd = (regh<<8) + regl; if(-1==data) { mcu_ioctl(MCU_WRCMD,cmd); @@ -208,7 +206,7 @@ int lcd_init(void) Set_LCD_8B_REG(0x2b,0X03,0X1f); msleep(100); { - uint32 fte = 0; + u32 fte = 0; Set_LCD_8B_REG(0x44,0x00,(fte>>8)&0xff); Set_LCD_8B_REG(0x44,0x01,(fte)&0xff); } @@ -330,7 +328,7 @@ int lcd_scandir(u16 dir) int lcd_disparea(u8 area) { - uint32 x0, y0, x1, y1, fte; + u32 x0, y0, x1, y1, fte; mcu_ioctl(MCU_SETBYPASS, 1); diff --git a/drivers/video/display/screen/lcd_null.c b/drivers/video/display/screen/lcd_null.c index 14870c5edb0f..f363e5cc622e 100755 --- a/drivers/video/display/screen/lcd_null.c +++ b/drivers/video/display/screen/lcd_null.c @@ -1,14 +1,11 @@ #include #include -#include -#include -#include -#include -#include +#include "../../rk2818_fb.h" +#include +#include #include "screen.h" - void set_lcd_info(struct rk28fb_screen *screen) { memset(screen, 0, sizeof(struct rk28fb_screen)); diff --git a/drivers/video/display/screen/lcd_s1d13521.c b/drivers/video/display/screen/lcd_s1d13521.c index 37c45f098758..cf4b6adea87a 100755 --- a/drivers/video/display/screen/lcd_s1d13521.c +++ b/drivers/video/display/screen/lcd_s1d13521.c @@ -1,10 +1,8 @@ #include #include -#include -#include -#include -#include -#include +#include "../../rk2818_fb.h" +#include +#include #include "screen.h" #include "s1d13521.h" @@ -29,20 +27,20 @@ /* Other */ #define DCLK_POL 0 -#define SWAP_RB 1 +#define SWAP_RB 0 int s1d13521if_refresh(u8 arg); -#define GPIO_RESET_L GPIOPortC_Pin0 //reset pin -#define GPIO_HIRQ GPIOPortC_Pin1 //IRQ -#define GPIO_HDC GPIOPortC_Pin2 //Data(HIHG) or Command(LOW) -#define GPIO_HCS_L GPIOPortC_Pin3 //Chip select -#define GPIO_HRD_L GPIOPortC_Pin4 //Read mode, low active -#define GPIO_HWE_L GPIOPortC_Pin5 //Write mode, low active -#define GPIO_HRDY GPIOPortC_Pin6 //Bus ready -#define GPIO_RMODE GPIOPortC_Pin7 //rmode ->CNF1 +#define GPIO_RESET_L RK2818_PIN_PC0//reset pin +#define GPIO_HIRQ RK2818_PIN_PC1 //IRQ +#define GPIO_HDC RK2818_PIN_PC2 //Data(HIHG) or Command(LOW) +#define GPIO_HCS_L RK2818_PIN_PC3 //Chip select +#define GPIO_HRD_L RK2818_PIN_PC4 //Read mode, low active +#define GPIO_HWE_L RK2818_PIN_PC5 //Write mode, low active +#define GPIO_HRDY RK2818_PIN_PC6 //Bus ready +#define GPIO_RMODE RK2818_PIN_PC7 //rmode ->CNF1 //---------------------------------------------------------------------------- @@ -53,7 +51,9 @@ int s1d13521if_refresh(u8 arg); int s1d13521if_wait_for_ready(void) { int cnt = 1000; - int d = GPIOGetPinLevel(GPIO_HRDY); + int d = 0; + gpio_request(GPIO_HRDY, 0); + d = gpio_get_value(GPIO_HRDY); while (d == 0) { @@ -65,9 +65,9 @@ int s1d13521if_wait_for_ready(void) return -1; } - d = GPIOGetPinLevel(GPIO_HRDY); + d = gpio_get_value(GPIO_HRDY); } - + gpio_free(GPIO_HRDY); return 0; } @@ -117,29 +117,53 @@ void s1d13521fb_InitRegisters(void) void s1d13521if_init_gpio(void) { int i; - rockchip_mux_api_set(GPIOC_LCDC18BIT_SEL_NAME, IOMUXB_GPIO0_C01); - rockchip_mux_api_set(GPIOC_LCDC24BIT_SEL_NAME, IOMUXB_GPIO0_C2_7); - for(i = 0; i < 8; i++){ - if(i == 1 || i == 6){//HIRQ, HRDY - GPIOSetPinDirection(GPIOPortC_Pin0+i, GPIO_IN); - } else {//RESET_L, HD/C, HCS_L, HRD_L, HWE_L, RMODE - GPIOSetPinDirection(GPIOPortC_Pin0+i, GPIO_OUT); - GPIOPullUpDown(GPIOPortC_Pin0+i, GPIOPullUp); - GPIOSetPinLevel(GPIOPortC_Pin0+i, GPIO_HIGH); + int ret=0; + + rk2818_mux_api_set(GPIOC_LCDC18BIT_SEL_NAME, IOMUXB_GPIO0_C01); + rk2818_mux_api_set(GPIOC_LCDC24BIT_SEL_NAME, IOMUXB_GPIO0_C2_7); + + for(i = 0; i < 8; i++) + { + if(i == 1 || i == 6)//HIRQ, HRDY + { + ret = gpio_request(GPIO_RESET_L+i, NULL); + if(ret != 0) + { + gpio_free(GPIO_RESET_L+i); + printk(">>>>>> lcd cs gpio_request err \n "); + } + gpio_direction_input(GPIO_RESET_L+i); + gpio_free(GPIO_RESET_L+i); + } + else //RESET_L, HD/C, HCS_L, HRD_L, HWE_L, RMODE + { + ret = gpio_request(GPIO_RESET_L+i, NULL); + if(ret != 0) + { + gpio_free(GPIO_RESET_L+i); + printk(">>>>>> lcd cs gpio_request err \n "); + } + gpio_direction_output(GPIO_RESET_L+i, 0); + gpio_set_value(GPIO_RESET_L+i, GPIO_HIGH); + gpio_free(GPIO_RESET_L+i); } } } void s1d13521if_set_reset(void) { - GPIOSetPinLevel(GPIO_RMODE, GPIO_HIGH); + gpio_request(GPIO_RMODE, 0); + gpio_set_value(GPIO_RMODE, GPIO_HIGH); + gpio_request(GPIO_RESET_L, 0); // reset pulse mdelay(10); - GPIOSetPinLevel(GPIO_RESET_L, GPIO_LOW); + gpio_set_value(GPIO_RESET_L, GPIO_LOW); mdelay(10); - GPIOSetPinLevel(GPIO_RESET_L, GPIO_HIGH); + gpio_set_value(GPIO_RESET_L, GPIO_HIGH); mdelay(10); + gpio_free(GPIO_RMODE); + gpio_free(GPIO_RESET_L); //s1d13521if_WaitForHRDY(); } diff --git a/drivers/video/display/screen/lcd_td043mgea1.c b/drivers/video/display/screen/lcd_td043mgea1.c index b93546fe7e45..d13b7934abf3 100755 --- a/drivers/video/display/screen/lcd_td043mgea1.c +++ b/drivers/video/display/screen/lcd_td043mgea1.c @@ -25,7 +25,6 @@ #define DCLK_POL 0 #define SWAP_RB 0 - #define CS_OUT() gpio_direction_output(RK2818_PIN_PA4, 0) #define CS_SET() gpio_set_value(RK2818_PIN_PA4, GPIO_HIGH) #define CS_CLR() gpio_set_value(RK2818_PIN_PA4, GPIO_LOW) @@ -36,7 +35,6 @@ #define TXD_SET() gpio_set_value(RK2818_PIN_PE6, GPIO_HIGH) #define TXD_CLR() gpio_set_value(RK2818_PIN_PE6, GPIO_LOW) - int init(void); int standby(u8 enable); diff --git a/drivers/video/display/screen/lcd_tj048nc01ca.c b/drivers/video/display/screen/lcd_tj048nc01ca.c index 4e4fee9c100f..41991eeebc73 100755 --- a/drivers/video/display/screen/lcd_tj048nc01ca.c +++ b/drivers/video/display/screen/lcd_tj048nc01ca.c @@ -1,12 +1,11 @@ #include #include -#include -#include -#include -#include -#include +#include "../../rk2818_fb.h" +#include +#include #include "screen.h" + /* Base */ #define OUT_TYPE SCREEN_RGB #define OUT_FACE OUT_P888 @@ -25,11 +24,70 @@ /* Other */ #define DCLK_POL 1 -#define SWAP_RB 1 +#define SWAP_RB 0 + +#define CS_OUT() gpio_direction_output(RK2818_PIN_PA4, 0) +#define CS_SET() gpio_set_value(RK2818_PIN_PA4, GPIO_HIGH) +#define CS_CLR() gpio_set_value(RK2818_PIN_PA4, GPIO_LOW) +#define CLK_OUT() gpio_direction_output(RK2818_PIN_PE7, 0) //I2C0_SCL +#define CLK_SET() gpio_set_value(RK2818_PIN_PE7, GPIO_HIGH) +#define CLK_CLR() gpio_set_value(RK2818_PIN_PE7, GPIO_LOW) +#define TXD_OUT() gpio_direction_output(RK2818_PIN_PE6, 0) //I2C0_SDA +#define TXD_SET() gpio_set_value(RK2818_PIN_PE6, GPIO_HIGH) +#define TXD_CLR() gpio_set_value(RK2818_PIN_PE6, GPIO_LOW) + +#define DRVDelayUs(i) udelay(i*2) int lcd_init(void); int lcd_standby(u8 enable); +void screen_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 ; + +} + void set_lcd_info(struct rk28fb_screen *screen) { /* screen type & face */ @@ -68,21 +126,9 @@ void set_lcd_info(struct rk28fb_screen *screen) } -void spi_screenreg_set(uint32 Addr, uint32 Data) +void spi_screenreg_set(u32 Addr, u32 Data) { -#define CS_OUT() GPIOSetPinDirection(GPIOPortB_Pin3, GPIO_OUT) -#define CS_SET() GPIOSetPinLevel(GPIOPortB_Pin3, GPIO_HIGH) -#define CS_CLR() GPIOSetPinLevel(GPIOPortB_Pin3, GPIO_LOW) -#define CLK_OUT() GPIOSetPinDirection(GPIOPortE_Pin5, GPIO_OUT) //I2C0_SCL -#define CLK_SET() GPIOSetPinLevel(GPIOPortE_Pin5, GPIO_HIGH) -#define CLK_CLR() GPIOSetPinLevel(GPIOPortE_Pin5, GPIO_LOW) -#define TXD_OUT() GPIOSetPinDirection(GPIOPortE_Pin4, GPIO_OUT) //I2C0_SDA -#define TXD_SET() GPIOSetPinLevel(GPIOPortE_Pin4, GPIO_HIGH) -#define TXD_CLR() GPIOSetPinLevel(GPIOPortE_Pin4, GPIO_LOW) - -#define DRVDelayUs(i) udelay(i*2) - - uint32 i; + u32 i; TXD_OUT(); CLK_OUT(); @@ -142,8 +188,7 @@ void spi_screenreg_set(uint32 Addr, uint32 Data) int lcd_init(void) { - rockchip_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_GPIO1_A45); - + screen_set_iomux(1); //R(0xess (A5~A0) Data(D7~D0) #if 0 spi_screenreg_set(0x03, 0x86); @@ -174,19 +219,19 @@ int lcd_init(void) spi_screenreg_set(0x26, 0xFF); #endif - rockchip_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_I2C0); + screen_set_iomux(0); return 0; } int lcd_standby(u8 enable) { - rockchip_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_GPIO1_A45); + screen_set_iomux(1); if(enable) { spi_screenreg_set(0x43, 0x20); } else { spi_screenreg_set(0x43, 0xE0); } - rockchip_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_I2C0); + screen_set_iomux(0); return 0; } -- 2.34.1