update lcd driver
author钟勇汪 <zyw@rock-chips.com>
Wed, 26 May 2010 08:04:16 +0000 (08:04 +0000)
committer黄涛 <huangtao@rock-chips.com>
Mon, 21 Jun 2010 05:35:17 +0000 (13:35 +0800)
drivers/video/display/screen/Makefile
drivers/video/display/screen/hdmi_anx7150.c
drivers/video/display/screen/lcd_a060se02.c
drivers/video/display/screen/lcd_hl070vm4.c
drivers/video/display/screen/lcd_hsd800x480.c
drivers/video/display/screen/lcd_nt35580.c
drivers/video/display/screen/lcd_nt35582.c
drivers/video/display/screen/lcd_null.c
drivers/video/display/screen/lcd_s1d13521.c
drivers/video/display/screen/lcd_td043mgea1.c
drivers/video/display/screen/lcd_tj048nc01ca.c

index 6cad992cf25ba68c1c84d2d9ed1dde3d2da301c8..f5017e103f9162ffc8624562a5f26cc1aa440bb2 100755 (executable)
@@ -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
index 24da4a6cbc8c7394fee2a953d07c044dcb0ab95b..5752803189fa00c177b34516d8f8c49678c6ea88 100755 (executable)
@@ -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
index f67ff453bcc6024174299828f284f8aec91c01a4..ac386386f5be8f3b107ff7723c9b1a8b35eaf818 100755 (executable)
@@ -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
 
 
 
index 8d5b43b242d3f8071e9adc1dd2bd6ff8f67a4d93..5e487d736adfa8ea64b01a14cb422d3495aa6e66 100755 (executable)
@@ -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 */
 
 /* 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;
 }
 
index 5fd7fa771560aec41a4ecbc85f73277c87a2b349..7113e8511c1cbf765ea14d67ba0417a0e8ca2918 100755 (executable)
@@ -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
 
 /* 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);
index ef2d2d1bc34986bc4b495c218bc5c4a3e5420d90..92c537ae5df086b9402a5b0846b71e641d511b83 100755 (executable)
@@ -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
 
 /* 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)
 }
 
 
-
-
-
index ad02e73c97256883bbded3bc49062785553b386b..99ed77bc62fac55d8b91452e79044709479b046a 100755 (executable)
@@ -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 */
 
 /* 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);
 
index 14870c5edb0fecf4686e477fc75790b9b2327887..f363e5cc622e1bcc7a59518d37be2543c647c4bf 100755 (executable)
@@ -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));
index 37c45f098758a1d2d1ed2347197c2ee16ac1672e..cf4b6adea87a36de30e1a353abcb16d713b293bc 100755 (executable)
@@ -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"
 
 /* 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();
 }
index b93546fe7e45ef707b3a24368cbcc3e98ab6fcf4..d13b7934abf38d95942f4e037f721d71cf4e3fd3 100755 (executable)
@@ -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);
 
index 4e4fee9c100f0ba0f9e6e627be019ca66fe667e1..41991eeebc734189a89ac2e90faea625fc81ce33 100755 (executable)
@@ -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
 
 /* 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;
 }