summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorPedro Perez de Heredia <pedro.perez@digi.com>2011-12-26 22:16:07 +0100
committerPedro Perez de Heredia <pedro.perez@digi.com>2011-12-26 22:16:07 +0100
commitb9d17462f079698d0e07e283ba6f1b047256f3d3 (patch)
treee39419c2f7061c06617b8f490e69c4f104189584 /arch
parent414f724b6ce3a012b0d3524d01d1b710c7a3d4fa (diff)
ccxmx5x: add support to config video pixel format per interf
This commit adds support to configure the pixel format of each video interface individually. This is supported by the i.mx53 and not by the i.mx51 (that only support RGB when dual video is used). Signed-off-by: Pedro Perez de Heredia <pedro.perez@digi.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-mx5/devices_ccwmx51.c7
-rw-r--r--arch/arm/mach-mx5/devices_ccwmx53.c44
-rw-r--r--arch/arm/mach-mx5/displays/displays.h29
-rw-r--r--arch/arm/mach-mx5/displays/hdmi_ad9389.h7
-rw-r--r--arch/arm/mach-mx5/displays/lcd.h4
-rw-r--r--arch/arm/mach-mx5/displays/vga.h2
6 files changed, 43 insertions, 50 deletions
diff --git a/arch/arm/mach-mx5/devices_ccwmx51.c b/arch/arm/mach-mx5/devices_ccwmx51.c
index c6dc105d913f..6bedd9fbdda5 100644
--- a/arch/arm/mach-mx5/devices_ccwmx51.c
+++ b/arch/arm/mach-mx5/devices_ccwmx51.c
@@ -557,7 +557,7 @@ struct mxc_audio_platform_data wm8753_data = {
struct mxc_fb_platform_data mx51_fb_data[2] = {
/* DISP0 */
{
- .interface_pix_fmt = VIDEO_PIX_FMT,
+ .interface_pix_fmt = IPU_PIX_FMT_RGB,
.mode_str = "1024x768M-16@60", /* Default */
},
/* DISP1 */
@@ -1073,6 +1073,11 @@ int __init ccwmx51_init_fb(void)
&plcd_platform_data[i].fb_pdata,
sizeof(struct mxc_fb_platform_data));
plcd_platform_data[i].vif = i;
+ if (!plcd_platform_data[i].fb_pdata.interface_pix_fmt)
+ plcd_platform_data[i].fb_pdata.interface_pix_fmt =
+ i ? DISP1_PIX_FMT : DISP0_PIX_FMT;
+ mx51_fb_data[i].interface_pix_fmt =
+ plcd_platform_data[i].fb_pdata.interface_pix_fmt;
mxc_register_device(&lcd_pdev[i], (void *)&plcd_platform_data[i]);
}
} else if ((p = ccwmx51_get_video_cmdline_opt(i, "VGA")) != NULL) {
diff --git a/arch/arm/mach-mx5/devices_ccwmx53.c b/arch/arm/mach-mx5/devices_ccwmx53.c
index 8c5339bbfbe0..9f89b51246aa 100644
--- a/arch/arm/mach-mx5/devices_ccwmx53.c
+++ b/arch/arm/mach-mx5/devices_ccwmx53.c
@@ -245,7 +245,7 @@ struct resource mxcfb_resources[2] = {
struct mxc_fb_platform_data mx53_fb_data[2] = {
/* DISP0 */
{
- .interface_pix_fmt = VIDEO_PIX_FMT,
+ .interface_pix_fmt = IPU_PIX_FMT_RGB24,
.mode_str = "1024x768M-16@60", /* Default */
},
/* DISP1 */
@@ -255,14 +255,8 @@ struct mxc_fb_platform_data mx53_fb_data[2] = {
}
};
-struct ldb_platform_data ldb_data[] = {
- {
- .ext_ref = 1,
- .boot_enable = MXC_LDBDI0,
- }, {
- .ext_ref = 1,
- .boot_enable = MXC_LDBDI1,
- }
+struct ldb_platform_data ldb_data = {
+ .ext_ref = 1,
};
static struct tve_platform_data tve_data = {
@@ -758,31 +752,13 @@ int __init ccwmx5x_init_fb(void)
&plcd_platform_data[i].fb_pdata,
sizeof(struct mxc_fb_platform_data));
plcd_platform_data[i].vif = i;
+ if (!plcd_platform_data[i].fb_pdata.interface_pix_fmt)
+ plcd_platform_data[i].fb_pdata.interface_pix_fmt =
+ i ? DISP1_PIX_FMT : DISP0_PIX_FMT;
+ mx53_fb_data[i].interface_pix_fmt =
+ plcd_platform_data[i].fb_pdata.interface_pix_fmt;
mxc_register_device(&lcd_pdev[i], (void *)&plcd_platform_data[i]);
}
- } else if ((p = ccwmx53_get_video_cmdline_opt(i, "LVDS")) != NULL) {
- pr_info("LVDS interface in DISP%d", i);
- if (*p++ != '@') {
- pr_info("Panel not provided, video interface will be disabled\n");
- continue;
- }
- if ((panel = ccwmx53_find_video_config(lcd_panel_list,
- ARRAY_SIZE(lcd_panel_list),
- p)) != NULL) {
- pr_info("Panel: %s", p);
- memcpy(&plcd_platform_data[i],
- panel,
- sizeof(struct ccwmx5x_lcd_pdata));
- memcpy(&mx53_fb_data[i],
- &plcd_platform_data[i].fb_pdata,
- sizeof(struct mxc_fb_platform_data));
- plcd_platform_data[i].vif = i;
- mxc_register_device(&lcd_pdev[i], (void *)&plcd_platform_data[i]);
-
- /* Configure the pins and register the LVDS bridge */
- gpio_lvds_active(i);
- mxc_register_device(&mxc_ldb_device, &ldb_data[i]);
- }
} else if ((p = ccwmx53_get_video_cmdline_opt(i, "VGA")) != NULL) {
pr_info("VGA interface in DISP%d\n", i);
gpio_vga_active(i);
@@ -826,8 +802,12 @@ int __init ccwmx5x_init_fb(void)
mxc_fb_devices[i].num_resources = 1;
mxc_fb_devices[i].resource = &mxcfb_resources[i];
mxc_register_device(&mxc_fb_devices[i], &mx53_fb_data[i]);
+
}
+ /* Register the LVDS bridge */
+ mxc_register_device(&mxc_ldb_device, &ldb_data);
+
/* DI0/1 DP-FG channel, used by the VPU */
mxc_register_device(&mxc_fb_devices[2], NULL);
diff --git a/arch/arm/mach-mx5/displays/displays.h b/arch/arm/mach-mx5/displays/displays.h
index a73644110b4d..b6bd5c8bda23 100644
--- a/arch/arm/mach-mx5/displays/displays.h
+++ b/arch/arm/mach-mx5/displays/displays.h
@@ -14,17 +14,38 @@
extern void gpio_video_active(int vif, u32 pad);
extern void gpio_video_inactive(int vif);
-extern void gpio_lvds_active(int interf);
-extern void gpio_lvds_inactive(int interf);
extern void gpio_vga_active(int interf);
extern void gpio_vga_inactive(int interf);
+#ifdef CONFIG_MODULE_CCXMX51
#ifdef CONFIG_CCXMX5X_DISP0_RGB888
-#define VIDEO_PIX_FMT IPU_PIX_FMT_RGB24
+#define DISP0_PIX_FMT IPU_PIX_FMT_RGB24
#else
-#define VIDEO_PIX_FMT IPU_PIX_FMT_RGB666
+#define DISP0_PIX_FMT IPU_PIX_FMT_RGB666
#endif
+#define DISP1_PIX_FMT IPU_PIX_FMT_RGB666
+#endif /* CONFIG_MODULE_CCXMX51 */
+
+#ifdef CONFIG_MODULE_CCXMX53
+/* The ConnectCore Wi-i.MX53 can select the pixel format per DISP interface */
+#ifdef CONFIG_CCXMX5X_DISP0_RGB888
+#define DISP0_PIX_FMT IPU_PIX_FMT_RGB24
+#elif defined(CONFIG_CCXMX5X_DISP0_RGB666)
+#define DISP0_PIX_FMT IPU_PIX_FMT_RGB666
+#else
+#define DISP0_PIX_FMT IPU_PIX_FMT_RGB565
+#endif
+
+#ifdef CONFIG_CCXMX5X_DISP1_RGB888
+#define DISP1_PIX_FMT IPU_PIX_FMT_RGB24
+#elif defined(CONFIG_CCXMX5X_DISP1_RGB666)
+#define DISP1_PIX_FMT IPU_PIX_FMT_RGB666
+#else
+#define DISP1_PIX_FMT IPU_PIX_FMT_RGB565
+#endif
+#endif /* CONFIG_MODULE_CCXMX53 */
+
#include "hdmi_ad9389.h"
#include "vga.h"
#include "lcd.h"
diff --git a/arch/arm/mach-mx5/displays/hdmi_ad9389.h b/arch/arm/mach-mx5/displays/hdmi_ad9389.h
index 97bd218929a1..d330f0109544 100644
--- a/arch/arm/mach-mx5/displays/hdmi_ad9389.h
+++ b/arch/arm/mach-mx5/displays/hdmi_ad9389.h
@@ -116,49 +116,42 @@ static struct fb_videomode ad9389_custom_2 = {
struct ccwmx5x_lcd_pdata ad9389_panel_list[] = {
{
.fb_pdata = {
- .interface_pix_fmt = VIDEO_PIX_FMT,
.mode_str = "1280x720",
.mode = &ad9389_1280x720x24,
},
.bl_enable = NULL,
}, {
.fb_pdata = {
- .interface_pix_fmt = VIDEO_PIX_FMT,
.mode_str = "1360x768",
.mode = &ad9389_1360x768x24,
},
.bl_enable = NULL,
}, {
.fb_pdata = {
- .interface_pix_fmt = VIDEO_PIX_FMT,
.mode_str = "1366x768",
.mode = &ad9389_1366x768x24,
},
.bl_enable = NULL,
}, {
.fb_pdata = {
- .interface_pix_fmt = VIDEO_PIX_FMT,
.mode_str = "1920x1080",
.mode = &ad9389_1920x1080x24,
},
.bl_enable = NULL,
}, {
.fb_pdata = {
- .interface_pix_fmt = VIDEO_PIX_FMT,
.mode_str = "1024x768",
.mode = &ad9389_1024x768x24,
},
.bl_enable = NULL,
}, {
.fb_pdata = {
- .interface_pix_fmt = VIDEO_PIX_FMT,
.mode_str = "custom1",
.mode = &ad9389_custom_1,
},
.bl_enable = NULL,
}, {
.fb_pdata = {
- .interface_pix_fmt = VIDEO_PIX_FMT,
.mode_str = "custom2",
.mode = &ad9389_custom_2,
},
diff --git a/arch/arm/mach-mx5/displays/lcd.h b/arch/arm/mach-mx5/displays/lcd.h
index c5453fef9efb..b65bef5cbd47 100644
--- a/arch/arm/mach-mx5/displays/lcd.h
+++ b/arch/arm/mach-mx5/displays/lcd.h
@@ -118,7 +118,6 @@ static struct fb_videomode lcd_custom_2 = {
struct ccwmx5x_lcd_pdata lcd_panel_list[] = {
{
.fb_pdata = {
- .interface_pix_fmt = VIDEO_PIX_FMT,
.mode_str = "LQ070Y3DG3B",
.mode = &lq70y3dg3b,
.num_modes = 1,
@@ -127,7 +126,6 @@ struct ccwmx5x_lcd_pdata lcd_panel_list[] = {
.init = &lcd_init,
}, {
.fb_pdata = {
- .interface_pix_fmt = VIDEO_PIX_FMT,
.mode_str = "LQ121K1LG11",
.mode = &lq121k1lg11,
.num_modes = 1,
@@ -136,7 +134,6 @@ struct ccwmx5x_lcd_pdata lcd_panel_list[] = {
.init = &lcd_init,
}, {
.fb_pdata = {
- .interface_pix_fmt = VIDEO_PIX_FMT,
.mode_str = "custom1",
.mode = &lcd_custom_1,
.num_modes = 1,
@@ -145,7 +142,6 @@ struct ccwmx5x_lcd_pdata lcd_panel_list[] = {
.init = &lcd_init,
}, {
.fb_pdata = {
- .interface_pix_fmt = VIDEO_PIX_FMT,
.mode_str = "custom2",
.mode = &lcd_custom_2,
.num_modes = 1,
diff --git a/arch/arm/mach-mx5/displays/vga.h b/arch/arm/mach-mx5/displays/vga.h
index 66f7b6753d06..ee1495f07694 100644
--- a/arch/arm/mach-mx5/displays/vga.h
+++ b/arch/arm/mach-mx5/displays/vga.h
@@ -47,14 +47,12 @@ static struct fb_videomode vga_custom_2 = {
struct ccwmx5x_lcd_pdata vga_panel_list[] = {
{
.fb_pdata = {
- .interface_pix_fmt = VIDEO_PIX_FMT,
.mode_str = "custom1",
.mode = &vga_custom_1,
},
.bl_enable = NULL,
}, {
.fb_pdata = {
- .interface_pix_fmt = VIDEO_PIX_FMT,
.mode_str = "custom2",
.mode = &vga_custom_2,
},