aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-pxa/magician.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-pxa/magician.c')
-rw-r--r--arch/arm/mach-pxa/magician.c69
1 files changed, 45 insertions, 24 deletions
diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c
index badba064dc04..01b2fa790217 100644
--- a/arch/arm/mach-pxa/magician.c
+++ b/arch/arm/mach-pxa/magician.c
@@ -25,6 +25,7 @@
25#include <linux/mtd/map.h> 25#include <linux/mtd/map.h>
26#include <linux/mtd/physmap.h> 26#include <linux/mtd/physmap.h>
27#include <linux/pda_power.h> 27#include <linux/pda_power.h>
28#include <linux/pwm_backlight.h>
28 29
29#include <asm/gpio.h> 30#include <asm/gpio.h>
30#include <asm/hardware.h> 31#include <asm/hardware.h>
@@ -33,12 +34,14 @@
33#include <asm/arch/magician.h> 34#include <asm/arch/magician.h>
34#include <asm/arch/mfp-pxa27x.h> 35#include <asm/arch/mfp-pxa27x.h>
35#include <asm/arch/pxa-regs.h> 36#include <asm/arch/pxa-regs.h>
37#include <asm/arch/pxa2xx-regs.h>
36#include <asm/arch/pxafb.h> 38#include <asm/arch/pxafb.h>
37#include <asm/arch/i2c.h> 39#include <asm/arch/i2c.h>
38#include <asm/arch/mmc.h> 40#include <asm/arch/mmc.h>
39#include <asm/arch/irda.h> 41#include <asm/arch/irda.h>
40#include <asm/arch/ohci.h> 42#include <asm/arch/ohci.h>
41 43
44#include "devices.h"
42#include "generic.h" 45#include "generic.h"
43 46
44static unsigned long magician_pin_config[] = { 47static unsigned long magician_pin_config[] = {
@@ -348,40 +351,58 @@ static struct pxafb_mach_info samsung_info = {
348 * Backlight 351 * Backlight
349 */ 352 */
350 353
351static void magician_set_bl_intensity(int intensity) 354static int magician_backlight_init(struct device *dev)
352{ 355{
353 if (intensity) { 356 int ret;
354 PWM_CTRL0 = 1; 357
355 PWM_PERVAL0 = 0xc8; 358 ret = gpio_request(EGPIO_MAGICIAN_BL_POWER, "BL_POWER");
356 if (intensity > 0xc7) { 359 if (ret)
357 PWM_PWDUTY0 = intensity - 0x48; 360 goto err;
358 gpio_set_value(EGPIO_MAGICIAN_BL_POWER2, 1); 361 ret = gpio_request(EGPIO_MAGICIAN_BL_POWER2, "BL_POWER2");
359 } else { 362 if (ret)
360 PWM_PWDUTY0 = intensity; 363 goto err2;
361 gpio_set_value(EGPIO_MAGICIAN_BL_POWER2, 0); 364 return 0;
362 } 365
363 gpio_set_value(EGPIO_MAGICIAN_BL_POWER, 1); 366err2:
364 pxa_set_cken(CKEN_PWM0, 1); 367 gpio_free(EGPIO_MAGICIAN_BL_POWER);
368err:
369 return ret;
370}
371
372static int magician_backlight_notify(int brightness)
373{
374 gpio_set_value(EGPIO_MAGICIAN_BL_POWER, brightness);
375 if (brightness >= 200) {
376 gpio_set_value(EGPIO_MAGICIAN_BL_POWER2, 1);
377 return brightness - 72;
365 } else { 378 } else {
366 /* PWM_PWDUTY0 = intensity; */ 379 gpio_set_value(EGPIO_MAGICIAN_BL_POWER2, 0);
367 gpio_set_value(EGPIO_MAGICIAN_BL_POWER, 0); 380 return brightness;
368 pxa_set_cken(CKEN_PWM0, 0);
369 } 381 }
370} 382}
371 383
372static struct generic_bl_info backlight_info = { 384static void magician_backlight_exit(struct device *dev)
373 .default_intensity = 0x64, 385{
374 .limit_mask = 0x0b, 386 gpio_free(EGPIO_MAGICIAN_BL_POWER);
375 .max_intensity = 0xc7+0x48, 387 gpio_free(EGPIO_MAGICIAN_BL_POWER2);
376 .set_bl_intensity = magician_set_bl_intensity, 388}
389
390static struct platform_pwm_backlight_data backlight_data = {
391 .pwm_id = 0,
392 .max_brightness = 272,
393 .dft_brightness = 100,
394 .pwm_period_ns = 30923,
395 .init = magician_backlight_init,
396 .notify = magician_backlight_notify,
397 .exit = magician_backlight_exit,
377}; 398};
378 399
379static struct platform_device backlight = { 400static struct platform_device backlight = {
380 .name = "generic-bl", 401 .name = "pwm-backlight",
381 .dev = { 402 .dev = {
382 .platform_data = &backlight_info, 403 .parent = &pxa27x_device_pwm0.dev,
404 .platform_data = &backlight_data,
383 }, 405 },
384 .id = -1,
385}; 406};
386 407
387/* 408/*