diff options
Diffstat (limited to 'drivers/isdn/avmb1/b1pcmcia.c')
-rw-r--r-- | drivers/isdn/avmb1/b1pcmcia.c | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/drivers/isdn/avmb1/b1pcmcia.c b/drivers/isdn/avmb1/b1pcmcia.c index 79e343164..6e39c43d2 100644 --- a/drivers/isdn/avmb1/b1pcmcia.c +++ b/drivers/isdn/avmb1/b1pcmcia.c @@ -1,11 +1,19 @@ /* - * $Id: b1pcmcia.c,v 1.5 1999/11/05 16:38:01 calle Exp $ + * $Id: b1pcmcia.c,v 1.7 2000/02/02 18:36:03 calle Exp $ * * Module for AVM B1/M1/M2 PCMCIA-card. * * (c) Copyright 1999 by Carsten Paeth (calle@calle.in-berlin.de) * * $Log: b1pcmcia.c,v $ + * Revision 1.7 2000/02/02 18:36:03 calle + * - Modules are now locked while init_module is running + * - fixed problem with memory mapping if address is not aligned + * + * Revision 1.6 2000/01/25 14:37:39 calle + * new message after successfull detection including card revision and + * used resources. + * * Revision 1.5 1999/11/05 16:38:01 calle * Cleanups before kernel 2.4: * - Changed all messages to use card->name or driver->name instead of @@ -62,7 +70,7 @@ #include "capilli.h" #include "avmcard.h" -static char *revision = "$Revision: 1.5 $"; +static char *revision = "$Revision: 1.7 $"; /* ------------------------------------------------------------- */ @@ -126,12 +134,16 @@ static int b1pcmcia_add_card(struct capi_driver *driver, { avmctrl_info *cinfo; avmcard *card; + char *cardname; int retval; + MOD_INC_USE_COUNT; + card = (avmcard *) kmalloc(sizeof(avmcard), GFP_ATOMIC); if (!card) { printk(KERN_WARNING "%s: no memory.\n", driver->name); + MOD_DEC_USE_COUNT; return -ENOMEM; } memset(card, 0, sizeof(avmcard)); @@ -139,6 +151,7 @@ static int b1pcmcia_add_card(struct capi_driver *driver, if (!cinfo) { printk(KERN_WARNING "%s: no memory.\n", driver->name); kfree(card); + MOD_DEC_USE_COUNT; return -ENOMEM; } memset(cinfo, 0, sizeof(avmctrl_info)); @@ -159,9 +172,11 @@ static int b1pcmcia_add_card(struct capi_driver *driver, driver->name, card->port, retval); kfree(card->ctrlinfo); kfree(card); + MOD_DEC_USE_COUNT; return -EIO; } b1_reset(card->port); + b1_getrevision(card); retval = request_irq(card->irq, b1pcmcia_interrupt, 0, card->name, card); if (retval) { @@ -169,6 +184,7 @@ static int b1pcmcia_add_card(struct capi_driver *driver, driver->name, card->irq); kfree(card->ctrlinfo); kfree(card); + MOD_DEC_USE_COUNT; return -EBUSY; } @@ -179,10 +195,19 @@ static int b1pcmcia_add_card(struct capi_driver *driver, free_irq(card->irq, card); kfree(card->ctrlinfo); kfree(card); + MOD_DEC_USE_COUNT; return -EBUSY; } + switch (cardtype) { + case avm_m1: cardname = "M1"; break; + case avm_m2: cardname = "M2"; break; + default : cardname = "B1 PCMCIA"; break; + } + + printk(KERN_INFO + "%s: AVM %s at i/o %#x, irq %d, revision %d\n", + driver->name, cardname, card->port, card->irq, card->revision); - MOD_INC_USE_COUNT; return cinfo->capi_ctrl->cnr; } @@ -194,11 +219,12 @@ static char *b1pcmcia_procinfo(struct capi_ctr *ctrl) if (!cinfo) return ""; - sprintf(cinfo->infobuf, "%s %s 0x%x %d", + sprintf(cinfo->infobuf, "%s %s 0x%x %d r%d", cinfo->cardname[0] ? cinfo->cardname : "-", cinfo->version[VER_DRIVER] ? cinfo->version[VER_DRIVER] : "-", cinfo->card ? cinfo->card->port : 0x0, - cinfo->card ? cinfo->card->irq : 0 + cinfo->card ? cinfo->card->irq : 0, + cinfo->card ? cinfo->card->revision : 0 ); return cinfo->infobuf; } |