mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
sm501fb: control panel pin usage with platform data flags
This patch makes it possible to control panel pins usage with flags passed from the platform data. Without this patch the sm501fb driver always controls the VBIASEN and FPEN pins. The polarity and use of these pins are very platform specific, so this patch introduces the flags SM501FB_FLAG_PANEL_USE_VBIASEN and SM501FB_FLAG_PANEL_USE_FPEN which enable the use of these pins. This patch is needed to support the a Sharp LQ104V1DG21 lcd panel on SuperH platforms such as R2D-1 and R2D-PLUS boards. Letting the sm501fb driver control the FPEN and VBIASEN pins like today just results in lcd panel flicker. Signed-off-by: Magnus Damm <[email protected]> Cc: "Antonino A. Daplas" <[email protected]> Cc: Paul Mundt <[email protected]> Cc: Ben Dooks <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
625fcaf973
commit
dfcffa467b
2 changed files with 27 additions and 16 deletions
|
|
@ -641,6 +641,7 @@ static void sm501fb_panel_power(struct sm501fb_info *fbi, int to)
|
|||
{
|
||||
unsigned long control;
|
||||
void __iomem *ctrl_reg = fbi->regs + SM501_DC_PANEL_CONTROL;
|
||||
struct sm501_platdata_fbsub *pd = fbi->pdata->fb_pnl;
|
||||
|
||||
control = readl(ctrl_reg);
|
||||
|
||||
|
|
@ -657,26 +658,34 @@ static void sm501fb_panel_power(struct sm501fb_info *fbi, int to)
|
|||
sm501fb_sync_regs(fbi);
|
||||
mdelay(10);
|
||||
|
||||
control |= SM501_DC_PANEL_CONTROL_BIAS; /* VBIASEN */
|
||||
writel(control, ctrl_reg);
|
||||
sm501fb_sync_regs(fbi);
|
||||
mdelay(10);
|
||||
|
||||
control |= SM501_DC_PANEL_CONTROL_FPEN;
|
||||
writel(control, ctrl_reg);
|
||||
if (pd->flags & SM501FB_FLAG_PANEL_USE_VBIASEN) {
|
||||
control |= SM501_DC_PANEL_CONTROL_BIAS; /* VBIASEN */
|
||||
writel(control, ctrl_reg);
|
||||
sm501fb_sync_regs(fbi);
|
||||
mdelay(10);
|
||||
}
|
||||
|
||||
if (pd->flags & SM501FB_FLAG_PANEL_USE_FPEN) {
|
||||
control |= SM501_DC_PANEL_CONTROL_FPEN;
|
||||
writel(control, ctrl_reg);
|
||||
sm501fb_sync_regs(fbi);
|
||||
mdelay(10);
|
||||
}
|
||||
} else if (!to && (control & SM501_DC_PANEL_CONTROL_VDD) != 0) {
|
||||
/* disable panel power */
|
||||
if (pd->flags & SM501FB_FLAG_PANEL_USE_FPEN) {
|
||||
control &= ~SM501_DC_PANEL_CONTROL_FPEN;
|
||||
writel(control, ctrl_reg);
|
||||
sm501fb_sync_regs(fbi);
|
||||
mdelay(10);
|
||||
}
|
||||
|
||||
control &= ~SM501_DC_PANEL_CONTROL_FPEN;
|
||||
writel(control, ctrl_reg);
|
||||
sm501fb_sync_regs(fbi);
|
||||
mdelay(10);
|
||||
|
||||
control &= ~SM501_DC_PANEL_CONTROL_BIAS;
|
||||
writel(control, ctrl_reg);
|
||||
sm501fb_sync_regs(fbi);
|
||||
mdelay(10);
|
||||
if (pd->flags & SM501FB_FLAG_PANEL_USE_VBIASEN) {
|
||||
control &= ~SM501_DC_PANEL_CONTROL_BIAS;
|
||||
writel(control, ctrl_reg);
|
||||
sm501fb_sync_regs(fbi);
|
||||
mdelay(10);
|
||||
}
|
||||
|
||||
control &= ~SM501_DC_PANEL_CONTROL_DATA;
|
||||
writel(control, ctrl_reg);
|
||||
|
|
|
|||
Loading…
Reference in a new issue