aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-kernel/linux/linux-yocto-3.17/collie/collie-use-gpio-charger.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/linux/linux-yocto-3.17/collie/collie-use-gpio-charger.patch')
-rw-r--r--recipes-kernel/linux/linux-yocto-3.17/collie/collie-use-gpio-charger.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-yocto-3.17/collie/collie-use-gpio-charger.patch b/recipes-kernel/linux/linux-yocto-3.17/collie/collie-use-gpio-charger.patch
new file mode 100644
index 0000000..253b9ad
--- /dev/null
+++ b/recipes-kernel/linux/linux-yocto-3.17/collie/collie-use-gpio-charger.patch
@@ -0,0 +1,113 @@
+From 062827350692bcc82343579df1437872593a208c Mon Sep 17 00:00:00 2001
+From: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+Date: Fri, 1 Nov 2013 23:50:26 +0400
+Subject: [PATCH] ARM: sa1100 collie: use gpio-charger instead of pda-power
+
+Use gpio-charger driver instead of pda-power: it automatically cares
+about used gpio and since collie does not differentiate between usb and
+ac chargers, pda-power is an overkill for it.
+
+As a bonus this allows us to remove gpio_to_irq calls from machine init
+call - it is fragile. These gpio_to_irq calls will fail if gpios are
+registered later, via device driver mechanisms.
+
+Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+---
+ arch/arm/mach-sa1100/collie.c | 55 ++++++-------------------------------------
+ 1 file changed, 7 insertions(+), 48 deletions(-)
+
+diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c
+index 7fb96eb..f902b8e 100644
+--- a/arch/arm/mach-sa1100/collie.c
++++ b/arch/arm/mach-sa1100/collie.c
+@@ -28,7 +28,7 @@
+ #include <linux/mtd/partitions.h>
+ #include <linux/timer.h>
+ #include <linux/gpio.h>
+-#include <linux/pda_power.h>
++#include <linux/power/gpio-charger.h>
+
+ #include <video/fbdev/sa1100fb.h>
+
+@@ -97,62 +97,24 @@ static struct mcp_plat_data collie_mcp_data = {
+ /*
+ * 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,
++
++static struct gpio_charger_platform_data collie_power_data = {
++ .name = "charger",
++ .type = POWER_SUPPLY_TYPE_MAINS,
++ .gpio = COLLIE_GPIO_AC_IN,
+ .supplied_to = collie_ac_supplied_to,
+ .num_supplicants = ARRAY_SIZE(collie_ac_supplied_to),
+ };
+
+-static struct resource collie_power_resource[] = {
+- {
+- .name = "ac",
+- .flags = IORESOURCE_IRQ |
+- IORESOURCE_IRQ_HIGHEDGE |
+- IORESOURCE_IRQ_LOWEDGE,
+- },
+-};
+-
+ static struct platform_device collie_power_device = {
+- .name = "pda-power",
++ .name = "gpio-charger",
+ .id = -1,
+ .dev.platform_data = &collie_power_data,
+- .resource = collie_power_resource,
+- .num_resources = ARRAY_SIZE(collie_power_resource),
+ };
+
+ #ifdef CONFIG_SHARP_LOCOMO
+@@ -348,9 +310,6 @@ static void __init collie_init(void)
+
+ GPSR |= _COLLIE_GPIO_UCB1x00_RESET;
+
+- collie_power_resource[0].start = gpio_to_irq(COLLIE_GPIO_AC_IN);
+- collie_power_resource[0].end = gpio_to_irq(COLLIE_GPIO_AC_IN);
+-
+ sa11x0_ppc_configure_mcp();
+
+
+--
+1.8.5.2
+