diff options
author | Jeff Garzik <jeff@garzik.org> | 2008-02-15 23:41:15 -0500 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-04-20 18:22:30 -0400 |
commit | d38c8475b4f3a684ac673dcedc88ffdb17b74882 (patch) | |
tree | 6534f17c8029697a239ba3b962ecd82c77a4d8d9 | |
parent | 3925e6fc1f774048404fdd910b0345b06c699eb4 (diff) |
[ISDN] HiSax: modularization prep
Pass a function pointer into the core HiSax probe function checkcard(),
in order to facilitate modular drivers passing in their own setup
routines.
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
-rw-r--r-- | drivers/isdn/hisax/config.c | 14 | ||||
-rw-r--r-- | drivers/isdn/hisax/hisax_cfg.h | 2 |
2 files changed, 11 insertions, 5 deletions
diff --git a/drivers/isdn/hisax/config.c b/drivers/isdn/hisax/config.c index a0ee43c04dd..84d75a3f5d1 100644 --- a/drivers/isdn/hisax/config.c +++ b/drivers/isdn/hisax/config.c @@ -1169,7 +1169,9 @@ outf_cs: /* Used from an exported function but calls __devinit functions. * Tell modpost not to warn (__ref) */ -static int __ref checkcard(int cardnr, char *id, int *busy_flag, struct module *lockowner) +static int __ref checkcard(int cardnr, char *id, int *busy_flag, + struct module *lockowner, + hisax_setup_func_t card_setup) { int ret; struct IsdnCard *card = cards + cardnr; @@ -1187,7 +1189,7 @@ static int __ref checkcard(int cardnr, char *id, int *busy_flag, struct module * (card->protocol == ISDN_PTYPE_NI1) ? "NI1" : "NONE", cs->iif.id, cs->myid); - ret = hisax_cs_setup_card(card); + ret = card_setup(card); if (!ret) { ll_unload(cs); goto outf_cs; @@ -1241,7 +1243,8 @@ static int HiSax_inithardware(int *busy_flag) else sprintf(ids, "%s%d", id, i); } - if (checkcard(i, ids, busy_flag, THIS_MODULE)) { + if (checkcard(i, ids, busy_flag, THIS_MODULE, + hisax_cs_setup_card)) { foundcards++; i++; } else { @@ -1549,7 +1552,8 @@ int hisax_init_pcmcia(void *pcm_iob, int *busy_flag, struct IsdnCard *card) sprintf(ids, "HiSax%d", nrcards); else sprintf(ids, "HiSax"); - if (!checkcard(nrcards, ids, busy_flag, THIS_MODULE)) + if (!checkcard(nrcards, ids, busy_flag, THIS_MODULE, + hisax_cs_setup_card)) goto error; ret = nrcards; @@ -1595,7 +1599,7 @@ int hisax_register(struct hisax_d_if *hisax_d_if, struct hisax_b_if *b_if[], cards[i].protocol = protocol; sprintf(id, "%s%d", name, i); nrcards++; - retval = checkcard(i, id, NULL, hisax_d_if->owner); + retval = checkcard(i, id, NULL, hisax_d_if->owner, hisax_cs_setup_card); if (retval == 0) { // yuck cards[i].typ = 0; nrcards--; diff --git a/drivers/isdn/hisax/hisax_cfg.h b/drivers/isdn/hisax/hisax_cfg.h index ca3fe6259bc..17a2fea64ef 100644 --- a/drivers/isdn/hisax/hisax_cfg.h +++ b/drivers/isdn/hisax/hisax_cfg.h @@ -60,5 +60,7 @@ struct IsdnCard { IsdnCardState_t *cs; }; +typedef int (*hisax_setup_func_t)(struct IsdnCard *card); + extern void HiSax_closecard(int); extern int hisax_init_pcmcia(void *, int *, IsdnCard_t *); |