|
@@ -108,3 +108,89 @@ static struct s3c2410_uartcfg crag6410_uartcfgs[] __initdata = {
|
|
.ulcon = ULCON,
|
|
.ulcon = ULCON,
|
|
.ufcon = UFCON,
|
|
.ufcon = UFCON,
|
|
},
|
|
},
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_pwm_backlight_data crag6410_backlight_data = {
|
|
|
|
+ .pwm_id = 0,
|
|
|
|
+ .max_brightness = 1000,
|
|
|
|
+ .dft_brightness = 600,
|
|
|
|
+ .pwm_period_ns = 100000, /* about 1kHz */
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_device crag6410_backlight_device = {
|
|
|
|
+ .name = "pwm-backlight",
|
|
|
|
+ .id = -1,
|
|
|
|
+ .dev = {
|
|
|
|
+ .parent = &s3c_device_timer[0].dev,
|
|
|
|
+ .platform_data = &crag6410_backlight_data,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void crag6410_lcd_power_set(struct plat_lcd_data *pd, unsigned int power)
|
|
|
|
+{
|
|
|
|
+ pr_debug("%s: setting power %d\n", __func__, power);
|
|
|
|
+
|
|
|
|
+ if (power) {
|
|
|
|
+ gpio_set_value(S3C64XX_GPB(0), 1);
|
|
|
|
+ msleep(1);
|
|
|
|
+ s3c_gpio_cfgpin(S3C64XX_GPF(14), S3C_GPIO_SFN(2));
|
|
|
|
+ } else {
|
|
|
|
+ gpio_direction_output(S3C64XX_GPF(14), 0);
|
|
|
|
+ gpio_set_value(S3C64XX_GPB(0), 0);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct platform_device crag6410_lcd_powerdev = {
|
|
|
|
+ .name = "platform-lcd",
|
|
|
|
+ .id = -1,
|
|
|
|
+ .dev.parent = &s3c_device_fb.dev,
|
|
|
|
+ .dev.platform_data = &(struct plat_lcd_data) {
|
|
|
|
+ .set_power = crag6410_lcd_power_set,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* 640x480 URT */
|
|
|
|
+static struct s3c_fb_pd_win crag6410_fb_win0 = {
|
|
|
|
+ .max_bpp = 32,
|
|
|
|
+ .default_bpp = 16,
|
|
|
|
+ .xres = 640,
|
|
|
|
+ .yres = 480,
|
|
|
|
+ .virtual_y = 480 * 2,
|
|
|
|
+ .virtual_x = 640,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct fb_videomode crag6410_lcd_timing = {
|
|
|
|
+ .left_margin = 150,
|
|
|
|
+ .right_margin = 80,
|
|
|
|
+ .upper_margin = 40,
|
|
|
|
+ .lower_margin = 5,
|
|
|
|
+ .hsync_len = 40,
|
|
|
|
+ .vsync_len = 5,
|
|
|
|
+ .xres = 640,
|
|
|
|
+ .yres = 480,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* 405566 clocks per frame => 60Hz refresh requires 24333960Hz clock */
|
|
|
|
+static struct s3c_fb_platdata crag6410_lcd_pdata = {
|
|
|
|
+ .setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
|
|
|
|
+ .vtiming = &crag6410_lcd_timing,
|
|
|
|
+ .win[0] = &crag6410_fb_win0,
|
|
|
|
+ .vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
|
|
|
|
+ .vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* 2x6 keypad */
|
|
|
|
+
|
|
|
|
+static uint32_t crag6410_keymap[] = {
|
|
|
|
+ /* KEY(row, col, keycode) */
|
|
|
|
+ KEY(0, 0, KEY_VOLUMEUP),
|
|
|
|
+ KEY(0, 1, KEY_HOME),
|
|
|
|
+ KEY(0, 2, KEY_VOLUMEDOWN),
|
|
|
|
+ KEY(0, 3, KEY_HELP),
|
|
|
|
+ KEY(0, 4, KEY_MENU),
|
|
|
|
+ KEY(0, 5, KEY_MEDIA),
|
|
|
|
+ KEY(1, 0, 232),
|
|
|
|
+ KEY(1, 1, KEY_DOWN),
|
|
|
|
+ KEY(1, 2, KEY_LEFT),
|
|
|
|
+ KEY(1, 3, KEY_UP),
|
|
|
|
+ KEY(1, 4, KEY_RIGHT),
|