]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch
snort: Update urls for rules download (2.9.7.0) in 'ids.cgi'
[ipfire-2.x.git] / src / patches / kernel / omap / beagle / expansion / 0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch
CommitLineData
d006af40
AF
1From a53e7913a95faefde1ee87a7ea048c04b0850066 Mon Sep 17 00:00:00 2001
2From: Robert Nelson <robertcnelson@gmail.com>
3Date: Tue, 11 Dec 2012 06:42:03 -0600
4Subject: [PATCH 05/10] Beagle: expansion: add CircuitCo ulcd Support
5
6This of a cleanup, squashed both ulcd commits into one:
7
8======================================================================
9
10expansion: add ulcd
11Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
12
13======================================================================
14
15beagleboard: fix uLCD7 support
16Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
17
18======================================================================
19
20Signed-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
26diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
27index 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 */
245diff --git a/drivers/video/omap2/displays/panel-generic-dpi.c b/drivers/video/omap2/displays/panel-generic-dpi.c
246index 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--
2841.7.10.4
285