From: Harald Welte * Don't initialize variable in bss * Introduce and use function to stop polling timer * Remove unneeded dev_info variable Signed-off-by: Harald Welte Signed-off-by: Andrew Morton --- drivers/char/pcmcia/cm4040_cs.c | 10 +++++++++- 1 files changed, 9 insertions(+), 1 deletion(-) diff -puN drivers/char/pcmcia/cm4040_cs.c~cm4040-cardman-4040-driver-update drivers/char/pcmcia/cm4040_cs.c --- 25/drivers/char/pcmcia/cm4040_cs.c~cm4040-cardman-4040-driver-update Tue Sep 20 14:28:53 2005 +++ 25-akpm/drivers/char/pcmcia/cm4040_cs.c Tue Sep 20 14:30:17 2005 @@ -87,7 +87,7 @@ struct reader_dev { }; static dev_info_t dev_info = MODULE_NAME; -static dev_link_t *dev_table[CM_MAX_DEV] = { NULL, }; +static dev_link_t *dev_table[CM_MAX_DEV]; #ifndef PCMCIA_DEBUG #define xoutb outb @@ -139,6 +139,11 @@ static void cm4040_do_poll(unsigned long mod_timer(&dev->poll_timer, jiffies + POLL_PERIOD); } +static void cm4040_stop_poll(struct reader_dev *dev) +{ + del_timer_sync(&dev->poll_timer); +} + static int wait_for_bulk_out_ready(struct reader_dev *dev) { int i, rc; @@ -486,6 +491,8 @@ static int cm4040_close(struct inode *in if (link == NULL) return -ENODEV; + cm4040_stop_poll(dev); + link->open = 0; wake_up(&dev->devq); @@ -754,6 +761,7 @@ static void reader_detach_by_devno(int d pcmcia_deregister_client(link->handle); dev_table[devno] = NULL; DEBUGP(5, dev, "freeing dev=%p\n", dev); + cm4040_stop_poll(dev); kfree(dev); return; } _