diff options
author | Philipp Zabel <philipp.zabel@gmail.com> | 2008-04-12 08:28:02 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2008-04-19 06:29:08 -0400 |
commit | 81447b2ee6a62cef884aa017e70bbe8c02f0d63b (patch) | |
tree | f54135121703e5a0175f7fa2fd2403529a3cd40e | |
parent | 5dc3339aa5ba29593ea57814049ddca8c12831c8 (diff) |
[ARM] 4965/1: magician: use htc-pasic3,leds-pasic3,ds1wm,leds-gpio
This patch enables LEDs and the 1-wire bus (connected to
a DS2760 battery monitor) on the magician.
Signed-off-by: Philipp Zabel <philipp.zabel@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | arch/arm/configs/magician_defconfig | 23 | ||||
-rw-r--r-- | arch/arm/mach-pxa/magician.c | 116 |
2 files changed, 132 insertions, 7 deletions
diff --git a/arch/arm/configs/magician_defconfig b/arch/arm/configs/magician_defconfig index 69ac0e4f1fe8..4d11678584db 100644 --- a/arch/arm/configs/magician_defconfig +++ b/arch/arm/configs/magician_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.24-rc6 | 3 | # Linux kernel version: 2.6.24-rc6 |
4 | # Sat Dec 22 10:38:43 2007 | 4 | # Sun Dec 30 13:02:54 2007 |
5 | # | 5 | # |
6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | 7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y |
@@ -694,12 +694,26 @@ CONFIG_I2C_PXA=m | |||
694 | # | 694 | # |
695 | # CONFIG_SPI is not set | 695 | # CONFIG_SPI is not set |
696 | # CONFIG_SPI_MASTER is not set | 696 | # CONFIG_SPI_MASTER is not set |
697 | # CONFIG_W1 is not set | 697 | CONFIG_W1=y |
698 | |||
699 | # | ||
700 | # 1-wire Bus Masters | ||
701 | # | ||
702 | # CONFIG_W1_MASTER_DS2482 is not set | ||
703 | CONFIG_W1_MASTER_DS1WM=y | ||
704 | |||
705 | # | ||
706 | # 1-wire Slaves | ||
707 | # | ||
708 | # CONFIG_W1_SLAVE_THERM is not set | ||
709 | # CONFIG_W1_SLAVE_SMEM is not set | ||
710 | # CONFIG_W1_SLAVE_DS2433 is not set | ||
711 | CONFIG_W1_SLAVE_DS2760=y | ||
698 | CONFIG_POWER_SUPPLY=y | 712 | CONFIG_POWER_SUPPLY=y |
699 | # CONFIG_POWER_SUPPLY_DEBUG is not set | 713 | # CONFIG_POWER_SUPPLY_DEBUG is not set |
700 | CONFIG_PDA_POWER=y | 714 | CONFIG_PDA_POWER=y |
701 | # CONFIG_APM_POWER is not set | 715 | # CONFIG_APM_POWER is not set |
702 | # CONFIG_BATTERY_DS2760 is not set | 716 | CONFIG_BATTERY_DS2760=y |
703 | # CONFIG_HWMON is not set | 717 | # CONFIG_HWMON is not set |
704 | # CONFIG_WATCHDOG is not set | 718 | # CONFIG_WATCHDOG is not set |
705 | 719 | ||
@@ -714,6 +728,7 @@ CONFIG_SSB_POSSIBLE=y | |||
714 | # | 728 | # |
715 | # CONFIG_MFD_SM501 is not set | 729 | # CONFIG_MFD_SM501 is not set |
716 | CONFIG_HTC_EGPIO=y | 730 | CONFIG_HTC_EGPIO=y |
731 | CONFIG_HTC_PASIC3=y | ||
717 | 732 | ||
718 | # | 733 | # |
719 | # Multimedia devices | 734 | # Multimedia devices |
@@ -855,7 +870,7 @@ CONFIG_SDIO_UART=m | |||
855 | # MMC/SD Host Controller Drivers | 870 | # MMC/SD Host Controller Drivers |
856 | # | 871 | # |
857 | CONFIG_MMC_PXA=y | 872 | CONFIG_MMC_PXA=y |
858 | # CONFIG_NEW_LEDS is not set | 873 | CONFIG_NEW_LEDS=y |
859 | CONFIG_RTC_LIB=y | 874 | CONFIG_RTC_LIB=y |
860 | CONFIG_RTC_CLASS=y | 875 | CONFIG_RTC_CLASS=y |
861 | CONFIG_RTC_HCTOSYS=y | 876 | CONFIG_RTC_HCTOSYS=y |
diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c index 9e126a901137..06dad3552300 100644 --- a/arch/arm/mach-pxa/magician.c +++ b/arch/arm/mach-pxa/magician.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/gpio_keys.h> | 20 | #include <linux/gpio_keys.h> |
21 | #include <linux/input.h> | 21 | #include <linux/input.h> |
22 | #include <linux/mfd/htc-egpio.h> | 22 | #include <linux/mfd/htc-egpio.h> |
23 | #include <linux/mfd/htc-pasic3.h> | ||
23 | #include <linux/mtd/mtd.h> | 24 | #include <linux/mtd/mtd.h> |
24 | #include <linux/mtd/map.h> | 25 | #include <linux/mtd/map.h> |
25 | #include <linux/mtd/physmap.h> | 26 | #include <linux/mtd/physmap.h> |
@@ -299,6 +300,107 @@ static struct platform_device backlight = { | |||
299 | .id = -1, | 300 | .id = -1, |
300 | }; | 301 | }; |
301 | 302 | ||
303 | /* | ||
304 | * LEDs | ||
305 | */ | ||
306 | |||
307 | struct gpio_led gpio_leds[] = { | ||
308 | { | ||
309 | .name = "magician::vibra", | ||
310 | .default_trigger = "none", | ||
311 | .gpio = GPIO22_MAGICIAN_VIBRA_EN, | ||
312 | }, | ||
313 | { | ||
314 | .name = "magician::phone_bl", | ||
315 | .default_trigger = "none", | ||
316 | .gpio = GPIO103_MAGICIAN_LED_KP, | ||
317 | }, | ||
318 | }; | ||
319 | |||
320 | static struct gpio_led_platform_data gpio_led_info = { | ||
321 | .leds = gpio_leds, | ||
322 | .num_leds = ARRAY_SIZE(gpio_leds), | ||
323 | }; | ||
324 | |||
325 | static struct platform_device leds_gpio = { | ||
326 | .name = "leds-gpio", | ||
327 | .id = -1, | ||
328 | .dev = { | ||
329 | .platform_data = &gpio_led_info, | ||
330 | }, | ||
331 | }; | ||
332 | |||
333 | static struct pasic3_led pasic3_leds[] = { | ||
334 | { | ||
335 | .led = { | ||
336 | .name = "magician:red", | ||
337 | .default_trigger = "ds2760-battery.0-charging", | ||
338 | }, | ||
339 | .hw_num = 0, | ||
340 | .bit2 = PASIC3_BIT2_LED0, | ||
341 | .mask = PASIC3_MASK_LED0, | ||
342 | }, | ||
343 | { | ||
344 | .led = { | ||
345 | .name = "magician:green", | ||
346 | .default_trigger = "ds2760-battery.0-charging-or-full", | ||
347 | }, | ||
348 | .hw_num = 1, | ||
349 | .bit2 = PASIC3_BIT2_LED1, | ||
350 | .mask = PASIC3_MASK_LED1, | ||
351 | }, | ||
352 | { | ||
353 | .led = { | ||
354 | .name = "magician:blue", | ||
355 | .default_trigger = "bluetooth", | ||
356 | }, | ||
357 | .hw_num = 2, | ||
358 | .bit2 = PASIC3_BIT2_LED2, | ||
359 | .mask = PASIC3_MASK_LED2, | ||
360 | }, | ||
361 | }; | ||
362 | |||
363 | static struct platform_device pasic3; | ||
364 | |||
365 | static struct pasic3_leds_machinfo __devinit pasic3_leds_info = { | ||
366 | .num_leds = ARRAY_SIZE(pasic3_leds), | ||
367 | .power_gpio = EGPIO_MAGICIAN_LED_POWER, | ||
368 | .leds = pasic3_leds, | ||
369 | }; | ||
370 | |||
371 | /* | ||
372 | * PASIC3 with DS1WM | ||
373 | */ | ||
374 | |||
375 | static struct resource pasic3_resources[] = { | ||
376 | [0] = { | ||
377 | .start = PXA_CS2_PHYS, | ||
378 | .end = PXA_CS2_PHYS + 0x1b, | ||
379 | .flags = IORESOURCE_MEM, | ||
380 | }, | ||
381 | /* No IRQ handler in the PASIC3, DS1WM needs an external IRQ */ | ||
382 | [1] = { | ||
383 | .start = gpio_to_irq(GPIO107_MAGICIAN_DS1WM_IRQ), | ||
384 | .end = gpio_to_irq(GPIO107_MAGICIAN_DS1WM_IRQ), | ||
385 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, | ||
386 | } | ||
387 | }; | ||
388 | |||
389 | static struct pasic3_platform_data pasic3_platform_data = { | ||
390 | .bus_shift = 2, | ||
391 | .led_pdata = &pasic3_leds_info, | ||
392 | .clock_rate = 4000000, | ||
393 | }; | ||
394 | |||
395 | static struct platform_device pasic3 = { | ||
396 | .name = "pasic3", | ||
397 | .id = -1, | ||
398 | .num_resources = ARRAY_SIZE(pasic3_resources), | ||
399 | .resource = pasic3_resources, | ||
400 | .dev = { | ||
401 | .platform_data = &pasic3_platform_data, | ||
402 | }, | ||
403 | }; | ||
302 | 404 | ||
303 | /* | 405 | /* |
304 | * External power | 406 | * External power |
@@ -320,10 +422,16 @@ static void magician_set_charge(int flags) | |||
320 | gpio_set_value(EGPIO_MAGICIAN_CHARGE_EN, flags); | 422 | gpio_set_value(EGPIO_MAGICIAN_CHARGE_EN, flags); |
321 | } | 423 | } |
322 | 424 | ||
425 | static char *magician_supplicants[] = { | ||
426 | "ds2760-battery.0", "backup-battery" | ||
427 | }; | ||
428 | |||
323 | static struct pda_power_pdata power_supply_info = { | 429 | static struct pda_power_pdata power_supply_info = { |
324 | .is_ac_online = magician_is_ac_online, | 430 | .is_ac_online = magician_is_ac_online, |
325 | .is_usb_online = magician_is_usb_online, | 431 | .is_usb_online = magician_is_usb_online, |
326 | .set_charge = magician_set_charge, | 432 | .set_charge = magician_set_charge, |
433 | .supplied_to = magician_supplicants, | ||
434 | .num_supplicants = ARRAY_SIZE(magician_supplicants), | ||
327 | }; | 435 | }; |
328 | 436 | ||
329 | static struct resource power_supply_resources[] = { | 437 | static struct resource power_supply_resources[] = { |
@@ -449,8 +557,10 @@ static struct platform_device *devices[] __initdata = { | |||
449 | &gpio_keys, | 557 | &gpio_keys, |
450 | &egpio, | 558 | &egpio, |
451 | &backlight, | 559 | &backlight, |
560 | &pasic3, | ||
452 | &power_supply, | 561 | &power_supply, |
453 | &strataflash, | 562 | &strataflash, |
563 | &leds_gpio, | ||
454 | }; | 564 | }; |
455 | 565 | ||
456 | static void __init magician_init(void) | 566 | static void __init magician_init(void) |