diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /drivers/usb/host/sl811_cs.c | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'drivers/usb/host/sl811_cs.c')
-rw-r--r-- | drivers/usb/host/sl811_cs.c | 70 |
1 files changed, 11 insertions, 59 deletions
diff --git a/drivers/usb/host/sl811_cs.c b/drivers/usb/host/sl811_cs.c index 0e13a00eb2ed..3b6f50eaec91 100644 --- a/drivers/usb/host/sl811_cs.c +++ b/drivers/usb/host/sl811_cs.c | |||
@@ -20,7 +20,6 @@ | |||
20 | #include <linux/ioport.h> | 20 | #include <linux/ioport.h> |
21 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
22 | 22 | ||
23 | #include <pcmcia/cs.h> | ||
24 | #include <pcmcia/cistpl.h> | 23 | #include <pcmcia/cistpl.h> |
25 | #include <pcmcia/cisreg.h> | 24 | #include <pcmcia/cisreg.h> |
26 | #include <pcmcia/ds.h> | 25 | #include <pcmcia/ds.h> |
@@ -132,49 +131,12 @@ static void sl811_cs_release(struct pcmcia_device * link) | |||
132 | platform_device_unregister(&platform_dev); | 131 | platform_device_unregister(&platform_dev); |
133 | } | 132 | } |
134 | 133 | ||
135 | static int sl811_cs_config_check(struct pcmcia_device *p_dev, | 134 | static int sl811_cs_config_check(struct pcmcia_device *p_dev, void *priv_data) |
136 | cistpl_cftable_entry_t *cfg, | ||
137 | cistpl_cftable_entry_t *dflt, | ||
138 | unsigned int vcc, | ||
139 | void *priv_data) | ||
140 | { | 135 | { |
141 | if (cfg->index == 0) | 136 | if (p_dev->config_index == 0) |
142 | return -ENODEV; | 137 | return -EINVAL; |
143 | 138 | ||
144 | /* Use power settings for Vcc and Vpp if present */ | 139 | return pcmcia_request_io(p_dev); |
145 | /* Note that the CIS values need to be rescaled */ | ||
146 | if (cfg->vcc.present & (1<<CISTPL_POWER_VNOM)) { | ||
147 | if (cfg->vcc.param[CISTPL_POWER_VNOM]/10000 != vcc) | ||
148 | return -ENODEV; | ||
149 | } else if (dflt->vcc.present & (1<<CISTPL_POWER_VNOM)) { | ||
150 | if (dflt->vcc.param[CISTPL_POWER_VNOM]/10000 != vcc) | ||
151 | return -ENODEV; | ||
152 | } | ||
153 | |||
154 | if (cfg->vpp1.present & (1<<CISTPL_POWER_VNOM)) | ||
155 | p_dev->conf.Vpp = | ||
156 | cfg->vpp1.param[CISTPL_POWER_VNOM]/10000; | ||
157 | else if (dflt->vpp1.present & (1<<CISTPL_POWER_VNOM)) | ||
158 | p_dev->conf.Vpp = | ||
159 | dflt->vpp1.param[CISTPL_POWER_VNOM]/10000; | ||
160 | |||
161 | /* we need an interrupt */ | ||
162 | p_dev->conf.Attributes |= CONF_ENABLE_IRQ; | ||
163 | |||
164 | /* IO window settings */ | ||
165 | p_dev->resource[0]->end = p_dev->resource[1]->end = 0; | ||
166 | if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) { | ||
167 | cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io; | ||
168 | p_dev->io_lines = io->flags & CISTPL_IO_LINES_MASK; | ||
169 | |||
170 | p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_8; | ||
171 | p_dev->resource[0]->start = io->win[0].base; | ||
172 | p_dev->resource[0]->end = io->win[0].len; | ||
173 | |||
174 | return pcmcia_request_io(p_dev); | ||
175 | } | ||
176 | pcmcia_disable_device(p_dev); | ||
177 | return -ENODEV; | ||
178 | } | 140 | } |
179 | 141 | ||
180 | 142 | ||
@@ -185,6 +147,9 @@ static int sl811_cs_config(struct pcmcia_device *link) | |||
185 | 147 | ||
186 | dev_dbg(&link->dev, "sl811_cs_config\n"); | 148 | dev_dbg(&link->dev, "sl811_cs_config\n"); |
187 | 149 | ||
150 | link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_VPP | | ||
151 | CONF_AUTO_CHECK_VCC | CONF_AUTO_SET_IO; | ||
152 | |||
188 | if (pcmcia_loop_config(link, sl811_cs_config_check, NULL)) | 153 | if (pcmcia_loop_config(link, sl811_cs_config_check, NULL)) |
189 | goto failed; | 154 | goto failed; |
190 | 155 | ||
@@ -195,18 +160,10 @@ static int sl811_cs_config(struct pcmcia_device *link) | |||
195 | if (!link->irq) | 160 | if (!link->irq) |
196 | goto failed; | 161 | goto failed; |
197 | 162 | ||
198 | ret = pcmcia_request_configuration(link, &link->conf); | 163 | ret = pcmcia_enable_device(link); |
199 | if (ret) | 164 | if (ret) |
200 | goto failed; | 165 | goto failed; |
201 | 166 | ||
202 | dev_info(&link->dev, "index 0x%02x: ", | ||
203 | link->conf.ConfigIndex); | ||
204 | if (link->conf.Vpp) | ||
205 | printk(", Vpp %d.%d", link->conf.Vpp/10, link->conf.Vpp%10); | ||
206 | printk(", irq %d", link->irq); | ||
207 | printk(", io %pR", link->resource[0]); | ||
208 | printk("\n"); | ||
209 | |||
210 | if (sl811_hc_init(parent, link->resource[0]->start, link->irq) | 167 | if (sl811_hc_init(parent, link->resource[0]->start, link->irq) |
211 | < 0) { | 168 | < 0) { |
212 | failed: | 169 | failed: |
@@ -227,13 +184,10 @@ static int sl811_cs_probe(struct pcmcia_device *link) | |||
227 | local->p_dev = link; | 184 | local->p_dev = link; |
228 | link->priv = local; | 185 | link->priv = local; |
229 | 186 | ||
230 | link->conf.Attributes = 0; | ||
231 | link->conf.IntType = INT_MEMORY_AND_IO; | ||
232 | |||
233 | return sl811_cs_config(link); | 187 | return sl811_cs_config(link); |
234 | } | 188 | } |
235 | 189 | ||
236 | static struct pcmcia_device_id sl811_ids[] = { | 190 | static const struct pcmcia_device_id sl811_ids[] = { |
237 | PCMCIA_DEVICE_MANF_CARD(0xc015, 0x0001), /* RATOC USB HOST CF+ Card */ | 191 | PCMCIA_DEVICE_MANF_CARD(0xc015, 0x0001), /* RATOC USB HOST CF+ Card */ |
238 | PCMCIA_DEVICE_NULL, | 192 | PCMCIA_DEVICE_NULL, |
239 | }; | 193 | }; |
@@ -241,9 +195,7 @@ MODULE_DEVICE_TABLE(pcmcia, sl811_ids); | |||
241 | 195 | ||
242 | static struct pcmcia_driver sl811_cs_driver = { | 196 | static struct pcmcia_driver sl811_cs_driver = { |
243 | .owner = THIS_MODULE, | 197 | .owner = THIS_MODULE, |
244 | .drv = { | 198 | .name = "sl811_cs", |
245 | .name = "sl811_cs", | ||
246 | }, | ||
247 | .probe = sl811_cs_probe, | 199 | .probe = sl811_cs_probe, |
248 | .remove = sl811_cs_detach, | 200 | .remove = sl811_cs_detach, |
249 | .id_table = sl811_ids, | 201 | .id_table = sl811_ids, |