diff options
-rw-r--r-- | arch/arm/mach-pxa/Kconfig | 1 | ||||
-rw-r--r-- | arch/arm/mach-pxa/mainstone.c | 63 |
2 files changed, 18 insertions, 46 deletions
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig index b7a3281c420e..2d711308076f 100644 --- a/arch/arm/mach-pxa/Kconfig +++ b/arch/arm/mach-pxa/Kconfig | |||
@@ -41,6 +41,7 @@ config MACH_LOGICPD_PXA270 | |||
41 | config MACH_MAINSTONE | 41 | config MACH_MAINSTONE |
42 | bool "Intel HCDDBBVA0 Development Platform" | 42 | bool "Intel HCDDBBVA0 Development Platform" |
43 | select PXA27x | 43 | select PXA27x |
44 | select HAVE_PWM | ||
44 | 45 | ||
45 | config ARCH_PXA_IDP | 46 | config ARCH_PXA_IDP |
46 | bool "Accelent Xscale IDP" | 47 | bool "Accelent Xscale IDP" |
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c index 7399fb34da4e..266594426e8b 100644 --- a/arch/arm/mach-pxa/mainstone.c +++ b/arch/arm/mach-pxa/mainstone.c | |||
@@ -23,9 +23,9 @@ | |||
23 | #include <linux/ioport.h> | 23 | #include <linux/ioport.h> |
24 | #include <linux/mtd/mtd.h> | 24 | #include <linux/mtd/mtd.h> |
25 | #include <linux/mtd/partitions.h> | 25 | #include <linux/mtd/partitions.h> |
26 | #include <linux/backlight.h> | ||
27 | #include <linux/input.h> | 26 | #include <linux/input.h> |
28 | #include <linux/gpio_keys.h> | 27 | #include <linux/gpio_keys.h> |
28 | #include <linux/pwm_backlight.h> | ||
29 | 29 | ||
30 | #include <asm/types.h> | 30 | #include <asm/types.h> |
31 | #include <asm/setup.h> | 31 | #include <asm/setup.h> |
@@ -349,56 +349,27 @@ static struct platform_device mst_flash_device[2] = { | |||
349 | }, | 349 | }, |
350 | }; | 350 | }; |
351 | 351 | ||
352 | #ifdef CONFIG_BACKLIGHT_CLASS_DEVICE | 352 | #if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE) |
353 | static int mainstone_backlight_update_status(struct backlight_device *bl) | 353 | static struct platform_pwm_backlight_data mainstone_backlight_data = { |
354 | { | 354 | .pwm_id = 0, |
355 | int brightness = bl->props.brightness; | 355 | .max_brightness = 1023, |
356 | 356 | .dft_brightness = 1023, | |
357 | if (bl->props.power != FB_BLANK_UNBLANK || | 357 | .pwm_period_ns = 78770, |
358 | bl->props.fb_blank != FB_BLANK_UNBLANK) | 358 | }; |
359 | brightness = 0; | ||
360 | |||
361 | if (brightness != 0) | ||
362 | pxa_set_cken(CKEN_PWM0, 1); | ||
363 | |||
364 | PWM_CTRL0 = 0; | ||
365 | PWM_PWDUTY0 = brightness; | ||
366 | PWM_PERVAL0 = bl->props.max_brightness; | ||
367 | |||
368 | if (brightness == 0) | ||
369 | pxa_set_cken(CKEN_PWM0, 0); | ||
370 | return 0; /* pointless return value */ | ||
371 | } | ||
372 | |||
373 | static int mainstone_backlight_get_brightness(struct backlight_device *bl) | ||
374 | { | ||
375 | return PWM_PWDUTY0; | ||
376 | } | ||
377 | 359 | ||
378 | static /*const*/ struct backlight_ops mainstone_backlight_ops = { | 360 | static struct platform_device mainstone_backlight_device = { |
379 | .update_status = mainstone_backlight_update_status, | 361 | .name = "pwm-backlight", |
380 | .get_brightness = mainstone_backlight_get_brightness, | 362 | .dev = { |
363 | .parent = &pxa27x_device_pwm0.dev, | ||
364 | .platform_data = &mainstone_backlight_data, | ||
365 | }, | ||
381 | }; | 366 | }; |
382 | 367 | ||
383 | static void __init mainstone_backlight_register(void) | 368 | static void __init mainstone_backlight_register(void) |
384 | { | 369 | { |
385 | struct backlight_device *bl; | 370 | int ret = platform_device_register(&mainstone_backlight_device); |
386 | 371 | if (ret) | |
387 | bl = backlight_device_register("mainstone-bl", &pxa_device_fb.dev, | 372 | printk(KERN_ERR "mainstone: failed to register backlight device: %d\n", ret); |
388 | NULL, &mainstone_backlight_ops); | ||
389 | if (IS_ERR(bl)) { | ||
390 | printk(KERN_ERR "mainstone: unable to register backlight: %ld\n", | ||
391 | PTR_ERR(bl)); | ||
392 | return; | ||
393 | } | ||
394 | |||
395 | /* | ||
396 | * broken design - register-then-setup interfaces are | ||
397 | * utterly broken by definition. | ||
398 | */ | ||
399 | bl->props.max_brightness = 1023; | ||
400 | bl->props.brightness = 1023; | ||
401 | backlight_update_status(bl); | ||
402 | } | 373 | } |
403 | #else | 374 | #else |
404 | #define mainstone_backlight_register() do { } while (0) | 375 | #define mainstone_backlight_register() do { } while (0) |