From: 钟勇汪 <zyw@rock-chips.com>
Date: Wed, 26 May 2010 08:04:16 +0000 (+0000)
Subject: update lcd driver
X-Git-Tag: firefly_0821_release~11463
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=98d46e17f3a804d14f484e3ed29e3e808c46dfa0;p=firefly-linux-kernel-4.4.55.git

update lcd driver
---

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 <linux/fb.h>
 #include <linux/delay.h>
-#include <asm/arch/lcdcon.h>
-#include <asm/arch/rk28_i2c.h>
-#include <asm/arch/rk28_fb.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/iomux.h>
+#include "../../rk2818_fb.h"
+#include <mach/gpio.h>
+#include <mach/iomux.h>
 #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 <linux/fb.h>
 #include <linux/delay.h>
-#include <asm/arch/lcdcon.h>
-#include <asm/arch/rk28_i2c.h>
-#include <asm/arch/rk28_fb.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/iomux.h>
+#include "../../rk2818_fb.h"
+#include <mach/gpio.h>
+#include <mach/iomux.h>
 #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 <linux/fb.h>
 #include <linux/delay.h>
-#include <asm/arch/lcdcon.h>
-#include <asm/arch/rk28_i2c.h>
-#include <asm/arch/rk28_fb.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/iomux.h>
+#include "../../rk2818_fb.h"
+#include <mach/gpio.h>
+#include <mach/iomux.h>
 #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 <linux/fb.h>
 #include <linux/delay.h>
-#include <asm/arch/lcdcon.h>
-#include <asm/arch/rk28_i2c.h>
-#include <asm/arch/rk28_fb.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/iomux.h>
+#include "../../rk2818_fb.h"
+#include <mach/gpio.h>
+#include <mach/iomux.h>
 #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 <linux/fb.h>
 #include <linux/delay.h>
-#include <asm/arch/lcdcon.h>
-#include <asm/arch/rk28_i2c.h>
-#include <asm/arch/rk28_fb.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/iomux.h>
+#include "../../rk2818_fb.h"
+#include <mach/gpio.h>
+#include <mach/iomux.h>
 #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 <linux/fb.h>
 #include <linux/delay.h>
-#include <asm/arch/lcdcon.h>
-#include <asm/arch/rk28_i2c.h>
-#include <asm/arch/rk28_fb.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/iomux.h>
+#include "../../rk2818_fb.h"
+#include <mach/gpio.h>
+#include <mach/iomux.h>
 #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 <linux/fb.h>
 #include <linux/delay.h>
-#include <asm/arch/lcdcon.h>
-#include <asm/arch/rk28_i2c.h>
-#include <asm/arch/rk28_fb.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/iomux.h>
+#include "../../rk2818_fb.h"
+#include <mach/gpio.h>
+#include <mach/iomux.h>
 #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 <linux/fb.h>
 #include <linux/delay.h>
-#include <asm/arch/lcdcon.h>
-#include <asm/arch/rk28_i2c.h>
-#include <asm/arch/rk28_fb.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/iomux.h>
+#include "../../rk2818_fb.h"
+#include <mach/gpio.h>
+#include <mach/iomux.h>
 #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 <linux/fb.h>
 #include <linux/delay.h>
-#include <asm/arch/lcdcon.h>
-#include <asm/arch/rk28_i2c.h>
-#include <asm/arch/rk28_fb.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/iomux.h>
+#include "../../rk2818_fb.h"
+#include <mach/gpio.h>
+#include <mach/iomux.h>
 #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;
 }