Skip to content

Commit

Permalink
FB: sa1100: remove global sa1100fb_.*_power function pointers
Browse files Browse the repository at this point in the history
Now that we have platform data contained within the individual board
code, we can get rid of the global function pointers, placing them
inside the platform data instead.

Acked-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Russell King committed Feb 21, 2012
1 parent e1b7a72 commit 086ada5
Show file tree
Hide file tree
Showing 8 changed files with 79 additions and 64 deletions.
90 changes: 60 additions & 30 deletions arch/arm/mach-sa1100/assabet.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,33 +71,6 @@ void ASSABET_BCR_frob(unsigned int mask, unsigned int val)

EXPORT_SYMBOL(ASSABET_BCR_frob);

static void assabet_backlight_power(int on)
{
#ifndef ASSABET_PAL_VIDEO
if (on)
ASSABET_BCR_set(ASSABET_BCR_LIGHT_ON);
else
#endif
ASSABET_BCR_clear(ASSABET_BCR_LIGHT_ON);
}

/*
* Turn on/off the backlight. When turning the backlight on,
* we wait 500us after turning it on so we don't cause the
* supplies to droop when we enable the LCD controller (and
* cause a hard reset.)
*/
static void assabet_lcd_power(int on)
{
#ifndef ASSABET_PAL_VIDEO
if (on) {
ASSABET_BCR_set(ASSABET_BCR_LCD_ON);
udelay(500);
} else
#endif
ASSABET_BCR_clear(ASSABET_BCR_LCD_ON);
}


/*
* Assabet flash support code.
Expand Down Expand Up @@ -206,7 +179,49 @@ static struct mcp_plat_data assabet_mcp_data = {
.sclk_rate = 11981000,
};

static void assabet_lcd_set_visual(u32 visual)
{
u_int is_true_color = visual == FB_VISUAL_TRUECOLOR;

if (machine_is_assabet()) {
#if 1 // phase 4 or newer Assabet's
if (is_true_color)
ASSABET_BCR_set(ASSABET_BCR_LCD_12RGB);
else
ASSABET_BCR_clear(ASSABET_BCR_LCD_12RGB);
#else
// older Assabet's
if (is_true_color)
ASSABET_BCR_clear(ASSABET_BCR_LCD_12RGB);
else
ASSABET_BCR_set(ASSABET_BCR_LCD_12RGB);
#endif
}
}

#ifndef ASSABET_PAL_VIDEO
static void assabet_lcd_backlight_power(int on)
{
if (on)
ASSABET_BCR_set(ASSABET_BCR_LIGHT_ON);
else
ASSABET_BCR_clear(ASSABET_BCR_LIGHT_ON);
}

/*
* Turn on/off the backlight. When turning the backlight on, we wait
* 500us after turning it on so we don't cause the supplies to droop
* when we enable the LCD controller (and cause a hard reset.)
*/
static void assabet_lcd_power(int on)
{
if (on) {
ASSABET_BCR_set(ASSABET_BCR_LCD_ON);
udelay(500);
} else
ASSABET_BCR_clear(ASSABET_BCR_LCD_ON);
}

