aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Kaiser <martin@kaiser.cx>2017-04-21 10:47:11 -0400
committerBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>2017-04-21 10:47:11 -0400
commitb62ea4112ce3746664dcc2f232d03461f0e6f3c7 (patch)
treebf508511f7f5161c2b005b8cfeb6ca025730fea4
parent0cb51f6532639254eca4aba979b503f6eb467bb4 (diff)
video: fbdev: imxfb: support AUS mode
Some displays require setting AUS mode in the LDCD AUS Mode Control Register to work with the imxfb driver. Like the value of the Panel Configuration Register, the AUS mode setting depends on the display mode. Allow setting AUS mode from the device tree by adding a boolean property. Make this property optional to keep the DT ABI stable. AUS mode can be set only on imx21 and compatible chipsets. Signed-off-by: Martin Kaiser <martin@kaiser.cx> Cc: Sascha Hauer <kernel@pengutronix.de> Cc: Rob Herring <robh+dt@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
-rw-r--r--drivers/video/fbdev/imxfb.c17
-rw-r--r--include/linux/platform_data/video-imxfb.h1
2 files changed, 18 insertions, 0 deletions
diff --git a/drivers/video/fbdev/imxfb.c b/drivers/video/fbdev/imxfb.c
index 1b0faadb3080..c166e0725be5 100644
--- a/drivers/video/fbdev/imxfb.c
+++ b/drivers/video/fbdev/imxfb.c
@@ -117,6 +117,9 @@
117 117
118#define IMXFB_LSCR1_DEFAULT 0x00120300 118#define IMXFB_LSCR1_DEFAULT 0x00120300
119 119
120#define LCDC_LAUSCR 0x80
121#define LAUSCR_AUS_MODE (1<<31)
122
120/* Used fb-mode. Can be set on kernel command line, therefore file-static. */ 123/* Used fb-mode. Can be set on kernel command line, therefore file-static. */
121static const char *fb_mode; 124static const char *fb_mode;
122 125
@@ -158,6 +161,7 @@ struct imxfb_info {
158 dma_addr_t dbar2; 161 dma_addr_t dbar2;
159 162
160 u_int pcr; 163 u_int pcr;
164 u_int lauscr;
161 u_int pwmr; 165 u_int pwmr;
162 u_int lscr1; 166 u_int lscr1;
163 u_int dmacr; 167 u_int dmacr;
@@ -422,6 +426,11 @@ static int imxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
422 pcr |= imxfb_mode->pcr & ~(0x3f | (7 << 25)); 426 pcr |= imxfb_mode->pcr & ~(0x3f | (7 << 25));
423 427
424 fbi->pcr = pcr; 428 fbi->pcr = pcr;
429 /*
430 * The LCDC AUS Mode Control Register does not exist on imx1.
431 */
432 if (!is_imx1_fb(fbi) && imxfb_mode->aus_mode)
433 fbi->lauscr = LAUSCR_AUS_MODE;
425 434
426 /* 435 /*
427 * Copy the RGB parameters for this display 436 * Copy the RGB parameters for this display
@@ -638,6 +647,9 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf
638 if (fbi->dmacr) 647 if (fbi->dmacr)
639 writel(fbi->dmacr, fbi->regs + LCDC_DMACR); 648 writel(fbi->dmacr, fbi->regs + LCDC_DMACR);
640 649
650 if (fbi->lauscr)
651 writel(fbi->lauscr, fbi->regs + LCDC_LAUSCR);
652
641 return 0; 653 return 0;
642} 654}
643 655
@@ -734,6 +746,11 @@ static int imxfb_of_read_mode(struct device *dev, struct device_node *np,
734 imxfb_mode->bpp = bpp; 746 imxfb_mode->bpp = bpp;
735 imxfb_mode->pcr = pcr; 747 imxfb_mode->pcr = pcr;
736 748
749 /*
750 * fsl,aus-mode is optional
751 */
752 imxfb_mode->aus_mode = of_property_read_bool(np, "fsl,aus-mode");
753
737 return 0; 754 return 0;
738} 755}
739 756
diff --git a/include/linux/platform_data/video-imxfb.h b/include/linux/platform_data/video-imxfb.h
index a5c0a71ec914..cf9348b376ac 100644
--- a/include/linux/platform_data/video-imxfb.h
+++ b/include/linux/platform_data/video-imxfb.h
@@ -50,6 +50,7 @@
50struct imx_fb_videomode { 50struct imx_fb_videomode {
51 struct fb_videomode mode; 51 struct fb_videomode mode;
52 u32 pcr; 52 u32 pcr;
53 bool aus_mode;
53 unsigned char bpp; 54 unsigned char bpp;
54}; 55};
55 56