Skip to content

Commit

Permalink
[ARM] 5094/1: pcm990: Add framebuffer and backlight support
Browse files Browse the repository at this point in the history
PCM990 boards can be assembled with either a Sharp STN or a NEC TFT LCD. This
patch adds support for these displays and for the backlight, using the pwm_bl
driver.

Signed-off-by: Guennadi Liakhovetski <[email protected]>
Signed-off-by: Russell King <[email protected]>
  • Loading branch information
Guennadi Liakhovetski authored and Russell King committed Jul 3, 2008
1 parent 85847a3 commit c0f7edb
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 1 deletion.
16 changes: 16 additions & 0 deletions arch/arm/mach-pxa/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,22 @@ choice

config MACH_PCM990_BASEBOARD
bool "PHYTEC PCM-990 development board"
select HAVE_PWM

endchoice

choice
prompt "display on pcm990"
depends on MACH_PCM990_BASEBOARD

config PCM990_DISPLAY_SHARP
bool "sharp lq084v1dg21 stn display"

config PCM990_DISPLAY_NEC
bool "nec nl6448bc20_18d tft display"

config PCM990_DISPLAY_NONE
bool "no display"

endchoice

Expand Down
99 changes: 98 additions & 1 deletion arch/arm/mach-pxa/pcm990-baseboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include <linux/platform_device.h>
#include <linux/ide.h>
#include <linux/i2c.h>
#include <linux/pwm_backlight.h>

#include <media/soc_camera.h>

Expand All @@ -36,9 +37,99 @@
#include <asm/arch/mmc.h>
#include <asm/arch/ohci.h>
#include <asm/arch/pcm990_baseboard.h>
#include <asm/arch/pxafb.h>

#include "devices.h"

/*
* pcm990_lcd_power - control power supply to the LCD
* @on: 0 = switch off, 1 = switch on
*
* Called by the pxafb driver
*/
#ifndef CONFIG_PCM990_DISPLAY_NONE
static void pcm990_lcd_power(int on, struct fb_var_screeninfo *var)
{
if (on) {
/* enable LCD-Latches
* power on LCD
*/
__PCM990_CTRL_REG(PCM990_CTRL_PHYS + PCM990_CTRL_REG3) =
PCM990_CTRL_LCDPWR + PCM990_CTRL_LCDON;
} else {
/* disable LCD-Latches
* power off LCD
*/
__PCM990_CTRL_REG(PCM990_CTRL_PHYS + PCM990_CTRL_REG3) = 0x00;
}
}
#endif

#if defined(CONFIG_PCM990_DISPLAY_SHARP)
static struct pxafb_mode_info fb_info_sharp_lq084v1dg21 = {
.pixclock = 28000,
.xres = 640,
.yres = 480,
.bpp = 16,
.hsync_len = 20,
.left_margin = 103,
.right_margin = 47,
.vsync_len = 6,
.upper_margin = 28,
.lower_margin = 5,
.sync = 0,
.cmap_greyscale = 0,
};

static struct pxafb_mach_info pcm990_fbinfo __initdata = {
.modes = &fb_info_sharp_lq084v1dg21,
.num_modes = 1,
.lccr0 = LCCR0_PAS,
.lccr3 = LCCR3_PCP,
.pxafb_lcd_power = pcm990_lcd_power,
};
#elif defined(CONFIG_PCM990_DISPLAY_NEC)
struct pxafb_mode_info fb_info_nec_nl6448bc20_18d = {
.pixclock = 39720,
.xres = 640,
.yres = 480,
.bpp = 16,
.hsync_len = 32,
.left_margin = 16,
.right_margin = 48,
.vsync_len = 2,
.upper_margin = 12,
.lower_margin = 17,
.sync = 0,
.cmap_greyscale = 0,
};

static struct pxafb_mach_info pcm990_fbinfo __initdata = {
.modes = &fb_info_nec_nl6448bc20_18d,
.num_modes = 1,
.lccr0 = LCCR0_Act,
.lccr3 = LCCR3_PixFlEdg,
.pxafb_lcd_power = pcm990_lcd_power,
};
#endif

static struct platform_pwm_backlight_data pcm990_backlight_data = {
.pwm_id = 0,
.max_brightness = 1023,
.dft_brightness = 1023,
.pwm_period_ns = 78770,
};

static struct platform_device pcm990_backlight_device = {
.name = "pwm-backlight",
.dev = {
.parent = &pxa27x_device_pwm0.dev,
.platform_data = &pcm990_backlight_data,
},
};

/*
* The PCM-990 development baseboard uses PCM-027's hardeware in the
* The PCM-990 development baseboard uses PCM-027's hardware in the
* following way:
*
* - LCD support is in use
Expand Down Expand Up @@ -393,6 +484,12 @@ void __init pcm990_baseboard_init(void)
/* register CPLD's IRQ controller */
pcm990_init_irq();

#ifndef CONFIG_PCM990_DISPLAY_NONE
set_pxa_fb_info(&pcm990_fbinfo);
#endif
pxa_gpio_mode(GPIO16_PWM0_MD);
platform_device_register(&pcm990_backlight_device);

platform_device_register(&pxa27x_device_ac97);

/* MMC */
Expand Down

0 comments on commit c0f7edb

Please sign in to comment.