]>
Commit | Line | Data |
---|---|---|
d006af40 AF |
1 | From a53e7913a95faefde1ee87a7ea048c04b0850066 Mon Sep 17 00:00:00 2001 |
2 | From: Robert Nelson <robertcnelson@gmail.com> | |
3 | Date: Tue, 11 Dec 2012 06:42:03 -0600 | |
4 | Subject: [PATCH 05/10] Beagle: expansion: add CircuitCo ulcd Support | |
5 | ||
6 | This of a cleanup, squashed both ulcd commits into one: | |
7 | ||
8 | ====================================================================== | |
9 | ||
10 | expansion: add ulcd | |
11 | Signed-off-by: Robert Nelson <robertcnelson@gmail.com> | |
12 | ||
13 | ====================================================================== | |
14 | ||
15 | beagleboard: fix uLCD7 support | |
16 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | |
17 | ||
18 | ====================================================================== | |
19 | ||
20 | Signed-off-by: Robert Nelson <robertcnelson@gmail.com> | |
21 | --- | |
22 | arch/arm/mach-omap2/board-omap3beagle.c | 136 ++++++++++++++++++++++ | |
23 | drivers/video/omap2/displays/panel-generic-dpi.c | 27 +++++ | |
24 | 2 files changed, 163 insertions(+) | |
25 | ||
26 | diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c | |
27 | index 0f9b253..b2807c2 100644 | |
28 | --- a/arch/arm/mach-omap2/board-omap3beagle.c | |
29 | +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |
30 | @@ -118,12 +118,16 @@ static struct { | |
31 | int dvi_pd_gpio; | |
32 | int usr_button_gpio; | |
33 | int mmc_caps; | |
34 | + char *lcd_driver_name; | |
35 | + int lcd_pwren; | |
36 | } beagle_config = { | |
37 | .mmc1_gpio_wp = -EINVAL, | |
38 | .usb_pwr_level = 0, | |
39 | .dvi_pd_gpio = -EINVAL, | |
40 | .usr_button_gpio = 4, | |
41 | .mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, | |
42 | + .lcd_driver_name = "", | |
43 | + .lcd_pwren = 156, | |
44 | }; | |
45 | ||
46 | static struct gpio omap3_beagle_rev_gpios[] __initdata = { | |
47 | @@ -195,6 +199,7 @@ static void __init omap3_beagle_init_rev(void) | |
48 | } | |
49 | ||
50 | char expansionboard_name[16]; | |
51 | +char expansionboard2_name[16]; | |
52 | ||
53 | enum { | |
54 | EXPANSION_MMC_NONE = 0, | |
55 | @@ -205,6 +210,7 @@ enum { | |
56 | enum { | |
57 | EXPANSION_I2C_NONE = 0, | |
58 | EXPANSION_I2C_ZIPPY, | |
59 | + EXPANSION_I2C_7ULCD, | |
60 | }; | |
61 | ||
62 | static struct { | |
63 | @@ -369,9 +375,53 @@ static struct omap_dss_device beagle_tv_device = { | |
64 | .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO, | |
65 | }; | |
66 | ||
67 | +static int beagle_enable_lcd(struct omap_dss_device *dssdev) | |
68 | +{ | |
69 | + if (gpio_is_valid(beagle_config.lcd_pwren)) { | |
70 | + pr_info("%s: Enabling LCD\n", __FUNCTION__); | |
71 | + gpio_set_value(beagle_config.lcd_pwren, 0); | |
72 | + } else { | |
73 | + pr_info("%s: Invalid LCD enable GPIO: %d\n", | |
74 | + __FUNCTION__, beagle_config.lcd_pwren); | |
75 | + } | |
76 | + | |
77 | + return 0; | |
78 | +} | |
79 | + | |
80 | +static void beagle_disable_lcd(struct omap_dss_device *dssdev) | |
81 | +{ | |
82 | + if (gpio_is_valid(beagle_config.lcd_pwren)) { | |
83 | + pr_info("%s: Disabling LCD\n", __FUNCTION__); | |
84 | + gpio_set_value(beagle_config.lcd_pwren, 1); | |
85 | + } else { | |
86 | + pr_info("%s: Invalid LCD enable GPIO: %d\n", | |
87 | + __FUNCTION__, beagle_config.lcd_pwren); | |
88 | + } | |
89 | + | |
90 | + return; | |
91 | +} | |
92 | + | |
93 | +static struct panel_generic_dpi_data lcd_panel = { | |
94 | + .name = "tfc_s9700rtwv35tr-01b", | |
95 | + .platform_enable = beagle_enable_lcd, | |
96 | + .platform_disable = beagle_disable_lcd, | |
97 | +}; | |
98 | + | |
99 | +static struct omap_dss_device beagle_lcd_device = { | |
100 | + .type = OMAP_DISPLAY_TYPE_DPI, | |
101 | + .name = "lcd", | |
102 | + .driver_name = "generic_dpi_panel", | |
103 | + .phy.dpi.data_lines = 24, | |
104 | + .platform_enable = beagle_enable_lcd, | |
105 | + .platform_disable = beagle_disable_lcd, | |
106 | + .reset_gpio = -EINVAL, | |
107 | + .data = &lcd_panel, | |
108 | +}; | |
109 | + | |
110 | static struct omap_dss_device *beagle_dss_devices[] = { | |
111 | &beagle_dvi_device, | |
112 | &beagle_tv_device, | |
113 | + &beagle_lcd_device, | |
114 | }; | |
115 | ||
116 | static struct omap_dss_board_info beagle_dss_data = { | |
117 | @@ -553,6 +603,53 @@ static struct i2c_board_info __initdata zippy_i2c2_rtc[] = { | |
118 | #endif | |
119 | }; | |
120 | ||
121 | +#if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007) | |
122 | +/* Touchscreen */ | |
123 | +#include <linux/i2c/tsc2007.h> | |
124 | + | |
125 | +#define OMAP3BEAGLE_TSC2007_GPIO 157 | |
126 | + | |
127 | +static int omap3beagle_tsc2007_get_pendown_state(void) | |
128 | +{ | |
129 | + return !gpio_get_value(OMAP3BEAGLE_TSC2007_GPIO); | |
130 | +} | |
131 | + | |
132 | +static struct tsc2007_platform_data tsc2007_info = { | |
133 | + .model = 2007, | |
134 | + .x_plate_ohms = 180, | |
135 | + .get_pendown_state = omap3beagle_tsc2007_get_pendown_state, | |
136 | +}; | |
137 | + | |
138 | +static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = { | |
139 | + { | |
140 | + I2C_BOARD_INFO("tlc59108", 0x40), | |
141 | + }, | |
142 | + { | |
143 | + I2C_BOARD_INFO("tsc2007", 0x48), | |
144 | + .platform_data = &tsc2007_info, | |
145 | + }, | |
146 | +}; | |
147 | + | |
148 | +static void __init omap3beagle_tsc2007_init(void) | |
149 | +{ | |
150 | + int r; | |
151 | + | |
152 | + omap_mux_init_gpio(OMAP3BEAGLE_TSC2007_GPIO, OMAP_PIN_INPUT_PULLUP); | |
153 | + | |
154 | + r = gpio_request_one(OMAP3BEAGLE_TSC2007_GPIO, GPIOF_IN, "tsc2007_pen_down"); | |
155 | + if (r < 0) { | |
156 | + pr_err("Beagle expansionboard: failed to request GPIO#%d for " | |
157 | + "tsc2007 pen down IRQ\n", OMAP3BEAGLE_TSC2007_GPIO); | |
158 | + return; | |
159 | + } | |
160 | + | |
161 | + beagle_i2c2_bbtoys_ulcd[0].irq = gpio_to_irq(OMAP3BEAGLE_TSC2007_GPIO); | |
162 | + irq_set_irq_type(gpio_to_irq(OMAP3BEAGLE_TSC2007_GPIO), IRQ_TYPE_EDGE_FALLING); | |
163 | +} | |
164 | +#else | |
165 | +static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = {}; | |
166 | +#endif | |
167 | + | |
168 | static int __init omap3_beagle_i2c_init(void) | |
169 | { | |
170 | omap3_pmic_get_config(&beagle_twldata, | |
171 | @@ -565,6 +662,10 @@ static int __init omap3_beagle_i2c_init(void) | |
172 | omap3_pmic_init("twl4030", &beagle_twldata); | |
173 | ||
174 | switch (expansion_config.i2c_settings) { | |
175 | + case EXPANSION_I2C_7ULCD: | |
176 | + omap_register_i2c_bus(2, 400, beagle_i2c2_bbtoys_ulcd, | |
177 | + ARRAY_SIZE(beagle_i2c2_bbtoys_ulcd)); | |
178 | + break; | |
179 | case EXPANSION_I2C_ZIPPY: | |
180 | omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc)); | |
181 | break; | |
182 | @@ -661,6 +762,18 @@ static int __init expansionboard_setup(char *str) | |
183 | return 0; | |
184 | } | |
185 | ||
186 | +static int __init expansionboard2_setup(char *str) | |
187 | +{ | |
188 | + if (!machine_is_omap3_beagle()) | |
189 | + return 0; | |
190 | + | |
191 | + if (!str) | |
192 | + return -EINVAL; | |
193 | + strncpy(expansionboard2_name, str, 16); | |
194 | + pr_info("Beagle expansionboard2: %s\n", expansionboard2_name); | |
195 | + return 0; | |
196 | +} | |
197 | + | |
198 | static int __init beagle_opp_init(void) | |
199 | { | |
200 | int r = 0; | |
201 | @@ -726,6 +839,20 @@ static void __init omap3_beagle_init(void) | |
202 | omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT); | |
203 | } | |
204 | ||
205 | + if (!strcmp(expansionboard2_name, "bbtoys-ulcd")) | |
206 | + { | |
207 | + int r; | |
208 | + expansion_config.i2c_settings = EXPANSION_I2C_7ULCD; | |
209 | + | |
210 | + /* TODO: set lcd_driver_name by command line or device tree */ | |
211 | + beagle_config.lcd_driver_name = "tfc_s9700rtwv35tr-01b", | |
212 | + lcd_panel.name = beagle_config.lcd_driver_name; | |
213 | + | |
214 | + r = gpio_request_one(beagle_config.lcd_pwren, GPIOF_OUT_INIT_LOW, "LCD power"); | |
215 | + if (r < 0) | |
216 | + pr_err("Beagle expansionboard: Unable to get LCD power enable GPIO\n"); | |
217 | + } | |
218 | + | |
219 | if (gpio_is_valid(beagle_config.mmc1_gpio_wp)) | |
220 | omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT); | |
221 | ||
222 | @@ -795,6 +922,14 @@ static void __init omap3_beagle_init(void) | |
223 | gpio_export(162, 1); | |
224 | } | |
225 | ||
226 | + if (!strcmp(expansionboard2_name, "bbtoys-ulcd")) | |
227 | + { | |
228 | + #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007) | |
229 | + pr_info("Beagle expansionboard: initializing touchscreen: tsc2007\n"); | |
230 | + omap3beagle_tsc2007_init(); | |
231 | + #endif | |
232 | + } | |
233 | + | |
234 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | |
235 | usb_musb_init(NULL); | |
236 | ||
237 | @@ -816,6 +951,7 @@ static void __init omap3_beagle_init(void) | |
238 | } | |
239 | ||
240 | early_param("buddy", expansionboard_setup); | |
241 | +early_param("buddy2", expansionboard2_setup); | |
242 | ||
243 | MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") | |
244 | /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */ | |
245 | diff --git a/drivers/video/omap2/displays/panel-generic-dpi.c b/drivers/video/omap2/displays/panel-generic-dpi.c | |
246 | index 97363f7..614031f 100644 | |
247 | --- a/drivers/video/omap2/displays/panel-generic-dpi.c | |
248 | +++ b/drivers/video/omap2/displays/panel-generic-dpi.c | |
249 | @@ -515,6 +515,33 @@ static struct panel_config generic_dpi_panels[] = { | |
250 | }, | |
251 | .name = "primeview_pd104slf", | |
252 | }, | |
253 | + | |
254 | + /* ThreeFiveCorp S9700RTWV35TR-01B */ | |
255 | + { | |
256 | + { | |
257 | + .x_res = 800, | |
258 | + .y_res = 480, | |
259 | + | |
260 | + .pixel_clock = 30000, | |
261 | + | |
262 | + .hsw = 49, | |
263 | + .hfp = 41, | |
264 | + .hbp = 40, | |
265 | + | |
266 | + .vsw = 4, | |
267 | + .vfp = 14, | |
268 | + .vbp = 29, | |
269 | + | |
270 | + .vsync_level = OMAPDSS_SIG_ACTIVE_LOW, | |
271 | + .hsync_level = OMAPDSS_SIG_ACTIVE_LOW, | |
272 | + .data_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE, | |
273 | + .de_level = OMAPDSS_SIG_ACTIVE_HIGH, | |
274 | + .sync_pclk_edge = OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES, | |
275 | + }, | |
276 | + .power_on_delay = 50, | |
277 | + .power_off_delay = 100, | |
278 | + .name = "tfc_s9700rtwv35tr-01b", | |
279 | + }, | |
280 | }; | |
281 | ||
282 | struct panel_drv_data { | |
283 | -- | |
284 | 1.7.10.4 | |
285 |