aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/serial/serial_cs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/serial/serial_cs.c')
-rw-r--r--drivers/serial/serial_cs.c17
1 files changed, 2 insertions, 15 deletions
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c
index a95366366504..6e7a1a0ae015 100644
--- a/drivers/serial/serial_cs.c
+++ b/drivers/serial/serial_cs.c
@@ -122,8 +122,6 @@ static dev_info_t dev_info = "serial_cs";
122static dev_link_t *serial_attach(void); 122static dev_link_t *serial_attach(void);
123static void serial_detach(struct pcmcia_device *p_dev); 123static void serial_detach(struct pcmcia_device *p_dev);
124 124
125static dev_link_t *dev_list = NULL;
126
127/*====================================================================== 125/*======================================================================
128 126
129 After a card is removed, serial_remove() will unregister 127 After a card is removed, serial_remove() will unregister
@@ -234,8 +232,7 @@ static dev_link_t *serial_attach(void)
234 link->conf.IntType = INT_MEMORY_AND_IO; 232 link->conf.IntType = INT_MEMORY_AND_IO;
235 233
236 /* Register with Card Services */ 234 /* Register with Card Services */
237 link->next = dev_list; 235 link->next = NULL; /* not needed */
238 dev_list = link;
239 client_reg.dev_info = &dev_info; 236 client_reg.dev_info = &dev_info;
240 client_reg.Version = 0x0210; 237 client_reg.Version = 0x0210;
241 client_reg.event_callback_args.client_data = link; 238 client_reg.event_callback_args.client_data = link;
@@ -262,17 +259,9 @@ static void serial_detach(struct pcmcia_device *p_dev)
262{ 259{
263 dev_link_t *link = dev_to_instance(p_dev); 260 dev_link_t *link = dev_to_instance(p_dev);
264 struct serial_info *info = link->priv; 261 struct serial_info *info = link->priv;
265 dev_link_t **linkp;
266 262
267 DEBUG(0, "serial_detach(0x%p)\n", link); 263 DEBUG(0, "serial_detach(0x%p)\n", link);
268 264
269 /* Locate device structure */
270 for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
271 if (*linkp == link)
272 break;
273 if (*linkp == NULL)
274 return;
275
276 /* 265 /*
277 * Ensure any outstanding scheduled tasks are completed. 266 * Ensure any outstanding scheduled tasks are completed.
278 */ 267 */
@@ -283,8 +272,7 @@ static void serial_detach(struct pcmcia_device *p_dev)
283 */ 272 */
284 serial_remove(link); 273 serial_remove(link);
285 274
286 /* Unlink device structure, free bits */ 275 /* free bits */
287 *linkp = link->next;
288 kfree(info); 276 kfree(info);
289} 277}
290 278
@@ -871,7 +859,6 @@ static int __init init_serial_cs(void)
871static void __exit exit_serial_cs(void) 859static void __exit exit_serial_cs(void)
872{ 860{
873 pcmcia_unregister_driver(&serial_cs_driver); 861 pcmcia_unregister_driver(&serial_cs_driver);
874 BUG_ON(dev_list != NULL);
875} 862}
876 863
877module_init(init_serial_cs); 864module_init(init_serial_cs);