hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/pcmcia/sa1111_lubbock.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * linux/drivers/pcmcia/pxa2xx_lubbock.c
34 *
....@@ -5,14 +6,9 @@
56 * Created: Jan 10, 2002
67 * Copyright: MontaVista Software Inc.
78 *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License version 2 as
10
- * published by the Free Software Foundation.
11
- *
129 * Originally based upon linux/drivers/pcmcia/sa1100_neponset.c
1310 *
1411 * Lubbock PCMCIA specific routines.
15
- *
1612 */
1713 #include <linux/module.h>
1814 #include <linux/kernel.h>
....@@ -24,19 +20,30 @@
2420 #include <mach/hardware.h>
2521 #include <asm/hardware/sa1111.h>
2622 #include <asm/mach-types.h>
27
-#include <mach/lubbock.h>
2823
2924 #include "sa1111_generic.h"
25
+#include "max1600.h"
26
+
27
+static int lubbock_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
28
+{
29
+ struct max1600 *m;
30
+ int ret;
31
+
32
+ ret = max1600_init(skt->socket.dev.parent, &m,
33
+ skt->nr ? MAX1600_CHAN_B : MAX1600_CHAN_A,
34
+ MAX1600_CODE_HIGH);
35
+ if (ret == 0)
36
+ skt->driver_data = m;
37
+
38
+ return ret;
39
+}
3040
3141 static int
3242 lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
3343 const socket_state_t *state)
3444 {
35
- struct sa1111_pcmcia_socket *s = to_skt(skt);
36
- unsigned int pa_dwr_mask, pa_dwr_set, misc_mask, misc_set;
45
+ struct max1600 *m = skt->driver_data;
3746 int ret = 0;
38
-
39
- pa_dwr_mask = pa_dwr_set = misc_mask = misc_set = 0;
4047
4148 /* Lubbock uses the Maxim MAX1602, with the following connections:
4249 *
....@@ -71,74 +78,7 @@
7178 again:
7279 switch (skt->nr) {
7380 case 0:
74
- pa_dwr_mask = GPIO_A0 | GPIO_A1 | GPIO_A2 | GPIO_A3;
75
-
76
- switch (state->Vcc) {
77
- case 0: /* Hi-Z */
78
- break;
79
-
80
- case 33: /* VY */
81
- pa_dwr_set |= GPIO_A3;
82
- break;
83
-
84
- case 50: /* VX */
85
- pa_dwr_set |= GPIO_A2;
86
- break;
87
-
88
- default:
89
- printk(KERN_ERR "%s(): unrecognized Vcc %u\n",
90
- __func__, state->Vcc);
91
- ret = -1;
92
- }
93
-
94
- switch (state->Vpp) {
95
- case 0: /* Hi-Z */
96
- break;
97
-
98
- case 120: /* 12IN */
99
- pa_dwr_set |= GPIO_A1;
100
- break;
101
-
102
- default: /* VCC */
103
- if (state->Vpp == state->Vcc)
104
- pa_dwr_set |= GPIO_A0;
105
- else {
106
- printk(KERN_ERR "%s(): unrecognized Vpp %u\n",
107
- __func__, state->Vpp);
108
- ret = -1;
109
- break;
110
- }
111
- }
112
- break;
113
-
11481 case 1:
115
- misc_mask = (1 << 15) | (1 << 14);
116
-
117
- switch (state->Vcc) {
118
- case 0: /* Hi-Z */
119
- break;
120
-
121
- case 33: /* VY */
122
- misc_set |= 1 << 15;
123
- break;
124
-
125
- case 50: /* VX */
126
- misc_set |= 1 << 14;
127
- break;
128
-
129
- default:
130
- printk(KERN_ERR "%s(): unrecognized Vcc %u\n",
131
- __func__, state->Vcc);
132
- ret = -1;
133
- break;
134
- }
135
-
136
- if (state->Vpp != state->Vcc && state->Vpp != 0) {
137
- printk(KERN_ERR "%s(): CF slot cannot support Vpp %u\n",
138
- __func__, state->Vpp);
139
- ret = -1;
140
- break;
141
- }
14282 break;
14383
14484 default:
....@@ -147,11 +87,8 @@
14787
14888 if (ret == 0)
14989 ret = sa1111_pcmcia_configure_socket(skt, state);
150
-
151
- if (ret == 0) {
152
- lubbock_set_misc_wr(misc_mask, misc_set);
153
- sa1111_set_io(s->dev, pa_dwr_mask, pa_dwr_set);
154
- }
90
+ if (ret == 0)
91
+ ret = max1600_configure(m, state->Vcc, state->Vpp);
15592
15693 #if 1
15794 if (ret == 0 && state->Vcc == 33) {
....@@ -175,8 +112,7 @@
175112 /*
176113 * Switch to 5V, Configure socket with 5V voltage
177114 */
178
- lubbock_set_misc_wr(misc_mask, 0);
179
- sa1111_set_io(s->dev, pa_dwr_mask, 0);
115
+ max1600_configure(m, 0, 0);
180116
181117 /*
182118 * It takes about 100ms to turn off Vcc.
....@@ -201,6 +137,7 @@
201137
202138 static struct pcmcia_low_level lubbock_pcmcia_ops = {
203139 .owner = THIS_MODULE,
140
+ .hw_init = lubbock_pcmcia_hw_init,
204141 .configure_socket = lubbock_pcmcia_configure_socket,
205142 .first = 0,
206143 .nr = 2,
....@@ -210,17 +147,6 @@
210147
211148 int pcmcia_lubbock_init(struct sa1111_dev *sadev)
212149 {
213
- /*
214
- * Set GPIO_A<3:0> to be outputs for the MAX1600,
215
- * and switch to standby mode.
216
- */
217
- sa1111_set_io_dir(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0, 0);
218
- sa1111_set_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0);
219
- sa1111_set_sleep_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0);
220
-
221
- /* Set CF Socket 1 power to standby mode. */
222
- lubbock_set_misc_wr((1 << 15) | (1 << 14), 0);
223
-
224150 pxa2xx_drv_pcmcia_ops(&lubbock_pcmcia_ops);
225151 pxa2xx_configure_sockets(&sadev->dev, &lubbock_pcmcia_ops);
226152 return sa1111_pcmcia_add(sadev, &lubbock_pcmcia_ops,