diff options
Diffstat (limited to 'recipes/linux/linux-2.6.31/collie/0010-collie-support-pda_power-driver.patch')
-rw-r--r-- | recipes/linux/linux-2.6.31/collie/0010-collie-support-pda_power-driver.patch | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/recipes/linux/linux-2.6.31/collie/0010-collie-support-pda_power-driver.patch b/recipes/linux/linux-2.6.31/collie/0010-collie-support-pda_power-driver.patch new file mode 100644 index 0000000000..cc37340de4 --- /dev/null +++ b/recipes/linux/linux-2.6.31/collie/0010-collie-support-pda_power-driver.patch @@ -0,0 +1,103 @@ +From d1602a7c25ad8abbbcb1e15cfb5f7c59e83ce028 Mon Sep 17 00:00:00 2001 +From: Thomas Kunze <thommycheck@gmx.de> +Date: Tue, 10 Feb 2009 13:48:32 +0100 +Subject: [PATCH 10/15] collie: support pda_power driver + +This add the pda-power platform device to collie. +--- + arch/arm/mach-sa1100/collie.c | 65 +++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 65 insertions(+), 0 deletions(-) + +diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c +index 395cf09..fdab9d9 100644 +--- a/arch/arm/mach-sa1100/collie.c ++++ b/arch/arm/mach-sa1100/collie.c +@@ -26,6 +26,7 @@ + #include <linux/mtd/partitions.h> + #include <linux/timer.h> + #include <linux/gpio.h> ++#include <linux/pda_power.h> + + #include <mach/hardware.h> + #include <asm/mach-types.h> +@@ -89,6 +90,69 @@ static struct mcp_plat_data collie_mcp_data = { + .gpio_base = COLLIE_TC35143_GPIO_BASE, + }; + ++/* ++ * Collie AC IN ++ */ ++static int collie_power_init(struct device *dev) ++{ ++ int ret = gpio_request(COLLIE_GPIO_AC_IN, "ac in"); ++ if (ret) ++ goto err_gpio_req; ++ ++ ret = gpio_direction_input(COLLIE_GPIO_AC_IN); ++ if (ret) ++ goto err_gpio_in; ++ ++ return 0; ++ ++err_gpio_in: ++ gpio_free(COLLIE_GPIO_AC_IN); ++err_gpio_req: ++ return ret; ++} ++ ++static void collie_power_exit(struct device *dev) ++{ ++ gpio_free(COLLIE_GPIO_AC_IN); ++} ++ ++static int collie_power_ac_online(void) ++{ ++ return gpio_get_value(COLLIE_GPIO_AC_IN) == 2; ++} ++ ++static char *collie_ac_supplied_to[] = { ++ "main-battery", ++ "backup-battery", ++}; ++ ++static struct pda_power_pdata collie_power_data = { ++ .init = collie_power_init, ++ .is_ac_online = collie_power_ac_online, ++ .exit = collie_power_exit, ++ .supplied_to = collie_ac_supplied_to, ++ .num_supplicants = ARRAY_SIZE(collie_ac_supplied_to), ++}; ++ ++static struct resource collie_power_resource[] = { ++ { ++ .name = "ac", ++ .start = gpio_to_irq(COLLIE_GPIO_AC_IN), ++ .end = gpio_to_irq(COLLIE_GPIO_AC_IN), ++ .flags = IORESOURCE_IRQ | ++ IORESOURCE_IRQ_HIGHEDGE | ++ IORESOURCE_IRQ_LOWEDGE, ++ }, ++}; ++ ++static struct platform_device collie_power_device = { ++ .name = "pda-power", ++ .id = -1, ++ .dev.platform_data = &collie_power_data, ++ .resource = collie_power_resource, ++ .num_resources = ARRAY_SIZE(collie_power_resource), ++}; ++ + #ifdef CONFIG_SHARP_LOCOMO + /* + * low-level UART features. +@@ -180,6 +244,7 @@ struct platform_device collie_locomo_device = { + static struct platform_device *devices[] __initdata = { + &collie_locomo_device, + &colliescoop_device, ++ &collie_power_device, + }; + + static struct mtd_partition collie_partitions[] = { +-- +1.6.0.4 + |