diff options
Diffstat (limited to 'arch/arm/mach-s3c2410/mach-h1940.c')
-rw-r--r-- | arch/arm/mach-s3c2410/mach-h1940.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/arch/arm/mach-s3c2410/mach-h1940.c b/arch/arm/mach-s3c2410/mach-h1940.c index 02375ca09497..49053254c98d 100644 --- a/arch/arm/mach-s3c2410/mach-h1940.c +++ b/arch/arm/mach-s3c2410/mach-h1940.c | |||
@@ -22,6 +22,8 @@ | |||
22 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/gpio.h> | 24 | #include <linux/gpio.h> |
25 | #include <linux/pwm_backlight.h> | ||
26 | #include <video/platform_lcd.h> | ||
25 | 27 | ||
26 | #include <linux/mmc/host.h> | 28 | #include <linux/mmc/host.h> |
27 | 29 | ||
@@ -195,6 +197,73 @@ static struct s3c24xx_mci_pdata h1940_mmc_cfg = { | |||
195 | .ocr_avail = MMC_VDD_32_33, | 197 | .ocr_avail = MMC_VDD_32_33, |
196 | }; | 198 | }; |
197 | 199 | ||
200 | static int h1940_backlight_init(struct device *dev) | ||
201 | { | ||
202 | gpio_request(S3C2410_GPB(0), "Backlight"); | ||
203 | |||
204 | s3c2410_gpio_setpin(S3C2410_GPB(0), 0); | ||
205 | s3c2410_gpio_pullup(S3C2410_GPB(0), 0); | ||
206 | s3c2410_gpio_cfgpin(S3C2410_GPB(0), S3C2410_GPB0_TOUT0); | ||
207 | |||
208 | return 0; | ||
209 | } | ||
210 | |||
211 | static void h1940_backlight_exit(struct device *dev) | ||
212 | { | ||
213 | s3c2410_gpio_cfgpin(S3C2410_GPB(0), 1/*S3C2410_GPB0_OUTP*/); | ||
214 | } | ||
215 | |||
216 | static struct platform_pwm_backlight_data backlight_data = { | ||
217 | .pwm_id = 0, | ||
218 | .max_brightness = 100, | ||
219 | .dft_brightness = 50, | ||
220 | /* tcnt = 0x31 */ | ||
221 | .pwm_period_ns = 36296, | ||
222 | .init = h1940_backlight_init, | ||
223 | .exit = h1940_backlight_exit, | ||
224 | }; | ||
225 | |||
226 | static struct platform_device h1940_backlight = { | ||
227 | .name = "pwm-backlight", | ||
228 | .dev = { | ||
229 | .parent = &s3c_device_timer[0].dev, | ||
230 | .platform_data = &backlight_data, | ||
231 | }, | ||
232 | .id = -1, | ||
233 | }; | ||
234 | |||
235 | static void h1940_lcd_power_set(struct plat_lcd_data *pd, | ||
236 | unsigned int power) | ||
237 | { | ||
238 | int value; | ||
239 | |||
240 | if (!power) { | ||
241 | /* set to 3ec */ | ||
242 | s3c2410_gpio_setpin(S3C2410_GPC(0), 0); | ||
243 | /* wait for 3ac */ | ||
244 | do { | ||
245 | value = s3c2410_gpio_getpin(S3C2410_GPC(6)); | ||
246 | } while (value); | ||
247 | /* set to 38c */ | ||
248 | s3c2410_gpio_setpin(S3C2410_GPC(5), 0); | ||
249 | } else { | ||
250 | /* Set to 3ac */ | ||
251 | s3c2410_gpio_setpin(S3C2410_GPC(5), 1); | ||
252 | /* Set to 3ad */ | ||
253 | s3c2410_gpio_setpin(S3C2410_GPC(0), 1); | ||
254 | } | ||
255 | } | ||
256 | |||
257 | static struct plat_lcd_data h1940_lcd_power_data = { | ||
258 | .set_power = h1940_lcd_power_set, | ||
259 | }; | ||
260 | |||
261 | static struct platform_device h1940_lcd_powerdev = { | ||
262 | .name = "platform-lcd", | ||
263 | .dev.parent = &s3c_device_lcd.dev, | ||
264 | .dev.platform_data = &h1940_lcd_power_data, | ||
265 | }; | ||
266 | |||
198 | static struct platform_device *h1940_devices[] __initdata = { | 267 | static struct platform_device *h1940_devices[] __initdata = { |
199 | &s3c_device_usb, | 268 | &s3c_device_usb, |
200 | &s3c_device_lcd, | 269 | &s3c_device_lcd, |
@@ -206,6 +275,9 @@ static struct platform_device *h1940_devices[] __initdata = { | |||
206 | &h1940_device_bluetooth, | 275 | &h1940_device_bluetooth, |
207 | &s3c_device_sdi, | 276 | &s3c_device_sdi, |
208 | &s3c_device_rtc, | 277 | &s3c_device_rtc, |
278 | &s3c_device_timer[0], | ||
279 | &h1940_backlight, | ||
280 | &h1940_lcd_powerdev, | ||
209 | }; | 281 | }; |
210 | 282 | ||
211 | static void __init h1940_map_io(void) | 283 | static void __init h1940_map_io(void) |
@@ -249,6 +321,11 @@ static void __init h1940_init(void) | |||
249 | | (0x03 << S3C24XX_PLLCON_SDIVSHIFT); | 321 | | (0x03 << S3C24XX_PLLCON_SDIVSHIFT); |
250 | writel(tmp, S3C2410_UPLLCON); | 322 | writel(tmp, S3C2410_UPLLCON); |
251 | 323 | ||
324 | gpio_request(S3C2410_GPC(0), "LCD power"); | ||
325 | gpio_request(S3C2410_GPC(5), "LCD power"); | ||
326 | gpio_request(S3C2410_GPC(6), "LCD power"); | ||
327 | |||
328 | |||
252 | platform_add_devices(h1940_devices, ARRAY_SIZE(h1940_devices)); | 329 | platform_add_devices(h1940_devices, ARRAY_SIZE(h1940_devices)); |
253 | } | 330 | } |
254 | 331 | ||