aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Zabel <philipp.zabel@gmail.com>2008-04-12 08:28:02 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2008-04-19 06:29:08 -0400
commit81447b2ee6a62cef884aa017e70bbe8c02f0d63b (patch)
treef54135121703e5a0175f7fa2fd2403529a3cd40e
parent5dc3339aa5ba29593ea57814049ddca8c12831c8 (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_defconfig23
-rw-r--r--arch/arm/mach-pxa/magician.c116
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#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_SYS_SUPPORTS_APM_EMULATION=y 7CONFIG_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 697CONFIG_W1=y
698
699#
700# 1-wire Bus Masters
701#
702# CONFIG_W1_MASTER_DS2482 is not set
703CONFIG_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
711CONFIG_W1_SLAVE_DS2760=y
698CONFIG_POWER_SUPPLY=y 712CONFIG_POWER_SUPPLY=y
699# CONFIG_POWER_SUPPLY_DEBUG is not set 713# CONFIG_POWER_SUPPLY_DEBUG is not set
700CONFIG_PDA_POWER=y 714CONFIG_PDA_POWER=y
701# CONFIG_APM_POWER is not set 715# CONFIG_APM_POWER is not set
702# CONFIG_BATTERY_DS2760 is not set 716CONFIG_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
716CONFIG_HTC_EGPIO=y 730CONFIG_HTC_EGPIO=y
731CONFIG_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#
857CONFIG_MMC_PXA=y 872CONFIG_MMC_PXA=y
858# CONFIG_NEW_LEDS is not set 873CONFIG_NEW_LEDS=y
859CONFIG_RTC_LIB=y 874CONFIG_RTC_LIB=y
860CONFIG_RTC_CLASS=y 875CONFIG_RTC_CLASS=y
861CONFIG_RTC_HCTOSYS=y 876CONFIG_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
307struct 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
320static struct gpio_led_platform_data gpio_led_info = {
321 .leds = gpio_leds,
322 .num_leds = ARRAY_SIZE(gpio_leds),
323};
324
325static struct platform_device leds_gpio = {
326 .name = "leds-gpio",
327 .id = -1,
328 .dev = {
329 .platform_data = &gpio_led_info,
330 },
331};
332
333static 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
363static struct platform_device pasic3;
364
365static 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
375static 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
389static struct pasic3_platform_data pasic3_platform_data = {
390 .bus_shift = 2,
391 .led_pdata = &pasic3_leds_info,
392 .clock_rate = 4000000,
393};
394
395static 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
425static char *magician_supplicants[] = {
426 "ds2760-battery.0", "backup-battery"
427};
428
323static struct pda_power_pdata power_supply_info = { 429static 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
329static struct resource power_supply_resources[] = { 437static 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
456static void __init magician_init(void) 566static void __init magician_init(void)