Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
mach-smartq5.c
Go to the documentation of this file.
1 /*
2  * linux/arch/arm/mach-s3c64xx/mach-smartq5.c
3  *
4  * Copyright (C) 2010 Maurus Cuelenaere
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  */
11 
12 #include <linux/fb.h>
13 #include <linux/gpio.h>
14 #include <linux/gpio_keys.h>
15 #include <linux/init.h>
16 #include <linux/input.h>
17 #include <linux/leds.h>
18 #include <linux/platform_device.h>
19 
20 #include <asm/hardware/vic.h>
21 #include <asm/mach-types.h>
22 #include <asm/mach/arch.h>
23 
24 #include <video/samsung_fimd.h>
25 #include <mach/map.h>
26 #include <mach/regs-gpio.h>
27 
28 #include <plat/cpu.h>
29 #include <plat/devs.h>
30 #include <plat/fb.h>
31 #include <plat/gpio-cfg.h>
32 
33 #include "common.h"
34 #include "mach-smartq.h"
35 
36 static struct gpio_led smartq5_leds[] = {
37  {
38  .name = "smartq5:green",
39  .active_low = 1,
40  .gpio = S3C64XX_GPN(8),
41  },
42  {
43  .name = "smartq5:red",
44  .active_low = 1,
45  .gpio = S3C64XX_GPN(9),
46  },
47 };
48 
49 static struct gpio_led_platform_data smartq5_led_data = {
50  .num_leds = ARRAY_SIZE(smartq5_leds),
51  .leds = smartq5_leds,
52 };
53 
54 static struct platform_device smartq5_leds_device = {
55  .name = "leds-gpio",
56  .id = -1,
57  .dev.platform_data = &smartq5_led_data,
58 };
59 
60 /* Labels according to the SmartQ manual */
61 static struct gpio_keys_button smartq5_buttons[] = {
62  {
63  .gpio = S3C64XX_GPL(14),
64  .code = KEY_POWER,
65  .desc = "Power",
66  .active_low = 1,
67  .debounce_interval = 5,
68  .type = EV_KEY,
69  },
70  {
71  .gpio = S3C64XX_GPN(2),
72  .code = KEY_KPMINUS,
73  .desc = "Minus",
74  .active_low = 1,
75  .debounce_interval = 5,
76  .type = EV_KEY,
77  },
78  {
79  .gpio = S3C64XX_GPN(12),
80  .code = KEY_KPPLUS,
81  .desc = "Plus",
82  .active_low = 1,
83  .debounce_interval = 5,
84  .type = EV_KEY,
85  },
86  {
87  .gpio = S3C64XX_GPN(15),
88  .code = KEY_ENTER,
89  .desc = "Move",
90  .active_low = 1,
91  .debounce_interval = 5,
92  .type = EV_KEY,
93  },
94 };
95 
96 static struct gpio_keys_platform_data smartq5_buttons_data = {
97  .buttons = smartq5_buttons,
98  .nbuttons = ARRAY_SIZE(smartq5_buttons),
99 };
100 
101 static struct platform_device smartq5_buttons_device = {
102  .name = "gpio-keys",
103  .id = 0,
104  .num_resources = 0,
105  .dev = {
106  .platform_data = &smartq5_buttons_data,
107  }
108 };
109 
110 static struct s3c_fb_pd_win smartq5_fb_win0 = {
111  .max_bpp = 32,
112  .default_bpp = 16,
113  .xres = 800,
114  .yres = 480,
115 };
116 
117 static struct fb_videomode smartq5_lcd_timing = {
118  .left_margin = 216,
119  .right_margin = 40,
120  .upper_margin = 35,
121  .lower_margin = 10,
122  .hsync_len = 1,
123  .vsync_len = 1,
124  .xres = 800,
125  .yres = 480,
126  .refresh = 80,
127 };
128 
129 static struct s3c_fb_platdata smartq5_lcd_pdata __initdata = {
130  .setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
131  .vtiming = &smartq5_lcd_timing,
132  .win[0] = &smartq5_fb_win0,
134  .vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC |
136 };
137 
138 static struct platform_device *smartq5_devices[] __initdata = {
139  &smartq5_leds_device,
140  &smartq5_buttons_device,
141 };
142 
143 static void __init smartq5_machine_init(void)
144 {
145  s3c_fb_set_platdata(&smartq5_lcd_pdata);
146 
148 
149  platform_add_devices(smartq5_devices, ARRAY_SIZE(smartq5_devices));
150 }
151 
152 MACHINE_START(SMARTQ5, "SmartQ 5")
153  /* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */
154  .atag_offset = 0x100,
155  .init_irq = s3c6410_init_irq,
156  .handle_irq = vic_handle_irq,
157  .map_io = smartq_map_io,
158  .init_machine = smartq5_machine_init,
159  .init_late = s3c64xx_init_late,
160  .timer = &s3c24xx_timer,
161  .restart = s3c64xx_restart,