board rk3188 fpga:add lcdc support
authoryxj <yxj@rock-chips.com>
Tue, 15 Jan 2013 12:11:37 +0000 (20:11 +0800)
committeryxj <yxj@rock-chips.com>
Tue, 15 Jan 2013 12:18:28 +0000 (20:18 +0800)
arch/arm/mach-rk3188/board-rk3188-fpga.c

index bb124c455dd51d1cc7bba0a4e1208f0952eced79..267869923b731c3c4bcf328ab42f8f0ca78f685a 100644 (file)
@@ -494,70 +494,90 @@ static rk_sensor_user_init_data_s rk_init_data_sensor[RK_CAM_NUM] =
 
 #endif /* CONFIG_VIDEO_RK29 */
 
+#ifdef CONFIG_FB_ROCKCHIP
+
 #define RK_FB_MEM_SIZE 3*SZ_1M
 
-#define LCD_CS_MUX_NAME    GPIO2A7_LCDC1DATA7_SMCDATA7_TRACEDATA7_NAME
-#define LCD_CS_PIN         RK30_PIN2_PA7
+#define LCD_CS_PIN         INVALID_GPIO
 #define LCD_CS_VALUE       GPIO_HIGH
 
-#define LCD_EN_MUX_NAME    GPIO2D7_TESTCLOCKOUT_NAME
-#define LCD_EN_PIN         RK30_PIN2_PD7
+#define LCD_EN_PIN         INVALID_GPIO
 #define LCD_EN_VALUE       GPIO_LOW
 
 static int rk_fb_io_init(struct rk29_fb_setting_info *fb_setting)
 {
        int ret = 0;
-       ret = gpio_request(LCD_CS_PIN, NULL);
-       if (ret != 0)
-       {
-               gpio_free(LCD_CS_PIN);
-               printk(KERN_ERR "request lcd cs pin fail!\n");
-               return -1;
-       }
-       else
-       {
-               gpio_direction_output(LCD_CS_PIN, LCD_CS_VALUE);
-       }
-       ret = gpio_request(LCD_EN_PIN, NULL);
-       if (ret != 0)
+
+       if(LCD_CS_PIN != INVALID_GPIO)
        {
-               gpio_free(LCD_EN_PIN);
-               printk(KERN_ERR "request lcd en pin fail!\n");
-               return -1;
+               ret = gpio_request(LCD_CS_PIN, NULL);
+               if (ret != 0)
+               {
+                       gpio_free(LCD_CS_PIN);
+                       printk(KERN_ERR "request lcd cs pin fail!\n");
+                       return -1;
+               }
+               else
+               {
+                       gpio_direction_output(LCD_CS_PIN, LCD_CS_VALUE);
+               }
        }
-       else
+
+       if(LCD_EN_PIN != INVALID_GPIO)
        {
-               gpio_direction_output(LCD_EN_PIN, LCD_EN_VALUE);
+               ret = gpio_request(LCD_EN_PIN, NULL);
+               if (ret != 0)
+               {
+                       gpio_free(LCD_EN_PIN);
+                       printk(KERN_ERR "request lcd en pin fail!\n");
+                       return -1;
+               }
+               else
+               {
+                       gpio_direction_output(LCD_EN_PIN, LCD_EN_VALUE);
+               }
        }
        return 0;
 }
 static int rk_fb_io_disable(void)
 {
-       gpio_set_value(LCD_CS_PIN, LCD_CS_VALUE? 0:1);
-       gpio_set_value(LCD_EN_PIN, LCD_EN_VALUE? 0:1);
+       if(LCD_CS_PIN != INVALID_GPIO)
+       {
+               gpio_set_value(LCD_CS_PIN, !LCD_CS_VALUE);
+       }
+
+       if(LCD_EN_PIN != INVALID_GPIO)
+       {
+               gpio_set_value(LCD_EN_PIN, !LCD_EN_VALUE);
+       }
        return 0;
 }
 static int rk_fb_io_enable(void)
 {
-       gpio_set_value(LCD_CS_PIN, LCD_CS_VALUE);
-       gpio_set_value(LCD_EN_PIN, LCD_EN_VALUE);
+       if(LCD_CS_PIN != INVALID_GPIO)
+       {
+               gpio_set_value(LCD_CS_PIN, LCD_CS_VALUE);
+       }
+
+       if(LCD_EN_PIN != INVALID_GPIO)
+       {
+               gpio_set_value(LCD_EN_PIN, LCD_EN_VALUE);
+       }
        return 0;
 }
 
 struct rk29fb_info lcdc0_screen_info = {
-       .prop      = PRMRY,             //primary display device
-       .io_init   = rk_fb_io_init,
-       .io_disable = rk_fb_io_disable,
-       .io_enable = rk_fb_io_enable,
+       .prop           = PRMRY,                //primary display device
+       .io_init        = rk_fb_io_init,
+       .io_disable     = rk_fb_io_disable,
+       .io_enable      = rk_fb_io_enable,
        .set_screen_info = set_lcd_info,
 };
 
 struct rk29fb_info lcdc1_screen_info = {
-       #if defined(CONFIG_HDMI_RK30)
        .prop           = EXTEND,       //extend display device
-       .lcd_info  = NULL,
-       .set_screen_info = hdmi_init_lcdc,
-       #endif
+       .lcd_info       = NULL,
+       .set_screen_info = NULL,
 };
 
 static struct resource resource_fb[] = {
@@ -587,6 +607,62 @@ static struct platform_device device_fb = {
        .num_resources  = ARRAY_SIZE(resource_fb),
        .resource       = resource_fb,
 };
+#endif
+
+#if defined(CONFIG_LCDC0_RK3188)
+static struct resource resource_lcdc0[] = {
+       [0] = {
+               .name  = "lcdc0 reg",
+               .start = RK30_LCDC0_PHYS,
+               .end   = RK30_LCDC0_PHYS + RK30_LCDC0_SIZE - 1,
+               .flags = IORESOURCE_MEM,
+       },
+       
+       [1] = {
+               .name  = "lcdc0 irq",
+               .start = IRQ_LCDC0,
+               .end   = IRQ_LCDC0,
+               .flags = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device device_lcdc0 = {
+       .name             = "rk3188-lcdc",
+       .id               = 0,
+       .num_resources    = ARRAY_SIZE(resource_lcdc0),
+       .resource         = resource_lcdc0,
+       .dev            = {
+               .platform_data = &lcdc0_screen_info,
+       },
+};
+#endif
+#if defined(CONFIG_LCDC1_RK3188) 
+extern struct rk29fb_info lcdc1_screen_info;
+static struct resource resource_lcdc1[] = {
+       [0] = {
+               .name  = "lcdc1 reg",
+               .start = RK30_LCDC1_PHYS,
+               .end   = RK30_LCDC1_PHYS + RK30_LCDC1_SIZE - 1,
+               .flags = IORESOURCE_MEM,
+       },
+       [1] = {
+               .name  = "lcdc1 irq",
+               .start = IRQ_LCDC1,
+               .end   = IRQ_LCDC1,
+               .flags = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device device_lcdc1 = {
+       .name             = "rk3188-lcdc",
+       .id               = 1,
+       .num_resources    = ARRAY_SIZE(resource_lcdc1),
+       .resource         = resource_lcdc1,
+       .dev            = {
+               .platform_data = &lcdc1_screen_info,
+       },
+};
+#endif
 
 static struct i2c_board_info __initdata i2c0_info[] = {
 #if defined (CONFIG_SND_SOC_RK1000)
@@ -709,8 +785,19 @@ static struct platform_device device_ion = {
 };
 
 static struct platform_device *devices[] __initdata = {
+#ifdef CONFIG_FB_ROCKCHIP
        &device_fb,
+#endif
+#if defined(CONFIG_LCDC0_RK3188)
+       &device_lcdc0,
+#endif
+#if defined(CONFIG_LCDC1_RK3188)
+       &device_lcdc1,
+#endif
+
+#ifdef CONFIG_BACKLIGHT_RK29_BL
        &rk29_device_backlight,
+#endif
        &device_ion,
 };