diff options
author | Russell King <rmk+kernel@armlinux.org.uk> | 2016-08-31 03:49:46 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@armlinux.org.uk> | 2016-09-22 04:39:01 -0400 |
commit | a1d0500261e788f9b1d068e3167b2a77ad0abfc4 (patch) | |
tree | d9b98466428f41f3df211bf65cd414c690abada6 /drivers/pcmcia | |
parent | 6ac95d821216f3baab16821a893d52ab385824be (diff) |
pcmcia: soc_common: add CF socket state helper
Add a helper to get the voltage state of CF sockets, where the voltage
sense pins are not wired up. Switch assabet and cerf to use this
helper.
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Diffstat (limited to 'drivers/pcmcia')
-rw-r--r-- | drivers/pcmcia/sa1100_assabet.c | 9 | ||||
-rw-r--r-- | drivers/pcmcia/sa1100_cerf.c | 9 | ||||
-rw-r--r-- | drivers/pcmcia/soc_common.c | 12 | ||||
-rw-r--r-- | drivers/pcmcia/soc_common.h | 2 |
4 files changed, 16 insertions, 16 deletions
diff --git a/drivers/pcmcia/sa1100_assabet.c b/drivers/pcmcia/sa1100_assabet.c index 44cfc4416e54..71ace6910d7e 100644 --- a/drivers/pcmcia/sa1100_assabet.c +++ b/drivers/pcmcia/sa1100_assabet.c | |||
@@ -31,13 +31,6 @@ static int assabet_pcmcia_hw_init(struct soc_pcmcia_socket *skt) | |||
31 | return 0; | 31 | return 0; |
32 | } | 32 | } |
33 | 33 | ||
34 | static void | ||
35 | assabet_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) | ||
36 | { | ||
37 | state->vs_3v = 1; /* Can only apply 3.3V on Assabet. */ | ||
38 | state->vs_Xv = 0; | ||
39 | } | ||
40 | |||
41 | static int | 34 | static int |
42 | assabet_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) | 35 | assabet_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) |
43 | { | 36 | { |
@@ -90,7 +83,7 @@ static void assabet_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) | |||
90 | static struct pcmcia_low_level assabet_pcmcia_ops = { | 83 | static struct pcmcia_low_level assabet_pcmcia_ops = { |
91 | .owner = THIS_MODULE, | 84 | .owner = THIS_MODULE, |
92 | .hw_init = assabet_pcmcia_hw_init, | 85 | .hw_init = assabet_pcmcia_hw_init, |
93 | .socket_state = assabet_pcmcia_socket_state, | 86 | .socket_state = soc_common_cf_socket_state, |
94 | .configure_socket = assabet_pcmcia_configure_socket, | 87 | .configure_socket = assabet_pcmcia_configure_socket, |
95 | .socket_suspend = assabet_pcmcia_socket_suspend, | 88 | .socket_suspend = assabet_pcmcia_socket_suspend, |
96 | }; | 89 | }; |
diff --git a/drivers/pcmcia/sa1100_cerf.c b/drivers/pcmcia/sa1100_cerf.c index b3774e5d0396..c3f67363f6a1 100644 --- a/drivers/pcmcia/sa1100_cerf.c +++ b/drivers/pcmcia/sa1100_cerf.c | |||
@@ -45,13 +45,6 @@ static void cerf_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) | |||
45 | gpio_free(CERF_GPIO_CF_RESET); | 45 | gpio_free(CERF_GPIO_CF_RESET); |
46 | } | 46 | } |
47 | 47 | ||
48 | static void | ||
49 | cerf_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) | ||
50 | { | ||
51 | state->vs_3v = 1; | ||
52 | state->vs_Xv = 0; | ||
53 | } | ||
54 | |||
55 | static int | 48 | static int |
56 | cerf_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, | 49 | cerf_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, |
57 | const socket_state_t *state) | 50 | const socket_state_t *state) |
@@ -77,7 +70,7 @@ static struct pcmcia_low_level cerf_pcmcia_ops = { | |||
77 | .owner = THIS_MODULE, | 70 | .owner = THIS_MODULE, |
78 | .hw_init = cerf_pcmcia_hw_init, | 71 | .hw_init = cerf_pcmcia_hw_init, |
79 | .hw_shutdown = cerf_pcmcia_hw_shutdown, | 72 | .hw_shutdown = cerf_pcmcia_hw_shutdown, |
80 | .socket_state = cerf_pcmcia_socket_state, | 73 | .socket_state = soc_common_cf_socket_state, |
81 | .configure_socket = cerf_pcmcia_configure_socket, | 74 | .configure_socket = cerf_pcmcia_configure_socket, |
82 | }; | 75 | }; |
83 | 76 | ||
diff --git a/drivers/pcmcia/soc_common.c b/drivers/pcmcia/soc_common.c index 9373d997d0cf..6d0ec291f475 100644 --- a/drivers/pcmcia/soc_common.c +++ b/drivers/pcmcia/soc_common.c | |||
@@ -229,6 +229,18 @@ static void soc_pcmcia_hw_disable(struct soc_pcmcia_socket *skt) | |||
229 | irq_set_irq_type(skt->stat[i].irq, IRQ_TYPE_NONE); | 229 | irq_set_irq_type(skt->stat[i].irq, IRQ_TYPE_NONE); |
230 | } | 230 | } |
231 | 231 | ||
232 | /* | ||
233 | * The CF 3.0 specification says that cards tie VS1 to ground and leave | ||
234 | * VS2 open. Many implementations do not wire up the VS signals, so we | ||
235 | * provide hard-coded values as per the CF 3.0 spec. | ||
236 | */ | ||
237 | void soc_common_cf_socket_state(struct soc_pcmcia_socket *skt, | ||
238 | struct pcmcia_state *state) | ||
239 | { | ||
240 | state->vs_3v = 1; | ||
241 | } | ||
242 | EXPORT_SYMBOL_GPL(soc_common_cf_socket_state); | ||
243 | |||
232 | static unsigned int soc_common_pcmcia_skt_state(struct soc_pcmcia_socket *skt) | 244 | static unsigned int soc_common_pcmcia_skt_state(struct soc_pcmcia_socket *skt) |
233 | { | 245 | { |
234 | struct pcmcia_state state; | 246 | struct pcmcia_state state; |
diff --git a/drivers/pcmcia/soc_common.h b/drivers/pcmcia/soc_common.h index 686ba3238c76..39c1e15167f3 100644 --- a/drivers/pcmcia/soc_common.h +++ b/drivers/pcmcia/soc_common.h | |||
@@ -143,6 +143,8 @@ void soc_pcmcia_remove_one(struct soc_pcmcia_socket *skt); | |||
143 | int soc_pcmcia_add_one(struct soc_pcmcia_socket *skt); | 143 | int soc_pcmcia_add_one(struct soc_pcmcia_socket *skt); |
144 | int soc_pcmcia_request_gpiods(struct soc_pcmcia_socket *skt); | 144 | int soc_pcmcia_request_gpiods(struct soc_pcmcia_socket *skt); |
145 | 145 | ||
146 | void soc_common_cf_socket_state(struct soc_pcmcia_socket *skt, | ||
147 | struct pcmcia_state *state); | ||
146 | 148 | ||
147 | #ifdef CONFIG_PCMCIA_DEBUG | 149 | #ifdef CONFIG_PCMCIA_DEBUG |
148 | 150 | ||