/*
* The assabet uses a sharp LQ039Q2DS54 LCD module. It is actually
* takes an RGB666 signal, but we provide it with an RGB565 signal
Expand All @@ -224,8 +239,22 @@ static struct sa1100fb_mach_info lq039q2ds54_info = {

.lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
.lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),

.backlight_power = assabet_lcd_backlight_power,
.lcd_power = assabet_lcd_power,
.set_visual = assabet_lcd_set_visual,
};
#else
static void assabet_pal_backlight_power(int on)
{
ASSABET_BCR_clear(ASSABET_BCR_LIGHT_ON);
}

static void assabet_pal_power(int on)
{
ASSABET_BCR_clear(ASSABET_BCR_LCD_ON);
}

static struct sa1100fb_mach_info pal_info = {
.pixclock = 67797, .bpp = 16,
.xres = 640, .yres = 512,
Expand All @@ -236,6 +265,10 @@ static struct sa1100fb_mach_info pal_info = {

.lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
.lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(512),

.backlight_power = assabet_pal_backlight_power,
.lcd_power = assabet_pal_power,
.set_visual = assabet_lcd_set_visual,
};
#endif

Expand Down Expand Up @@ -266,9 +299,6 @@ static void __init assabet_init(void)
PPDR |= PPC_TXD3 | PPC_TXD1;
PPSR |= PPC_TXD3 | PPC_TXD1;

sa1100fb_lcd_power = assabet_lcd_power;
sa1100fb_backlight_power = assabet_backlight_power;

if (machine_has_neponset()) {
/*
* Angel sets this, but other bootloaders may not.
Expand Down
6 changes: 0 additions & 6 deletions arch/arm/mach-sa1100/generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -374,12 +374,6 @@ static int __init sa1100_init(void)

arch_initcall(sa1100_init);

void (*sa1100fb_backlight_power)(int on);
void (*sa1100fb_lcd_power)(int on);

EXPORT_SYMBOL(sa1100fb_backlight_power);
EXPORT_SYMBOL(sa1100fb_lcd_power);


/*
* Common I/O mapping:
Expand Down
3 changes: 0 additions & 3 deletions arch/arm/mach-sa1100/generic.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ extern void sa11x0_restart(char, const char *);
mi->bank[__nr].start = (__start), \
mi->bank[__nr].size = (__size)

extern void (*sa1100fb_backlight_power)(int on);
extern void (*sa1100fb_lcd_power)(int on);

extern void sa1110_mb_enable(void);
extern void sa1110_mb_disable(void);

Expand Down
3 changes: 2 additions & 1 deletion arch/arm/mach-sa1100/h3100.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ static struct sa1100fb_mach_info h3100_lcd_info = {

.lccr0 = LCCR0_Mono | LCCR0_4PixMono | LCCR0_Sngl | LCCR0_Pas,
.lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),

.lcd_power = h3100_lcd_power,
};

static void __init h3100_map_io(void)
Expand Down Expand Up @@ -96,7 +98,6 @@ static void __init h3100_mach_init(void)
h3xxx_init_gpio(h3100_default_gpio, ARRAY_SIZE(h3100_default_gpio));
h3xxx_mach_init();

sa1100fb_lcd_power = h3100_lcd_power;
sa11x0_register_lcd(&h3100_lcd_info);
sa11x0_register_irda(&h3100_irda_data);
}
Expand Down
3 changes: 2 additions & 1 deletion arch/arm/mach-sa1100/h3600.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ static struct sa1100fb_mach_info h3600_lcd_info = {
.lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),

.rgb[RGB_16] = &h3600_rgb_16,

.lcd_power = h3600_lcd_power,
};


Expand Down Expand Up @@ -146,7 +148,6 @@ static void __init h3600_mach_init(void)
h3xxx_init_gpio(h3600_default_gpio, ARRAY_SIZE(h3600_default_gpio));
h3xxx_mach_init();

sa1100fb_lcd_power = h3600_lcd_power;
sa11x0_register_lcd(&h3600_lcd_info);
sa11x0_register_irda(&h3600_irda_data);
}
Expand Down
32 changes: 9 additions & 23 deletions drivers/video/sa1100fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -194,9 +194,6 @@

#include "sa1100fb.h"

extern void (*sa1100fb_backlight_power)(int on);
extern void (*sa1100fb_lcd_power)(int on);

static const struct sa1100fb_rgb rgb_4 = {
.red = { .offset = 0, .length = 4, },
.green = { .offset = 0, .length = 4, },
Expand Down Expand Up @@ -426,22 +423,10 @@ sa1100fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
return 0;
}

static inline void sa1100fb_set_truecolor(u_int is_true_color)
static void sa1100fb_set_visual(struct sa1100fb_info *fbi, u32 visual)
{
if (machine_is_assabet()) {
#if 1 // phase 4 or newer Assabet's
if (is_true_color)
ASSABET_BCR_set(ASSABET_BCR_LCD_12RGB);
else
ASSABET_BCR_clear(ASSABET_BCR_LCD_12RGB);
#else
// older Assabet's
if (is_true_color)
ASSABET_BCR_clear(ASSABET_BCR_LCD_12RGB);
else
ASSABET_BCR_set(ASSABET_BCR_LCD_12RGB);
#endif
}
if (fbi->inf->set_visual)
fbi->inf->set_visual(visual);
}

/*
Expand Down Expand Up @@ -483,7 +468,7 @@ static int sa1100fb_set_par(struct fb_info *info)
/*
* Set (any) board control register to handle new color depth
*/
sa1100fb_set_truecolor(fbi->fb.fix.visual == FB_VISUAL_TRUECOLOR);
sa1100fb_set_visual(fbi, fbi->fb.fix.visual);
sa1100fb_activate_var(var, fbi);

return 0;
Expand Down Expand Up @@ -740,16 +725,16 @@ static inline void __sa1100fb_backlight_power(struct sa1100fb_info *fbi, int on)
{
dev_dbg(fbi->dev, "backlight o%s\n", on ? "n" : "ff");

if (sa1100fb_backlight_power)
sa1100fb_backlight_power(on);
if (fbi->inf->backlight_power)
fbi->inf->backlight_power(on);
}

static inline void __sa1100fb_lcd_power(struct sa1100fb_info *fbi, int on)
{
dev_dbg(fbi->dev, "LCD power o%s\n", on ? "n" : "ff");

if (sa1100fb_lcd_power)
sa1100fb_lcd_power(on);
if (fbi->inf->lcd_power)
fbi->inf->lcd_power(on);
}

static void sa1100fb_setup_gpio(struct sa1100fb_info *fbi)
Expand Down Expand Up @@ -1197,6 +1182,7 @@ static struct sa1100fb_info * __devinit sa1100fb_init_fbinfo(struct device *dev)
fbi->task_state = (u_char)-1;
fbi->fb.fix.smem_len = fbi->max_xres * fbi->max_yres *
fbi->max_bpp / 8;
fbi->inf = inf;

/* Copy the RGB bitfield overrides */
for (i = 0; i < NR_RGB; i++)
Expand Down
2 changes: 2 additions & 0 deletions drivers/video/sa1100fb.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ struct sa1100fb_info {
struct notifier_block freq_transition;
struct notifier_block freq_policy;
#endif

const struct sa1100fb_mach_info *inf;
};

#define TO_INF(ptr,member) container_of(ptr,struct sa1100fb_info,member)
Expand Down
4 changes: 4 additions & 0 deletions include/video/sa1100fb.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ struct sa1100fb_mach_info {

/* Overrides for the default RGB maps */
const struct sa1100fb_rgb *rgb[NR_RGB];

void (*backlight_power)(int);
void (*lcd_power)(int);
void (*set_visual)(u32);
};

#endif

0 comments on commit 086ada5

Please sign in to comment.