diff options
-rw-r--r-- | drivers/pcmcia/ti113x.h | 29 | ||||
-rw-r--r-- | drivers/pcmcia/yenta_socket.c | 8 | ||||
-rw-r--r-- | include/linux/pci_ids.h | 7 |
3 files changed, 44 insertions, 0 deletions
diff --git a/drivers/pcmcia/ti113x.h b/drivers/pcmcia/ti113x.h index d319f2e7d053..da0b404561c9 100644 --- a/drivers/pcmcia/ti113x.h +++ b/drivers/pcmcia/ti113x.h | |||
@@ -59,6 +59,7 @@ | |||
59 | 59 | ||
60 | #define TI122X_SCR_SER_STEP 0xc0000000 | 60 | #define TI122X_SCR_SER_STEP 0xc0000000 |
61 | #define TI122X_SCR_INTRTIE 0x20000000 | 61 | #define TI122X_SCR_INTRTIE 0x20000000 |
62 | #define TIXX21_SCR_TIEALL 0x10000000 | ||
62 | #define TI122X_SCR_CBRSVD 0x00400000 | 63 | #define TI122X_SCR_CBRSVD 0x00400000 |
63 | #define TI122X_SCR_MRBURSTDN 0x00008000 | 64 | #define TI122X_SCR_MRBURSTDN 0x00008000 |
64 | #define TI122X_SCR_MRBURSTUP 0x00004000 | 65 | #define TI122X_SCR_MRBURSTUP 0x00004000 |
@@ -624,6 +625,7 @@ static int ti12xx_2nd_slot_empty(struct yenta_socket *socket) | |||
624 | int devfn; | 625 | int devfn; |
625 | unsigned int state; | 626 | unsigned int state; |
626 | int ret = 1; | 627 | int ret = 1; |
628 | u32 sysctl; | ||
627 | 629 | ||
628 | /* catch the two-slot controllers */ | 630 | /* catch the two-slot controllers */ |
629 | switch (socket->dev->device) { | 631 | switch (socket->dev->device) { |
@@ -646,6 +648,24 @@ static int ti12xx_2nd_slot_empty(struct yenta_socket *socket) | |||
646 | */ | 648 | */ |
647 | break; | 649 | break; |
648 | 650 | ||
651 | case PCI_DEVICE_ID_TI_X515: | ||
652 | case PCI_DEVICE_ID_TI_X420: | ||
653 | case PCI_DEVICE_ID_TI_X620: | ||
654 | case PCI_DEVICE_ID_TI_XX21_XX11: | ||
655 | case PCI_DEVICE_ID_TI_7410: | ||
656 | case PCI_DEVICE_ID_TI_7610: | ||
657 | /* | ||
658 | * those are either single or dual slot CB with additional functions | ||
659 | * like 1394, smartcard reader, etc. check the TIEALL flag for them | ||
660 | * the TIEALL flag binds the IRQ of all functions toghether. | ||
661 | * we catch the single slot variants later. | ||
662 | */ | ||
663 | sysctl = config_readl(socket, TI113X_SYSTEM_CONTROL); | ||
664 | if (sysctl & TIXX21_SCR_TIEALL) | ||
665 | return 0; | ||
666 | |||
667 | break; | ||
668 | |||
649 | /* single-slot controllers have the 2nd slot empty always :) */ | 669 | /* single-slot controllers have the 2nd slot empty always :) */ |
650 | default: | 670 | default: |
651 | return 1; | 671 | return 1; |
@@ -658,6 +678,15 @@ static int ti12xx_2nd_slot_empty(struct yenta_socket *socket) | |||
658 | if (!func) | 678 | if (!func) |
659 | return 1; | 679 | return 1; |
660 | 680 | ||
681 | /* | ||
682 | * check that the device id of both slots match. this is needed for the | ||
683 | * XX21 and the XX11 controller that share the same device id for single | ||
684 | * and dual slot controllers. return '2nd slot empty'. we already checked | ||
685 | * if the interrupt is tied to another function. | ||
686 | */ | ||
687 | if (socket->dev->device != func->device) | ||
688 | goto out; | ||
689 | |||
661 | slot2 = pci_get_drvdata(func); | 690 | slot2 = pci_get_drvdata(func); |
662 | if (!slot2) | 691 | if (!slot2) |
663 | goto out; | 692 | goto out; |
diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c index 80806c9b43ad..c3e22fca105a 100644 --- a/drivers/pcmcia/yenta_socket.c +++ b/drivers/pcmcia/yenta_socket.c | |||
@@ -1249,6 +1249,14 @@ static struct pci_device_id yenta_table [] = { | |||
1249 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1250, TI1250), | 1249 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1250, TI1250), |
1250 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1410, TI1250), | 1250 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1410, TI1250), |
1251 | 1251 | ||
1252 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX21_XX11, TI12XX), | ||
1253 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X515, TI12XX), | ||
1254 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X420, TI12XX), | ||
1255 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X620, TI12XX), | ||
1256 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7410, TI12XX), | ||
1257 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7510, TI12XX), | ||
1258 | CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7610, TI12XX), | ||
1259 | |||
1252 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1211, ENE), | 1260 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1211, ENE), |
1253 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1225, ENE), | 1261 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1225, ENE), |
1254 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1410, ENE), | 1262 | CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1410, ENE), |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 92efb2c767f9..68f11ac1a314 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -769,6 +769,8 @@ | |||
769 | #define PCI_DEVICE_ID_TI_TVP4010 0x3d04 | 769 | #define PCI_DEVICE_ID_TI_TVP4010 0x3d04 |
770 | #define PCI_DEVICE_ID_TI_TVP4020 0x3d07 | 770 | #define PCI_DEVICE_ID_TI_TVP4020 0x3d07 |
771 | #define PCI_DEVICE_ID_TI_4450 0x8011 | 771 | #define PCI_DEVICE_ID_TI_4450 0x8011 |
772 | #define PCI_DEVICE_ID_TI_XX21_XX11 0x8031 | ||
773 | #define PCI_DEVICE_ID_TI_X515 0x8036 | ||
772 | #define PCI_DEVICE_ID_TI_1130 0xac12 | 774 | #define PCI_DEVICE_ID_TI_1130 0xac12 |
773 | #define PCI_DEVICE_ID_TI_1031 0xac13 | 775 | #define PCI_DEVICE_ID_TI_1031 0xac13 |
774 | #define PCI_DEVICE_ID_TI_1131 0xac15 | 776 | #define PCI_DEVICE_ID_TI_1131 0xac15 |
@@ -785,12 +787,17 @@ | |||
785 | #define PCI_DEVICE_ID_TI_4451 0xac42 | 787 | #define PCI_DEVICE_ID_TI_4451 0xac42 |
786 | #define PCI_DEVICE_ID_TI_4510 0xac44 | 788 | #define PCI_DEVICE_ID_TI_4510 0xac44 |
787 | #define PCI_DEVICE_ID_TI_4520 0xac46 | 789 | #define PCI_DEVICE_ID_TI_4520 0xac46 |
790 | #define PCI_DEVICE_ID_TI_7510 0xac47 | ||
791 | #define PCI_DEVICE_ID_TI_7610 0xac48 | ||
792 | #define PCI_DEVICE_ID_TI_7410 0xac49 | ||
788 | #define PCI_DEVICE_ID_TI_1410 0xac50 | 793 | #define PCI_DEVICE_ID_TI_1410 0xac50 |
789 | #define PCI_DEVICE_ID_TI_1420 0xac51 | 794 | #define PCI_DEVICE_ID_TI_1420 0xac51 |
790 | #define PCI_DEVICE_ID_TI_1451A 0xac52 | 795 | #define PCI_DEVICE_ID_TI_1451A 0xac52 |
791 | #define PCI_DEVICE_ID_TI_1620 0xac54 | 796 | #define PCI_DEVICE_ID_TI_1620 0xac54 |
792 | #define PCI_DEVICE_ID_TI_1520 0xac55 | 797 | #define PCI_DEVICE_ID_TI_1520 0xac55 |
793 | #define PCI_DEVICE_ID_TI_1510 0xac56 | 798 | #define PCI_DEVICE_ID_TI_1510 0xac56 |
799 | #define PCI_DEVICE_ID_TI_X620 0xac8d | ||
800 | #define PCI_DEVICE_ID_TI_X420 0xac8e | ||
794 | 801 | ||
795 | #define PCI_VENDOR_ID_SONY 0x104d | 802 | #define PCI_VENDOR_ID_SONY 0x104d |
796 | #define PCI_DEVICE_ID_SONY_CXD3222 0x8039 | 803 | #define PCI_DEVICE_ID_SONY_CXD3222 0x8039 |