summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2019-09-09 21:40:13 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2019-09-12 10:30:07 +0200
commit3b6f72f5b4c8b2f522252006bc1bf9bbc8c9d236 (patch)
tree3bb36f6788c234a735991d6b6afd4b8da6e71a13 /arch
parentfc45db983faa9b6731c2c57d117339c0063778b4 (diff)
downloadbarebox-3b6f72f5b4c8b2f522252006bc1bf9bbc8c9d236.tar.gz
barebox-3b6f72f5b4c8b2f522252006bc1bf9bbc8c9d236.tar.xz
video: imxfb: make pcr and bpp per-display settings
These settings used to be specified per-mode. But the device tree bindings have these two values attached to the display and not to each mode. Also for the supported boards it doesn't matter as they all only have a single mode. This is preparatory work to add devicetree support for the imxfb driver. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c30
-rw-r--r--arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c31
-rw-r--r--arch/arm/boards/freescale-mx21-ads/imx21ads.c34
-rw-r--r--arch/arm/boards/guf-neso/board.c58
-rw-r--r--arch/arm/boards/karo-tx25/board.c34
-rw-r--r--arch/arm/boards/phytec-phycore-imx27/pcm038.c46
-rw-r--r--arch/arm/mach-imx/include/mach/imxfb.h10
7 files changed, 114 insertions, 129 deletions
diff --git a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
index 25bf40ce79..76d6f5ba86 100644
--- a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
+++ b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
@@ -56,22 +56,18 @@ struct imx_nand_platform_data nand_info = {
.hw_ecc = 1,
};
-static struct imx_fb_videomode imxfb_mode = {
- .mode = {
- .name = "CMO-QVGA",
- .refresh = 60,
- .xres = 320,
- .yres = 240,
- .pixclock = KHZ2PICOS(6500),
- .hsync_len = 30,
- .left_margin = 38,
- .right_margin = 20,
- .vsync_len = 3,
- .upper_margin = 15,
- .lower_margin = 4,
- },
- .pcr = 0xCAD08B80,
- .bpp = 16,
+static struct fb_videomode imxfb_mode = {
+ .name = "CMO-QVGA",
+ .refresh = 60,
+ .xres = 320,
+ .yres = 240,
+ .pixclock = KHZ2PICOS(6500),
+ .hsync_len = 30,
+ .left_margin = 38,
+ .right_margin = 20,
+ .vsync_len = 3,
+ .upper_margin = 15,
+ .lower_margin = 4,
};
static struct imx_fb_platform_data eukrea_cpuimx25_fb_data = {
@@ -80,6 +76,8 @@ static struct imx_fb_platform_data eukrea_cpuimx25_fb_data = {
.pwmr = 0x00A903FF,
.lscr1 = 0x00120300,
.dmacr = 0x80040060,
+ .pcr = 0xCAD08B80,
+ .bpp = 16,
};
struct gpio_led led0 = {
diff --git a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
index 63034e2755..52971ed7ee 100644
--- a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
+++ b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
@@ -80,22 +80,19 @@ static struct i2c_board_info i2c_devices[] = {
};
#ifdef CONFIG_DRIVER_VIDEO_IMX
-static struct imx_fb_videomode imxfb_mode = {
- .mode = {
- .name = "CMO-QVGA",
- .refresh = 60,
- .xres = 320,
- .yres = 240,
- .pixclock = 156000,
- .hsync_len = 30,
- .left_margin = 38,
- .right_margin = 20,
- .vsync_len = 3,
- .upper_margin = 15,
- .lower_margin = 4,
- },
- .pcr = 0xFAD08B80,
- .bpp = 16,};
+static struct fb_videomode imxfb_mode = {
+ .name = "CMO-QVGA",
+ .refresh = 60,
+ .xres = 320,
+ .yres = 240,
+ .pixclock = 156000,
+ .hsync_len = 30,
+ .left_margin = 38,
+ .right_margin = 20,
+ .vsync_len = 3,
+ .upper_margin = 15,
+ .lower_margin = 4,
+};
static struct imx_fb_platform_data eukrea_cpuimx27_fb_data = {
.mode = &imxfb_mode,
@@ -103,6 +100,8 @@ static struct imx_fb_platform_data eukrea_cpuimx27_fb_data = {
.pwmr = 0x00A903FF,
.lscr1 = 0x00120300,
.dmacr = 0x00020010,
+ .pcr = 0xFAD08B80,
+ .bpp = 16,
};
#endif
diff --git a/arch/arm/boards/freescale-mx21-ads/imx21ads.c b/arch/arm/boards/freescale-mx21-ads/imx21ads.c
index aa654da494..2c54cd7030 100644
--- a/arch/arm/boards/freescale-mx21-ads/imx21ads.c
+++ b/arch/arm/boards/freescale-mx21-ads/imx21ads.c
@@ -47,24 +47,20 @@ struct imx_nand_platform_data nand_info = {
};
/* Sharp LQ035Q7DB02 QVGA display */
-static struct imx_fb_videomode imx_fb_modedata = {
- .mode = {
- .name = "Sharp-LQ035Q7",
- .refresh = 60,
- .xres = 240,
- .yres = 320,
- .pixclock = 188679,
- .left_margin = 6,
- .right_margin = 16,
- .upper_margin = 8,
- .lower_margin = 10,
- .hsync_len = 2,
- .vsync_len = 1,
- .sync = 0,
- .vmode = FB_VMODE_NONINTERLACED,
- },
- .pcr = 0xfb108bc7,
- .bpp = 16,
+static struct fb_videomode imx_fb_modedata = {
+ .name = "Sharp-LQ035Q7",
+ .refresh = 60,
+ .xres = 240,
+ .yres = 320,
+ .pixclock = 188679,
+ .left_margin = 6,
+ .right_margin = 16,
+ .upper_margin = 8,
+ .lower_margin = 10,
+ .hsync_len = 2,
+ .vsync_len = 1,
+ .sync = 0,
+ .vmode = FB_VMODE_NONINTERLACED,
};
static struct imx_fb_platform_data imx_fb_data = {
@@ -76,6 +72,8 @@ static struct imx_fb_platform_data imx_fb_data = {
.pwmr = 0x00a903ff,
.lscr1 = 0x00120300,
.dmacr = 0x00020008,
+ .pcr = 0xfb108bc7,
+ .bpp = 16,
};
static int imx21ads_timing_init(void)
diff --git a/arch/arm/boards/guf-neso/board.c b/arch/arm/boards/guf-neso/board.c
index 2a64bc14fc..6846ba5793 100644
--- a/arch/arm/boards/guf-neso/board.c
+++ b/arch/arm/boards/guf-neso/board.c
@@ -62,36 +62,18 @@ static struct imx_nand_platform_data nand_info = {
.flash_bbt = 1,
};
-static struct imx_fb_videomode imxfb_mode = {
- .mode = {
- .name = "CPT CLAA070LC0JCT",
- .refresh = 60,
- .xres = 800,
- .yres = 480,
- .pixclock = KHZ2PICOS(27000),
- .hsync_len = 1, /* DE only sync */
- .left_margin = 50,
- .right_margin = 50,
- .vsync_len = 1, /* DE only sync */
- .upper_margin = 10,
- .lower_margin = 10,
- },
- /*
- * - TFT style panel
- * - clk enabled while idle
- * - clock inverted
- * - data not inverted
- * - data enable high active
- */
- .pcr = PCR_TFT |
- PCR_COLOR |
- PCR_PBSIZ_8 |
- PCR_BPIX_16 |
- PCR_CLKPOL |
- PCR_SCLK_SEL |
- PCR_LPPOL |
- PCR_FLMPOL,
- .bpp = 16, /* TODO 32 bit does not work: The 'green' component is lacking in this mode */
+static struct fb_videomode imxfb_mode = {
+ .name = "CPT CLAA070LC0JCT",
+ .refresh = 60,
+ .xres = 800,
+ .yres = 480,
+ .pixclock = KHZ2PICOS(27000),
+ .hsync_len = 1, /* DE only sync */
+ .left_margin = 50,
+ .right_margin = 50,
+ .vsync_len = 1, /* DE only sync */
+ .upper_margin = 10,
+ .lower_margin = 10,
};
static void neso_fb_enable(int enable)
@@ -109,6 +91,22 @@ static struct imx_fb_platform_data neso_fb_data = {
.dmacr = (0 << 31) | (4 << 16) | 96,
.enable = neso_fb_enable,
.framebuffer_ovl = (void *)0xa7f00000,
+ /*
+ * - TFT style panel
+ * - clk enabled while idle
+ * - clock inverted
+ * - data not inverted
+ * - data enable high active
+ */
+ .pcr = PCR_TFT |
+ PCR_COLOR |
+ PCR_PBSIZ_8 |
+ PCR_BPIX_16 |
+ PCR_CLKPOL |
+ PCR_SCLK_SEL |
+ PCR_LPPOL |
+ PCR_FLMPOL,
+ .bpp = 16, /* TODO 32 bit does not work: The 'green' component is lacking in this mode */
};
#if defined(CONFIG_USB) && defined(CONFIG_USB_ULPI)
diff --git a/arch/arm/boards/karo-tx25/board.c b/arch/arm/boards/karo-tx25/board.c
index ebebd58d80..a4d4af57a3 100644
--- a/arch/arm/boards/karo-tx25/board.c
+++ b/arch/arm/boards/karo-tx25/board.c
@@ -125,24 +125,20 @@ static iomux_v3_cfg_t tx25_lcdc_gpios[] = {
MX25_PAD_OE_ACD__OE_ACD,
};
-static struct imx_fb_videomode stk5_fb_mode = {
- .bpp = 16,
- .mode = {
- .name = "G-ETV570G0DMU",
- .pixclock = 33333,
-
- .xres = 640,
- .yres = 480,
-
- .hsync_len = 64,
- .left_margin = 96,
- .right_margin = 80,
-
- .vsync_len = 3,
- .upper_margin = 46,
- .lower_margin = 39,
- },
- .pcr = PCR_TFT | PCR_COLOR | PCR_FLMPOL | PCR_LPPOL | PCR_SCLK_SEL,
+static struct fb_videomode stk5_fb_mode = {
+ .name = "G-ETV570G0DMU",
+ .pixclock = 33333,
+
+ .xres = 640,
+ .yres = 480,
+
+ .hsync_len = 64,
+ .left_margin = 96,
+ .right_margin = 80,
+
+ .vsync_len = 3,
+ .upper_margin = 46,
+ .lower_margin = 39,
};
#define STK5_LCD_BACKLIGHT_GPIO IMX_GPIO_NR(1, 26)
@@ -168,6 +164,8 @@ static struct imx_fb_platform_data tx25_fb_data = {
.num_modes = 1,
.dmacr = 0x80040060,
.enable = tx25_fb_enable,
+ .bpp = 16,
+ .pcr = PCR_TFT | PCR_COLOR | PCR_FLMPOL | PCR_LPPOL | PCR_SCLK_SEL,
};
static int tx25_init_fb(void)
diff --git a/arch/arm/boards/phytec-phycore-imx27/pcm038.c b/arch/arm/boards/phytec-phycore-imx27/pcm038.c
index 5ebef516a7..008346faf1 100644
--- a/arch/arm/boards/phytec-phycore-imx27/pcm038.c
+++ b/arch/arm/boards/phytec-phycore-imx27/pcm038.c
@@ -34,20 +34,26 @@
#define PCM038_GPIO_OTG_STP (GPIO_PORTE + 1)
-static struct imx_fb_videomode imxfb_mode = {
- .mode = {
- .name = "Sharp-LQ035Q7",
- .refresh = 60,
- .xres = 240,
- .yres = 320,
- .pixclock = 188679, /* in ps (5.3MHz) */
- .hsync_len = 7,
- .left_margin = 5,
- .right_margin = 16,
- .vsync_len = 1,
- .upper_margin = 7,
- .lower_margin = 9,
- },
+static struct fb_videomode imxfb_mode = {
+ .name = "Sharp-LQ035Q7",
+ .refresh = 60,
+ .xres = 240,
+ .yres = 320,
+ .pixclock = 188679, /* in ps (5.3MHz) */
+ .hsync_len = 7,
+ .left_margin = 5,
+ .right_margin = 16,
+ .vsync_len = 1,
+ .upper_margin = 7,
+ .lower_margin = 9,
+};
+
+static struct imx_fb_platform_data pcm038_fb_data = {
+ .mode = &imxfb_mode,
+ .num_modes = 1,
+ .pwmr = 0x00a903ff,
+ .lscr1 = 0x00120300,
+ .dmacr = 0x00020010,
/*
* - HSYNC active high
* - VSYNC active high
@@ -57,16 +63,8 @@ static struct imx_fb_videomode imxfb_mode = {
* - data enable low active
* - enable sharp mode
*/
- .pcr = 0xf00080c0,
- .bpp = 16,
-};
-
-static struct imx_fb_platform_data pcm038_fb_data = {
- .mode = &imxfb_mode,
- .num_modes = 1,
- .pwmr = 0x00a903ff,
- .lscr1 = 0x00120300,
- .dmacr = 0x00020010,
+ .pcr = 0xf00080c0,
+ .bpp = 16,
};
static const unsigned int pcm038_pins[] = {
diff --git a/arch/arm/mach-imx/include/mach/imxfb.h b/arch/arm/mach-imx/include/mach/imxfb.h
index ea39e3198e..6df7a14dde 100644
--- a/arch/arm/mach-imx/include/mach/imxfb.h
+++ b/arch/arm/mach-imx/include/mach/imxfb.h
@@ -52,17 +52,11 @@
#define DMACR_HM(x) (((x) & 0xf) << 16)
#define DMACR_TM(x) ((x) & 0xf)
-struct imx_fb_videomode {
- struct fb_videomode mode;
- u32 pcr;
- unsigned char bpp;
-};
-
/**
* Define relevant framebuffer information
*/
struct imx_fb_platform_data {
- struct imx_fb_videomode *mode;
+ struct fb_videomode *mode;
u_int num_modes;
u_int cmap_greyscale:1,
@@ -73,6 +67,8 @@ struct imx_fb_platform_data {
u_int pwmr;
u_int lscr1;
u_int dmacr;
+ u32 pcr;
+ unsigned char bpp;
/** force a memory area to be used, else NULL for dynamic allocation */
void *framebuffer;