0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #include <linux/init.h>
0015 #include <linux/pci.h>
0016 #include <linux/workqueue.h>
0017 #include <linux/interrupt.h>
0018 #include <linux/delay.h>
0019 #include <linux/module.h>
0020 #include <linux/io.h>
0021 #include <linux/slab.h>
0022
0023 #include <pcmcia/ss.h>
0024
0025 #include "yenta_socket.h"
0026 #include "i82365.h"
0027
0028 static bool disable_clkrun;
0029 module_param(disable_clkrun, bool, 0444);
0030 MODULE_PARM_DESC(disable_clkrun,
0031 "If PC card doesn't function properly, please try this option (TI and Ricoh bridges only)");
0032
0033 static bool isa_probe = 1;
0034 module_param(isa_probe, bool, 0444);
0035 MODULE_PARM_DESC(isa_probe, "If set ISA interrupts are probed (default). Set to N to disable probing");
0036
0037 static bool pwr_irqs_off;
0038 module_param(pwr_irqs_off, bool, 0644);
0039 MODULE_PARM_DESC(pwr_irqs_off, "Force IRQs off during power-on of slot. Use only when seeing IRQ storms!");
0040
0041 static char o2_speedup[] = "default";
0042 module_param_string(o2_speedup, o2_speedup, sizeof(o2_speedup), 0444);
0043 MODULE_PARM_DESC(o2_speedup, "Use prefetch/burst for O2-bridges: 'on', 'off' "
0044 "or 'default' (uses recommended behaviour for the detected bridge)");
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055 static u32 isa_interrupts = 0x0ef8;
0056
0057
0058 #define debug(x, s, args...) dev_dbg(&s->dev->dev, x, ##args)
0059
0060
0061 #define to_cycles(ns) ((ns)/120)
0062 #define to_ns(cycles) ((cycles)*120)
0063
0064
0065
0066
0067
0068 #ifdef CONFIG_YENTA_TI
0069 static int yenta_probe_cb_irq(struct yenta_socket *socket);
0070 static unsigned int yenta_probe_irq(struct yenta_socket *socket,
0071 u32 isa_irq_mask);
0072 #endif
0073
0074
0075 static unsigned int override_bios;
0076 module_param(override_bios, uint, 0000);
0077 MODULE_PARM_DESC(override_bios, "yenta ignore bios resource allocation");
0078
0079
0080
0081
0082
0083
0084 static inline u32 cb_readl(struct yenta_socket *socket, unsigned reg)
0085 {
0086 u32 val = readl(socket->base + reg);
0087 debug("%04x %08x\n", socket, reg, val);
0088 return val;
0089 }
0090
0091 static inline void cb_writel(struct yenta_socket *socket, unsigned reg, u32 val)
0092 {
0093 debug("%04x %08x\n", socket, reg, val);
0094 writel(val, socket->base + reg);
0095 readl(socket->base + reg);
0096 }
0097
0098 static inline u8 config_readb(struct yenta_socket *socket, unsigned offset)
0099 {
0100 u8 val;
0101 pci_read_config_byte(socket->dev, offset, &val);
0102 debug("%04x %02x\n", socket, offset, val);
0103 return val;
0104 }
0105
0106 static inline u16 config_readw(struct yenta_socket *socket, unsigned offset)
0107 {
0108 u16 val;
0109 pci_read_config_word(socket->dev, offset, &val);
0110 debug("%04x %04x\n", socket, offset, val);
0111 return val;
0112 }
0113
0114 static inline u32 config_readl(struct yenta_socket *socket, unsigned offset)
0115 {
0116 u32 val;
0117 pci_read_config_dword(socket->dev, offset, &val);
0118 debug("%04x %08x\n", socket, offset, val);
0119 return val;
0120 }
0121
0122 static inline void config_writeb(struct yenta_socket *socket, unsigned offset, u8 val)
0123 {
0124 debug("%04x %02x\n", socket, offset, val);
0125 pci_write_config_byte(socket->dev, offset, val);
0126 }
0127
0128 static inline void config_writew(struct yenta_socket *socket, unsigned offset, u16 val)
0129 {
0130 debug("%04x %04x\n", socket, offset, val);
0131 pci_write_config_word(socket->dev, offset, val);
0132 }
0133
0134 static inline void config_writel(struct yenta_socket *socket, unsigned offset, u32 val)
0135 {
0136 debug("%04x %08x\n", socket, offset, val);
0137 pci_write_config_dword(socket->dev, offset, val);
0138 }
0139
0140 static inline u8 exca_readb(struct yenta_socket *socket, unsigned reg)
0141 {
0142 u8 val = readb(socket->base + 0x800 + reg);
0143 debug("%04x %02x\n", socket, reg, val);
0144 return val;
0145 }
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158 static inline void exca_writeb(struct yenta_socket *socket, unsigned reg, u8 val)
0159 {
0160 debug("%04x %02x\n", socket, reg, val);
0161 writeb(val, socket->base + 0x800 + reg);
0162 readb(socket->base + 0x800 + reg);
0163 }
0164
0165 static void exca_writew(struct yenta_socket *socket, unsigned reg, u16 val)
0166 {
0167 debug("%04x %04x\n", socket, reg, val);
0168 writeb(val, socket->base + 0x800 + reg);
0169 writeb(val >> 8, socket->base + 0x800 + reg + 1);
0170
0171
0172 readb(socket->base + 0x800 + reg);
0173 readb(socket->base + 0x800 + reg + 1);
0174 }
0175
0176 static ssize_t show_yenta_registers(struct device *yentadev, struct device_attribute *attr, char *buf)
0177 {
0178 struct yenta_socket *socket = dev_get_drvdata(yentadev);
0179 int offset = 0, i;
0180
0181 offset = sysfs_emit(buf, "CB registers:");
0182 for (i = 0; i < 0x24; i += 4) {
0183 unsigned val;
0184 if (!(i & 15))
0185 offset += sysfs_emit_at(buf, offset, "\n%02x:", i);
0186 val = cb_readl(socket, i);
0187 offset += sysfs_emit_at(buf, offset, " %08x", val);
0188 }
0189
0190 offset += sysfs_emit_at(buf, offset, "\n\nExCA registers:");
0191 for (i = 0; i < 0x45; i++) {
0192 unsigned char val;
0193 if (!(i & 7)) {
0194 if (i & 8) {
0195 memcpy(buf + offset, " -", 2);
0196 offset += 2;
0197 } else
0198 offset += sysfs_emit_at(buf, offset, "\n%02x:", i);
0199 }
0200 val = exca_readb(socket, i);
0201 offset += sysfs_emit_at(buf, offset, " %02x", val);
0202 }
0203 sysfs_emit_at(buf, offset, "\n");
0204 return offset;
0205 }
0206
0207 static DEVICE_ATTR(yenta_registers, S_IRUSR, show_yenta_registers, NULL);
0208
0209
0210
0211
0212
0213 static int yenta_get_status(struct pcmcia_socket *sock, unsigned int *value)
0214 {
0215 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
0216 unsigned int val;
0217 u32 state = cb_readl(socket, CB_SOCKET_STATE);
0218
0219 val = (state & CB_3VCARD) ? SS_3VCARD : 0;
0220 val |= (state & CB_XVCARD) ? SS_XVCARD : 0;
0221 val |= (state & (CB_5VCARD | CB_3VCARD | CB_XVCARD | CB_YVCARD)) ? 0 : SS_PENDING;
0222 val |= (state & (CB_CDETECT1 | CB_CDETECT2)) ? SS_PENDING : 0;
0223
0224
0225 if (state & CB_CBCARD) {
0226 val |= SS_CARDBUS;
0227 val |= (state & CB_CARDSTS) ? SS_STSCHG : 0;
0228 val |= (state & (CB_CDETECT1 | CB_CDETECT2)) ? 0 : SS_DETECT;
0229 val |= (state & CB_PWRCYCLE) ? SS_POWERON | SS_READY : 0;
0230 } else if (state & CB_16BITCARD) {
0231 u8 status = exca_readb(socket, I365_STATUS);
0232 val |= ((status & I365_CS_DETECT) == I365_CS_DETECT) ? SS_DETECT : 0;
0233 if (exca_readb(socket, I365_INTCTL) & I365_PC_IOCARD) {
0234 val |= (status & I365_CS_STSCHG) ? 0 : SS_STSCHG;
0235 } else {
0236 val |= (status & I365_CS_BVD1) ? 0 : SS_BATDEAD;
0237 val |= (status & I365_CS_BVD2) ? 0 : SS_BATWARN;
0238 }
0239 val |= (status & I365_CS_WRPROT) ? SS_WRPROT : 0;
0240 val |= (status & I365_CS_READY) ? SS_READY : 0;
0241 val |= (status & I365_CS_POWERON) ? SS_POWERON : 0;
0242 }
0243
0244 *value = val;
0245 return 0;
0246 }
0247
0248 static void yenta_set_power(struct yenta_socket *socket, socket_state_t *state)
0249 {
0250
0251 if (!(cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) &&
0252 (socket->flags & YENTA_16BIT_POWER_EXCA)) {
0253 u8 reg, old;
0254 reg = old = exca_readb(socket, I365_POWER);
0255 reg &= ~(I365_VCC_MASK | I365_VPP1_MASK | I365_VPP2_MASK);
0256
0257
0258 if (socket->flags & YENTA_16BIT_POWER_DF) {
0259 switch (state->Vcc) {
0260 case 33:
0261 reg |= I365_VCC_3V;
0262 break;
0263 case 50:
0264 reg |= I365_VCC_5V;
0265 break;
0266 default:
0267 reg = 0;
0268 break;
0269 }
0270 switch (state->Vpp) {
0271 case 33:
0272 case 50:
0273 reg |= I365_VPP1_5V;
0274 break;
0275 case 120:
0276 reg |= I365_VPP1_12V;
0277 break;
0278 }
0279 } else {
0280
0281 switch (state->Vcc) {
0282 case 50:
0283 reg |= I365_VCC_5V;
0284 break;
0285 default:
0286 reg = 0;
0287 break;
0288 }
0289 switch (state->Vpp) {
0290 case 50:
0291 reg |= I365_VPP1_5V | I365_VPP2_5V;
0292 break;
0293 case 120:
0294 reg |= I365_VPP1_12V | I365_VPP2_12V;
0295 break;
0296 }
0297 }
0298
0299 if (reg != old)
0300 exca_writeb(socket, I365_POWER, reg);
0301 } else {
0302 u32 reg = 0;
0303 switch (state->Vcc) {
0304 case 33:
0305 reg = CB_SC_VCC_3V;
0306 break;
0307 case 50:
0308 reg = CB_SC_VCC_5V;
0309 break;
0310 default:
0311 reg = 0;
0312 break;
0313 }
0314 switch (state->Vpp) {
0315 case 33:
0316 reg |= CB_SC_VPP_3V;
0317 break;
0318 case 50:
0319 reg |= CB_SC_VPP_5V;
0320 break;
0321 case 120:
0322 reg |= CB_SC_VPP_12V;
0323 break;
0324 }
0325 if (reg != cb_readl(socket, CB_SOCKET_CONTROL))
0326 cb_writel(socket, CB_SOCKET_CONTROL, reg);
0327 }
0328 }
0329
0330 static int yenta_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
0331 {
0332 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
0333 u16 bridge;
0334
0335
0336 if (state->Vcc == 0)
0337 yenta_set_power(socket, state);
0338
0339 socket->io_irq = state->io_irq;
0340 bridge = config_readw(socket, CB_BRIDGE_CONTROL) & ~(CB_BRIDGE_CRST | CB_BRIDGE_INTR);
0341 if (cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) {
0342 u8 intr;
0343 bridge |= (state->flags & SS_RESET) ? CB_BRIDGE_CRST : 0;
0344
0345
0346 intr = exca_readb(socket, I365_INTCTL);
0347 intr = (intr & ~0xf);
0348 if (!socket->dev->irq) {
0349 intr |= socket->cb_irq ? socket->cb_irq : state->io_irq;
0350 bridge |= CB_BRIDGE_INTR;
0351 }
0352 exca_writeb(socket, I365_INTCTL, intr);
0353 } else {
0354 u8 reg;
0355
0356 reg = exca_readb(socket, I365_INTCTL) & (I365_RING_ENA | I365_INTR_ENA);
0357 reg |= (state->flags & SS_RESET) ? 0 : I365_PC_RESET;
0358 reg |= (state->flags & SS_IOCARD) ? I365_PC_IOCARD : 0;
0359 if (state->io_irq != socket->dev->irq) {
0360 reg |= state->io_irq;
0361 bridge |= CB_BRIDGE_INTR;
0362 }
0363 exca_writeb(socket, I365_INTCTL, reg);
0364
0365 reg = exca_readb(socket, I365_POWER) & (I365_VCC_MASK|I365_VPP1_MASK);
0366 reg |= I365_PWR_NORESET;
0367 if (state->flags & SS_PWR_AUTO)
0368 reg |= I365_PWR_AUTO;
0369 if (state->flags & SS_OUTPUT_ENA)
0370 reg |= I365_PWR_OUT;
0371 if (exca_readb(socket, I365_POWER) != reg)
0372 exca_writeb(socket, I365_POWER, reg);
0373
0374
0375 reg = exca_readb(socket, I365_CSCINT);
0376 reg &= I365_CSC_IRQ_MASK;
0377 reg |= I365_CSC_DETECT;
0378 if (state->flags & SS_IOCARD) {
0379 if (state->csc_mask & SS_STSCHG)
0380 reg |= I365_CSC_STSCHG;
0381 } else {
0382 if (state->csc_mask & SS_BATDEAD)
0383 reg |= I365_CSC_BVD1;
0384 if (state->csc_mask & SS_BATWARN)
0385 reg |= I365_CSC_BVD2;
0386 if (state->csc_mask & SS_READY)
0387 reg |= I365_CSC_READY;
0388 }
0389 exca_writeb(socket, I365_CSCINT, reg);
0390 exca_readb(socket, I365_CSC);
0391 if (sock->zoom_video)
0392 sock->zoom_video(sock, state->flags & SS_ZVCARD);
0393 }
0394 config_writew(socket, CB_BRIDGE_CONTROL, bridge);
0395
0396 cb_writel(socket, CB_SOCKET_EVENT, -1);
0397 cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
0398
0399
0400 if (state->Vcc != 0)
0401 yenta_set_power(socket, state);
0402 return 0;
0403 }
0404
0405 static int yenta_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *io)
0406 {
0407 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
0408 int map;
0409 unsigned char ioctl, addr, enable;
0410
0411 map = io->map;
0412
0413 if (map > 1)
0414 return -EINVAL;
0415
0416 enable = I365_ENA_IO(map);
0417 addr = exca_readb(socket, I365_ADDRWIN);
0418
0419
0420 if (addr & enable) {
0421 addr &= ~enable;
0422 exca_writeb(socket, I365_ADDRWIN, addr);
0423 }
0424
0425 exca_writew(socket, I365_IO(map)+I365_W_START, io->start);
0426 exca_writew(socket, I365_IO(map)+I365_W_STOP, io->stop);
0427
0428 ioctl = exca_readb(socket, I365_IOCTL) & ~I365_IOCTL_MASK(map);
0429 if (io->flags & MAP_0WS)
0430 ioctl |= I365_IOCTL_0WS(map);
0431 if (io->flags & MAP_16BIT)
0432 ioctl |= I365_IOCTL_16BIT(map);
0433 if (io->flags & MAP_AUTOSZ)
0434 ioctl |= I365_IOCTL_IOCS16(map);
0435 exca_writeb(socket, I365_IOCTL, ioctl);
0436
0437 if (io->flags & MAP_ACTIVE)
0438 exca_writeb(socket, I365_ADDRWIN, addr | enable);
0439 return 0;
0440 }
0441
0442 static int yenta_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *mem)
0443 {
0444 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
0445 struct pci_bus_region region;
0446 int map;
0447 unsigned char addr, enable;
0448 unsigned int start, stop, card_start;
0449 unsigned short word;
0450
0451 pcibios_resource_to_bus(socket->dev->bus, ®ion, mem->res);
0452
0453 map = mem->map;
0454 start = region.start;
0455 stop = region.end;
0456 card_start = mem->card_start;
0457
0458 if (map > 4 || start > stop || ((start ^ stop) >> 24) ||
0459 (card_start >> 26) || mem->speed > 1000)
0460 return -EINVAL;
0461
0462 enable = I365_ENA_MEM(map);
0463 addr = exca_readb(socket, I365_ADDRWIN);
0464 if (addr & enable) {
0465 addr &= ~enable;
0466 exca_writeb(socket, I365_ADDRWIN, addr);
0467 }
0468
0469 exca_writeb(socket, CB_MEM_PAGE(map), start >> 24);
0470
0471 word = (start >> 12) & 0x0fff;
0472 if (mem->flags & MAP_16BIT)
0473 word |= I365_MEM_16BIT;
0474 if (mem->flags & MAP_0WS)
0475 word |= I365_MEM_0WS;
0476 exca_writew(socket, I365_MEM(map) + I365_W_START, word);
0477
0478 word = (stop >> 12) & 0x0fff;
0479 switch (to_cycles(mem->speed)) {
0480 case 0:
0481 break;
0482 case 1:
0483 word |= I365_MEM_WS0;
0484 break;
0485 case 2:
0486 word |= I365_MEM_WS1;
0487 break;
0488 default:
0489 word |= I365_MEM_WS1 | I365_MEM_WS0;
0490 break;
0491 }
0492 exca_writew(socket, I365_MEM(map) + I365_W_STOP, word);
0493
0494 word = ((card_start - start) >> 12) & 0x3fff;
0495 if (mem->flags & MAP_WRPROT)
0496 word |= I365_MEM_WRPROT;
0497 if (mem->flags & MAP_ATTRIB)
0498 word |= I365_MEM_REG;
0499 exca_writew(socket, I365_MEM(map) + I365_W_OFF, word);
0500
0501 if (mem->flags & MAP_ACTIVE)
0502 exca_writeb(socket, I365_ADDRWIN, addr | enable);
0503 return 0;
0504 }
0505
0506
0507
0508 static irqreturn_t yenta_interrupt(int irq, void *dev_id)
0509 {
0510 unsigned int events;
0511 struct yenta_socket *socket = (struct yenta_socket *) dev_id;
0512 u8 csc;
0513 u32 cb_event;
0514
0515
0516 cb_event = cb_readl(socket, CB_SOCKET_EVENT);
0517 cb_writel(socket, CB_SOCKET_EVENT, cb_event);
0518
0519 csc = exca_readb(socket, I365_CSC);
0520
0521 if (!(cb_event || csc))
0522 return IRQ_NONE;
0523
0524 events = (cb_event & (CB_CD1EVENT | CB_CD2EVENT)) ? SS_DETECT : 0 ;
0525 events |= (csc & I365_CSC_DETECT) ? SS_DETECT : 0;
0526 if (exca_readb(socket, I365_INTCTL) & I365_PC_IOCARD) {
0527 events |= (csc & I365_CSC_STSCHG) ? SS_STSCHG : 0;
0528 } else {
0529 events |= (csc & I365_CSC_BVD1) ? SS_BATDEAD : 0;
0530 events |= (csc & I365_CSC_BVD2) ? SS_BATWARN : 0;
0531 events |= (csc & I365_CSC_READY) ? SS_READY : 0;
0532 }
0533
0534 if (events)
0535 pcmcia_parse_events(&socket->socket, events);
0536
0537 return IRQ_HANDLED;
0538 }
0539
0540 static void yenta_interrupt_wrapper(struct timer_list *t)
0541 {
0542 struct yenta_socket *socket = from_timer(socket, t, poll_timer);
0543
0544 yenta_interrupt(0, (void *)socket);
0545 socket->poll_timer.expires = jiffies + HZ;
0546 add_timer(&socket->poll_timer);
0547 }
0548
0549 static void yenta_clear_maps(struct yenta_socket *socket)
0550 {
0551 int i;
0552 struct resource res = { .start = 0, .end = 0x0fff };
0553 pccard_io_map io = { 0, 0, 0, 0, 1 };
0554 pccard_mem_map mem = { .res = &res, };
0555
0556 yenta_set_socket(&socket->socket, &dead_socket);
0557 for (i = 0; i < 2; i++) {
0558 io.map = i;
0559 yenta_set_io_map(&socket->socket, &io);
0560 }
0561 for (i = 0; i < 5; i++) {
0562 mem.map = i;
0563 yenta_set_mem_map(&socket->socket, &mem);
0564 }
0565 }
0566
0567
0568 static void yenta_interrogate(struct yenta_socket *socket)
0569 {
0570 u32 state;
0571
0572 state = cb_readl(socket, CB_SOCKET_STATE);
0573 if (!(state & (CB_5VCARD | CB_3VCARD | CB_XVCARD | CB_YVCARD)) ||
0574 (state & (CB_CDETECT1 | CB_CDETECT2 | CB_NOTACARD | CB_BADVCCREQ)) ||
0575 ((state & (CB_16BITCARD | CB_CBCARD)) == (CB_16BITCARD | CB_CBCARD)))
0576 cb_writel(socket, CB_SOCKET_FORCE, CB_CVSTEST);
0577 }
0578
0579
0580 static int yenta_sock_init(struct pcmcia_socket *sock)
0581 {
0582 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
0583
0584 exca_writeb(socket, I365_GBLCTL, 0x00);
0585 exca_writeb(socket, I365_GENCTL, 0x00);
0586
0587
0588 yenta_interrogate(socket);
0589
0590 yenta_clear_maps(socket);
0591
0592 if (socket->type && socket->type->sock_init)
0593 socket->type->sock_init(socket);
0594
0595
0596 cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
0597
0598 return 0;
0599 }
0600
0601 static int yenta_sock_suspend(struct pcmcia_socket *sock)
0602 {
0603 struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
0604
0605
0606 cb_writel(socket, CB_SOCKET_MASK, 0x0);
0607
0608 return 0;
0609 }
0610
0611
0612
0613
0614
0615
0616
0617
0618 #define BRIDGE_MEM_MAX (4*1024*1024)
0619 #define BRIDGE_MEM_ACC (128*1024)
0620 #define BRIDGE_MEM_MIN (16*1024)
0621
0622 #define BRIDGE_IO_MAX 512
0623 #define BRIDGE_IO_ACC 256
0624 #define BRIDGE_IO_MIN 32
0625
0626 #ifndef PCIBIOS_MIN_CARDBUS_IO
0627 #define PCIBIOS_MIN_CARDBUS_IO PCIBIOS_MIN_IO
0628 #endif
0629
0630 static int yenta_search_one_res(struct resource *root, struct resource *res,
0631 u32 min)
0632 {
0633 u32 align, size, start, end;
0634
0635 if (res->flags & IORESOURCE_IO) {
0636 align = 1024;
0637 size = BRIDGE_IO_MAX;
0638 start = PCIBIOS_MIN_CARDBUS_IO;
0639 end = ~0U;
0640 } else {
0641 unsigned long avail = root->end - root->start;
0642 int i;
0643 size = BRIDGE_MEM_MAX;
0644 if (size > avail/8) {
0645 size = (avail+1)/8;
0646
0647 i = 0;
0648 while ((size /= 2) != 0)
0649 i++;
0650 size = 1 << i;
0651 }
0652 if (size < min)
0653 size = min;
0654 align = size;
0655 start = PCIBIOS_MIN_MEM;
0656 end = ~0U;
0657 }
0658
0659 do {
0660 if (allocate_resource(root, res, size, start, end, align,
0661 NULL, NULL) == 0) {
0662 return 1;
0663 }
0664 size = size/2;
0665 align = size;
0666 } while (size >= min);
0667
0668 return 0;
0669 }
0670
0671
0672 static int yenta_search_res(struct yenta_socket *socket, struct resource *res,
0673 u32 min)
0674 {
0675 struct resource *root;
0676 int i;
0677
0678 pci_bus_for_each_resource(socket->dev->bus, root, i) {
0679 if (!root)
0680 continue;
0681
0682 if ((res->flags ^ root->flags) &
0683 (IORESOURCE_IO | IORESOURCE_MEM | IORESOURCE_PREFETCH))
0684 continue;
0685
0686 if (yenta_search_one_res(root, res, min))
0687 return 1;
0688 }
0689 return 0;
0690 }
0691
0692 static int yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned type, int addr_start, int addr_end)
0693 {
0694 struct pci_dev *dev = socket->dev;
0695 struct resource *res;
0696 struct pci_bus_region region;
0697 unsigned mask;
0698
0699 res = &dev->resource[nr];
0700
0701 if (res->parent)
0702 return 0;
0703
0704
0705 mask = ~0xfff;
0706 if (type & IORESOURCE_IO)
0707 mask = ~3;
0708
0709 res->name = dev->subordinate->name;
0710 res->flags = type;
0711
0712 region.start = config_readl(socket, addr_start) & mask;
0713 region.end = config_readl(socket, addr_end) | ~mask;
0714 if (region.start && region.end > region.start && !override_bios) {
0715 pcibios_bus_to_resource(dev->bus, res, ®ion);
0716 if (pci_claim_resource(dev, nr) == 0)
0717 return 0;
0718 dev_info(&dev->dev,
0719 "Preassigned resource %d busy or not available, reconfiguring...\n",
0720 nr);
0721 }
0722
0723 if (type & IORESOURCE_IO) {
0724 if ((yenta_search_res(socket, res, BRIDGE_IO_MAX)) ||
0725 (yenta_search_res(socket, res, BRIDGE_IO_ACC)) ||
0726 (yenta_search_res(socket, res, BRIDGE_IO_MIN)))
0727 return 1;
0728 } else {
0729 if (type & IORESOURCE_PREFETCH) {
0730 if ((yenta_search_res(socket, res, BRIDGE_MEM_MAX)) ||
0731 (yenta_search_res(socket, res, BRIDGE_MEM_ACC)) ||
0732 (yenta_search_res(socket, res, BRIDGE_MEM_MIN)))
0733 return 1;
0734
0735 res->flags = IORESOURCE_MEM;
0736 }
0737 if ((yenta_search_res(socket, res, BRIDGE_MEM_MAX)) ||
0738 (yenta_search_res(socket, res, BRIDGE_MEM_ACC)) ||
0739 (yenta_search_res(socket, res, BRIDGE_MEM_MIN)))
0740 return 1;
0741 }
0742
0743 dev_info(&dev->dev,
0744 "no resource of type %x available, trying to continue...\n",
0745 type);
0746 res->start = res->end = res->flags = 0;
0747 return 0;
0748 }
0749
0750 static void yenta_free_res(struct yenta_socket *socket, int nr)
0751 {
0752 struct pci_dev *dev = socket->dev;
0753 struct resource *res;
0754
0755 res = &dev->resource[nr];
0756 if (res->start != 0 && res->end != 0)
0757 release_resource(res);
0758
0759 res->start = res->end = res->flags = 0;
0760 }
0761
0762
0763
0764
0765 static void yenta_allocate_resources(struct yenta_socket *socket)
0766 {
0767 int program = 0;
0768 program += yenta_allocate_res(socket, PCI_CB_BRIDGE_IO_0_WINDOW,
0769 IORESOURCE_IO,
0770 PCI_CB_IO_BASE_0, PCI_CB_IO_LIMIT_0);
0771 program += yenta_allocate_res(socket, PCI_CB_BRIDGE_IO_1_WINDOW,
0772 IORESOURCE_IO,
0773 PCI_CB_IO_BASE_1, PCI_CB_IO_LIMIT_1);
0774 program += yenta_allocate_res(socket, PCI_CB_BRIDGE_MEM_0_WINDOW,
0775 IORESOURCE_MEM | IORESOURCE_PREFETCH,
0776 PCI_CB_MEMORY_BASE_0, PCI_CB_MEMORY_LIMIT_0);
0777 program += yenta_allocate_res(socket, PCI_CB_BRIDGE_MEM_1_WINDOW,
0778 IORESOURCE_MEM,
0779 PCI_CB_MEMORY_BASE_1, PCI_CB_MEMORY_LIMIT_1);
0780 if (program)
0781 pci_setup_cardbus(socket->dev->subordinate);
0782 }
0783
0784
0785
0786
0787
0788 static void yenta_free_resources(struct yenta_socket *socket)
0789 {
0790 yenta_free_res(socket, PCI_CB_BRIDGE_IO_0_WINDOW);
0791 yenta_free_res(socket, PCI_CB_BRIDGE_IO_1_WINDOW);
0792 yenta_free_res(socket, PCI_CB_BRIDGE_MEM_0_WINDOW);
0793 yenta_free_res(socket, PCI_CB_BRIDGE_MEM_1_WINDOW);
0794 }
0795
0796
0797
0798
0799
0800 static void yenta_close(struct pci_dev *dev)
0801 {
0802 struct yenta_socket *sock = pci_get_drvdata(dev);
0803
0804
0805 device_remove_file(&dev->dev, &dev_attr_yenta_registers);
0806
0807
0808 pcmcia_unregister_socket(&sock->socket);
0809
0810
0811 cb_writel(sock, CB_SOCKET_MASK, 0x0);
0812 exca_writeb(sock, I365_CSCINT, 0);
0813
0814 if (sock->cb_irq)
0815 free_irq(sock->cb_irq, sock);
0816 else
0817 del_timer_sync(&sock->poll_timer);
0818
0819 iounmap(sock->base);
0820 yenta_free_resources(sock);
0821
0822 pci_release_regions(dev);
0823 pci_disable_device(dev);
0824 pci_set_drvdata(dev, NULL);
0825 kfree(sock);
0826 }
0827
0828
0829 static struct pccard_operations yenta_socket_operations = {
0830 .init = yenta_sock_init,
0831 .suspend = yenta_sock_suspend,
0832 .get_status = yenta_get_status,
0833 .set_socket = yenta_set_socket,
0834 .set_io_map = yenta_set_io_map,
0835 .set_mem_map = yenta_set_mem_map,
0836 };
0837
0838
0839 #ifdef CONFIG_YENTA_TI
0840 #include "ti113x.h"
0841 #endif
0842 #ifdef CONFIG_YENTA_RICOH
0843 #include "ricoh.h"
0844 #endif
0845 #ifdef CONFIG_YENTA_TOSHIBA
0846 #include "topic.h"
0847 #endif
0848 #ifdef CONFIG_YENTA_O2
0849 #include "o2micro.h"
0850 #endif
0851
0852 enum {
0853 CARDBUS_TYPE_DEFAULT = -1,
0854 CARDBUS_TYPE_TI,
0855 CARDBUS_TYPE_TI113X,
0856 CARDBUS_TYPE_TI12XX,
0857 CARDBUS_TYPE_TI1250,
0858 CARDBUS_TYPE_RICOH,
0859 CARDBUS_TYPE_TOPIC95,
0860 CARDBUS_TYPE_TOPIC97,
0861 CARDBUS_TYPE_O2MICRO,
0862 CARDBUS_TYPE_ENE,
0863 };
0864
0865
0866
0867
0868
0869 static struct cardbus_type cardbus_type[] = {
0870 #ifdef CONFIG_YENTA_TI
0871 [CARDBUS_TYPE_TI] = {
0872 .override = ti_override,
0873 .save_state = ti_save_state,
0874 .restore_state = ti_restore_state,
0875 .sock_init = ti_init,
0876 },
0877 [CARDBUS_TYPE_TI113X] = {
0878 .override = ti113x_override,
0879 .save_state = ti_save_state,
0880 .restore_state = ti_restore_state,
0881 .sock_init = ti_init,
0882 },
0883 [CARDBUS_TYPE_TI12XX] = {
0884 .override = ti12xx_override,
0885 .save_state = ti_save_state,
0886 .restore_state = ti_restore_state,
0887 .sock_init = ti_init,
0888 },
0889 [CARDBUS_TYPE_TI1250] = {
0890 .override = ti1250_override,
0891 .save_state = ti_save_state,
0892 .restore_state = ti_restore_state,
0893 .sock_init = ti_init,
0894 },
0895 [CARDBUS_TYPE_ENE] = {
0896 .override = ene_override,
0897 .save_state = ti_save_state,
0898 .restore_state = ti_restore_state,
0899 .sock_init = ti_init,
0900 },
0901 #endif
0902 #ifdef CONFIG_YENTA_RICOH
0903 [CARDBUS_TYPE_RICOH] = {
0904 .override = ricoh_override,
0905 .save_state = ricoh_save_state,
0906 .restore_state = ricoh_restore_state,
0907 },
0908 #endif
0909 #ifdef CONFIG_YENTA_TOSHIBA
0910 [CARDBUS_TYPE_TOPIC95] = {
0911 .override = topic95_override,
0912 },
0913 [CARDBUS_TYPE_TOPIC97] = {
0914 .override = topic97_override,
0915 },
0916 #endif
0917 #ifdef CONFIG_YENTA_O2
0918 [CARDBUS_TYPE_O2MICRO] = {
0919 .override = o2micro_override,
0920 .restore_state = o2micro_restore_state,
0921 },
0922 #endif
0923 };
0924
0925
0926 static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask)
0927 {
0928 int i;
0929 unsigned long val;
0930 u32 mask;
0931 u8 reg;
0932
0933
0934
0935
0936
0937 cb_writel(socket, CB_SOCKET_EVENT, -1);
0938 cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
0939 reg = exca_readb(socket, I365_CSCINT);
0940 exca_writeb(socket, I365_CSCINT, 0);
0941 val = probe_irq_on() & isa_irq_mask;
0942 for (i = 1; i < 16; i++) {
0943 if (!((val >> i) & 1))
0944 continue;
0945 exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG | (i << 4));
0946 cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
0947 udelay(100);
0948 cb_writel(socket, CB_SOCKET_EVENT, -1);
0949 }
0950 cb_writel(socket, CB_SOCKET_MASK, 0);
0951 exca_writeb(socket, I365_CSCINT, reg);
0952
0953 mask = probe_irq_mask(val) & 0xffff;
0954
0955 return mask;
0956 }
0957
0958
0959
0960
0961
0962
0963 #ifdef CONFIG_YENTA_TI
0964
0965
0966 static irqreturn_t yenta_probe_handler(int irq, void *dev_id)
0967 {
0968 struct yenta_socket *socket = (struct yenta_socket *) dev_id;
0969 u8 csc;
0970 u32 cb_event;
0971
0972
0973 cb_event = cb_readl(socket, CB_SOCKET_EVENT);
0974 cb_writel(socket, CB_SOCKET_EVENT, -1);
0975 csc = exca_readb(socket, I365_CSC);
0976
0977 if (cb_event || csc) {
0978 socket->probe_status = 1;
0979 return IRQ_HANDLED;
0980 }
0981
0982 return IRQ_NONE;
0983 }
0984
0985
0986 static int yenta_probe_cb_irq(struct yenta_socket *socket)
0987 {
0988 u8 reg = 0;
0989
0990 if (!socket->cb_irq)
0991 return -1;
0992
0993 socket->probe_status = 0;
0994
0995 if (request_irq(socket->cb_irq, yenta_probe_handler, IRQF_SHARED, "yenta", socket)) {
0996 dev_warn(&socket->dev->dev,
0997 "request_irq() in yenta_probe_cb_irq() failed!\n");
0998 return -1;
0999 }
1000
1001
1002 if (!socket->dev->irq)
1003 reg = exca_readb(socket, I365_CSCINT);
1004 exca_writeb(socket, I365_CSCINT, reg | I365_CSC_STSCHG);
1005 cb_writel(socket, CB_SOCKET_EVENT, -1);
1006 cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
1007 cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
1008
1009 msleep(100);
1010
1011
1012 cb_writel(socket, CB_SOCKET_MASK, 0);
1013 exca_writeb(socket, I365_CSCINT, reg);
1014 cb_writel(socket, CB_SOCKET_EVENT, -1);
1015 exca_readb(socket, I365_CSC);
1016
1017 free_irq(socket->cb_irq, socket);
1018
1019 return (int) socket->probe_status;
1020 }
1021
1022 #endif
1023
1024
1025
1026
1027
1028 static void yenta_get_socket_capabilities(struct yenta_socket *socket, u32 isa_irq_mask)
1029 {
1030 socket->socket.pci_irq = socket->cb_irq;
1031 if (isa_probe)
1032 socket->socket.irq_mask = yenta_probe_irq(socket, isa_irq_mask);
1033 else
1034 socket->socket.irq_mask = 0;
1035
1036 dev_info(&socket->dev->dev, "ISA IRQ mask 0x%04x, PCI irq %d\n",
1037 socket->socket.irq_mask, socket->cb_irq);
1038 }
1039
1040
1041
1042
1043 static void yenta_config_init(struct yenta_socket *socket)
1044 {
1045 u16 bridge;
1046 struct pci_dev *dev = socket->dev;
1047 struct pci_bus_region region;
1048
1049 pcibios_resource_to_bus(socket->dev->bus, ®ion, &dev->resource[0]);
1050
1051 config_writel(socket, CB_LEGACY_MODE_BASE, 0);
1052 config_writel(socket, PCI_BASE_ADDRESS_0, region.start);
1053 config_writew(socket, PCI_COMMAND,
1054 PCI_COMMAND_IO |
1055 PCI_COMMAND_MEMORY |
1056 PCI_COMMAND_MASTER |
1057 PCI_COMMAND_WAIT);
1058
1059
1060 config_writeb(socket, PCI_CACHE_LINE_SIZE, L1_CACHE_BYTES / 4);
1061 config_writeb(socket, PCI_LATENCY_TIMER, 168);
1062 config_writel(socket, PCI_PRIMARY_BUS,
1063 (176 << 24) |
1064 ((unsigned int)dev->subordinate->busn_res.end << 16) |
1065 ((unsigned int)dev->subordinate->busn_res.start << 8) |
1066 dev->subordinate->primary);
1067
1068
1069
1070
1071
1072
1073
1074 bridge = config_readw(socket, CB_BRIDGE_CONTROL);
1075 bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN);
1076 bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN;
1077 config_writew(socket, CB_BRIDGE_CONTROL, bridge);
1078 }
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090 static void yenta_fixup_parent_bridge(struct pci_bus *cardbus_bridge)
1091 {
1092 struct pci_bus *sibling;
1093 unsigned char upper_limit;
1094
1095
1096
1097
1098
1099 struct pci_bus *bridge_to_fix = cardbus_bridge->parent;
1100
1101
1102 if (bridge_to_fix->busn_res.end >= cardbus_bridge->busn_res.end)
1103 return;
1104
1105 if (!bridge_to_fix->parent)
1106 return;
1107
1108
1109 upper_limit = bridge_to_fix->parent->busn_res.end;
1110
1111
1112 list_for_each_entry(sibling, &bridge_to_fix->parent->children,
1113 node) {
1114
1115
1116
1117
1118
1119
1120 if (sibling->busn_res.start > bridge_to_fix->busn_res.end
1121 && sibling->busn_res.start <= upper_limit)
1122 upper_limit = sibling->busn_res.start - 1;
1123 }
1124
1125
1126 if (cardbus_bridge->busn_res.end > upper_limit)
1127 dev_warn(&cardbus_bridge->dev,
1128 "Upper limit for fixing this bridge's parent bridge: #%02x\n",
1129 upper_limit);
1130
1131
1132 if (bridge_to_fix->busn_res.end < upper_limit) {
1133
1134
1135 unsigned char subordinate_to_assign =
1136 min_t(int, cardbus_bridge->busn_res.end, upper_limit);
1137
1138 dev_info(&bridge_to_fix->dev,
1139 "Raising subordinate bus# of parent bus (#%02x) from #%02x to #%02x\n",
1140 bridge_to_fix->number,
1141 (int)bridge_to_fix->busn_res.end,
1142 subordinate_to_assign);
1143
1144
1145 bridge_to_fix->busn_res.end = subordinate_to_assign;
1146
1147
1148 pci_write_config_byte(bridge_to_fix->self,
1149 PCI_SUBORDINATE_BUS, bridge_to_fix->busn_res.end);
1150 }
1151 }
1152
1153
1154
1155
1156
1157
1158 static int yenta_probe(struct pci_dev *dev, const struct pci_device_id *id)
1159 {
1160 struct yenta_socket *socket;
1161 int ret;
1162
1163
1164
1165
1166
1167
1168 if (!dev->subordinate) {
1169 dev_err(&dev->dev, "no bus associated! (try 'pci=assign-busses')\n");
1170 return -ENODEV;
1171 }
1172
1173 socket = kzalloc(sizeof(struct yenta_socket), GFP_KERNEL);
1174 if (!socket)
1175 return -ENOMEM;
1176
1177
1178 socket->socket.ops = ¥ta_socket_operations;
1179 socket->socket.resource_ops = &pccard_nonstatic_ops;
1180 socket->socket.dev.parent = &dev->dev;
1181 socket->socket.driver_data = socket;
1182 socket->socket.owner = THIS_MODULE;
1183 socket->socket.features = SS_CAP_PAGE_REGS | SS_CAP_PCCARD;
1184 socket->socket.map_size = 0x1000;
1185 socket->socket.cb_dev = dev;
1186
1187
1188 socket->dev = dev;
1189 pci_set_drvdata(dev, socket);
1190
1191
1192
1193
1194 if (pci_enable_device(dev)) {
1195 ret = -EBUSY;
1196 goto free;
1197 }
1198
1199 ret = pci_request_regions(dev, "yenta_socket");
1200 if (ret)
1201 goto disable;
1202
1203 if (!pci_resource_start(dev, 0)) {
1204 dev_err(&dev->dev, "No cardbus resource!\n");
1205 ret = -ENODEV;
1206 goto release;
1207 }
1208
1209
1210
1211
1212
1213 socket->base = ioremap(pci_resource_start(dev, 0), 0x1000);
1214 if (!socket->base) {
1215 ret = -ENOMEM;
1216 goto release;
1217 }
1218
1219
1220
1221
1222
1223 dev_info(&dev->dev, "CardBus bridge found [%04x:%04x]\n",
1224 dev->subsystem_vendor, dev->subsystem_device);
1225
1226 yenta_config_init(socket);
1227
1228
1229 cb_writel(socket, CB_SOCKET_MASK, 0x0);
1230
1231
1232 yenta_allocate_resources(socket);
1233
1234 socket->cb_irq = dev->irq;
1235
1236
1237 if (id->driver_data != CARDBUS_TYPE_DEFAULT &&
1238 id->driver_data < ARRAY_SIZE(cardbus_type)) {
1239 socket->type = &cardbus_type[id->driver_data];
1240
1241 ret = socket->type->override(socket);
1242 if (ret < 0)
1243 goto unmap;
1244 }
1245
1246
1247
1248 if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, IRQF_SHARED, "yenta", socket)) {
1249
1250 socket->cb_irq = 0;
1251 timer_setup(&socket->poll_timer, yenta_interrupt_wrapper, 0);
1252 mod_timer(&socket->poll_timer, jiffies + HZ);
1253 dev_info(&dev->dev,
1254 "no PCI IRQ, CardBus support disabled for this socket.\n");
1255 dev_info(&dev->dev,
1256 "check your BIOS CardBus, BIOS IRQ or ACPI settings.\n");
1257 } else {
1258 socket->socket.features |= SS_CAP_CARDBUS;
1259 }
1260
1261
1262 yenta_interrogate(socket);
1263 yenta_get_socket_capabilities(socket, isa_interrupts);
1264 dev_info(&dev->dev, "Socket status: %08x\n",
1265 cb_readl(socket, CB_SOCKET_STATE));
1266
1267 yenta_fixup_parent_bridge(dev->subordinate);
1268
1269
1270 ret = pcmcia_register_socket(&socket->socket);
1271 if (ret)
1272 goto free_irq;
1273
1274
1275 ret = device_create_file(&dev->dev, &dev_attr_yenta_registers);
1276 if (ret)
1277 goto unregister_socket;
1278
1279 return ret;
1280
1281
1282 unregister_socket:
1283 pcmcia_unregister_socket(&socket->socket);
1284 free_irq:
1285 if (socket->cb_irq)
1286 free_irq(socket->cb_irq, socket);
1287 else
1288 del_timer_sync(&socket->poll_timer);
1289 unmap:
1290 iounmap(socket->base);
1291 yenta_free_resources(socket);
1292 release:
1293 pci_release_regions(dev);
1294 disable:
1295 pci_disable_device(dev);
1296 free:
1297 pci_set_drvdata(dev, NULL);
1298 kfree(socket);
1299 return ret;
1300 }
1301
1302 #ifdef CONFIG_PM_SLEEP
1303 static int yenta_dev_suspend_noirq(struct device *dev)
1304 {
1305 struct pci_dev *pdev = to_pci_dev(dev);
1306 struct yenta_socket *socket = pci_get_drvdata(pdev);
1307
1308 if (!socket)
1309 return 0;
1310
1311 if (socket->type && socket->type->save_state)
1312 socket->type->save_state(socket);
1313
1314 pci_save_state(pdev);
1315 pci_read_config_dword(pdev, 16*4, &socket->saved_state[0]);
1316 pci_read_config_dword(pdev, 17*4, &socket->saved_state[1]);
1317 pci_disable_device(pdev);
1318
1319 return 0;
1320 }
1321
1322 static int yenta_dev_resume_noirq(struct device *dev)
1323 {
1324 struct pci_dev *pdev = to_pci_dev(dev);
1325 struct yenta_socket *socket = pci_get_drvdata(pdev);
1326 int ret;
1327
1328 if (!socket)
1329 return 0;
1330
1331 pci_write_config_dword(pdev, 16*4, socket->saved_state[0]);
1332 pci_write_config_dword(pdev, 17*4, socket->saved_state[1]);
1333
1334 ret = pci_enable_device(pdev);
1335 if (ret)
1336 return ret;
1337
1338 pci_set_master(pdev);
1339
1340 if (socket->type && socket->type->restore_state)
1341 socket->type->restore_state(socket);
1342
1343 return 0;
1344 }
1345
1346 static const struct dev_pm_ops yenta_pm_ops = {
1347 SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(yenta_dev_suspend_noirq, yenta_dev_resume_noirq)
1348 };
1349
1350 #define YENTA_PM_OPS (¥ta_pm_ops)
1351 #else
1352 #define YENTA_PM_OPS NULL
1353 #endif
1354
1355 #define CB_ID(vend, dev, type) \
1356 { \
1357 .vendor = vend, \
1358 .device = dev, \
1359 .subvendor = PCI_ANY_ID, \
1360 .subdevice = PCI_ANY_ID, \
1361 .class = PCI_CLASS_BRIDGE_CARDBUS << 8, \
1362 .class_mask = ~0, \
1363 .driver_data = CARDBUS_TYPE_##type, \
1364 }
1365
1366 static const struct pci_device_id yenta_table[] = {
1367 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1031, TI),
1368
1369
1370
1371
1372
1373
1374 #ifdef CONFIG_YENTA_TI
1375 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1210, TI),
1376
1377 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1130, TI113X),
1378 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1131, TI113X),
1379
1380 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1211, TI12XX),
1381 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1220, TI12XX),
1382 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1221, TI12XX),
1383 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1225, TI12XX),
1384 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1251A, TI12XX),
1385 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1251B, TI12XX),
1386 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1420, TI12XX),
1387 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1450, TI12XX),
1388 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1451A, TI12XX),
1389 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1510, TI12XX),
1390 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1520, TI12XX),
1391 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1620, TI12XX),
1392 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4410, TI12XX),
1393 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4450, TI12XX),
1394 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4451, TI12XX),
1395 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4510, TI12XX),
1396 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4520, TI12XX),
1397
1398 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1250, TI1250),
1399 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1410, TI1250),
1400
1401 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX21_XX11, TI12XX),
1402 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X515, TI12XX),
1403 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX12, TI12XX),
1404 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X420, TI12XX),
1405 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X620, TI12XX),
1406 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7410, TI12XX),
1407 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7510, TI12XX),
1408 CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7610, TI12XX),
1409
1410 CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_710, ENE),
1411 CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_712, ENE),
1412 CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_720, ENE),
1413 CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_722, ENE),
1414 CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1211, ENE),
1415 CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1225, ENE),
1416 CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1410, ENE),
1417 CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1420, ENE),
1418 #endif
1419
1420 #ifdef CONFIG_YENTA_RICOH
1421 CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C465, RICOH),
1422 CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C466, RICOH),
1423 CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C475, RICOH),
1424 CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C476, RICOH),
1425 CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C478, RICOH),
1426 #endif
1427
1428 #ifdef CONFIG_YENTA_TOSHIBA
1429 CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC95, TOPIC95),
1430 CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC97, TOPIC97),
1431 CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC100, TOPIC97),
1432 #endif
1433
1434 #ifdef CONFIG_YENTA_O2
1435 CB_ID(PCI_VENDOR_ID_O2, PCI_ANY_ID, O2MICRO),
1436 #endif
1437
1438
1439 CB_ID(PCI_ANY_ID, PCI_ANY_ID, DEFAULT),
1440 { }
1441 };
1442 MODULE_DEVICE_TABLE(pci, yenta_table);
1443
1444
1445 static struct pci_driver yenta_cardbus_driver = {
1446 .name = "yenta_cardbus",
1447 .id_table = yenta_table,
1448 .probe = yenta_probe,
1449 .remove = yenta_close,
1450 .driver.pm = YENTA_PM_OPS,
1451 };
1452
1453 module_pci_driver(yenta_cardbus_driver);
1454
1455 MODULE_LICENSE("GPL");