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

Commit 019370d3 authored by Axel Lin's avatar Axel Lin Committed by Anton Vorontsov
Browse files

tosa_battery: Convert to gpio_request_array() / gpio_free_array()



This change simplifies the implementation.

Signed-off-by: default avatarAxel Lin <axel.lin@gmail.com>
Acked-by: default avatarDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Signed-off-by: default avatarAnton Vorontsov <cbouatmailru@gmail.com>
parent 389cd203
Loading
Loading
Loading
Loading
+19 −47
Original line number Diff line number Diff line
@@ -307,25 +307,20 @@ static struct tosa_bat tosa_bat_bu = {
	.adc_temp_divider = -1,
};

static struct {
	int gpio;
	char *name;
	bool output;
	int value;
} gpios[] = {
	{ TOSA_GPIO_CHARGE_OFF,		"main charge off",	1, 1 },
	{ TOSA_GPIO_CHARGE_OFF_JC,	"jacket charge off",	1, 1 },
	{ TOSA_GPIO_BAT_SW_ON,		"battery switch",	1, 0 },
	{ TOSA_GPIO_BAT0_V_ON,		"main battery",		1, 0 },
	{ TOSA_GPIO_BAT1_V_ON,		"jacket battery",	1, 0 },
	{ TOSA_GPIO_BAT1_TH_ON,		"main battery temp",	1, 0 },
	{ TOSA_GPIO_BAT0_TH_ON,		"jacket battery temp",	1, 0 },
	{ TOSA_GPIO_BU_CHRG_ON,		"backup battery",	1, 0 },
	{ TOSA_GPIO_BAT0_CRG,		"main battery full",	0, 0 },
	{ TOSA_GPIO_BAT1_CRG,		"jacket battery full",	0, 0 },
	{ TOSA_GPIO_BAT0_LOW,		"main battery low",	0, 0 },
	{ TOSA_GPIO_BAT1_LOW,		"jacket battery low",	0, 0 },
	{ TOSA_GPIO_JACKET_DETECT,	"jacket detect",	0, 0 },
static struct gpio tosa_bat_gpios[] = {
	{ TOSA_GPIO_CHARGE_OFF,	   GPIOF_OUT_INIT_HIGH, "main charge off" },
	{ TOSA_GPIO_CHARGE_OFF_JC, GPIOF_OUT_INIT_HIGH, "jacket charge off" },
	{ TOSA_GPIO_BAT_SW_ON,	   GPIOF_OUT_INIT_LOW,	"battery switch" },
	{ TOSA_GPIO_BAT0_V_ON,	   GPIOF_OUT_INIT_LOW,	"main battery" },
	{ TOSA_GPIO_BAT1_V_ON,	   GPIOF_OUT_INIT_LOW,	"jacket battery" },
	{ TOSA_GPIO_BAT1_TH_ON,	   GPIOF_OUT_INIT_LOW,	"main battery temp" },
	{ TOSA_GPIO_BAT0_TH_ON,	   GPIOF_OUT_INIT_LOW,	"jacket battery temp" },
	{ TOSA_GPIO_BU_CHRG_ON,	   GPIOF_OUT_INIT_LOW,	"backup battery" },
	{ TOSA_GPIO_BAT0_CRG,	   GPIOF_IN,		"main battery full" },
	{ TOSA_GPIO_BAT1_CRG,	   GPIOF_IN,		"jacket battery full" },
	{ TOSA_GPIO_BAT0_LOW,	   GPIOF_IN,		"main battery low" },
	{ TOSA_GPIO_BAT1_LOW,	   GPIOF_IN,		"jacket battery low" },
	{ TOSA_GPIO_JACKET_DETECT, GPIOF_IN,		"jacket detect" },
};

#ifdef CONFIG_PM
@@ -350,27 +345,13 @@ static int tosa_bat_resume(struct platform_device *dev)
static int __devinit tosa_bat_probe(struct platform_device *dev)
{
	int ret;
	int i;

	if (!machine_is_tosa())
		return -ENODEV;

	for (i = 0; i < ARRAY_SIZE(gpios); i++) {
		ret = gpio_request(gpios[i].gpio, gpios[i].name);
		if (ret) {
			i--;
			goto err_gpio;
		}

		if (gpios[i].output)
			ret = gpio_direction_output(gpios[i].gpio,
					gpios[i].value);
		else
			ret = gpio_direction_input(gpios[i].gpio);

	ret = gpio_request_array(tosa_bat_gpios, ARRAY_SIZE(tosa_bat_gpios));
	if (ret)
			goto err_gpio;
	}
		return ret;

	mutex_init(&tosa_bat_main.work_lock);
	mutex_init(&tosa_bat_jacket.work_lock);
@@ -424,18 +405,12 @@ static int __devinit tosa_bat_probe(struct platform_device *dev)
	/* see comment in tosa_bat_remove */
	cancel_work_sync(&bat_work);

	i--;
err_gpio:
	for (; i >= 0; i--)
		gpio_free(gpios[i].gpio);

	gpio_free_array(tosa_bat_gpios, ARRAY_SIZE(tosa_bat_gpios));
	return ret;
}

static int __devexit tosa_bat_remove(struct platform_device *dev)
{
	int i;

	free_irq(gpio_to_irq(TOSA_GPIO_JACKET_DETECT), &tosa_bat_jacket);
	free_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG), &tosa_bat_jacket);
	free_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG), &tosa_bat_main);
@@ -450,10 +425,7 @@ static int __devexit tosa_bat_remove(struct platform_device *dev)
	 * unregistered now.
	 */
	cancel_work_sync(&bat_work);

	for (i = ARRAY_SIZE(gpios) - 1; i >= 0; i--)
		gpio_free(gpios[i].gpio);

	gpio_free_array(tosa_bat_gpios, ARRAY_SIZE(tosa_bat_gpios));
	return 0;
}