mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-22 22:04:47 +08:00
Merge master.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-fixes-2.6
This commit is contained in:
commit
bf0cbb3e42
@ -477,7 +477,7 @@ static struct pcmcia_device_id ide_ids[] = {
|
|||||||
PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCIDE", 0x547e66dc, 0x5c5ab149),
|
PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCIDE", 0x547e66dc, 0x5c5ab149),
|
||||||
PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCIDEII", 0x547e66dc, 0xb3662674),
|
PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCIDEII", 0x547e66dc, 0xb3662674),
|
||||||
PCMCIA_DEVICE_PROD_ID12("LOOKMEET", "CBIDE2 ", 0xe37be2b5, 0x8671043b),
|
PCMCIA_DEVICE_PROD_ID12("LOOKMEET", "CBIDE2 ", 0xe37be2b5, 0x8671043b),
|
||||||
PCMCIA_DEVICE_PROD_ID12(" ", "NinjaATA-", 0x3b6e20c8, 0xebe0bd79),
|
PCMCIA_DEVICE_PROD_ID2("NinjaATA-", 0xebe0bd79),
|
||||||
PCMCIA_DEVICE_PROD_ID12("PCMCIA", "CD-ROM", 0x281f1c5d, 0x66536591),
|
PCMCIA_DEVICE_PROD_ID12("PCMCIA", "CD-ROM", 0x281f1c5d, 0x66536591),
|
||||||
PCMCIA_DEVICE_PROD_ID12("PCMCIA", "PnPIDE", 0x281f1c5d, 0x0c694728),
|
PCMCIA_DEVICE_PROD_ID12("PCMCIA", "PnPIDE", 0x281f1c5d, 0x0c694728),
|
||||||
PCMCIA_DEVICE_PROD_ID12("SHUTTLE TECHNOLOGY LTD.", "PCCARD-IDE/ATAPI Adapter", 0x4a3f0ba0, 0x322560e1),
|
PCMCIA_DEVICE_PROD_ID12("SHUTTLE TECHNOLOGY LTD.", "PCCARD-IDE/ATAPI Adapter", 0x4a3f0ba0, 0x322560e1),
|
||||||
|
@ -146,7 +146,7 @@ config I82365
|
|||||||
|
|
||||||
config TCIC
|
config TCIC
|
||||||
tristate "Databook TCIC host bridge support"
|
tristate "Databook TCIC host bridge support"
|
||||||
depends on PCMCIA
|
depends on PCMCIA && ISA
|
||||||
select PCCARD_NONSTATIC
|
select PCCARD_NONSTATIC
|
||||||
help
|
help
|
||||||
Say Y here to include support for the Databook TCIC family of PCMCIA
|
Say Y here to include support for the Databook TCIC family of PCMCIA
|
||||||
|
@ -228,6 +228,11 @@ int cb_alloc(struct pcmcia_socket * s)
|
|||||||
pci_bus_size_bridges(bus);
|
pci_bus_size_bridges(bus);
|
||||||
pci_bus_assign_resources(bus);
|
pci_bus_assign_resources(bus);
|
||||||
cardbus_assign_irqs(bus, s->pci_irq);
|
cardbus_assign_irqs(bus, s->pci_irq);
|
||||||
|
|
||||||
|
/* socket specific tune function */
|
||||||
|
if (s->tune_bridge)
|
||||||
|
s->tune_bridge(s, bus);
|
||||||
|
|
||||||
pci_enable_bridges(bus);
|
pci_enable_bridges(bus);
|
||||||
pci_bus_add_devices(bus);
|
pci_bus_add_devices(bus);
|
||||||
|
|
||||||
|
@ -59,6 +59,7 @@
|
|||||||
|
|
||||||
#define TI122X_SCR_SER_STEP 0xc0000000
|
#define TI122X_SCR_SER_STEP 0xc0000000
|
||||||
#define TI122X_SCR_INTRTIE 0x20000000
|
#define TI122X_SCR_INTRTIE 0x20000000
|
||||||
|
#define TIXX21_SCR_TIEALL 0x10000000
|
||||||
#define TI122X_SCR_CBRSVD 0x00400000
|
#define TI122X_SCR_CBRSVD 0x00400000
|
||||||
#define TI122X_SCR_MRBURSTDN 0x00008000
|
#define TI122X_SCR_MRBURSTDN 0x00008000
|
||||||
#define TI122X_SCR_MRBURSTUP 0x00004000
|
#define TI122X_SCR_MRBURSTUP 0x00004000
|
||||||
@ -153,6 +154,12 @@
|
|||||||
/* EnE test register */
|
/* EnE test register */
|
||||||
#define ENE_TEST_C9 0xc9 /* 8bit */
|
#define ENE_TEST_C9 0xc9 /* 8bit */
|
||||||
#define ENE_TEST_C9_TLTENABLE 0x02
|
#define ENE_TEST_C9_TLTENABLE 0x02
|
||||||
|
#define ENE_TEST_C9_PFENABLE_F0 0x04
|
||||||
|
#define ENE_TEST_C9_PFENABLE_F1 0x08
|
||||||
|
#define ENE_TEST_C9_PFENABLE (ENE_TEST_C9_PFENABLE_F0 | ENE_TEST_C9_PFENABLE_F0)
|
||||||
|
#define ENE_TEST_C9_WPDISALBLE_F0 0x40
|
||||||
|
#define ENE_TEST_C9_WPDISALBLE_F1 0x80
|
||||||
|
#define ENE_TEST_C9_WPDISALBLE (ENE_TEST_C9_WPDISALBLE_F0 | ENE_TEST_C9_WPDISALBLE_F1)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Texas Instruments CardBus controller overrides.
|
* Texas Instruments CardBus controller overrides.
|
||||||
@ -618,6 +625,7 @@ static int ti12xx_2nd_slot_empty(struct yenta_socket *socket)
|
|||||||
int devfn;
|
int devfn;
|
||||||
unsigned int state;
|
unsigned int state;
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
|
u32 sysctl;
|
||||||
|
|
||||||
/* catch the two-slot controllers */
|
/* catch the two-slot controllers */
|
||||||
switch (socket->dev->device) {
|
switch (socket->dev->device) {
|
||||||
@ -640,6 +648,24 @@ static int ti12xx_2nd_slot_empty(struct yenta_socket *socket)
|
|||||||
*/
|
*/
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PCI_DEVICE_ID_TI_X515:
|
||||||
|
case PCI_DEVICE_ID_TI_X420:
|
||||||
|
case PCI_DEVICE_ID_TI_X620:
|
||||||
|
case PCI_DEVICE_ID_TI_XX21_XX11:
|
||||||
|
case PCI_DEVICE_ID_TI_7410:
|
||||||
|
case PCI_DEVICE_ID_TI_7610:
|
||||||
|
/*
|
||||||
|
* those are either single or dual slot CB with additional functions
|
||||||
|
* like 1394, smartcard reader, etc. check the TIEALL flag for them
|
||||||
|
* the TIEALL flag binds the IRQ of all functions toghether.
|
||||||
|
* we catch the single slot variants later.
|
||||||
|
*/
|
||||||
|
sysctl = config_readl(socket, TI113X_SYSTEM_CONTROL);
|
||||||
|
if (sysctl & TIXX21_SCR_TIEALL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
/* single-slot controllers have the 2nd slot empty always :) */
|
/* single-slot controllers have the 2nd slot empty always :) */
|
||||||
default:
|
default:
|
||||||
return 1;
|
return 1;
|
||||||
@ -652,6 +678,15 @@ static int ti12xx_2nd_slot_empty(struct yenta_socket *socket)
|
|||||||
if (!func)
|
if (!func)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* check that the device id of both slots match. this is needed for the
|
||||||
|
* XX21 and the XX11 controller that share the same device id for single
|
||||||
|
* and dual slot controllers. return '2nd slot empty'. we already checked
|
||||||
|
* if the interrupt is tied to another function.
|
||||||
|
*/
|
||||||
|
if (socket->dev->device != func->device)
|
||||||
|
goto out;
|
||||||
|
|
||||||
slot2 = pci_get_drvdata(func);
|
slot2 = pci_get_drvdata(func);
|
||||||
if (!slot2)
|
if (!slot2)
|
||||||
goto out;
|
goto out;
|
||||||
@ -790,16 +825,6 @@ static int ti12xx_override(struct yenta_socket *socket)
|
|||||||
if (val_orig != val)
|
if (val_orig != val)
|
||||||
config_writel(socket, TI113X_SYSTEM_CONTROL, val);
|
config_writel(socket, TI113X_SYSTEM_CONTROL, val);
|
||||||
|
|
||||||
/*
|
|
||||||
* for EnE bridges only: clear testbit TLTEnable. this makes the
|
|
||||||
* RME Hammerfall DSP sound card working.
|
|
||||||
*/
|
|
||||||
if (socket->dev->vendor == PCI_VENDOR_ID_ENE) {
|
|
||||||
u8 test_c9 = config_readb(socket, ENE_TEST_C9);
|
|
||||||
test_c9 &= ~ENE_TEST_C9_TLTENABLE;
|
|
||||||
config_writeb(socket, ENE_TEST_C9, test_c9);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Yenta expects controllers to use CSCINT to route
|
* Yenta expects controllers to use CSCINT to route
|
||||||
* CSC interrupts to PCI rather than INTVAL.
|
* CSC interrupts to PCI rather than INTVAL.
|
||||||
@ -841,5 +866,75 @@ static int ti1250_override(struct yenta_socket *socket)
|
|||||||
return ti12xx_override(socket);
|
return ti12xx_override(socket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EnE specific part. EnE bridges are register compatible with TI bridges but
|
||||||
|
* have their own test registers and more important their own little problems.
|
||||||
|
* Some fixup code to make everybody happy (TM).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set/clear various test bits:
|
||||||
|
* Defaults to clear the bit.
|
||||||
|
* - mask (u8) defines what bits to change
|
||||||
|
* - bits (u8) is the values to change them to
|
||||||
|
* -> it's
|
||||||
|
* current = (current & ~mask) | bits
|
||||||
|
*/
|
||||||
|
/* pci ids of devices that wants to have the bit set */
|
||||||
|
#define DEVID(_vend,_dev,_subvend,_subdev,mask,bits) { \
|
||||||
|
.vendor = _vend, \
|
||||||
|
.device = _dev, \
|
||||||
|
.subvendor = _subvend, \
|
||||||
|
.subdevice = _subdev, \
|
||||||
|
.driver_data = ((mask) << 8 | (bits)), \
|
||||||
|
}
|
||||||
|
static struct pci_device_id ene_tune_tbl[] = {
|
||||||
|
/* Echo Audio products based on motorola DSP56301 and DSP56361 */
|
||||||
|
DEVID(PCI_VENDOR_ID_MOTOROLA, 0x1801, 0xECC0, PCI_ANY_ID,
|
||||||
|
ENE_TEST_C9_TLTENABLE | ENE_TEST_C9_PFENABLE, ENE_TEST_C9_TLTENABLE),
|
||||||
|
DEVID(PCI_VENDOR_ID_MOTOROLA, 0x3410, 0xECC0, PCI_ANY_ID,
|
||||||
|
ENE_TEST_C9_TLTENABLE | ENE_TEST_C9_PFENABLE, ENE_TEST_C9_TLTENABLE),
|
||||||
|
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
static void ene_tune_bridge(struct pcmcia_socket *sock, struct pci_bus *bus)
|
||||||
|
{
|
||||||
|
struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
|
||||||
|
struct pci_dev *dev;
|
||||||
|
struct pci_device_id *id = NULL;
|
||||||
|
u8 test_c9, old_c9, mask, bits;
|
||||||
|
|
||||||
|
list_for_each_entry(dev, &bus->devices, bus_list) {
|
||||||
|
id = (struct pci_device_id *) pci_match_id(ene_tune_tbl, dev);
|
||||||
|
if (id)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
test_c9 = old_c9 = config_readb(socket, ENE_TEST_C9);
|
||||||
|
if (id) {
|
||||||
|
mask = (id->driver_data >> 8) & 0xFF;
|
||||||
|
bits = id->driver_data & 0xFF;
|
||||||
|
|
||||||
|
test_c9 = (test_c9 & ~mask) | bits;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* default to clear TLTEnable bit, old behaviour */
|
||||||
|
test_c9 &= ~ENE_TEST_C9_TLTENABLE;
|
||||||
|
|
||||||
|
printk(KERN_INFO "yenta EnE: chaning testregister 0xC9, %02x -> %02x\n", old_c9, test_c9);
|
||||||
|
config_writeb(socket, ENE_TEST_C9, test_c9);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int ene_override(struct yenta_socket *socket)
|
||||||
|
{
|
||||||
|
/* install tune_bridge() function */
|
||||||
|
socket->socket.tune_bridge = ene_tune_bridge;
|
||||||
|
|
||||||
|
return ti1250_override(socket);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _LINUX_TI113X_H */
|
#endif /* _LINUX_TI113X_H */
|
||||||
|
|
||||||
|
@ -559,12 +559,6 @@ static void yenta_interrogate(struct yenta_socket *socket)
|
|||||||
static int yenta_sock_init(struct pcmcia_socket *sock)
|
static int yenta_sock_init(struct pcmcia_socket *sock)
|
||||||
{
|
{
|
||||||
struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
|
struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
|
||||||
u16 bridge;
|
|
||||||
|
|
||||||
bridge = config_readw(socket, CB_BRIDGE_CONTROL) & ~CB_BRIDGE_INTR;
|
|
||||||
if (!socket->cb_irq)
|
|
||||||
bridge |= CB_BRIDGE_INTR;
|
|
||||||
config_writew(socket, CB_BRIDGE_CONTROL, bridge);
|
|
||||||
|
|
||||||
exca_writeb(socket, I365_GBLCTL, 0x00);
|
exca_writeb(socket, I365_GBLCTL, 0x00);
|
||||||
exca_writeb(socket, I365_GENCTL, 0x00);
|
exca_writeb(socket, I365_GENCTL, 0x00);
|
||||||
@ -819,6 +813,7 @@ enum {
|
|||||||
CARDBUS_TYPE_TOPIC95,
|
CARDBUS_TYPE_TOPIC95,
|
||||||
CARDBUS_TYPE_TOPIC97,
|
CARDBUS_TYPE_TOPIC97,
|
||||||
CARDBUS_TYPE_O2MICRO,
|
CARDBUS_TYPE_O2MICRO,
|
||||||
|
CARDBUS_TYPE_ENE,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -865,6 +860,12 @@ static struct cardbus_type cardbus_type[] = {
|
|||||||
.override = o2micro_override,
|
.override = o2micro_override,
|
||||||
.restore_state = o2micro_restore_state,
|
.restore_state = o2micro_restore_state,
|
||||||
},
|
},
|
||||||
|
[CARDBUS_TYPE_ENE] = {
|
||||||
|
.override = ene_override,
|
||||||
|
.save_state = ti_save_state,
|
||||||
|
.restore_state = ti_restore_state,
|
||||||
|
.sock_init = ti_init,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -883,16 +884,8 @@ static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mas
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
unsigned long val;
|
unsigned long val;
|
||||||
u16 bridge_ctrl;
|
|
||||||
u32 mask;
|
u32 mask;
|
||||||
|
|
||||||
/* Set up ISA irq routing to probe the ISA irqs.. */
|
|
||||||
bridge_ctrl = config_readw(socket, CB_BRIDGE_CONTROL);
|
|
||||||
if (!(bridge_ctrl & CB_BRIDGE_INTR)) {
|
|
||||||
bridge_ctrl |= CB_BRIDGE_INTR;
|
|
||||||
config_writew(socket, CB_BRIDGE_CONTROL, bridge_ctrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Probe for usable interrupts using the force
|
* Probe for usable interrupts using the force
|
||||||
* register to generate bogus card status events.
|
* register to generate bogus card status events.
|
||||||
@ -914,9 +907,6 @@ static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mas
|
|||||||
|
|
||||||
mask = probe_irq_mask(val) & 0xffff;
|
mask = probe_irq_mask(val) & 0xffff;
|
||||||
|
|
||||||
bridge_ctrl &= ~CB_BRIDGE_INTR;
|
|
||||||
config_writew(socket, CB_BRIDGE_CONTROL, bridge_ctrl);
|
|
||||||
|
|
||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -944,18 +934,11 @@ static irqreturn_t yenta_probe_handler(int irq, void *dev_id, struct pt_regs *re
|
|||||||
/* probes the PCI interrupt, use only on override functions */
|
/* probes the PCI interrupt, use only on override functions */
|
||||||
static int yenta_probe_cb_irq(struct yenta_socket *socket)
|
static int yenta_probe_cb_irq(struct yenta_socket *socket)
|
||||||
{
|
{
|
||||||
u16 bridge_ctrl;
|
|
||||||
|
|
||||||
if (!socket->cb_irq)
|
if (!socket->cb_irq)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
socket->probe_status = 0;
|
socket->probe_status = 0;
|
||||||
|
|
||||||
/* disable ISA interrupts */
|
|
||||||
bridge_ctrl = config_readw(socket, CB_BRIDGE_CONTROL);
|
|
||||||
bridge_ctrl &= ~CB_BRIDGE_INTR;
|
|
||||||
config_writew(socket, CB_BRIDGE_CONTROL, bridge_ctrl);
|
|
||||||
|
|
||||||
if (request_irq(socket->cb_irq, yenta_probe_handler, SA_SHIRQ, "yenta", socket)) {
|
if (request_irq(socket->cb_irq, yenta_probe_handler, SA_SHIRQ, "yenta", socket)) {
|
||||||
printk(KERN_WARNING "Yenta: request_irq() in yenta_probe_cb_irq() failed!\n");
|
printk(KERN_WARNING "Yenta: request_irq() in yenta_probe_cb_irq() failed!\n");
|
||||||
return -1;
|
return -1;
|
||||||
@ -966,7 +949,7 @@ static int yenta_probe_cb_irq(struct yenta_socket *socket)
|
|||||||
cb_writel(socket, CB_SOCKET_EVENT, -1);
|
cb_writel(socket, CB_SOCKET_EVENT, -1);
|
||||||
cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
|
cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
|
||||||
cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
|
cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
|
||||||
|
|
||||||
msleep(100);
|
msleep(100);
|
||||||
|
|
||||||
/* disable interrupts */
|
/* disable interrupts */
|
||||||
@ -1004,11 +987,12 @@ static void yenta_config_init(struct yenta_socket *socket)
|
|||||||
{
|
{
|
||||||
u16 bridge;
|
u16 bridge;
|
||||||
struct pci_dev *dev = socket->dev;
|
struct pci_dev *dev = socket->dev;
|
||||||
|
struct pci_bus_region region;
|
||||||
|
|
||||||
pci_set_power_state(socket->dev, 0);
|
pcibios_resource_to_bus(socket->dev, ®ion, &dev->resource[0]);
|
||||||
|
|
||||||
config_writel(socket, CB_LEGACY_MODE_BASE, 0);
|
config_writel(socket, CB_LEGACY_MODE_BASE, 0);
|
||||||
config_writel(socket, PCI_BASE_ADDRESS_0, dev->resource[0].start);
|
config_writel(socket, PCI_BASE_ADDRESS_0, region.start);
|
||||||
config_writew(socket, PCI_COMMAND,
|
config_writew(socket, PCI_COMMAND,
|
||||||
PCI_COMMAND_IO |
|
PCI_COMMAND_IO |
|
||||||
PCI_COMMAND_MEMORY |
|
PCI_COMMAND_MEMORY |
|
||||||
@ -1031,8 +1015,8 @@ static void yenta_config_init(struct yenta_socket *socket)
|
|||||||
* - PCI interrupts enabled if a PCI interrupt exists..
|
* - PCI interrupts enabled if a PCI interrupt exists..
|
||||||
*/
|
*/
|
||||||
bridge = config_readw(socket, CB_BRIDGE_CONTROL);
|
bridge = config_readw(socket, CB_BRIDGE_CONTROL);
|
||||||
bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_INTR | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN);
|
bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN);
|
||||||
bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN | CB_BRIDGE_INTR;
|
bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN;
|
||||||
config_writew(socket, CB_BRIDGE_CONTROL, bridge);
|
config_writew(socket, CB_BRIDGE_CONTROL, bridge);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1265,10 +1249,22 @@ static struct pci_device_id yenta_table [] = {
|
|||||||
CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1250, TI1250),
|
CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1250, TI1250),
|
||||||
CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1410, TI1250),
|
CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1410, TI1250),
|
||||||
|
|
||||||
CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1211, TI12XX),
|
CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX21_XX11, TI12XX),
|
||||||
CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1225, TI12XX),
|
CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X515, TI12XX),
|
||||||
CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1410, TI1250),
|
CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X420, TI12XX),
|
||||||
CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1420, TI12XX),
|
CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X620, TI12XX),
|
||||||
|
CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7410, TI12XX),
|
||||||
|
CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7510, TI12XX),
|
||||||
|
CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7610, TI12XX),
|
||||||
|
|
||||||
|
CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_710, TI12XX),
|
||||||
|
CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_712, TI12XX),
|
||||||
|
CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_720, TI12XX),
|
||||||
|
CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_722, TI12XX),
|
||||||
|
CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1211, ENE),
|
||||||
|
CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1225, ENE),
|
||||||
|
CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1410, ENE),
|
||||||
|
CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1420, ENE),
|
||||||
|
|
||||||
CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C465, RICOH),
|
CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C465, RICOH),
|
||||||
CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C466, RICOH),
|
CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C466, RICOH),
|
||||||
|
@ -859,6 +859,7 @@ static struct pcmcia_device_id serial_ids[] = {
|
|||||||
PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0175, 0x0000, "DP83903.cis"),
|
PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0175, 0x0000, "DP83903.cis"),
|
||||||
PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0035, "3CXEM556.cis"),
|
PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0035, "3CXEM556.cis"),
|
||||||
PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x003d, "3CXEM556.cis"),
|
PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x003d, "3CXEM556.cis"),
|
||||||
|
PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0x0710, "SW_7xx_SER.cis"), /* Sierra Wireless AC710/AC750 GPRS Network Adapter R1 */
|
||||||
PCMCIA_DEVICE_CIS_PROD_ID12("MultiTech", "PCMCIA 56K DataFax", 0x842047ee, 0xc2efcf03, "MT5634ZLX.cis"),
|
PCMCIA_DEVICE_CIS_PROD_ID12("MultiTech", "PCMCIA 56K DataFax", 0x842047ee, 0xc2efcf03, "MT5634ZLX.cis"),
|
||||||
PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "COMpad4.cis"),
|
PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "COMpad4.cis"),
|
||||||
PCMCIA_DEVICE_CIS_PROD_ID123("ADVANTECH", "COMpad-32/85", "1.0", 0x96913a85, 0x8fbe92ae, 0x0877b627, "COMpad2.cis"),
|
PCMCIA_DEVICE_CIS_PROD_ID123("ADVANTECH", "COMpad-32/85", "1.0", 0x96913a85, 0x8fbe92ae, 0x0877b627, "COMpad2.cis"),
|
||||||
|
@ -209,10 +209,11 @@ struct pcmcia_device_id {
|
|||||||
/* for real multi-function devices */
|
/* for real multi-function devices */
|
||||||
__u8 function;
|
__u8 function;
|
||||||
|
|
||||||
/* for pseude multi-function devices */
|
/* for pseudo multi-function devices */
|
||||||
__u8 device_no;
|
__u8 device_no;
|
||||||
|
|
||||||
__u32 prod_id_hash[4];
|
__u32 prod_id_hash[4]
|
||||||
|
__attribute__((aligned(sizeof(__u32))));
|
||||||
|
|
||||||
/* not matched against in kernelspace*/
|
/* not matched against in kernelspace*/
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
@ -769,6 +769,8 @@
|
|||||||
#define PCI_DEVICE_ID_TI_TVP4010 0x3d04
|
#define PCI_DEVICE_ID_TI_TVP4010 0x3d04
|
||||||
#define PCI_DEVICE_ID_TI_TVP4020 0x3d07
|
#define PCI_DEVICE_ID_TI_TVP4020 0x3d07
|
||||||
#define PCI_DEVICE_ID_TI_4450 0x8011
|
#define PCI_DEVICE_ID_TI_4450 0x8011
|
||||||
|
#define PCI_DEVICE_ID_TI_XX21_XX11 0x8031
|
||||||
|
#define PCI_DEVICE_ID_TI_X515 0x8036
|
||||||
#define PCI_DEVICE_ID_TI_1130 0xac12
|
#define PCI_DEVICE_ID_TI_1130 0xac12
|
||||||
#define PCI_DEVICE_ID_TI_1031 0xac13
|
#define PCI_DEVICE_ID_TI_1031 0xac13
|
||||||
#define PCI_DEVICE_ID_TI_1131 0xac15
|
#define PCI_DEVICE_ID_TI_1131 0xac15
|
||||||
@ -785,12 +787,17 @@
|
|||||||
#define PCI_DEVICE_ID_TI_4451 0xac42
|
#define PCI_DEVICE_ID_TI_4451 0xac42
|
||||||
#define PCI_DEVICE_ID_TI_4510 0xac44
|
#define PCI_DEVICE_ID_TI_4510 0xac44
|
||||||
#define PCI_DEVICE_ID_TI_4520 0xac46
|
#define PCI_DEVICE_ID_TI_4520 0xac46
|
||||||
|
#define PCI_DEVICE_ID_TI_7510 0xac47
|
||||||
|
#define PCI_DEVICE_ID_TI_7610 0xac48
|
||||||
|
#define PCI_DEVICE_ID_TI_7410 0xac49
|
||||||
#define PCI_DEVICE_ID_TI_1410 0xac50
|
#define PCI_DEVICE_ID_TI_1410 0xac50
|
||||||
#define PCI_DEVICE_ID_TI_1420 0xac51
|
#define PCI_DEVICE_ID_TI_1420 0xac51
|
||||||
#define PCI_DEVICE_ID_TI_1451A 0xac52
|
#define PCI_DEVICE_ID_TI_1451A 0xac52
|
||||||
#define PCI_DEVICE_ID_TI_1620 0xac54
|
#define PCI_DEVICE_ID_TI_1620 0xac54
|
||||||
#define PCI_DEVICE_ID_TI_1520 0xac55
|
#define PCI_DEVICE_ID_TI_1520 0xac55
|
||||||
#define PCI_DEVICE_ID_TI_1510 0xac56
|
#define PCI_DEVICE_ID_TI_1510 0xac56
|
||||||
|
#define PCI_DEVICE_ID_TI_X620 0xac8d
|
||||||
|
#define PCI_DEVICE_ID_TI_X420 0xac8e
|
||||||
|
|
||||||
#define PCI_VENDOR_ID_SONY 0x104d
|
#define PCI_VENDOR_ID_SONY 0x104d
|
||||||
#define PCI_DEVICE_ID_SONY_CXD3222 0x8039
|
#define PCI_DEVICE_ID_SONY_CXD3222 0x8039
|
||||||
@ -2187,7 +2194,12 @@
|
|||||||
#define PCI_DEVICE_ID_ENE_1211 0x1211
|
#define PCI_DEVICE_ID_ENE_1211 0x1211
|
||||||
#define PCI_DEVICE_ID_ENE_1225 0x1225
|
#define PCI_DEVICE_ID_ENE_1225 0x1225
|
||||||
#define PCI_DEVICE_ID_ENE_1410 0x1410
|
#define PCI_DEVICE_ID_ENE_1410 0x1410
|
||||||
|
#define PCI_DEVICE_ID_ENE_710 0x1411
|
||||||
|
#define PCI_DEVICE_ID_ENE_712 0x1412
|
||||||
#define PCI_DEVICE_ID_ENE_1420 0x1420
|
#define PCI_DEVICE_ID_ENE_1420 0x1420
|
||||||
|
#define PCI_DEVICE_ID_ENE_720 0x1421
|
||||||
|
#define PCI_DEVICE_ID_ENE_722 0x1422
|
||||||
|
|
||||||
#define PCI_VENDOR_ID_CHELSIO 0x1425
|
#define PCI_VENDOR_ID_CHELSIO 0x1425
|
||||||
|
|
||||||
#define PCI_VENDOR_ID_MIPS 0x153f
|
#define PCI_VENDOR_ID_MIPS 0x153f
|
||||||
|
@ -21,6 +21,9 @@
|
|||||||
#include <pcmcia/cs_types.h>
|
#include <pcmcia/cs_types.h>
|
||||||
#include <pcmcia/cs.h>
|
#include <pcmcia/cs.h>
|
||||||
#include <pcmcia/bulkmem.h>
|
#include <pcmcia/bulkmem.h>
|
||||||
|
#ifdef CONFIG_CARDBUS
|
||||||
|
#include <linux/pci.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Definitions for card status flags for GetStatus */
|
/* Definitions for card status flags for GetStatus */
|
||||||
#define SS_WRPROT 0x0001
|
#define SS_WRPROT 0x0001
|
||||||
@ -233,7 +236,11 @@ struct pcmcia_socket {
|
|||||||
|
|
||||||
/* so is power hook */
|
/* so is power hook */
|
||||||
int (*power_hook)(struct pcmcia_socket *sock, int operation);
|
int (*power_hook)(struct pcmcia_socket *sock, int operation);
|
||||||
|
#ifdef CONFIG_CARDBUS
|
||||||
|
/* allows tuning the CB bridge before loading driver for the CB card */
|
||||||
|
void (*tune_bridge)(struct pcmcia_socket *sock, struct pci_bus *bus);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* state thread */
|
/* state thread */
|
||||||
struct semaphore skt_sem; /* protects socket h/w state */
|
struct semaphore skt_sem; /* protects socket h/w state */
|
||||||
|
|
||||||
|
@ -295,11 +295,13 @@ static int do_pcmcia_entry(const char *filename,
|
|||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
id->match_flags = TO_NATIVE(id->match_flags);
|
||||||
id->manf_id = TO_NATIVE(id->manf_id);
|
id->manf_id = TO_NATIVE(id->manf_id);
|
||||||
id->card_id = TO_NATIVE(id->card_id);
|
id->card_id = TO_NATIVE(id->card_id);
|
||||||
id->func_id = TO_NATIVE(id->func_id);
|
id->func_id = TO_NATIVE(id->func_id);
|
||||||
id->function = TO_NATIVE(id->function);
|
id->function = TO_NATIVE(id->function);
|
||||||
id->device_no = TO_NATIVE(id->device_no);
|
id->device_no = TO_NATIVE(id->device_no);
|
||||||
|
|
||||||
for (i=0; i<4; i++) {
|
for (i=0; i<4; i++) {
|
||||||
id->prod_id_hash[i] = TO_NATIVE(id->prod_id_hash[i]);
|
id->prod_id_hash[i] = TO_NATIVE(id->prod_id_hash[i]);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user