sm501: add inversion controls for VBIASEN and FPEN

Add flags to allow the driver to invert the sense of both VBIASEN and FPEN
signals comming from the SM501.

Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Ben Dooks 2008-07-23 21:31:35 -07:00 committed by Linus Torvalds
parent 968910bd03
commit 206c5d69d0
2 changed files with 24 additions and 4 deletions

View File

@ -663,15 +663,25 @@ static void sm501fb_panel_power(struct sm501fb_info *fbi, int to)
sm501fb_sync_regs(fbi); sm501fb_sync_regs(fbi);
mdelay(10); mdelay(10);
/* VBIASEN */
if (!(pd->flags & SM501FB_FLAG_PANEL_NO_VBIASEN)) { if (!(pd->flags & SM501FB_FLAG_PANEL_NO_VBIASEN)) {
control |= SM501_DC_PANEL_CONTROL_BIAS; /* VBIASEN */ if (pd->flags & SM501FB_FLAG_PANEL_INV_VBIASEN)
control &= ~SM501_DC_PANEL_CONTROL_BIAS;
else
control |= SM501_DC_PANEL_CONTROL_BIAS;
writel(control, ctrl_reg); writel(control, ctrl_reg);
sm501fb_sync_regs(fbi); sm501fb_sync_regs(fbi);
mdelay(10); mdelay(10);
} }
if (!(pd->flags & SM501FB_FLAG_PANEL_NO_FPEN)) { if (!(pd->flags & SM501FB_FLAG_PANEL_NO_FPEN)) {
control |= SM501_DC_PANEL_CONTROL_FPEN; if (pd->flags & SM501FB_FLAG_PANEL_INV_FPEN)
control &= ~SM501_DC_PANEL_CONTROL_FPEN;
else
control |= SM501_DC_PANEL_CONTROL_FPEN;
writel(control, ctrl_reg); writel(control, ctrl_reg);
sm501fb_sync_regs(fbi); sm501fb_sync_regs(fbi);
mdelay(10); mdelay(10);
@ -679,14 +689,22 @@ static void sm501fb_panel_power(struct sm501fb_info *fbi, int to)
} else if (!to && (control & SM501_DC_PANEL_CONTROL_VDD) != 0) { } else if (!to && (control & SM501_DC_PANEL_CONTROL_VDD) != 0) {
/* disable panel power */ /* disable panel power */
if (!(pd->flags & SM501FB_FLAG_PANEL_NO_FPEN)) { if (!(pd->flags & SM501FB_FLAG_PANEL_NO_FPEN)) {
control &= ~SM501_DC_PANEL_CONTROL_FPEN; if (pd->flags & SM501FB_FLAG_PANEL_INV_FPEN)
control |= SM501_DC_PANEL_CONTROL_FPEN;
else
control &= ~SM501_DC_PANEL_CONTROL_FPEN;
writel(control, ctrl_reg); writel(control, ctrl_reg);
sm501fb_sync_regs(fbi); sm501fb_sync_regs(fbi);
mdelay(10); mdelay(10);
} }
if (!(pd->flags & SM501FB_FLAG_PANEL_NO_VBIASEN)) { if (!(pd->flags & SM501FB_FLAG_PANEL_NO_VBIASEN)) {
control &= ~SM501_DC_PANEL_CONTROL_BIAS; if (pd->flags & SM501FB_FLAG_PANEL_INV_VBIASEN)
control |= SM501_DC_PANEL_CONTROL_BIAS;
else
control &= ~SM501_DC_PANEL_CONTROL_BIAS;
writel(control, ctrl_reg); writel(control, ctrl_reg);
sm501fb_sync_regs(fbi); sm501fb_sync_regs(fbi);
mdelay(10); mdelay(10);

View File

@ -73,6 +73,8 @@ extern unsigned long sm501_gpio_get(struct device *dev,
#define SM501FB_FLAG_USE_HWACCEL (1<<3) #define SM501FB_FLAG_USE_HWACCEL (1<<3)
#define SM501FB_FLAG_PANEL_NO_FPEN (1<<4) #define SM501FB_FLAG_PANEL_NO_FPEN (1<<4)
#define SM501FB_FLAG_PANEL_NO_VBIASEN (1<<5) #define SM501FB_FLAG_PANEL_NO_VBIASEN (1<<5)
#define SM501FB_FLAG_PANEL_INV_FPEN (1<<6)
#define SM501FB_FLAG_PANEL_INV_VBIASEN (1<<7)
struct sm501_platdata_fbsub { struct sm501_platdata_fbsub {
struct fb_videomode *def_mode; struct fb_videomode *def_mode;