Commit ba388307 authored by Marek Vasut's avatar Marek Vasut Committed by Eric Miao
Browse files

ARM: pxa: Use gpio arrays in palmtc_pcmcia driver



Use gpio_request_array() / gpio_free_array(), this makes the code
cleaner and less error prone.

Signed-off-by: default avatarMarek Vasut <marek.vasut@gmail.com>
parent 2070417d
Loading
Loading
Loading
Loading
+12 −61
Original line number Diff line number Diff line
@@ -21,79 +21,30 @@
#include <mach/palmtc.h>
#include "soc_common.h"

static struct gpio palmtc_pcmcia_gpios[] = {
	{ GPIO_NR_PALMTC_PCMCIA_POWER1,	GPIOF_INIT_LOW,	"PCMCIA Power 1" },
	{ GPIO_NR_PALMTC_PCMCIA_POWER2,	GPIOF_INIT_LOW,	"PCMCIA Power 2" },
	{ GPIO_NR_PALMTC_PCMCIA_POWER3,	GPIOF_INIT_LOW,	"PCMCIA Power 3" },
	{ GPIO_NR_PALMTC_PCMCIA_RESET,	GPIOF_INIT_HIGH,"PCMCIA Reset" },
	{ GPIO_NR_PALMTC_PCMCIA_READY,	GPIOF_IN,	"PCMCIA Ready" },
	{ GPIO_NR_PALMTC_PCMCIA_PWRREADY, GPIOF_IN,	"PCMCIA Power Ready" },
};

static int palmtc_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
{
	int ret;

	ret = gpio_request(GPIO_NR_PALMTC_PCMCIA_POWER1, "PCMCIA PWR1");
	if (ret)
		goto err1;
	ret = gpio_direction_output(GPIO_NR_PALMTC_PCMCIA_POWER1, 0);
	if (ret)
		goto err2;

	ret = gpio_request(GPIO_NR_PALMTC_PCMCIA_POWER2, "PCMCIA PWR2");
	if (ret)
		goto err2;
	ret = gpio_direction_output(GPIO_NR_PALMTC_PCMCIA_POWER2, 0);
	if (ret)
		goto err3;

	ret = gpio_request(GPIO_NR_PALMTC_PCMCIA_POWER3, "PCMCIA PWR3");
	if (ret)
		goto err3;
	ret = gpio_direction_output(GPIO_NR_PALMTC_PCMCIA_POWER3, 0);
	if (ret)
		goto err4;

	ret = gpio_request(GPIO_NR_PALMTC_PCMCIA_RESET, "PCMCIA RST");
	if (ret)
		goto err4;
	ret = gpio_direction_output(GPIO_NR_PALMTC_PCMCIA_RESET, 1);
	if (ret)
		goto err5;

	ret = gpio_request(GPIO_NR_PALMTC_PCMCIA_READY, "PCMCIA RDY");
	if (ret)
		goto err5;
	ret = gpio_direction_input(GPIO_NR_PALMTC_PCMCIA_READY);
	if (ret)
		goto err6;

	ret = gpio_request(GPIO_NR_PALMTC_PCMCIA_PWRREADY, "PCMCIA PWRRDY");
	if (ret)
		goto err6;
	ret = gpio_direction_input(GPIO_NR_PALMTC_PCMCIA_PWRREADY);
	if (ret)
		goto err7;
	ret = gpio_request_array(palmtc_pcmcia_gpios,
				ARRAY_SIZE(palmtc_pcmcia_gpios));

	skt->socket.pci_irq = IRQ_GPIO(GPIO_NR_PALMTC_PCMCIA_READY);
	return 0;

err7:
	gpio_free(GPIO_NR_PALMTC_PCMCIA_PWRREADY);
err6:
	gpio_free(GPIO_NR_PALMTC_PCMCIA_READY);
err5:
	gpio_free(GPIO_NR_PALMTC_PCMCIA_RESET);
err4:
	gpio_free(GPIO_NR_PALMTC_PCMCIA_POWER3);
err3:
	gpio_free(GPIO_NR_PALMTC_PCMCIA_POWER2);
err2:
	gpio_free(GPIO_NR_PALMTC_PCMCIA_POWER1);
err1:
	return ret;
}

static void palmtc_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
{
	gpio_free(GPIO_NR_PALMTC_PCMCIA_PWRREADY);
	gpio_free(GPIO_NR_PALMTC_PCMCIA_READY);
	gpio_free(GPIO_NR_PALMTC_PCMCIA_RESET);
	gpio_free(GPIO_NR_PALMTC_PCMCIA_POWER3);
	gpio_free(GPIO_NR_PALMTC_PCMCIA_POWER2);
	gpio_free(GPIO_NR_PALMTC_PCMCIA_POWER1);
	gpio_free_array(palmtc_pcmcia_gpios, ARRAY_SIZE(palmtc_pcmcia_gpios));
}

static void palmtc_pcmcia_socket_state(struct soc_pcmcia_socket *skt,