From 7653aaab775d4c205a7dce52850c8e3d4f31d4ea Mon Sep 17 00:00:00 2001 From: Timur Tabi Date: Sat, 9 Jul 2011 15:38:14 -0500 Subject: drivers/video: use strings to specify the Freescale DIU monitor port Instead of using ill-defined numbers (0, 1, and 2) for the monitor port, allow the user to specify the port by name ("dvi", "lvds", or "dlvds"). This works on the kernel command line, the module command-line, and the sysfs "monitor" device. Note that changing the monitor port does not currently work on the P1022DS, because the code that talks to the PIXIS FPGA is broken. Signed-off-by: Timur Tabi Acked-by: Anatolij Gustschin Signed-off-by: Paul Mundt --- arch/powerpc/platforms/512x/mpc512x_shared.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) (limited to 'arch/powerpc/platforms/512x/mpc512x_shared.c') diff --git a/arch/powerpc/platforms/512x/mpc512x_shared.c b/arch/powerpc/platforms/512x/mpc512x_shared.c index e41ebbdb3e12..3dc62f907a1e 100644 --- a/arch/powerpc/platforms/512x/mpc512x_shared.c +++ b/arch/powerpc/platforms/512x/mpc512x_shared.c @@ -66,8 +66,8 @@ struct fsl_diu_shared_fb { bool in_use; }; -unsigned int mpc512x_get_pixel_format(unsigned int bits_per_pixel, - int monitor_port) +u32 mpc512x_get_pixel_format(enum fsl_diu_monitor_port port, + unsigned int bits_per_pixel) { switch (bits_per_pixel) { case 32: @@ -80,11 +80,12 @@ unsigned int mpc512x_get_pixel_format(unsigned int bits_per_pixel, return 0x00000400; } -void mpc512x_set_gamma_table(int monitor_port, char *gamma_table_base) +void mpc512x_set_gamma_table(enum fsl_diu_monitor_port port, + char *gamma_table_base) { } -void mpc512x_set_monitor_port(int monitor_port) +void mpc512x_set_monitor_port(enum fsl_diu_monitor_port port) { } @@ -182,14 +183,10 @@ void mpc512x_set_pixel_clock(unsigned int pixclock) iounmap(ccm); } -ssize_t mpc512x_show_monitor_port(int monitor_port, char *buf) +enum fsl_diu_monitor_port +mpc512x_valid_monitor_port(enum fsl_diu_monitor_port port) { - return sprintf(buf, "0 - 5121 LCD\n"); -} - -int mpc512x_set_sysfs_monitor_port(int val) -{ - return 0; + return FSL_DIU_PORT_DVI; } static struct fsl_diu_shared_fb __attribute__ ((__aligned__(8))) diu_shared_fb; @@ -332,8 +329,7 @@ void __init mpc512x_setup_diu(void) diu_ops.set_gamma_table = mpc512x_set_gamma_table; diu_ops.set_monitor_port = mpc512x_set_monitor_port; diu_ops.set_pixel_clock = mpc512x_set_pixel_clock; - diu_ops.show_monitor_port = mpc512x_show_monitor_port; - diu_ops.set_sysfs_monitor_port = mpc512x_set_sysfs_monitor_port; + diu_ops.valid_monitor_port = mpc512x_valid_monitor_port; diu_ops.release_bootmem = mpc512x_release_bootmem; #endif } -- cgit v1.2.3 From c4e5a0232763db22d6c60c391ed5816b2b2ac063 Mon Sep 17 00:00:00 2001 From: Timur Tabi Date: Wed, 28 Sep 2011 16:19:53 -0500 Subject: drivers/video: fsl-diu-fb: only DIU modes 0 and 1 are supported The Freescale DIU video controller supports five video "modes", but only the first two are used by the driver. The other three are special modes that don't make sense for a framebuffer driver. Therefore, there's no point in keeping a global variable that indicates which mode we're supposed to use. Signed-off-by: Timur Tabi Signed-off-by: Florian Tobias Schandinat --- arch/powerpc/platforms/512x/mpc512x_shared.c | 2 +- drivers/video/fsl-diu-fb.c | 11 +++-------- include/linux/fsl-diu-fb.h | 8 ++++---- 3 files changed, 8 insertions(+), 13 deletions(-) (limited to 'arch/powerpc/platforms/512x/mpc512x_shared.c') diff --git a/arch/powerpc/platforms/512x/mpc512x_shared.c b/arch/powerpc/platforms/512x/mpc512x_shared.c index 3dc62f907a1e..cfe958e94e1e 100644 --- a/arch/powerpc/platforms/512x/mpc512x_shared.c +++ b/arch/powerpc/platforms/512x/mpc512x_shared.c @@ -253,7 +253,7 @@ void __init mpc512x_init_diu(void) } mode = in_be32(&diu_reg->diu_mode); - if (mode != MFB_MODE1) { + if (mode == MFB_MODE0) { pr_info("%s: DIU OFF\n", __func__); goto out; } diff --git a/drivers/video/fsl-diu-fb.c b/drivers/video/fsl-diu-fb.c index 0fd4c784f8df..6539e70cb59a 100644 --- a/drivers/video/fsl-diu-fb.c +++ b/drivers/video/fsl-diu-fb.c @@ -52,7 +52,6 @@ struct diu_hw { struct diu __iomem *diu_reg; spinlock_t reg_lock; - unsigned int mode; /* DIU operation mode */ }; struct diu_addr { @@ -426,7 +425,6 @@ static struct mfb_info mfb_template[] = { }; static struct diu_hw dr = { - .mode = MFB_MODE1, .reg_lock = __SPIN_LOCK_UNLOCKED(diu_hw.reg_lock), }; @@ -620,7 +618,7 @@ static void enable_lcdc(struct fb_info *info) struct fsl_diu_data *machine_data = mfbi->parent; if (!machine_data->fb_enabled) { - out_be32(&hw->diu_mode, dr.mode); + out_be32(&hw->diu_mode, MFB_MODE1); machine_data->fb_enabled++; } } @@ -1390,9 +1388,6 @@ static int request_irq_local(int irq) ints |= INT_VSYNC; #endif - if (dr.mode == MFB_MODE2 || dr.mode == MFB_MODE3) - ints |= INT_VSYNC_WB; - /* Read to clear the status */ in_be32(&hw->int_status); out_be32(&hw->int_mask, ints); @@ -1558,7 +1553,7 @@ static int __devinit fsl_diu_probe(struct platform_device *pdev) } diu_mode = in_be32(&dr.diu_reg->diu_mode); - if (diu_mode != MFB_MODE1) + if (diu_mode == MFB_MODE0) out_be32(&dr.diu_reg->diu_mode, 0); /* disable DIU */ /* Get the IRQ of the DIU */ @@ -1611,7 +1606,7 @@ static int __devinit fsl_diu_probe(struct platform_device *pdev) * Let DIU display splash screen if it was pre-initialized * by the bootloader, set dummy area descriptor otherwise. */ - if (diu_mode != MFB_MODE1) + if (diu_mode == MFB_MODE0) out_be32(&dr.diu_reg->desc[0], machine_data->dummy_ad->paddr); out_be32(&dr.diu_reg->desc[1], machine_data->dummy_ad->paddr); diff --git a/include/linux/fsl-diu-fb.h b/include/linux/fsl-diu-fb.h index 363d5e290cad..11c16a1fb9e3 100644 --- a/include/linux/fsl-diu-fb.h +++ b/include/linux/fsl-diu-fb.h @@ -153,12 +153,12 @@ struct diu { __be32 plut; } __attribute__ ((packed)); -/* Modes of operation of DIU */ +/* + * Modes of operation of DIU. The DIU supports five different modes, but + * the driver only supports modes 0 and 1. + */ #define MFB_MODE0 0 /* DIU off */ #define MFB_MODE1 1 /* All three planes output to display */ -#define MFB_MODE2 2 /* Plane 1 to display, planes 2+3 written back*/ -#define MFB_MODE3 3 /* All three planes written back to memory */ -#define MFB_MODE4 4 /* Color bar generation */ #endif /* __KERNEL__ */ #endif /* __FSL_DIU_FB_H__ */ -- cgit v1.2.3