b21c0ed69e35a6d02503ccd568b945e7e679ccfb
[glsdk/meta-ti-glsdk.git] / recipes-kernel / linux / linux-ti33x-psp-3.2 / 0017-beaglebone-enable-PWM-for-lcd-backlight-backlight-is.patch
1 From cf8d37c600dbe0d13e55874db46d385db435d6dc Mon Sep 17 00:00:00 2001
2 From: Koen Kooi <koen@dominion.thruhere.net>
3 Date: Tue, 31 Jan 2012 17:02:10 +0100
4 Subject: [PATCH 17/21] beaglebone: enable PWM for lcd backlight <- backlight is inverted
6 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
7 ---
8 arch/arm/mach-omap2/board-am335xevm.c | 54 ++++++++++++++++++++++++++------
9 arch/arm/mach-omap2/devices.c | 13 ++++++++
10 arch/arm/mach-omap2/devices.h | 1 +
11 3 files changed, 58 insertions(+), 10 deletions(-)
13 diff --git a/arch/arm/mach-omap2/board-am335xevm.c b/arch/arm/mach-omap2/board-am335xevm.c
14 index 177ab9e..6a77194 100644
15 --- a/arch/arm/mach-omap2/board-am335xevm.c
16 +++ b/arch/arm/mach-omap2/board-am335xevm.c
17 @@ -36,6 +36,7 @@
18 #include <linux/mfd/tps65910.h>
19 #include <linux/mfd/tps65217.h>
20 #include <linux/pwm_backlight.h>
21 +#include <linux/pwm/pwm.h>
23 /* LCD controller is similar to DA850 */
24 #include <video/da8xx-fb.h>
25 @@ -131,7 +132,7 @@ static const struct display_panel disp_panel = {
26 /* LCD backlight platform Data */
27 #define AM335X_BACKLIGHT_MAX_BRIGHTNESS 100
28 #define AM335X_BACKLIGHT_DEFAULT_BRIGHTNESS 100
29 -#define AM335X_PWM_PERIOD_NANO_SECONDS (1000000 * 10)
30 +#define AM335X_PWM_PERIOD_NANO_SECONDS (1000000 * 5)
32 #define PWM_DEVICE_ID "ecap.0"
34 @@ -175,6 +176,16 @@ static const struct display_panel bbtoys7_panel = {
35 COLOR_ACTIVE,
36 };
38 +#define BBTOYS7LCD_PWM_DEVICE_ID "ehrpwm.1:0"
39 +
40 +static struct platform_pwm_backlight_data bbtoys7lcd_backlight_data = {
41 + .pwm_id = BBTOYS7LCD_PWM_DEVICE_ID,
42 + .ch = -1,
43 + .max_brightness = AM335X_BACKLIGHT_MAX_BRIGHTNESS,
44 + .dft_brightness = AM335X_BACKLIGHT_DEFAULT_BRIGHTNESS,
45 + .pwm_period_ns = AM335X_PWM_PERIOD_NANO_SECONDS,
46 +};
47 +
48 static struct lcd_ctrl_config bbtoys7_cfg = {
49 &bbtoys7_panel,
50 .ac_bias = 255,
51 @@ -586,9 +597,9 @@ static struct pinmux_config bbtoys7_pin_mux[] = {
52 {"lcd_vsync.lcd_vsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
53 {"lcd_hsync.lcd_hsync", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
54 {"lcd_pclk.lcd_pclk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
55 - {"lcd_ac_bias_en.lcd_ac_bias_en", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
56 - {"gpmc_a2.gpio1_18", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // Backlight
57 + {"lcd_ac_bias_en.lcd_ac_bias_en", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT},
58 {"ecap0_in_pwm0_out.gpio0_7", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, // AVDD_EN
59 + {"gpmc_a2.ehrpwm1A", OMAP_MUX_MODE6 | AM33XX_PIN_OUTPUT}, // Backlight
60 {NULL, 0},
61 };
63 @@ -1121,6 +1132,7 @@ static struct pinmux_config ecap0_pin_mux[] = {
64 {NULL, 0},
65 };
67 +static int ehrpwm_backlight_enable;
68 static int backlight_enable;
70 #define AM335XEVM_WLAN_PMENA_GPIO GPIO_TO_PIN(1, 30)
71 @@ -1190,6 +1202,30 @@ static int __init ecap0_init(void)
72 }
73 late_initcall(ecap0_init);
75 +static void enable_ehrpwm1(int evm_id, int profile)
76 +{
77 + ehrpwm_backlight_enable = true;
78 +}
79 +
80 +/* Setup pwm-backlight for bbtoys7lcd */
81 +static struct platform_device bbtoys7lcd_backlight = {
82 + .name = "pwm-backlight",
83 + .id = -1,
84 + .dev = {
85 + .platform_data = &bbtoys7lcd_backlight_data,
86 + }
87 +};
88 +
89 +static int __init ehrpwm1_init(void)
90 +{
91 + int status = 0;
92 + if (ehrpwm_backlight_enable) {
93 + platform_device_register(&bbtoys7lcd_backlight);
94 + }
95 + return status;
96 +}
97 +late_initcall(ehrpwm1_init);
98 +
99 static int __init conf_disp_pll(int rate)
100 {
101 struct clk *disp_pll;
102 @@ -1224,11 +1260,12 @@ static void lcdc_init(int evm_id, int profile)
103 }
105 #define BEAGLEBONE_LCD_AVDD_EN GPIO_TO_PIN(0, 7)
106 -#define BEAGLEBONE_LCD_BL GPIO_TO_PIN(1, 18)
108 static void bbtoys7lcd_init(int evm_id, int profile)
109 {
110 setup_pin_mux(bbtoys7_pin_mux);
111 + gpio_request(BEAGLEBONE_LCD_AVDD_EN, "BONE_LCD_AVDD_EN");
112 + gpio_direction_output(BEAGLEBONE_LCD_AVDD_EN, 1);
114 // we are being stupid and setting pixclock from here instead of da8xx-fb.c
115 if (conf_disp_pll(300000000)) {
116 @@ -1239,12 +1276,7 @@ static void bbtoys7lcd_init(int evm_id, int profile)
118 if (am33xx_register_lcdc(&bbtoys7_pdata))
119 pr_info("Failed to register Beagleboardtoys 7\" LCD cape device\n");
120 -
121 - gpio_request(BEAGLEBONE_LCD_BL, "BONE_LCD_BL");
122 - gpio_direction_output(BEAGLEBONE_LCD_BL, 1);
123 - gpio_request(BEAGLEBONE_LCD_AVDD_EN, "BONE_LCD_AVDD_EN");
124 - gpio_direction_output(BEAGLEBONE_LCD_AVDD_EN, 1);
125 -
126 +
127 return;
128 }
130 @@ -1768,6 +1800,8 @@ static void beaglebone_cape_setup(struct memory_accessor *mem_acc, void *context
131 bbtoys7lcd_init(0,0);
132 pr_info("BeagleBone cape: initializing LCD cape touchscreen\n");
133 tsc_init(0,0);
134 + pr_info("BeagleBone cape: Registering PWM backlight for LCD cape\n");
135 + enable_ehrpwm1(0,0);
136 beaglebone_tsadcpins_free = 0;
137 }
139 diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
140 index 4b137e9..33291ae 100644
141 --- a/arch/arm/mach-omap2/devices.c
142 +++ b/arch/arm/mach-omap2/devices.c
143 @@ -1277,6 +1277,19 @@ void register_ehrpwm(int max_freq)
144 platform_device_register(&am335x_epwm2_device);
145 }
147 +void register_ehrpwm1(int max_freq)
148 +{
149 + int val;
150 +
151 + val = __raw_readw(AM33XX_CTRL_REGADDR(AM33XX_PWMSS_CTRL));
152 + val |= PWMSS1_TBCLKEN;
153 + __raw_writew(val, AM33XX_CTRL_REGADDR(AM33XX_PWMSS_CTRL));
154 + am335x_pwmss_config1.chan_attrib[1].max_freq = max_freq;
155 + sema_init(&am335x_pwmss_config1.config_semaphore, 1);
156 + am335x_pwmss_config1.version = PWM_VERSION_1;
157 + platform_device_register(&am335x_epwm1_device);
158 +}
159 +
160 static struct resource am335x_ecap0_resurce[] = {
161 {
162 .start = AM33XX_EPWMSS0_BASE ,
163 diff --git a/arch/arm/mach-omap2/devices.h b/arch/arm/mach-omap2/devices.h
164 index e086839..5161eb4 100644
165 --- a/arch/arm/mach-omap2/devices.h
166 +++ b/arch/arm/mach-omap2/devices.h
167 @@ -18,5 +18,6 @@ int omap3_init_camera(struct isp_platform_data *pdata);
169 void __init am335x_register_mcasp1(struct snd_platform_data *pdata);
170 extern void register_ehrpwm(int max_freq);
171 +extern void register_ehrpwm1(int max_freq);
173 #endif
174 --
175 1.7.2.5