diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-20 12:09:46 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-20 12:09:46 -0400 |
commit | 54291263519ac2c9bdda68b23b02fef3808deed4 (patch) | |
tree | d71de8172a6ab2bbe3068aece7d8911eeeb276fd /drivers/isdn/hisax | |
parent | 46ee9645094ad1eb5b4888882ecaa1fb87dcd2a3 (diff) | |
parent | acd200bf45487271d54f05938ad9e30f32a530ee (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6: (29 commits)
pcmcia: disable PCMCIA ioctl also for ARM
drivers/staging/comedi: dev_node removal (quatech_daqp_cs)
drivers/staging/comedi: dev_node removal (ni_mio_cs)
drivers/staging/comedi: dev_node removal (ni_labpc_cs)
drivers/staging/comedi: dev_node removal (ni_daq_dio24)
drivers/staging/comedi: dev_node removal (ni_daq_700)
drivers/staging/comedi: dev_node removal (das08_cs)
drivers/staging/comedi: dev_node removal (cb_das16_cs)
pata_pcmcia: get rid of extra indirection
pcmcia: remove suspend-related comment from yenta_socket.c
pcmcia: call pcmcia_{read,write}_cis_mem with ops_mutex held
pcmcia: remove pcmcia_add_device_lock
pcmcia: update gfp/slab.h includes
pcmcia: remove unused mem_op.h
pcmcia: do not autoadd root PCI bus resources
pcmcia: clarify alloc_io_space, move it to resource handlers
pcmcia: move all pcmcia_resource_ops providers into one module
pcmcia: move high level CIS access code to separate file
pcmcia: dev_node removal (core)
pcmcia: dev_node removal (remaining drivers)
...
Diffstat (limited to 'drivers/isdn/hisax')
-rw-r--r-- | drivers/isdn/hisax/avma1_cs.c | 63 | ||||
-rw-r--r-- | drivers/isdn/hisax/elsa_cs.c | 40 | ||||
-rw-r--r-- | drivers/isdn/hisax/sedlbauer_cs.c | 60 | ||||
-rw-r--r-- | drivers/isdn/hisax/teles_cs.c | 50 |
4 files changed, 22 insertions, 191 deletions
diff --git a/drivers/isdn/hisax/avma1_cs.c b/drivers/isdn/hisax/avma1_cs.c index 8d1d63a02b34..a80a7617f16f 100644 --- a/drivers/isdn/hisax/avma1_cs.c +++ b/drivers/isdn/hisax/avma1_cs.c | |||
@@ -62,31 +62,6 @@ static void avma1cs_release(struct pcmcia_device *link); | |||
62 | static void avma1cs_detach(struct pcmcia_device *p_dev) __devexit ; | 62 | static void avma1cs_detach(struct pcmcia_device *p_dev) __devexit ; |
63 | 63 | ||
64 | 64 | ||
65 | /* | ||
66 | A linked list of "instances" of the skeleton device. Each actual | ||
67 | PCMCIA card corresponds to one device instance, and is described | ||
68 | by one struct pcmcia_device structure (defined in ds.h). | ||
69 | |||
70 | You may not want to use a linked list for this -- for example, the | ||
71 | memory card driver uses an array of struct pcmcia_device pointers, where minor | ||
72 | device numbers are used to derive the corresponding array index. | ||
73 | */ | ||
74 | |||
75 | /* | ||
76 | A driver needs to provide a dev_node_t structure for each device | ||
77 | on a card. In some cases, there is only one device per card (for | ||
78 | example, ethernet cards, modems). In other cases, there may be | ||
79 | many actual or logical devices (SCSI adapters, memory cards with | ||
80 | multiple partitions). The dev_node_t structures need to be kept | ||
81 | in a linked list starting at the 'dev' field of a struct pcmcia_device | ||
82 | structure. We allocate them in the card's private data structure, | ||
83 | because they generally can't be allocated dynamically. | ||
84 | */ | ||
85 | |||
86 | typedef struct local_info_t { | ||
87 | dev_node_t node; | ||
88 | } local_info_t; | ||
89 | |||
90 | /*====================================================================== | 65 | /*====================================================================== |
91 | 66 | ||
92 | avma1cs_attach() creates an "instance" of the driver, allocating | 67 | avma1cs_attach() creates an "instance" of the driver, allocating |
@@ -101,17 +76,8 @@ typedef struct local_info_t { | |||
101 | 76 | ||
102 | static int __devinit avma1cs_probe(struct pcmcia_device *p_dev) | 77 | static int __devinit avma1cs_probe(struct pcmcia_device *p_dev) |
103 | { | 78 | { |
104 | local_info_t *local; | ||
105 | |||
106 | dev_dbg(&p_dev->dev, "avma1cs_attach()\n"); | 79 | dev_dbg(&p_dev->dev, "avma1cs_attach()\n"); |
107 | 80 | ||
108 | /* Allocate space for private device-specific data */ | ||
109 | local = kzalloc(sizeof(local_info_t), GFP_KERNEL); | ||
110 | if (!local) | ||
111 | return -ENOMEM; | ||
112 | |||
113 | p_dev->priv = local; | ||
114 | |||
115 | /* The io structure describes IO port mapping */ | 81 | /* The io structure describes IO port mapping */ |
116 | p_dev->io.NumPorts1 = 16; | 82 | p_dev->io.NumPorts1 = 16; |
117 | p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8; | 83 | p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8; |
@@ -119,9 +85,6 @@ static int __devinit avma1cs_probe(struct pcmcia_device *p_dev) | |||
119 | p_dev->io.Attributes2 = IO_DATA_PATH_WIDTH_16; | 85 | p_dev->io.Attributes2 = IO_DATA_PATH_WIDTH_16; |
120 | p_dev->io.IOAddrLines = 5; | 86 | p_dev->io.IOAddrLines = 5; |
121 | 87 | ||
122 | /* Interrupt setup */ | ||
123 | p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; | ||
124 | |||
125 | /* General socket configuration */ | 88 | /* General socket configuration */ |
126 | p_dev->conf.Attributes = CONF_ENABLE_IRQ; | 89 | p_dev->conf.Attributes = CONF_ENABLE_IRQ; |
127 | p_dev->conf.IntType = INT_MEMORY_AND_IO; | 90 | p_dev->conf.IntType = INT_MEMORY_AND_IO; |
@@ -176,14 +139,11 @@ static int avma1cs_configcheck(struct pcmcia_device *p_dev, | |||
176 | 139 | ||
177 | static int __devinit avma1cs_config(struct pcmcia_device *link) | 140 | static int __devinit avma1cs_config(struct pcmcia_device *link) |
178 | { | 141 | { |
179 | local_info_t *dev; | 142 | int i = -1; |
180 | int i; | ||
181 | char devname[128]; | 143 | char devname[128]; |
182 | IsdnCard_t icard; | 144 | IsdnCard_t icard; |
183 | int busy = 0; | 145 | int busy = 0; |
184 | 146 | ||
185 | dev = link->priv; | ||
186 | |||
187 | dev_dbg(&link->dev, "avma1cs_config(0x%p)\n", link); | 147 | dev_dbg(&link->dev, "avma1cs_config(0x%p)\n", link); |
188 | 148 | ||
189 | devname[0] = 0; | 149 | devname[0] = 0; |
@@ -197,8 +157,7 @@ static int __devinit avma1cs_config(struct pcmcia_device *link) | |||
197 | /* | 157 | /* |
198 | * allocate an interrupt line | 158 | * allocate an interrupt line |
199 | */ | 159 | */ |
200 | i = pcmcia_request_irq(link, &link->irq); | 160 | if (!link->irq) { |
201 | if (i != 0) { | ||
202 | /* undo */ | 161 | /* undo */ |
203 | pcmcia_disable_device(link); | 162 | pcmcia_disable_device(link); |
204 | break; | 163 | break; |
@@ -215,14 +174,6 @@ static int __devinit avma1cs_config(struct pcmcia_device *link) | |||
215 | 174 | ||
216 | } while (0); | 175 | } while (0); |
217 | 176 | ||
218 | /* At this point, the dev_node_t structure(s) should be | ||
219 | initialized and arranged in a linked list at link->dev. */ | ||
220 | |||
221 | strcpy(dev->node.dev_name, "A1"); | ||
222 | dev->node.major = 45; | ||
223 | dev->node.minor = 0; | ||
224 | link->dev_node = &dev->node; | ||
225 | |||
226 | /* If any step failed, release any partially configured state */ | 177 | /* If any step failed, release any partially configured state */ |
227 | if (i != 0) { | 178 | if (i != 0) { |
228 | avma1cs_release(link); | 179 | avma1cs_release(link); |
@@ -230,9 +181,9 @@ static int __devinit avma1cs_config(struct pcmcia_device *link) | |||
230 | } | 181 | } |
231 | 182 | ||
232 | printk(KERN_NOTICE "avma1_cs: checking at i/o %#x, irq %d\n", | 183 | printk(KERN_NOTICE "avma1_cs: checking at i/o %#x, irq %d\n", |
233 | link->io.BasePort1, link->irq.AssignedIRQ); | 184 | link->io.BasePort1, link->irq); |
234 | 185 | ||
235 | icard.para[0] = link->irq.AssignedIRQ; | 186 | icard.para[0] = link->irq; |
236 | icard.para[1] = link->io.BasePort1; | 187 | icard.para[1] = link->io.BasePort1; |
237 | icard.protocol = isdnprot; | 188 | icard.protocol = isdnprot; |
238 | icard.typ = ISDN_CTYPE_A1_PCMCIA; | 189 | icard.typ = ISDN_CTYPE_A1_PCMCIA; |
@@ -243,7 +194,7 @@ static int __devinit avma1cs_config(struct pcmcia_device *link) | |||
243 | avma1cs_release(link); | 194 | avma1cs_release(link); |
244 | return -ENODEV; | 195 | return -ENODEV; |
245 | } | 196 | } |
246 | dev->node.minor = i; | 197 | link->priv = (void *) (unsigned long) i; |
247 | 198 | ||
248 | return 0; | 199 | return 0; |
249 | } /* avma1cs_config */ | 200 | } /* avma1cs_config */ |
@@ -258,12 +209,12 @@ static int __devinit avma1cs_config(struct pcmcia_device *link) | |||
258 | 209 | ||
259 | static void avma1cs_release(struct pcmcia_device *link) | 210 | static void avma1cs_release(struct pcmcia_device *link) |
260 | { | 211 | { |
261 | local_info_t *local = link->priv; | 212 | unsigned long minor = (unsigned long) link->priv; |
262 | 213 | ||
263 | dev_dbg(&link->dev, "avma1cs_release(0x%p)\n", link); | 214 | dev_dbg(&link->dev, "avma1cs_release(0x%p)\n", link); |
264 | 215 | ||
265 | /* now unregister function with hisax */ | 216 | /* now unregister function with hisax */ |
266 | HiSax_closecard(local->node.minor); | 217 | HiSax_closecard(minor); |
267 | 218 | ||
268 | pcmcia_disable_device(link); | 219 | pcmcia_disable_device(link); |
269 | } /* avma1cs_release */ | 220 | } /* avma1cs_release */ |
diff --git a/drivers/isdn/hisax/elsa_cs.c b/drivers/isdn/hisax/elsa_cs.c index c9f2279e21f5..218927e3a4ea 100644 --- a/drivers/isdn/hisax/elsa_cs.c +++ b/drivers/isdn/hisax/elsa_cs.c | |||
@@ -87,24 +87,8 @@ static void elsa_cs_release(struct pcmcia_device *link); | |||
87 | 87 | ||
88 | static void elsa_cs_detach(struct pcmcia_device *p_dev) __devexit; | 88 | static void elsa_cs_detach(struct pcmcia_device *p_dev) __devexit; |
89 | 89 | ||
90 | /* | ||
91 | A driver needs to provide a dev_node_t structure for each device | ||
92 | on a card. In some cases, there is only one device per card (for | ||
93 | example, ethernet cards, modems). In other cases, there may be | ||
94 | many actual or logical devices (SCSI adapters, memory cards with | ||
95 | multiple partitions). The dev_node_t structures need to be kept | ||
96 | in a linked list starting at the 'dev' field of a struct pcmcia_device | ||
97 | structure. We allocate them in the card's private data structure, | ||
98 | because they generally shouldn't be allocated dynamically. | ||
99 | In this case, we also provide a flag to indicate if a device is | ||
100 | "stopped" due to a power management event, or card ejection. The | ||
101 | device IO routines can use a flag like this to throttle IO to a | ||
102 | card that is not ready to accept it. | ||
103 | */ | ||
104 | |||
105 | typedef struct local_info_t { | 90 | typedef struct local_info_t { |
106 | struct pcmcia_device *p_dev; | 91 | struct pcmcia_device *p_dev; |
107 | dev_node_t node; | ||
108 | int busy; | 92 | int busy; |
109 | int cardnr; | 93 | int cardnr; |
110 | } local_info_t; | 94 | } local_info_t; |
@@ -136,10 +120,6 @@ static int __devinit elsa_cs_probe(struct pcmcia_device *link) | |||
136 | 120 | ||
137 | local->cardnr = -1; | 121 | local->cardnr = -1; |
138 | 122 | ||
139 | /* Interrupt setup */ | ||
140 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; | ||
141 | link->irq.Handler = NULL; | ||
142 | |||
143 | /* | 123 | /* |
144 | General socket configuration defaults can go here. In this | 124 | General socket configuration defaults can go here. In this |
145 | client, we assume very little, and rely on the CIS for almost | 125 | client, we assume very little, and rely on the CIS for almost |
@@ -223,28 +203,18 @@ static int __devinit elsa_cs_config(struct pcmcia_device *link) | |||
223 | if (i != 0) | 203 | if (i != 0) |
224 | goto failed; | 204 | goto failed; |
225 | 205 | ||
226 | i = pcmcia_request_irq(link, &link->irq); | 206 | if (!link->irq) |
227 | if (i != 0) { | ||
228 | link->irq.AssignedIRQ = 0; | ||
229 | goto failed; | 207 | goto failed; |
230 | } | ||
231 | 208 | ||
232 | i = pcmcia_request_configuration(link, &link->conf); | 209 | i = pcmcia_request_configuration(link, &link->conf); |
233 | if (i != 0) | 210 | if (i != 0) |
234 | goto failed; | 211 | goto failed; |
235 | 212 | ||
236 | /* At this point, the dev_node_t structure(s) should be | ||
237 | initialized and arranged in a linked list at link->dev. *//* */ | ||
238 | sprintf(dev->node.dev_name, "elsa"); | ||
239 | dev->node.major = dev->node.minor = 0x0; | ||
240 | |||
241 | link->dev_node = &dev->node; | ||
242 | |||
243 | /* Finally, report what we've done */ | 213 | /* Finally, report what we've done */ |
244 | printk(KERN_INFO "%s: index 0x%02x: ", | 214 | dev_info(&link->dev, "index 0x%02x: ", |
245 | dev->node.dev_name, link->conf.ConfigIndex); | 215 | link->conf.ConfigIndex); |
246 | if (link->conf.Attributes & CONF_ENABLE_IRQ) | 216 | if (link->conf.Attributes & CONF_ENABLE_IRQ) |
247 | printk(", irq %d", link->irq.AssignedIRQ); | 217 | printk(", irq %d", link->irq); |
248 | if (link->io.NumPorts1) | 218 | if (link->io.NumPorts1) |
249 | printk(", io 0x%04x-0x%04x", link->io.BasePort1, | 219 | printk(", io 0x%04x-0x%04x", link->io.BasePort1, |
250 | link->io.BasePort1+link->io.NumPorts1-1); | 220 | link->io.BasePort1+link->io.NumPorts1-1); |
@@ -253,7 +223,7 @@ static int __devinit elsa_cs_config(struct pcmcia_device *link) | |||
253 | link->io.BasePort2+link->io.NumPorts2-1); | 223 | link->io.BasePort2+link->io.NumPorts2-1); |
254 | printk("\n"); | 224 | printk("\n"); |
255 | 225 | ||
256 | icard.para[0] = link->irq.AssignedIRQ; | 226 | icard.para[0] = link->irq; |
257 | icard.para[1] = link->io.BasePort1; | 227 | icard.para[1] = link->io.BasePort1; |
258 | icard.protocol = protocol; | 228 | icard.protocol = protocol; |
259 | icard.typ = ISDN_CTYPE_ELSA_PCMCIA; | 229 | icard.typ = ISDN_CTYPE_ELSA_PCMCIA; |
diff --git a/drivers/isdn/hisax/sedlbauer_cs.c b/drivers/isdn/hisax/sedlbauer_cs.c index 71b3ddef03bb..1f4feaab21af 100644 --- a/drivers/isdn/hisax/sedlbauer_cs.c +++ b/drivers/isdn/hisax/sedlbauer_cs.c | |||
@@ -87,32 +87,8 @@ static void sedlbauer_release(struct pcmcia_device *link); | |||
87 | 87 | ||
88 | static void sedlbauer_detach(struct pcmcia_device *p_dev) __devexit; | 88 | static void sedlbauer_detach(struct pcmcia_device *p_dev) __devexit; |
89 | 89 | ||
90 | /* | ||
91 | You'll also need to prototype all the functions that will actually | ||
92 | be used to talk to your device. See 'memory_cs' for a good example | ||
93 | of a fully self-sufficient driver; the other drivers rely more or | ||
94 | less on other parts of the kernel. | ||
95 | */ | ||
96 | |||
97 | /* | ||
98 | A driver needs to provide a dev_node_t structure for each device | ||
99 | on a card. In some cases, there is only one device per card (for | ||
100 | example, ethernet cards, modems). In other cases, there may be | ||
101 | many actual or logical devices (SCSI adapters, memory cards with | ||
102 | multiple partitions). The dev_node_t structures need to be kept | ||
103 | in a linked list starting at the 'dev' field of a struct pcmcia_device | ||
104 | structure. We allocate them in the card's private data structure, | ||
105 | because they generally shouldn't be allocated dynamically. | ||
106 | |||
107 | In this case, we also provide a flag to indicate if a device is | ||
108 | "stopped" due to a power management event, or card ejection. The | ||
109 | device IO routines can use a flag like this to throttle IO to a | ||
110 | card that is not ready to accept it. | ||
111 | */ | ||
112 | |||
113 | typedef struct local_info_t { | 90 | typedef struct local_info_t { |
114 | struct pcmcia_device *p_dev; | 91 | struct pcmcia_device *p_dev; |
115 | dev_node_t node; | ||
116 | int stop; | 92 | int stop; |
117 | int cardnr; | 93 | int cardnr; |
118 | } local_info_t; | 94 | } local_info_t; |
@@ -143,10 +119,6 @@ static int __devinit sedlbauer_probe(struct pcmcia_device *link) | |||
143 | local->p_dev = link; | 119 | local->p_dev = link; |
144 | link->priv = local; | 120 | link->priv = local; |
145 | 121 | ||
146 | /* Interrupt setup */ | ||
147 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; | ||
148 | link->irq.Handler = NULL; | ||
149 | |||
150 | /* | 122 | /* |
151 | General socket configuration defaults can go here. In this | 123 | General socket configuration defaults can go here. In this |
152 | client, we assume very little, and rely on the CIS for almost | 124 | client, we assume very little, and rely on the CIS for almost |
@@ -227,9 +199,7 @@ static int sedlbauer_config_check(struct pcmcia_device *p_dev, | |||
227 | else if (dflt->vpp1.present & (1<<CISTPL_POWER_VNOM)) | 199 | else if (dflt->vpp1.present & (1<<CISTPL_POWER_VNOM)) |
228 | p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM]/10000; | 200 | p_dev->conf.Vpp = dflt->vpp1.param[CISTPL_POWER_VNOM]/10000; |
229 | 201 | ||
230 | /* Do we need to allocate an interrupt? */ | 202 | p_dev->conf.Attributes |= CONF_ENABLE_IRQ; |
231 | if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1) | ||
232 | p_dev->conf.Attributes |= CONF_ENABLE_IRQ; | ||
233 | 203 | ||
234 | /* IO window settings */ | 204 | /* IO window settings */ |
235 | p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0; | 205 | p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0; |
@@ -285,7 +255,6 @@ static int sedlbauer_config_check(struct pcmcia_device *p_dev, | |||
285 | 255 | ||
286 | static int __devinit sedlbauer_config(struct pcmcia_device *link) | 256 | static int __devinit sedlbauer_config(struct pcmcia_device *link) |
287 | { | 257 | { |
288 | local_info_t *dev = link->priv; | ||
289 | win_req_t *req; | 258 | win_req_t *req; |
290 | int ret; | 259 | int ret; |
291 | IsdnCard_t icard; | 260 | IsdnCard_t icard; |
@@ -313,17 +282,6 @@ static int __devinit sedlbauer_config(struct pcmcia_device *link) | |||
313 | goto failed; | 282 | goto failed; |
314 | 283 | ||
315 | /* | 284 | /* |
316 | Allocate an interrupt line. Note that this does not assign a | ||
317 | handler to the interrupt, unless the 'Handler' member of the | ||
318 | irq structure is initialized. | ||
319 | */ | ||
320 | if (link->conf.Attributes & CONF_ENABLE_IRQ) { | ||
321 | ret = pcmcia_request_irq(link, &link->irq); | ||
322 | if (ret) | ||
323 | goto failed; | ||
324 | } | ||
325 | |||
326 | /* | ||
327 | This actually configures the PCMCIA socket -- setting up | 285 | This actually configures the PCMCIA socket -- setting up |
328 | the I/O windows and the interrupt mapping, and putting the | 286 | the I/O windows and the interrupt mapping, and putting the |
329 | card and host interface into "Memory and IO" mode. | 287 | card and host interface into "Memory and IO" mode. |
@@ -332,21 +290,13 @@ static int __devinit sedlbauer_config(struct pcmcia_device *link) | |||
332 | if (ret) | 290 | if (ret) |
333 | goto failed; | 291 | goto failed; |
334 | 292 | ||
335 | /* | ||
336 | At this point, the dev_node_t structure(s) need to be | ||
337 | initialized and arranged in a linked list at link->dev. | ||
338 | */ | ||
339 | sprintf(dev->node.dev_name, "sedlbauer"); | ||
340 | dev->node.major = dev->node.minor = 0; | ||
341 | link->dev_node = &dev->node; | ||
342 | |||
343 | /* Finally, report what we've done */ | 293 | /* Finally, report what we've done */ |
344 | printk(KERN_INFO "%s: index 0x%02x:", | 294 | dev_info(&link->dev, "index 0x%02x:", |
345 | dev->node.dev_name, link->conf.ConfigIndex); | 295 | link->conf.ConfigIndex); |
346 | if (link->conf.Vpp) | 296 | if (link->conf.Vpp) |
347 | printk(", Vpp %d.%d", link->conf.Vpp/10, link->conf.Vpp%10); | 297 | printk(", Vpp %d.%d", link->conf.Vpp/10, link->conf.Vpp%10); |
348 | if (link->conf.Attributes & CONF_ENABLE_IRQ) | 298 | if (link->conf.Attributes & CONF_ENABLE_IRQ) |
349 | printk(", irq %d", link->irq.AssignedIRQ); | 299 | printk(", irq %d", link->irq); |
350 | if (link->io.NumPorts1) | 300 | if (link->io.NumPorts1) |
351 | printk(", io 0x%04x-0x%04x", link->io.BasePort1, | 301 | printk(", io 0x%04x-0x%04x", link->io.BasePort1, |
352 | link->io.BasePort1+link->io.NumPorts1-1); | 302 | link->io.BasePort1+link->io.NumPorts1-1); |
@@ -358,7 +308,7 @@ static int __devinit sedlbauer_config(struct pcmcia_device *link) | |||
358 | req->Base+req->Size-1); | 308 | req->Base+req->Size-1); |
359 | printk("\n"); | 309 | printk("\n"); |
360 | 310 | ||
361 | icard.para[0] = link->irq.AssignedIRQ; | 311 | icard.para[0] = link->irq; |
362 | icard.para[1] = link->io.BasePort1; | 312 | icard.para[1] = link->io.BasePort1; |
363 | icard.protocol = protocol; | 313 | icard.protocol = protocol; |
364 | icard.typ = ISDN_CTYPE_SEDLBAUER_PCMCIA; | 314 | icard.typ = ISDN_CTYPE_SEDLBAUER_PCMCIA; |
diff --git a/drivers/isdn/hisax/teles_cs.c b/drivers/isdn/hisax/teles_cs.c index d010a0da8e19..5771955cc532 100644 --- a/drivers/isdn/hisax/teles_cs.c +++ b/drivers/isdn/hisax/teles_cs.c | |||
@@ -68,34 +68,8 @@ static void teles_cs_release(struct pcmcia_device *link); | |||
68 | 68 | ||
69 | static void teles_detach(struct pcmcia_device *p_dev) __devexit ; | 69 | static void teles_detach(struct pcmcia_device *p_dev) __devexit ; |
70 | 70 | ||
71 | /* | ||
72 | A linked list of "instances" of the teles_cs device. Each actual | ||
73 | PCMCIA card corresponds to one device instance, and is described | ||
74 | by one struct pcmcia_device structure (defined in ds.h). | ||
75 | |||
76 | You may not want to use a linked list for this -- for example, the | ||
77 | memory card driver uses an array of struct pcmcia_device pointers, where minor | ||
78 | device numbers are used to derive the corresponding array index. | ||
79 | */ | ||
80 | |||
81 | /* | ||
82 | A driver needs to provide a dev_node_t structure for each device | ||
83 | on a card. In some cases, there is only one device per card (for | ||
84 | example, ethernet cards, modems). In other cases, there may be | ||
85 | many actual or logical devices (SCSI adapters, memory cards with | ||
86 | multiple partitions). The dev_node_t structures need to be kept | ||
87 | in a linked list starting at the 'dev' field of a struct pcmcia_device | ||
88 | structure. We allocate them in the card's private data structure, | ||
89 | because they generally shouldn't be allocated dynamically. | ||
90 | In this case, we also provide a flag to indicate if a device is | ||
91 | "stopped" due to a power management event, or card ejection. The | ||
92 | device IO routines can use a flag like this to throttle IO to a | ||
93 | card that is not ready to accept it. | ||
94 | */ | ||
95 | |||
96 | typedef struct local_info_t { | 71 | typedef struct local_info_t { |
97 | struct pcmcia_device *p_dev; | 72 | struct pcmcia_device *p_dev; |
98 | dev_node_t node; | ||
99 | int busy; | 73 | int busy; |
100 | int cardnr; | 74 | int cardnr; |
101 | } local_info_t; | 75 | } local_info_t; |
@@ -126,10 +100,6 @@ static int __devinit teles_probe(struct pcmcia_device *link) | |||
126 | local->p_dev = link; | 100 | local->p_dev = link; |
127 | link->priv = local; | 101 | link->priv = local; |
128 | 102 | ||
129 | /* Interrupt setup */ | ||
130 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; | ||
131 | link->irq.Handler = NULL; | ||
132 | |||
133 | /* | 103 | /* |
134 | General socket configuration defaults can go here. In this | 104 | General socket configuration defaults can go here. In this |
135 | client, we assume very little, and rely on the CIS for almost | 105 | client, we assume very little, and rely on the CIS for almost |
@@ -213,28 +183,18 @@ static int __devinit teles_cs_config(struct pcmcia_device *link) | |||
213 | if (i != 0) | 183 | if (i != 0) |
214 | goto cs_failed; | 184 | goto cs_failed; |
215 | 185 | ||
216 | i = pcmcia_request_irq(link, &link->irq); | 186 | if (!link->irq) |
217 | if (i != 0) { | ||
218 | link->irq.AssignedIRQ = 0; | ||
219 | goto cs_failed; | 187 | goto cs_failed; |
220 | } | ||
221 | 188 | ||
222 | i = pcmcia_request_configuration(link, &link->conf); | 189 | i = pcmcia_request_configuration(link, &link->conf); |
223 | if (i != 0) | 190 | if (i != 0) |
224 | goto cs_failed; | 191 | goto cs_failed; |
225 | 192 | ||
226 | /* At this point, the dev_node_t structure(s) should be | ||
227 | initialized and arranged in a linked list at link->dev. *//* */ | ||
228 | sprintf(dev->node.dev_name, "teles"); | ||
229 | dev->node.major = dev->node.minor = 0x0; | ||
230 | |||
231 | link->dev_node = &dev->node; | ||
232 | |||
233 | /* Finally, report what we've done */ | 193 | /* Finally, report what we've done */ |
234 | printk(KERN_INFO "%s: index 0x%02x:", | 194 | dev_info(&link->dev, "index 0x%02x:", |
235 | dev->node.dev_name, link->conf.ConfigIndex); | 195 | link->conf.ConfigIndex); |
236 | if (link->conf.Attributes & CONF_ENABLE_IRQ) | 196 | if (link->conf.Attributes & CONF_ENABLE_IRQ) |
237 | printk(", irq %d", link->irq.AssignedIRQ); | 197 | printk(", irq %d", link->irq); |
238 | if (link->io.NumPorts1) | 198 | if (link->io.NumPorts1) |
239 | printk(", io 0x%04x-0x%04x", link->io.BasePort1, | 199 | printk(", io 0x%04x-0x%04x", link->io.BasePort1, |
240 | link->io.BasePort1+link->io.NumPorts1-1); | 200 | link->io.BasePort1+link->io.NumPorts1-1); |
@@ -243,7 +203,7 @@ static int __devinit teles_cs_config(struct pcmcia_device *link) | |||
243 | link->io.BasePort2+link->io.NumPorts2-1); | 203 | link->io.BasePort2+link->io.NumPorts2-1); |
244 | printk("\n"); | 204 | printk("\n"); |
245 | 205 | ||
246 | icard.para[0] = link->irq.AssignedIRQ; | 206 | icard.para[0] = link->irq; |
247 | icard.para[1] = link->io.BasePort1; | 207 | icard.para[1] = link->io.BasePort1; |
248 | icard.protocol = protocol; | 208 | icard.protocol = protocol; |
249 | icard.typ = ISDN_CTYPE_TELESPCMCIA; | 209 | icard.typ = ISDN_CTYPE_TELESPCMCIA; |