Skip to content

Commit

Permalink
PCMCIA: sa11x0: cerf: convert reset handling to use GPIO subsystem
Browse files Browse the repository at this point in the history
Rather than accessing GPSR and GPCR directly, use the GPIO subsystem
instead.

Acked-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Russell King committed Feb 4, 2012
1 parent f793e3a commit bbb58a1
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
2 changes: 1 addition & 1 deletion arch/arm/mach-sa1100/include/mach/cerf.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

#define CERF_GPIO_CF_BVD2 19
#define CERF_GPIO_CF_BVD1 20
#define CERF_GPIO_CF_RESET GPIO_GPIO (21)
#define CERF_GPIO_CF_RESET 21
#define CERF_GPIO_CF_IRQ 22
#define CERF_GPIO_CF_CD 23

Expand Down
19 changes: 14 additions & 5 deletions drivers/pcmcia/sa1100_cerf.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include <linux/device.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/gpio.h>

#include <mach/hardware.h>
#include <asm/mach-types.h>
Expand All @@ -21,6 +22,12 @@

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

ret = gpio_request_one(CERF_GPIO_CF_RESET, GPIOF_OUT_INIT_LOW, "CF_RESET");
if (ret)
return ret;

skt->stat[SOC_STAT_CD].gpio = CERF_GPIO_CF_CD;
skt->stat[SOC_STAT_CD].name = "CF_CD";
skt->stat[SOC_STAT_BVD1].gpio = CERF_GPIO_CF_BVD1;
Expand All @@ -33,6 +40,11 @@ static int cerf_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
return 0;
}

static void cerf_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
{
gpio_free(CERF_GPIO_CF_RESET);
}

static void
cerf_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state)
{
Expand All @@ -57,18 +69,15 @@ cerf_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
return -1;
}

if (state->flags & SS_RESET) {
GPSR = CERF_GPIO_CF_RESET;
} else {
GPCR = CERF_GPIO_CF_RESET;
}
gpio_set_value(CERF_GPIO_CF_RESET, !!(state->flags & SS_RESET));

return 0;
}

static struct pcmcia_low_level cerf_pcmcia_ops = {
.owner = THIS_MODULE,
.hw_init = cerf_pcmcia_hw_init,
.hw_shutdown = cerf_pcmcia_hw_shutdown,
.socket_state = cerf_pcmcia_socket_state,
.configure_socket = cerf_pcmcia_configure_socket,
};
Expand Down

0 comments on commit bbb58a1

Please sign in to comment.