aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2012-01-18 07:32:37 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2012-02-04 09:32:23 -0500
commitbbb58a1210c6fdc68b09f7b9e12096c2a1886aa1 (patch)
tree311514f4b7b7e757e135eeedb9cf7f5bab6efafc
parentf793e3ab9f4cfbdba6269c8a6c522c5d665289b1 (diff)
PCMCIA: sa11x0: cerf: convert reset handling to use GPIO subsystem
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>
-rw-r--r--arch/arm/mach-sa1100/include/mach/cerf.h2
-rw-r--r--drivers/pcmcia/sa1100_cerf.c19
2 files changed, 15 insertions, 6 deletions
diff --git a/arch/arm/mach-sa1100/include/mach/cerf.h b/arch/arm/mach-sa1100/include/mach/cerf.h
index 0e49545a3723..88fd9c006ce0 100644
--- a/arch/arm/mach-sa1100/include/mach/cerf.h
+++ b/arch/arm/mach-sa1100/include/mach/cerf.h
@@ -16,7 +16,7 @@
16 16
17#define CERF_GPIO_CF_BVD2 19 17#define CERF_GPIO_CF_BVD2 19
18#define CERF_GPIO_CF_BVD1 20 18#define CERF_GPIO_CF_BVD1 20
19#define CERF_GPIO_CF_RESET GPIO_GPIO (21) 19#define CERF_GPIO_CF_RESET 21
20#define CERF_GPIO_CF_IRQ 22 20#define CERF_GPIO_CF_IRQ 22
21#define CERF_GPIO_CF_CD 23 21#define CERF_GPIO_CF_CD 23
22 22
diff --git a/drivers/pcmcia/sa1100_cerf.c b/drivers/pcmcia/sa1100_cerf.c
index 9d0424ea9a4f..50df0e682b68 100644
--- a/drivers/pcmcia/sa1100_cerf.c
+++ b/drivers/pcmcia/sa1100_cerf.c
@@ -10,6 +10,7 @@
10#include <linux/device.h> 10#include <linux/device.h>
11#include <linux/init.h> 11#include <linux/init.h>
12#include <linux/delay.h> 12#include <linux/delay.h>
13#include <linux/gpio.h>
13 14
14#include <mach/hardware.h> 15#include <mach/hardware.h>
15#include <asm/mach-types.h> 16#include <asm/mach-types.h>
@@ -21,6 +22,12 @@
21 22
22static int cerf_pcmcia_hw_init(struct soc_pcmcia_socket *skt) 23static int cerf_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
23{ 24{
25 int ret;
26
27 ret = gpio_request_one(CERF_GPIO_CF_RESET, GPIOF_OUT_INIT_LOW, "CF_RESET");
28 if (ret)
29 return ret;
30
24 skt->stat[SOC_STAT_CD].gpio = CERF_GPIO_CF_CD; 31 skt->stat[SOC_STAT_CD].gpio = CERF_GPIO_CF_CD;
25 skt->stat[SOC_STAT_CD].name = "CF_CD"; 32 skt->stat[SOC_STAT_CD].name = "CF_CD";
26 skt->stat[SOC_STAT_BVD1].gpio = CERF_GPIO_CF_BVD1; 33 skt->stat[SOC_STAT_BVD1].gpio = CERF_GPIO_CF_BVD1;
@@ -33,6 +40,11 @@ static int cerf_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
33 return 0; 40 return 0;
34} 41}
35 42
43static void cerf_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
44{
45 gpio_free(CERF_GPIO_CF_RESET);
46}
47
36static void 48static void
37cerf_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) 49cerf_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state)
38{ 50{
@@ -57,11 +69,7 @@ cerf_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
57 return -1; 69 return -1;
58 } 70 }
59 71
60 if (state->flags & SS_RESET) { 72 gpio_set_value(CERF_GPIO_CF_RESET, !!(state->flags & SS_RESET));
61 GPSR = CERF_GPIO_CF_RESET;
62 } else {
63 GPCR = CERF_GPIO_CF_RESET;
64 }
65 73
66 return 0; 74 return 0;
67} 75}
@@ -69,6 +77,7 @@ cerf_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
69static struct pcmcia_low_level cerf_pcmcia_ops = { 77static struct pcmcia_low_level cerf_pcmcia_ops = {
70 .owner = THIS_MODULE, 78 .owner = THIS_MODULE,
71 .hw_init = cerf_pcmcia_hw_init, 79 .hw_init = cerf_pcmcia_hw_init,
80 .hw_shutdown = cerf_pcmcia_hw_shutdown,
72 .socket_state = cerf_pcmcia_socket_state, 81 .socket_state = cerf_pcmcia_socket_state,
73 .configure_socket = cerf_pcmcia_configure_socket, 82 .configure_socket = cerf_pcmcia_configure_socket,
74}; 83};