]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch
Merge branch 'next' of ssh://git.ipfire.org/pub/git/ipfire-2.x into next
[people/teissler/ipfire-2.x.git] / src / patches / kernel / omap / beagle / expansion / 0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch
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