diff options
author | Dominik Brodowski <linux@dominikbrodowski.net> | 2006-10-25 21:28:53 -0400 |
---|---|---|
committer | Dominik Brodowski <linux@dominikbrodowski.net> | 2006-12-04 20:09:20 -0500 |
commit | efd50585e2ff9bd60e044fda7764d323010a7fe4 (patch) | |
tree | f43f8f10a3cfe6ceb1b5cede6581f79134ca0e63 /drivers | |
parent | 44e5e33e99e1b955ac6f0bb26abd9380629b48a9 (diff) |
[PATCH] pcmcia: remove manf_id and card_id indirection
As we read out the manufactor and card_id from the PCMCIA device in the
PCMCIA core, and device drivers can access those reliably in struct
pcmcia_device's fields manf_id and card_id, remove additional (and partly
broken) manf_id and card_id detection logic from PCMCIA device drivers.
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ata/pata_pcmcia.c | 6 | ||||
-rw-r--r-- | drivers/ide/legacy/ide-cs.c | 10 | ||||
-rw-r--r-- | drivers/net/pcmcia/3c589_cs.c | 12 | ||||
-rw-r--r-- | drivers/net/pcmcia/fmvj18x_cs.c | 26 | ||||
-rw-r--r-- | drivers/net/pcmcia/pcnet_cs.c | 22 | ||||
-rw-r--r-- | drivers/net/pcmcia/smc91c92_cs.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/hostap/hostap_cs.c | 7 | ||||
-rw-r--r-- | drivers/scsi/pcmcia/qlogic_stub.c | 4 | ||||
-rw-r--r-- | drivers/scsi/pcmcia/sym53c500_cs.c | 5 | ||||
-rw-r--r-- | drivers/serial/serial_cs.c | 30 |
10 files changed, 45 insertions, 85 deletions
diff --git a/drivers/ata/pata_pcmcia.c b/drivers/ata/pata_pcmcia.c index 3ce33bfdcccc..da7c218c9cce 100644 --- a/drivers/ata/pata_pcmcia.c +++ b/drivers/ata/pata_pcmcia.c | |||
@@ -164,9 +164,9 @@ static int pcmcia_init_one(struct pcmcia_device *pdev) | |||
164 | 164 | ||
165 | /* See if we have a manufacturer identifier. Use it to set is_kme for | 165 | /* See if we have a manufacturer identifier. Use it to set is_kme for |
166 | vendor quirks */ | 166 | vendor quirks */ |
167 | tuple.DesiredTuple = CISTPL_MANFID; | 167 | is_kme = ((pdev->manf_id == MANFID_KME) && |
168 | if (!pcmcia_get_first_tuple(pdev, &tuple) && !pcmcia_get_tuple_data(pdev, &tuple) && !pcmcia_parse_tuple(pdev, &tuple, &stk->parse)) | 168 | ((pdev->card_id == PRODID_KME_KXLC005_A) || |
169 | is_kme = ((stk->parse.manfid.manf == MANFID_KME) && ((stk->parse.manfid.card == PRODID_KME_KXLC005_A) || (stk->parse.manfid.card == PRODID_KME_KXLC005_B))); | 169 | (pdev->card_id == PRODID_KME_KXLC005_B))); |
170 | 170 | ||
171 | /* Not sure if this is right... look up the current Vcc */ | 171 | /* Not sure if this is right... look up the current Vcc */ |
172 | CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(pdev, &stk->conf)); | 172 | CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(pdev, &stk->conf)); |
diff --git a/drivers/ide/legacy/ide-cs.c b/drivers/ide/legacy/ide-cs.c index 7e8d778dcb88..1b996e62a404 100644 --- a/drivers/ide/legacy/ide-cs.c +++ b/drivers/ide/legacy/ide-cs.c | |||
@@ -199,13 +199,9 @@ static int ide_config(struct pcmcia_device *link) | |||
199 | link->conf.ConfigBase = stk->parse.config.base; | 199 | link->conf.ConfigBase = stk->parse.config.base; |
200 | link->conf.Present = stk->parse.config.rmask[0]; | 200 | link->conf.Present = stk->parse.config.rmask[0]; |
201 | 201 | ||
202 | tuple.DesiredTuple = CISTPL_MANFID; | 202 | is_kme = ((link->manf_id == MANFID_KME) && |
203 | if (!pcmcia_get_first_tuple(link, &tuple) && | 203 | ((link->card_id == PRODID_KME_KXLC005_A) || |
204 | !pcmcia_get_tuple_data(link, &tuple) && | 204 | (link->card_id == PRODID_KME_KXLC005_B))); |
205 | !pcmcia_parse_tuple(link, &tuple, &stk->parse)) | ||
206 | is_kme = ((stk->parse.manfid.manf == MANFID_KME) && | ||
207 | ((stk->parse.manfid.card == PRODID_KME_KXLC005_A) || | ||
208 | (stk->parse.manfid.card == PRODID_KME_KXLC005_B))); | ||
209 | 205 | ||
210 | /* Not sure if this is right... look up the current Vcc */ | 206 | /* Not sure if this is right... look up the current Vcc */ |
211 | CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &stk->conf)); | 207 | CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &stk->conf)); |
diff --git a/drivers/net/pcmcia/3c589_cs.c b/drivers/net/pcmcia/3c589_cs.c index 231fa2c9ec6c..eb5783294489 100644 --- a/drivers/net/pcmcia/3c589_cs.c +++ b/drivers/net/pcmcia/3c589_cs.c | |||
@@ -272,17 +272,13 @@ static int tc589_config(struct pcmcia_device *link) | |||
272 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | 272 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); |
273 | link->conf.ConfigBase = parse.config.base; | 273 | link->conf.ConfigBase = parse.config.base; |
274 | link->conf.Present = parse.config.rmask[0]; | 274 | link->conf.Present = parse.config.rmask[0]; |
275 | |||
276 | /* Is this a 3c562? */ | ||
277 | tuple.DesiredTuple = CISTPL_MANFID; | ||
278 | tuple.Attributes = TUPLE_RETURN_COMMON; | 275 | tuple.Attributes = TUPLE_RETURN_COMMON; |
279 | if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) && | 276 | |
280 | (pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS)) { | 277 | /* Is this a 3c562? */ |
281 | if (le16_to_cpu(buf[0]) != MANFID_3COM) | 278 | if (link->manf_id != MANFID_3COM) |
282 | printk(KERN_INFO "3c589_cs: hmmm, is this really a " | 279 | printk(KERN_INFO "3c589_cs: hmmm, is this really a " |
283 | "3Com card??\n"); | 280 | "3Com card??\n"); |
284 | multi = (le16_to_cpu(buf[1]) == PRODID_3COM_3C562); | 281 | multi = (link->card_id == PRODID_3COM_3C562); |
285 | } | ||
286 | 282 | ||
287 | /* For the 3c562, the base address must be xx00-xx7f */ | 283 | /* For the 3c562, the base address must be xx00-xx7f */ |
288 | link->io.IOAddrLines = 16; | 284 | link->io.IOAddrLines = 16; |
diff --git a/drivers/net/pcmcia/fmvj18x_cs.c b/drivers/net/pcmcia/fmvj18x_cs.c index 65f6fdf43725..e3731fd15606 100644 --- a/drivers/net/pcmcia/fmvj18x_cs.c +++ b/drivers/net/pcmcia/fmvj18x_cs.c | |||
@@ -374,17 +374,12 @@ static int fmvj18x_config(struct pcmcia_device *link) | |||
374 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | 374 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); |
375 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | 375 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); |
376 | link->conf.ConfigIndex = parse.cftable_entry.index; | 376 | link->conf.ConfigIndex = parse.cftable_entry.index; |
377 | tuple.DesiredTuple = CISTPL_MANFID; | 377 | switch (link->manf_id) { |
378 | if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) | ||
379 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
380 | else | ||
381 | buf[0] = 0xffff; | ||
382 | switch (le16_to_cpu(buf[0])) { | ||
383 | case MANFID_TDK: | 378 | case MANFID_TDK: |
384 | cardtype = TDK; | 379 | cardtype = TDK; |
385 | if (le16_to_cpu(buf[1]) == PRODID_TDK_GN3410 | 380 | if (link->card_id == PRODID_TDK_GN3410 |
386 | || le16_to_cpu(buf[1]) == PRODID_TDK_NP9610 | 381 | || link->card_id == PRODID_TDK_NP9610 |
387 | || le16_to_cpu(buf[1]) == PRODID_TDK_MN3200) { | 382 | || link->card_id == PRODID_TDK_MN3200) { |
388 | /* MultiFunction Card */ | 383 | /* MultiFunction Card */ |
389 | link->conf.ConfigBase = 0x800; | 384 | link->conf.ConfigBase = 0x800; |
390 | link->conf.ConfigIndex = 0x47; | 385 | link->conf.ConfigIndex = 0x47; |
@@ -395,11 +390,11 @@ static int fmvj18x_config(struct pcmcia_device *link) | |||
395 | cardtype = CONTEC; | 390 | cardtype = CONTEC; |
396 | break; | 391 | break; |
397 | case MANFID_FUJITSU: | 392 | case MANFID_FUJITSU: |
398 | if (le16_to_cpu(buf[1]) == PRODID_FUJITSU_MBH10302) | 393 | if (link->card_id == PRODID_FUJITSU_MBH10302) |
399 | /* RATOC REX-5588/9822/4886's PRODID are 0004(=MBH10302), | 394 | /* RATOC REX-5588/9822/4886's PRODID are 0004(=MBH10302), |
400 | but these are MBH10304 based card. */ | 395 | but these are MBH10304 based card. */ |
401 | cardtype = MBH10304; | 396 | cardtype = MBH10304; |
402 | else if (le16_to_cpu(buf[1]) == PRODID_FUJITSU_MBH10304) | 397 | else if (link->card_id == PRODID_FUJITSU_MBH10304) |
403 | cardtype = MBH10304; | 398 | cardtype = MBH10304; |
404 | else | 399 | else |
405 | cardtype = LA501; | 400 | cardtype = LA501; |
@@ -409,14 +404,9 @@ static int fmvj18x_config(struct pcmcia_device *link) | |||
409 | } | 404 | } |
410 | } else { | 405 | } else { |
411 | /* old type card */ | 406 | /* old type card */ |
412 | tuple.DesiredTuple = CISTPL_MANFID; | 407 | switch (link->manf_id) { |
413 | if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) | ||
414 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
415 | else | ||
416 | buf[0] = 0xffff; | ||
417 | switch (le16_to_cpu(buf[0])) { | ||
418 | case MANFID_FUJITSU: | 408 | case MANFID_FUJITSU: |
419 | if (le16_to_cpu(buf[1]) == PRODID_FUJITSU_MBH10304) { | 409 | if (link->card_id == PRODID_FUJITSU_MBH10304) { |
420 | cardtype = XXX10304; /* MBH10304 with buggy CIS */ | 410 | cardtype = XXX10304; /* MBH10304 with buggy CIS */ |
421 | link->conf.ConfigIndex = 0x20; | 411 | link->conf.ConfigIndex = 0x20; |
422 | } else { | 412 | } else { |
diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c index c51cc5d8789a..430a41e7b686 100644 --- a/drivers/net/pcmcia/pcnet_cs.c +++ b/drivers/net/pcmcia/pcnet_cs.c | |||
@@ -519,7 +519,7 @@ static int pcnet_config(struct pcmcia_device *link) | |||
519 | tuple_t tuple; | 519 | tuple_t tuple; |
520 | cisparse_t parse; | 520 | cisparse_t parse; |
521 | int i, last_ret, last_fn, start_pg, stop_pg, cm_offset; | 521 | int i, last_ret, last_fn, start_pg, stop_pg, cm_offset; |
522 | int manfid = 0, prodid = 0, has_shmem = 0; | 522 | int has_shmem = 0; |
523 | u_short buf[64]; | 523 | u_short buf[64]; |
524 | hw_info_t *hw_info; | 524 | hw_info_t *hw_info; |
525 | 525 | ||
@@ -536,14 +536,6 @@ static int pcnet_config(struct pcmcia_device *link) | |||
536 | link->conf.ConfigBase = parse.config.base; | 536 | link->conf.ConfigBase = parse.config.base; |
537 | link->conf.Present = parse.config.rmask[0]; | 537 | link->conf.Present = parse.config.rmask[0]; |
538 | 538 | ||
539 | tuple.DesiredTuple = CISTPL_MANFID; | ||
540 | tuple.Attributes = TUPLE_RETURN_COMMON; | ||
541 | if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) && | ||
542 | (pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS)) { | ||
543 | manfid = le16_to_cpu(buf[0]); | ||
544 | prodid = le16_to_cpu(buf[1]); | ||
545 | } | ||
546 | |||
547 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 539 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
548 | tuple.Attributes = 0; | 540 | tuple.Attributes = 0; |
549 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 541 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
@@ -589,8 +581,8 @@ static int pcnet_config(struct pcmcia_device *link) | |||
589 | link->conf.Attributes |= CONF_ENABLE_SPKR; | 581 | link->conf.Attributes |= CONF_ENABLE_SPKR; |
590 | link->conf.Status = CCSR_AUDIO_ENA; | 582 | link->conf.Status = CCSR_AUDIO_ENA; |
591 | } | 583 | } |
592 | if ((manfid == MANFID_IBM) && | 584 | if ((link->manf_id == MANFID_IBM) && |
593 | (prodid == PRODID_IBM_HOME_AND_AWAY)) | 585 | (link->card_id == PRODID_IBM_HOME_AND_AWAY)) |
594 | link->conf.ConfigIndex |= 0x10; | 586 | link->conf.ConfigIndex |= 0x10; |
595 | 587 | ||
596 | CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); | 588 | CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); |
@@ -624,10 +616,10 @@ static int pcnet_config(struct pcmcia_device *link) | |||
624 | info->flags = hw_info->flags; | 616 | info->flags = hw_info->flags; |
625 | /* Check for user overrides */ | 617 | /* Check for user overrides */ |
626 | info->flags |= (delay_output) ? DELAY_OUTPUT : 0; | 618 | info->flags |= (delay_output) ? DELAY_OUTPUT : 0; |
627 | if ((manfid == MANFID_SOCKET) && | 619 | if ((link->manf_id == MANFID_SOCKET) && |
628 | ((prodid == PRODID_SOCKET_LPE) || | 620 | ((link->card_id == PRODID_SOCKET_LPE) || |
629 | (prodid == PRODID_SOCKET_LPE_CF) || | 621 | (link->card_id == PRODID_SOCKET_LPE_CF) || |
630 | (prodid == PRODID_SOCKET_EIO))) | 622 | (link->card_id == PRODID_SOCKET_EIO))) |
631 | info->flags &= ~USE_BIG_BUF; | 623 | info->flags &= ~USE_BIG_BUF; |
632 | if (!use_big_buf) | 624 | if (!use_big_buf) |
633 | info->flags &= ~USE_BIG_BUF; | 625 | info->flags &= ~USE_BIG_BUF; |
diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c index 20fcc3576202..ae024bfc1ae4 100644 --- a/drivers/net/pcmcia/smc91c92_cs.c +++ b/drivers/net/pcmcia/smc91c92_cs.c | |||
@@ -999,12 +999,8 @@ static int smc91c92_config(struct pcmcia_device *link) | |||
999 | link->conf.ConfigBase = parse->config.base; | 999 | link->conf.ConfigBase = parse->config.base; |
1000 | link->conf.Present = parse->config.rmask[0]; | 1000 | link->conf.Present = parse->config.rmask[0]; |
1001 | 1001 | ||
1002 | tuple->DesiredTuple = CISTPL_MANFID; | 1002 | smc->manfid = link->manf_id; |
1003 | tuple->Attributes = TUPLE_RETURN_COMMON; | 1003 | smc->cardid = link->card_id; |
1004 | if (first_tuple(link, tuple, parse) == CS_SUCCESS) { | ||
1005 | smc->manfid = parse->manfid.manf; | ||
1006 | smc->cardid = parse->manfid.card; | ||
1007 | } | ||
1008 | 1004 | ||
1009 | if ((smc->manfid == MANFID_OSITECH) && | 1005 | if ((smc->manfid == MANFID_OSITECH) && |
1010 | (smc->cardid != PRODID_OSITECH_SEVEN)) { | 1006 | (smc->cardid != PRODID_OSITECH_SEVEN)) { |
diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c index f63909e4bc32..8a7984bc8afc 100644 --- a/drivers/net/wireless/hostap/hostap_cs.c +++ b/drivers/net/wireless/hostap/hostap_cs.c | |||
@@ -293,15 +293,12 @@ static int sandisk_enable_wireless(struct net_device *dev) | |||
293 | goto done; | 293 | goto done; |
294 | } | 294 | } |
295 | 295 | ||
296 | tuple.DesiredTuple = CISTPL_MANFID; | ||
297 | tuple.Attributes = TUPLE_RETURN_COMMON; | 296 | tuple.Attributes = TUPLE_RETURN_COMMON; |
298 | tuple.TupleData = buf; | 297 | tuple.TupleData = buf; |
299 | tuple.TupleDataMax = sizeof(buf); | 298 | tuple.TupleDataMax = sizeof(buf); |
300 | tuple.TupleOffset = 0; | 299 | tuple.TupleOffset = 0; |
301 | if (pcmcia_get_first_tuple(hw_priv->link, &tuple) || | 300 | |
302 | pcmcia_get_tuple_data(hw_priv->link, &tuple) || | 301 | if (hw_priv->link->manf_id != 0xd601 || hw_priv->link->card_id != 0x0101) { |
303 | pcmcia_parse_tuple(hw_priv->link, &tuple, parse) || | ||
304 | parse->manfid.manf != 0xd601 || parse->manfid.card != 0x0101) { | ||
305 | /* No SanDisk manfid found */ | 302 | /* No SanDisk manfid found */ |
306 | ret = -ENODEV; | 303 | ret = -ENODEV; |
307 | goto done; | 304 | goto done; |
diff --git a/drivers/scsi/pcmcia/qlogic_stub.c b/drivers/scsi/pcmcia/qlogic_stub.c index 86c2ac6ae623..336e370f7f65 100644 --- a/drivers/scsi/pcmcia/qlogic_stub.c +++ b/drivers/scsi/pcmcia/qlogic_stub.c | |||
@@ -217,9 +217,7 @@ static int qlogic_config(struct pcmcia_device * link) | |||
217 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | 217 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); |
218 | link->conf.ConfigBase = parse.config.base; | 218 | link->conf.ConfigBase = parse.config.base; |
219 | 219 | ||
220 | tuple.DesiredTuple = CISTPL_MANFID; | 220 | info->manf_id = link->manf_id; |
221 | if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) && (pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS)) | ||
222 | info->manf_id = le16_to_cpu(tuple.TupleData[0]); | ||
223 | 221 | ||
224 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 222 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
225 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 223 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
diff --git a/drivers/scsi/pcmcia/sym53c500_cs.c b/drivers/scsi/pcmcia/sym53c500_cs.c index 72fe5d055de1..80c28b9fb70a 100644 --- a/drivers/scsi/pcmcia/sym53c500_cs.c +++ b/drivers/scsi/pcmcia/sym53c500_cs.c | |||
@@ -731,10 +731,7 @@ SYM53C500_config(struct pcmcia_device *link) | |||
731 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); | 731 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); |
732 | link->conf.ConfigBase = parse.config.base; | 732 | link->conf.ConfigBase = parse.config.base; |
733 | 733 | ||
734 | tuple.DesiredTuple = CISTPL_MANFID; | 734 | info->manf_id = link->manf_id; |
735 | if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) && | ||
736 | (pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS)) | ||
737 | info->manf_id = le16_to_cpu(tuple.TupleData[0]); | ||
738 | 735 | ||
739 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 736 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
740 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | 737 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c index 783b0c5f8870..7aa2820e35bd 100644 --- a/drivers/serial/serial_cs.c +++ b/drivers/serial/serial_cs.c | |||
@@ -757,27 +757,25 @@ static int serial_config(struct pcmcia_device * link) | |||
757 | 757 | ||
758 | /* Is this a multiport card? */ | 758 | /* Is this a multiport card? */ |
759 | tuple->DesiredTuple = CISTPL_MANFID; | 759 | tuple->DesiredTuple = CISTPL_MANFID; |
760 | if (first_tuple(link, tuple, parse) == CS_SUCCESS) { | 760 | info->manfid = link->manf_id; |
761 | info->manfid = parse->manfid.manf; | 761 | info->prodid = link->card_id; |
762 | info->prodid = parse->manfid.card; | 762 | |
763 | 763 | for (i = 0; i < ARRAY_SIZE(quirks); i++) | |
764 | for (i = 0; i < ARRAY_SIZE(quirks); i++) | 764 | if ((quirks[i].manfid == ~0 || |
765 | if ((quirks[i].manfid == ~0 || | 765 | quirks[i].manfid == info->manfid) && |
766 | quirks[i].manfid == info->manfid) && | 766 | (quirks[i].prodid == ~0 || |
767 | (quirks[i].prodid == ~0 || | 767 | quirks[i].prodid == info->prodid)) { |
768 | quirks[i].prodid == info->prodid)) { | 768 | info->quirk = &quirks[i]; |
769 | info->quirk = &quirks[i]; | 769 | break; |
770 | break; | 770 | } |
771 | } | ||
772 | } | ||
773 | 771 | ||
774 | /* Another check for dual-serial cards: look for either serial or | 772 | /* Another check for dual-serial cards: look for either serial or |
775 | multifunction cards that ask for appropriate IO port ranges */ | 773 | multifunction cards that ask for appropriate IO port ranges */ |
776 | tuple->DesiredTuple = CISTPL_FUNCID; | 774 | tuple->DesiredTuple = CISTPL_FUNCID; |
777 | if ((info->multi == 0) && | 775 | if ((info->multi == 0) && |
778 | ((first_tuple(link, tuple, parse) != CS_SUCCESS) || | 776 | (link->has_func_id) && |
779 | (parse->funcid.func == CISTPL_FUNCID_MULTI) || | 777 | ((link->func_id == CISTPL_FUNCID_MULTI) || |
780 | (parse->funcid.func == CISTPL_FUNCID_SERIAL))) { | 778 | (link->func_id == CISTPL_FUNCID_SERIAL))) { |
781 | tuple->DesiredTuple = CISTPL_CFTABLE_ENTRY; | 779 | tuple->DesiredTuple = CISTPL_CFTABLE_ENTRY; |
782 | if (first_tuple(link, tuple, parse) == CS_SUCCESS) { | 780 | if (first_tuple(link, tuple, parse) == CS_SUCCESS) { |
783 | if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0)) | 781 | if ((cf->io.nwin == 1) && (cf->io.win[0].len % 8 == 0)) |