Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 119acbd2 authored by Dmitry Eremin-Solenikov's avatar Dmitry Eremin-Solenikov Committed by Russell King
Browse files

ARM: 8217/1: 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: default avatarDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 279f487e
Loading
Loading
Loading
Loading
+7 −48
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@
#include <linux/gpio_keys.h>
#include <linux/input.h>
#include <linux/gpio.h>
#include <linux/pda_power.h>
#include <linux/power/gpio-charger.h>

#include <video/sa1100fb.h>

@@ -131,62 +131,24 @@ static struct irda_platform_data collie_ir_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
@@ -420,9 +382,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();