From: <sle...@us...> - 2007-07-05 11:04:07
|
Revision: 1105 http://svn.sourceforge.net/hackndev/?rev=1105&view=rev Author: sleep_walker Date: 2007-07-05 04:03:48 -0700 (Thu, 05 Jul 2007) Log Message: ----------- palmtt3: cumulative patch - led support, power button initial support Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3.c linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_buttons.c linux4palm/linux/trunk/drivers/i2c/chips/Kconfig linux4palm/linux/trunk/drivers/i2c/chips/tps65010.c linux4palm/linux/trunk/drivers/input/misc/Kconfig linux4palm/linux/trunk/drivers/input/misc/Makefile linux4palm/linux/trunk/drivers/leds/Kconfig linux4palm/linux/trunk/drivers/leds/leds-palmtt3.c Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3.c 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3.c 2007-07-05 11:03:48 UTC (rev 1105) @@ -36,9 +36,10 @@ #include <asm/arch/pxa-pm_ll.h> #include <asm/arch/pxapwm-bl.h> + #include "../generic.h" -// FIXME move this to include/asm/arch/plamt3.h some time +// FIXME move this to include/asm/arch/palmtt3.h some time #define PALMT3_GPIO_TSC2101_SS (24) #define PALMT3_GPIO_PENDOWN (37) #define PALMT3_IRQ_GPIO_PENDOWN IRQ_GPIO(PALMT3_GPIO_PENDOWN) @@ -201,6 +202,19 @@ .period = 0x12B, }; +/*** LEDs ***/ +static struct platform_device palmtt3_led_device = { + .name = "palmtt3-led", + .id = -1, +}; + +/*** Power button ***/ +static struct platform_device palmtt3_power_button = { + .name = "palmtt3-pwr_btn", + .id = -1, +}; + + static struct platform_device palmt3_backlight_device = { .name = "pxapwm-bl", .dev = { @@ -215,7 +229,7 @@ void palmt3_suspend(unsigned long ret) { unsigned long * addr; - + addr = (unsigned long *) 0xC0000000; _PM_backup[0] = *addr; *addr = 0xFEEDC0DE; @@ -260,6 +274,8 @@ &tsc2101_device, &palmt3_btn_device, &palmt3_backlight_device, + &palmtt3_led_device, + &palmtt3_power_button, }; static void __init palmt3_init(void) Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_buttons.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_buttons.c 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmt3/palmt3_buttons.c 2007-07-05 11:03:48 UTC (rev 1105) @@ -230,7 +230,7 @@ unsigned long flags, ret; buttons_dev = input_allocate_device(); - buttons_dev->evbit[0] = BIT(EV_KEY); + buttons_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); buttons_dev->name = "Palm T|T3 buttons"; buttons_dev->id.bustype = BUS_HOST; Modified: linux4palm/linux/trunk/drivers/i2c/chips/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/i2c/chips/Kconfig 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/drivers/i2c/chips/Kconfig 2007-07-05 11:03:48 UTC (rev 1105) @@ -115,7 +115,7 @@ # and having mostly OMAP-specific board support config TPS65010 tristate "TPS6501x Power Management chips" - depends on I2C && (ARCH_OMAP || MACH_T3XSCALE) + depends on I2C && (ARCH_OMAP || (MACH_T3XSCALE && INPUT_PALMTT3_PWRBTN)) default y if MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_OSK help If you say yes here you get support for the TPS6501x series of Modified: linux4palm/linux/trunk/drivers/i2c/chips/tps65010.c =================================================================== --- linux4palm/linux/trunk/drivers/i2c/chips/tps65010.c 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/drivers/i2c/chips/tps65010.c 2007-07-05 11:03:48 UTC (rev 1105) @@ -40,6 +40,11 @@ #ifdef CONFIG_MACH_T3XSCALE // T3 patch // FIXME xscale GPIOs #include <asm/arch/irqs.h> + +#if defined(CONFIG_INPUT_PALMTT3_PWRBTN_MODULE) || defined(CONFIG_INPUT_PALMTT3_PWRBTN) +extern int palmtt3_pwr_btn_press(void); +#endif + #define T3_TPS65010_GPIO 14 #else @@ -48,7 +53,6 @@ #endif // T3 patch #include <asm/arch/tps65010.h> - /*-------------------------------------------------------------------------*/ #define DRIVER_VERSION "2 May 2005" @@ -109,7 +113,7 @@ /* not currently tracking GPIO state */ }; -#define POWER_POLL_DELAY msecs_to_jiffies(5000) +#define POWER_POLL_DELAY msecs_to_jiffies(500) /*-------------------------------------------------------------------------*/ @@ -358,6 +362,11 @@ /* "off" usually means deep sleep */ if (tmp & TPS_REG_ONOFF) { pr_info("%s: power off button\n", DRIVER_NAME); + +#if defined(CONFIG_INPUT_PALMTT3_PWRBTN_MODULE) || defined(CONFIG_INPUT_PALMTT3_PWRBTN) + palmtt3_pwr_btn_press(); +#endif + #if 0 /* REVISIT: this might need its own workqueue * plus tweaks including deadlock avoidance ... @@ -547,11 +556,11 @@ #ifdef CONFIG_ARM #ifdef CONFIG_MACH_T3XSCALE // T3 patch - irqflags = SA_SAMPLE_RANDOM; + irqflags = IRQF_SAMPLE_RANDOM; tps->model = TPS65010; tps->irq = IRQ_GPIO(T3_TPS65010_GPIO); // is it ok to do this here? -// set_irq_type (IRQ_GPIO(T3_TPS65010_GPIO), IRQT_FALLING); + set_irq_type (IRQ_GPIO(T3_TPS65010_GPIO), IRQT_FALLING); #else if (machine_is_omap_h2()) { tps->model = TPS65010; Modified: linux4palm/linux/trunk/drivers/input/misc/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/input/misc/Kconfig 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/drivers/input/misc/Kconfig 2007-07-05 11:03:48 UTC (rev 1105) @@ -89,4 +89,10 @@ Say Y here if you want to support the built-in real time clock of the HP SDC controller. +config INPUT_PALMTT3_PWRBTN + tristate "Palm Tungsten|T3 Power Button" + depends on MACH_T3XSCALE + help + Say Y here if you want to support the power button of Palm Tungsten|T3 Power Button. + endif Modified: linux4palm/linux/trunk/drivers/input/misc/Makefile =================================================================== --- linux4palm/linux/trunk/drivers/input/misc/Makefile 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/drivers/input/misc/Makefile 2007-07-05 11:03:48 UTC (rev 1105) @@ -12,3 +12,4 @@ obj-$(CONFIG_INPUT_ATLAS_BTNS) += atlas_btns.o obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.o obj-$(CONFIG_INPUT_IXP4XX_BEEPER) += ixp4xx-beeper.o +obj-$(CONFIG_INPUT_PALMTT3_PWRBTN) += palmtt3-pwr_btn.o Modified: linux4palm/linux/trunk/drivers/leds/Kconfig =================================================================== --- linux4palm/linux/trunk/drivers/leds/Kconfig 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/drivers/leds/Kconfig 2007-07-05 11:03:48 UTC (rev 1105) @@ -198,7 +198,7 @@ config LEDS_TRIGGER_MMC_CARD bool "LED MMC Card Trigger" - depends on LEDS_TRIGGERS && MMC_PXA && ARCH_PXA + depends on LEDS_TRIGGERS && ARCH_PXA && (MMC_PXA || MMC_WBSD_PALMT3) help This allows LEDs to be controlled by MMC card activity on Intel PXA 25x/26x/27x MMC interface . If unsure, say Y. Modified: linux4palm/linux/trunk/drivers/leds/leds-palmtt3.c =================================================================== --- linux4palm/linux/trunk/drivers/leds/leds-palmtt3.c 2007-07-04 13:03:04 UTC (rev 1104) +++ linux4palm/linux/trunk/drivers/leds/leds-palmtt3.c 2007-07-05 11:03:48 UTC (rev 1105) @@ -1,5 +1,5 @@ /* - * Palm LifeDrive LED Driver + * Palm Tungsten|T3 LED Driver * * Author: Tomas Cech <Tom...@ma...> * @@ -22,41 +22,82 @@ static void palmtt3led_red_set(struct led_classdev *led_cdev, enum led_brightness value) { - if (value <= 85) - tps65010_set_led(LED2, OFF); - else - if (value <= 170) + if (value) tps65010_set_led(LED2, ON); else - tps65010_set_led(LED2, BLINK); + tps65010_set_led(LED2, OFF); } static void palmtt3led_green_set(struct led_classdev *led_cdev, enum led_brightness value) { - if (value <= 85) - tps65010_set_led(LED1, OFF); - else - if (value <= 170) + if (value) tps65010_set_led(LED1, ON); else +/* NOTE: This is set to UNDER_CHG_CTRL, not to OFF... It shows charging status - plugged/unplugged... */ + tps65010_set_led(LED1, UNDER_CHG_CTRL); +} + +static void palmtt3led_red_blink_set(struct led_classdev *led_cdev, enum led_brightness value) +{ + if (value) + tps65010_set_led(LED2, BLINK); + else + tps65010_set_led(LED2, OFF); +} + +static void palmtt3led_green_blink_set(struct led_classdev *led_cdev, enum led_brightness value) +{ + if (value) tps65010_set_led(LED1, BLINK); + else +/* NOTE: This is set to UNDER_CHG_CTRL, not to OFF... It shows charging status - plugged/unplugged... */ + tps65010_set_led(LED1, UNDER_CHG_CTRL); } +static void palmtt3_vibra_set(struct led_classdev *led_cdev, enum led_brightness value) +{ + if (value) + tps65010_set_vib(ON); + else + tps65010_set_vib(OFF); +} + + static struct led_classdev palmtt3_red_led = { - .name = "palmtt3:red", + .name = "red", .brightness_set = palmtt3led_red_set, + .default_trigger = "mmc-card", }; static struct led_classdev palmtt3_green_led = { - .name = "palmtt3:green", + .name = "green", .brightness_set = palmtt3led_green_set, }; +static struct led_classdev palmtt3_red_blink_led = { + .name = "red_blink", + .brightness_set = palmtt3led_red_blink_set, +}; + +static struct led_classdev palmtt3_green_blink_led = { + .name = "green_blink", + .brightness_set = palmtt3led_green_blink_set, +}; + +static struct led_classdev palmtt3_vibra = { + .name = "vibra", + .brightness_set = palmtt3_vibra_set, +}; + + #ifdef CONFIG_PM static int palmtt3led_suspend(struct platform_device *dev, pm_message_t state) { led_classdev_suspend(&palmtt3_red_led); led_classdev_suspend(&palmtt3_green_led); + led_classdev_suspend(&palmtt3_red_blink_led); + led_classdev_suspend(&palmtt3_green_blink_led); + led_classdev_suspend(&palmtt3_vibra); return 0; } @@ -64,6 +105,9 @@ { led_classdev_resume(&palmtt3_red_led); led_classdev_resume(&palmtt3_green_led); + led_classdev_resume(&palmtt3_red_blink_led); + led_classdev_resume(&palmtt3_green_blink_led); + led_classdev_resume(&palmtt3_vibra); return 0; } #endif @@ -80,6 +124,26 @@ if (ret < 0) led_classdev_unregister(&palmtt3_red_led); + ret = led_classdev_register(&pdev->dev, &palmtt3_red_blink_led); + if (ret < 0) { + led_classdev_unregister(&palmtt3_red_led); + led_classdev_unregister(&palmtt3_green_led); + } + + ret = led_classdev_register(&pdev->dev, &palmtt3_green_blink_led); + if (ret < 0) { + led_classdev_unregister(&palmtt3_red_led); + led_classdev_unregister(&palmtt3_green_led); + led_classdev_unregister(&palmtt3_red_blink_led); + } + ret = led_classdev_register(&pdev->dev, &palmtt3_vibra); + if (ret < 0) { + led_classdev_unregister(&palmtt3_red_led); + led_classdev_unregister(&palmtt3_green_led); + led_classdev_unregister(&palmtt3_red_blink_led); + led_classdev_unregister(&palmtt3_green_blink_led); + } + return ret; } @@ -87,6 +151,9 @@ { led_classdev_unregister(&palmtt3_red_led); led_classdev_unregister(&palmtt3_green_led); + led_classdev_unregister(&palmtt3_red_blink_led); + led_classdev_unregister(&palmtt3_green_blink_led); + led_classdev_unregister(&palmtt3_vibra); return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |