yenta_socket.c 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301
  1. /*
  2. * Regular cardbus driver ("yenta_socket")
  3. *
  4. * (C) Copyright 1999, 2000 Linus Torvalds
  5. *
  6. * Changelog:
  7. * Aug 2002: Manfred Spraul <manfred@colorfullife.com>
  8. * Dynamically adjust the size of the bridge resource
  9. *
  10. * May 2003: Dominik Brodowski <linux@brodo.de>
  11. * Merge pci_socket.c and yenta.c into one file
  12. */
  13. #include <linux/init.h>
  14. #include <linux/pci.h>
  15. #include <linux/sched.h>
  16. #include <linux/workqueue.h>
  17. #include <linux/interrupt.h>
  18. #include <linux/delay.h>
  19. #include <linux/module.h>
  20. #include <pcmcia/cs_types.h>
  21. #include <pcmcia/ss.h>
  22. #include <pcmcia/cs.h>
  23. #include <asm/io.h>
  24. #include "yenta_socket.h"
  25. #include "i82365.h"
  26. static int disable_clkrun;
  27. module_param(disable_clkrun, bool, 0444);
  28. MODULE_PARM_DESC(disable_clkrun, "If PC card doesn't function properly, please try this option");
  29. static int isa_probe = 1;
  30. module_param(isa_probe, bool, 0444);
  31. MODULE_PARM_DESC(isa_probe, "If set ISA interrupts are probed (default). Set to N to disable probing");
  32. static int pwr_irqs_off;
  33. module_param(pwr_irqs_off, bool, 0644);
  34. MODULE_PARM_DESC(pwr_irqs_off, "Force IRQs off during power-on of slot. Use only when seeing IRQ storms!");
  35. #if 0
  36. #define debug(x,args...) printk(KERN_DEBUG "%s: " x, __func__ , ##args)
  37. #else
  38. #define debug(x,args...)
  39. #endif
  40. /* Don't ask.. */
  41. #define to_cycles(ns) ((ns)/120)
  42. #define to_ns(cycles) ((cycles)*120)
  43. /**
  44. * yenta PCI irq probing.
  45. * currently only used in the TI/EnE initialization code
  46. */
  47. #ifdef CONFIG_YENTA_TI
  48. static int yenta_probe_cb_irq(struct yenta_socket *socket);
  49. #endif
  50. static unsigned int override_bios;
  51. module_param(override_bios, uint, 0000);
  52. MODULE_PARM_DESC (override_bios, "yenta ignore bios resource allocation");
  53. /*
  54. * Generate easy-to-use ways of reading a cardbus sockets
  55. * regular memory space ("cb_xxx"), configuration space
  56. * ("config_xxx") and compatibility space ("exca_xxxx")
  57. */
  58. static inline u32 cb_readl(struct yenta_socket *socket, unsigned reg)
  59. {
  60. u32 val = readl(socket->base + reg);
  61. debug("%p %04x %08x\n", socket, reg, val);
  62. return val;
  63. }
  64. static inline void cb_writel(struct yenta_socket *socket, unsigned reg, u32 val)
  65. {
  66. debug("%p %04x %08x\n", socket, reg, val);
  67. writel(val, socket->base + reg);
  68. readl(socket->base + reg); /* avoid problems with PCI write posting */
  69. }
  70. static inline u8 config_readb(struct yenta_socket *socket, unsigned offset)
  71. {
  72. u8 val;
  73. pci_read_config_byte(socket->dev, offset, &val);
  74. debug("%p %04x %02x\n", socket, offset, val);
  75. return val;
  76. }
  77. static inline u16 config_readw(struct yenta_socket *socket, unsigned offset)
  78. {
  79. u16 val;
  80. pci_read_config_word(socket->dev, offset, &val);
  81. debug("%p %04x %04x\n", socket, offset, val);
  82. return val;
  83. }
  84. static inline u32 config_readl(struct yenta_socket *socket, unsigned offset)
  85. {
  86. u32 val;
  87. pci_read_config_dword(socket->dev, offset, &val);
  88. debug("%p %04x %08x\n", socket, offset, val);
  89. return val;
  90. }
  91. static inline void config_writeb(struct yenta_socket *socket, unsigned offset, u8 val)
  92. {
  93. debug("%p %04x %02x\n", socket, offset, val);
  94. pci_write_config_byte(socket->dev, offset, val);
  95. }
  96. static inline void config_writew(struct yenta_socket *socket, unsigned offset, u16 val)
  97. {
  98. debug("%p %04x %04x\n", socket, offset, val);
  99. pci_write_config_word(socket->dev, offset, val);
  100. }
  101. static inline void config_writel(struct yenta_socket *socket, unsigned offset, u32 val)
  102. {
  103. debug("%p %04x %08x\n", socket, offset, val);
  104. pci_write_config_dword(socket->dev, offset, val);
  105. }
  106. static inline u8 exca_readb(struct yenta_socket *socket, unsigned reg)
  107. {
  108. u8 val = readb(socket->base + 0x800 + reg);
  109. debug("%p %04x %02x\n", socket, reg, val);
  110. return val;
  111. }
  112. static inline u8 exca_readw(struct yenta_socket *socket, unsigned reg)
  113. {
  114. u16 val;
  115. val = readb(socket->base + 0x800 + reg);
  116. val |= readb(socket->base + 0x800 + reg + 1) << 8;
  117. debug("%p %04x %04x\n", socket, reg, val);
  118. return val;
  119. }
  120. static inline void exca_writeb(struct yenta_socket *socket, unsigned reg, u8 val)
  121. {
  122. debug("%p %04x %02x\n", socket, reg, val);
  123. writeb(val, socket->base + 0x800 + reg);
  124. readb(socket->base + 0x800 + reg); /* PCI write posting... */
  125. }
  126. static void exca_writew(struct yenta_socket *socket, unsigned reg, u16 val)
  127. {
  128. debug("%p %04x %04x\n", socket, reg, val);
  129. writeb(val, socket->base + 0x800 + reg);
  130. writeb(val >> 8, socket->base + 0x800 + reg + 1);
  131. /* PCI write posting... */
  132. readb(socket->base + 0x800 + reg);
  133. readb(socket->base + 0x800 + reg + 1);
  134. }
  135. static ssize_t show_yenta_registers(struct device *yentadev, struct device_attribute *attr, char *buf)
  136. {
  137. struct pci_dev *dev = to_pci_dev(yentadev);
  138. struct yenta_socket *socket = pci_get_drvdata(dev);
  139. int offset = 0, i;
  140. offset = snprintf(buf, PAGE_SIZE, "CB registers:");
  141. for (i = 0; i < 0x24; i += 4) {
  142. unsigned val;
  143. if (!(i & 15))
  144. offset += snprintf(buf + offset, PAGE_SIZE - offset, "\n%02x:", i);
  145. val = cb_readl(socket, i);
  146. offset += snprintf(buf + offset, PAGE_SIZE - offset, " %08x", val);
  147. }
  148. offset += snprintf(buf + offset, PAGE_SIZE - offset, "\n\nExCA registers:");
  149. for (i = 0; i < 0x45; i++) {
  150. unsigned char val;
  151. if (!(i & 7)) {
  152. if (i & 8) {
  153. memcpy(buf + offset, " -", 2);
  154. offset += 2;
  155. } else
  156. offset += snprintf(buf + offset, PAGE_SIZE - offset, "\n%02x:", i);
  157. }
  158. val = exca_readb(socket, i);
  159. offset += snprintf(buf + offset, PAGE_SIZE - offset, " %02x", val);
  160. }
  161. buf[offset++] = '\n';
  162. return offset;
  163. }
  164. static DEVICE_ATTR(yenta_registers, S_IRUSR, show_yenta_registers, NULL);
  165. /*
  166. * Ugh, mixed-mode cardbus and 16-bit pccard state: things depend
  167. * on what kind of card is inserted..
  168. */
  169. static int yenta_get_status(struct pcmcia_socket *sock, unsigned int *value)
  170. {
  171. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  172. unsigned int val;
  173. u32 state = cb_readl(socket, CB_SOCKET_STATE);
  174. val = (state & CB_3VCARD) ? SS_3VCARD : 0;
  175. val |= (state & CB_XVCARD) ? SS_XVCARD : 0;
  176. val |= (state & (CB_5VCARD | CB_3VCARD | CB_XVCARD | CB_YVCARD)) ? 0 : SS_PENDING;
  177. val |= (state & (CB_CDETECT1 | CB_CDETECT2)) ? SS_PENDING : 0;
  178. if (state & CB_CBCARD) {
  179. val |= SS_CARDBUS;
  180. val |= (state & CB_CARDSTS) ? SS_STSCHG : 0;
  181. val |= (state & (CB_CDETECT1 | CB_CDETECT2)) ? 0 : SS_DETECT;
  182. val |= (state & CB_PWRCYCLE) ? SS_POWERON | SS_READY : 0;
  183. } else if (state & CB_16BITCARD) {
  184. u8 status = exca_readb(socket, I365_STATUS);
  185. val |= ((status & I365_CS_DETECT) == I365_CS_DETECT) ? SS_DETECT : 0;
  186. if (exca_readb(socket, I365_INTCTL) & I365_PC_IOCARD) {
  187. val |= (status & I365_CS_STSCHG) ? 0 : SS_STSCHG;
  188. } else {
  189. val |= (status & I365_CS_BVD1) ? 0 : SS_BATDEAD;
  190. val |= (status & I365_CS_BVD2) ? 0 : SS_BATWARN;
  191. }
  192. val |= (status & I365_CS_WRPROT) ? SS_WRPROT : 0;
  193. val |= (status & I365_CS_READY) ? SS_READY : 0;
  194. val |= (status & I365_CS_POWERON) ? SS_POWERON : 0;
  195. }
  196. *value = val;
  197. return 0;
  198. }
  199. static void yenta_set_power(struct yenta_socket *socket, socket_state_t *state)
  200. {
  201. /* some birdges require to use the ExCA registers to power 16bit cards */
  202. if (!(cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) &&
  203. (socket->flags & YENTA_16BIT_POWER_EXCA)) {
  204. u8 reg, old;
  205. reg = old = exca_readb(socket, I365_POWER);
  206. reg &= ~(I365_VCC_MASK | I365_VPP1_MASK | I365_VPP2_MASK);
  207. /* i82365SL-DF style */
  208. if (socket->flags & YENTA_16BIT_POWER_DF) {
  209. switch (state->Vcc) {
  210. case 33: reg |= I365_VCC_3V; break;
  211. case 50: reg |= I365_VCC_5V; break;
  212. default: reg = 0; break;
  213. }
  214. switch (state->Vpp) {
  215. case 33:
  216. case 50: reg |= I365_VPP1_5V; break;
  217. case 120: reg |= I365_VPP1_12V; break;
  218. }
  219. } else {
  220. /* i82365SL-B style */
  221. switch (state->Vcc) {
  222. case 50: reg |= I365_VCC_5V; break;
  223. default: reg = 0; break;
  224. }
  225. switch (state->Vpp) {
  226. case 50: reg |= I365_VPP1_5V | I365_VPP2_5V; break;
  227. case 120: reg |= I365_VPP1_12V | I365_VPP2_12V; break;
  228. }
  229. }
  230. if (reg != old)
  231. exca_writeb(socket, I365_POWER, reg);
  232. } else {
  233. u32 reg = 0; /* CB_SC_STPCLK? */
  234. switch (state->Vcc) {
  235. case 33: reg = CB_SC_VCC_3V; break;
  236. case 50: reg = CB_SC_VCC_5V; break;
  237. default: reg = 0; break;
  238. }
  239. switch (state->Vpp) {
  240. case 33: reg |= CB_SC_VPP_3V; break;
  241. case 50: reg |= CB_SC_VPP_5V; break;
  242. case 120: reg |= CB_SC_VPP_12V; break;
  243. }
  244. if (reg != cb_readl(socket, CB_SOCKET_CONTROL))
  245. cb_writel(socket, CB_SOCKET_CONTROL, reg);
  246. }
  247. }
  248. static int yenta_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
  249. {
  250. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  251. u16 bridge;
  252. yenta_set_power(socket, state);
  253. socket->io_irq = state->io_irq;
  254. bridge = config_readw(socket, CB_BRIDGE_CONTROL) & ~(CB_BRIDGE_CRST | CB_BRIDGE_INTR);
  255. if (cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) {
  256. u8 intr;
  257. bridge |= (state->flags & SS_RESET) ? CB_BRIDGE_CRST : 0;
  258. /* ISA interrupt control? */
  259. intr = exca_readb(socket, I365_INTCTL);
  260. intr = (intr & ~0xf);
  261. if (!socket->cb_irq) {
  262. intr |= state->io_irq;
  263. bridge |= CB_BRIDGE_INTR;
  264. }
  265. exca_writeb(socket, I365_INTCTL, intr);
  266. } else {
  267. u8 reg;
  268. reg = exca_readb(socket, I365_INTCTL) & (I365_RING_ENA | I365_INTR_ENA);
  269. reg |= (state->flags & SS_RESET) ? 0 : I365_PC_RESET;
  270. reg |= (state->flags & SS_IOCARD) ? I365_PC_IOCARD : 0;
  271. if (state->io_irq != socket->cb_irq) {
  272. reg |= state->io_irq;
  273. bridge |= CB_BRIDGE_INTR;
  274. }
  275. exca_writeb(socket, I365_INTCTL, reg);
  276. reg = exca_readb(socket, I365_POWER) & (I365_VCC_MASK|I365_VPP1_MASK);
  277. reg |= I365_PWR_NORESET;
  278. if (state->flags & SS_PWR_AUTO) reg |= I365_PWR_AUTO;
  279. if (state->flags & SS_OUTPUT_ENA) reg |= I365_PWR_OUT;
  280. if (exca_readb(socket, I365_POWER) != reg)
  281. exca_writeb(socket, I365_POWER, reg);
  282. /* CSC interrupt: no ISA irq for CSC */
  283. reg = I365_CSC_DETECT;
  284. if (state->flags & SS_IOCARD) {
  285. if (state->csc_mask & SS_STSCHG) reg |= I365_CSC_STSCHG;
  286. } else {
  287. if (state->csc_mask & SS_BATDEAD) reg |= I365_CSC_BVD1;
  288. if (state->csc_mask & SS_BATWARN) reg |= I365_CSC_BVD2;
  289. if (state->csc_mask & SS_READY) reg |= I365_CSC_READY;
  290. }
  291. exca_writeb(socket, I365_CSCINT, reg);
  292. exca_readb(socket, I365_CSC);
  293. if(sock->zoom_video)
  294. sock->zoom_video(sock, state->flags & SS_ZVCARD);
  295. }
  296. config_writew(socket, CB_BRIDGE_CONTROL, bridge);
  297. /* Socket event mask: get card insert/remove events.. */
  298. cb_writel(socket, CB_SOCKET_EVENT, -1);
  299. cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
  300. return 0;
  301. }
  302. static int yenta_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *io)
  303. {
  304. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  305. int map;
  306. unsigned char ioctl, addr, enable;
  307. map = io->map;
  308. if (map > 1)
  309. return -EINVAL;
  310. enable = I365_ENA_IO(map);
  311. addr = exca_readb(socket, I365_ADDRWIN);
  312. /* Disable the window before changing it.. */
  313. if (addr & enable) {
  314. addr &= ~enable;
  315. exca_writeb(socket, I365_ADDRWIN, addr);
  316. }
  317. exca_writew(socket, I365_IO(map)+I365_W_START, io->start);
  318. exca_writew(socket, I365_IO(map)+I365_W_STOP, io->stop);
  319. ioctl = exca_readb(socket, I365_IOCTL) & ~I365_IOCTL_MASK(map);
  320. if (io->flags & MAP_0WS) ioctl |= I365_IOCTL_0WS(map);
  321. if (io->flags & MAP_16BIT) ioctl |= I365_IOCTL_16BIT(map);
  322. if (io->flags & MAP_AUTOSZ) ioctl |= I365_IOCTL_IOCS16(map);
  323. exca_writeb(socket, I365_IOCTL, ioctl);
  324. if (io->flags & MAP_ACTIVE)
  325. exca_writeb(socket, I365_ADDRWIN, addr | enable);
  326. return 0;
  327. }
  328. static int yenta_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *mem)
  329. {
  330. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  331. struct pci_bus_region region;
  332. int map;
  333. unsigned char addr, enable;
  334. unsigned int start, stop, card_start;
  335. unsigned short word;
  336. pcibios_resource_to_bus(socket->dev, &region, mem->res);
  337. map = mem->map;
  338. start = region.start;
  339. stop = region.end;
  340. card_start = mem->card_start;
  341. if (map > 4 || start > stop || ((start ^ stop) >> 24) ||
  342. (card_start >> 26) || mem->speed > 1000)
  343. return -EINVAL;
  344. enable = I365_ENA_MEM(map);
  345. addr = exca_readb(socket, I365_ADDRWIN);
  346. if (addr & enable) {
  347. addr &= ~enable;
  348. exca_writeb(socket, I365_ADDRWIN, addr);
  349. }
  350. exca_writeb(socket, CB_MEM_PAGE(map), start >> 24);
  351. word = (start >> 12) & 0x0fff;
  352. if (mem->flags & MAP_16BIT)
  353. word |= I365_MEM_16BIT;
  354. if (mem->flags & MAP_0WS)
  355. word |= I365_MEM_0WS;
  356. exca_writew(socket, I365_MEM(map) + I365_W_START, word);
  357. word = (stop >> 12) & 0x0fff;
  358. switch (to_cycles(mem->speed)) {
  359. case 0: break;
  360. case 1: word |= I365_MEM_WS0; break;
  361. case 2: word |= I365_MEM_WS1; break;
  362. default: word |= I365_MEM_WS1 | I365_MEM_WS0; break;
  363. }
  364. exca_writew(socket, I365_MEM(map) + I365_W_STOP, word);
  365. word = ((card_start - start) >> 12) & 0x3fff;
  366. if (mem->flags & MAP_WRPROT)
  367. word |= I365_MEM_WRPROT;
  368. if (mem->flags & MAP_ATTRIB)
  369. word |= I365_MEM_REG;
  370. exca_writew(socket, I365_MEM(map) + I365_W_OFF, word);
  371. if (mem->flags & MAP_ACTIVE)
  372. exca_writeb(socket, I365_ADDRWIN, addr | enable);
  373. return 0;
  374. }
  375. static irqreturn_t yenta_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  376. {
  377. unsigned int events;
  378. struct yenta_socket *socket = (struct yenta_socket *) dev_id;
  379. u8 csc;
  380. u32 cb_event;
  381. /* Clear interrupt status for the event */
  382. cb_event = cb_readl(socket, CB_SOCKET_EVENT);
  383. cb_writel(socket, CB_SOCKET_EVENT, cb_event);
  384. csc = exca_readb(socket, I365_CSC);
  385. if (!(cb_event || csc))
  386. return IRQ_NONE;
  387. events = (cb_event & (CB_CD1EVENT | CB_CD2EVENT)) ? SS_DETECT : 0 ;
  388. events |= (csc & I365_CSC_DETECT) ? SS_DETECT : 0;
  389. if (exca_readb(socket, I365_INTCTL) & I365_PC_IOCARD) {
  390. events |= (csc & I365_CSC_STSCHG) ? SS_STSCHG : 0;
  391. } else {
  392. events |= (csc & I365_CSC_BVD1) ? SS_BATDEAD : 0;
  393. events |= (csc & I365_CSC_BVD2) ? SS_BATWARN : 0;
  394. events |= (csc & I365_CSC_READY) ? SS_READY : 0;
  395. }
  396. if (events)
  397. pcmcia_parse_events(&socket->socket, events);
  398. return IRQ_HANDLED;
  399. }
  400. static void yenta_interrupt_wrapper(unsigned long data)
  401. {
  402. struct yenta_socket *socket = (struct yenta_socket *) data;
  403. yenta_interrupt(0, (void *)socket, NULL);
  404. socket->poll_timer.expires = jiffies + HZ;
  405. add_timer(&socket->poll_timer);
  406. }
  407. static void yenta_clear_maps(struct yenta_socket *socket)
  408. {
  409. int i;
  410. struct resource res = { .start = 0, .end = 0x0fff };
  411. pccard_io_map io = { 0, 0, 0, 0, 1 };
  412. pccard_mem_map mem = { .res = &res, };
  413. yenta_set_socket(&socket->socket, &dead_socket);
  414. for (i = 0; i < 2; i++) {
  415. io.map = i;
  416. yenta_set_io_map(&socket->socket, &io);
  417. }
  418. for (i = 0; i < 5; i++) {
  419. mem.map = i;
  420. yenta_set_mem_map(&socket->socket, &mem);
  421. }
  422. }
  423. /* redoes voltage interrogation if required */
  424. static void yenta_interrogate(struct yenta_socket *socket)
  425. {
  426. u32 state;
  427. state = cb_readl(socket, CB_SOCKET_STATE);
  428. if (!(state & (CB_5VCARD | CB_3VCARD | CB_XVCARD | CB_YVCARD)) ||
  429. (state & (CB_CDETECT1 | CB_CDETECT2 | CB_NOTACARD | CB_BADVCCREQ)) ||
  430. ((state & (CB_16BITCARD | CB_CBCARD)) == (CB_16BITCARD | CB_CBCARD)))
  431. cb_writel(socket, CB_SOCKET_FORCE, CB_CVSTEST);
  432. }
  433. /* Called at resume and initialization events */
  434. static int yenta_sock_init(struct pcmcia_socket *sock)
  435. {
  436. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  437. exca_writeb(socket, I365_GBLCTL, 0x00);
  438. exca_writeb(socket, I365_GENCTL, 0x00);
  439. /* Redo card voltage interrogation */
  440. yenta_interrogate(socket);
  441. yenta_clear_maps(socket);
  442. if (socket->type && socket->type->sock_init)
  443. socket->type->sock_init(socket);
  444. /* Re-enable CSC interrupts */
  445. cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
  446. return 0;
  447. }
  448. static int yenta_sock_suspend(struct pcmcia_socket *sock)
  449. {
  450. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  451. /* Disable CSC interrupts */
  452. cb_writel(socket, CB_SOCKET_MASK, 0x0);
  453. return 0;
  454. }
  455. /*
  456. * Use an adaptive allocation for the memory resource,
  457. * sometimes the memory behind pci bridges is limited:
  458. * 1/8 of the size of the io window of the parent.
  459. * max 4 MB, min 16 kB. We try very hard to not get below
  460. * the "ACC" values, though.
  461. */
  462. #define BRIDGE_MEM_MAX 4*1024*1024
  463. #define BRIDGE_MEM_ACC 128*1024
  464. #define BRIDGE_MEM_MIN 16*1024
  465. #define BRIDGE_IO_MAX 512
  466. #define BRIDGE_IO_ACC 256
  467. #define BRIDGE_IO_MIN 32
  468. #ifndef PCIBIOS_MIN_CARDBUS_IO
  469. #define PCIBIOS_MIN_CARDBUS_IO PCIBIOS_MIN_IO
  470. #endif
  471. static int yenta_search_one_res(struct resource *root, struct resource *res,
  472. u32 min)
  473. {
  474. u32 align, size, start, end;
  475. if (res->flags & IORESOURCE_IO) {
  476. align = 1024;
  477. size = BRIDGE_IO_MAX;
  478. start = PCIBIOS_MIN_CARDBUS_IO;
  479. end = ~0U;
  480. } else {
  481. unsigned long avail = root->end - root->start;
  482. int i;
  483. size = BRIDGE_MEM_MAX;
  484. if (size > avail/8) {
  485. size=(avail+1)/8;
  486. /* round size down to next power of 2 */
  487. i = 0;
  488. while ((size /= 2) != 0)
  489. i++;
  490. size = 1 << i;
  491. }
  492. if (size < min)
  493. size = min;
  494. align = size;
  495. start = PCIBIOS_MIN_MEM;
  496. end = ~0U;
  497. }
  498. do {
  499. if (allocate_resource(root, res, size, start, end, align,
  500. NULL, NULL)==0) {
  501. return 1;
  502. }
  503. size = size/2;
  504. align = size;
  505. } while (size >= min);
  506. return 0;
  507. }
  508. static int yenta_search_res(struct yenta_socket *socket, struct resource *res,
  509. u32 min)
  510. {
  511. int i;
  512. for (i=0; i<PCI_BUS_NUM_RESOURCES; i++) {
  513. struct resource * root = socket->dev->bus->resource[i];
  514. if (!root)
  515. continue;
  516. if ((res->flags ^ root->flags) &
  517. (IORESOURCE_IO | IORESOURCE_MEM | IORESOURCE_PREFETCH))
  518. continue; /* Wrong type */
  519. if (yenta_search_one_res(root, res, min))
  520. return 1;
  521. }
  522. return 0;
  523. }
  524. static int yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned type, int addr_start, int addr_end)
  525. {
  526. struct resource *root, *res;
  527. struct pci_bus_region region;
  528. unsigned mask;
  529. res = socket->dev->resource + PCI_BRIDGE_RESOURCES + nr;
  530. /* Already allocated? */
  531. if (res->parent)
  532. return 0;
  533. /* The granularity of the memory limit is 4kB, on IO it's 4 bytes */
  534. mask = ~0xfff;
  535. if (type & IORESOURCE_IO)
  536. mask = ~3;
  537. res->name = socket->dev->subordinate->name;
  538. res->flags = type;
  539. region.start = config_readl(socket, addr_start) & mask;
  540. region.end = config_readl(socket, addr_end) | ~mask;
  541. if (region.start && region.end > region.start && !override_bios) {
  542. pcibios_bus_to_resource(socket->dev, res, &region);
  543. root = pci_find_parent_resource(socket->dev, res);
  544. if (root && (request_resource(root, res) == 0))
  545. return 0;
  546. printk(KERN_INFO "yenta %s: Preassigned resource %d busy or not available, reconfiguring...\n",
  547. pci_name(socket->dev), nr);
  548. }
  549. if (type & IORESOURCE_IO) {
  550. if ((yenta_search_res(socket, res, BRIDGE_IO_MAX)) ||
  551. (yenta_search_res(socket, res, BRIDGE_IO_ACC)) ||
  552. (yenta_search_res(socket, res, BRIDGE_IO_MIN)))
  553. return 1;
  554. } else {
  555. if (type & IORESOURCE_PREFETCH) {
  556. if ((yenta_search_res(socket, res, BRIDGE_MEM_MAX)) ||
  557. (yenta_search_res(socket, res, BRIDGE_MEM_ACC)) ||
  558. (yenta_search_res(socket, res, BRIDGE_MEM_MIN)))
  559. return 1;
  560. /* Approximating prefetchable by non-prefetchable */
  561. res->flags = IORESOURCE_MEM;
  562. }
  563. if ((yenta_search_res(socket, res, BRIDGE_MEM_MAX)) ||
  564. (yenta_search_res(socket, res, BRIDGE_MEM_ACC)) ||
  565. (yenta_search_res(socket, res, BRIDGE_MEM_MIN)))
  566. return 1;
  567. }
  568. printk(KERN_INFO "yenta %s: no resource of type %x available, trying to continue...\n",
  569. pci_name(socket->dev), type);
  570. res->start = res->end = res->flags = 0;
  571. return 0;
  572. }
  573. /*
  574. * Allocate the bridge mappings for the device..
  575. */
  576. static void yenta_allocate_resources(struct yenta_socket *socket)
  577. {
  578. int program = 0;
  579. program += yenta_allocate_res(socket, 0, IORESOURCE_IO,
  580. PCI_CB_IO_BASE_0, PCI_CB_IO_LIMIT_0);
  581. program += yenta_allocate_res(socket, 1, IORESOURCE_IO,
  582. PCI_CB_IO_BASE_1, PCI_CB_IO_LIMIT_1);
  583. program += yenta_allocate_res(socket, 2, IORESOURCE_MEM|IORESOURCE_PREFETCH,
  584. PCI_CB_MEMORY_BASE_0, PCI_CB_MEMORY_LIMIT_0);
  585. program += yenta_allocate_res(socket, 3, IORESOURCE_MEM,
  586. PCI_CB_MEMORY_BASE_1, PCI_CB_MEMORY_LIMIT_1);
  587. if (program)
  588. pci_setup_cardbus(socket->dev->subordinate);
  589. }
  590. /*
  591. * Free the bridge mappings for the device..
  592. */
  593. static void yenta_free_resources(struct yenta_socket *socket)
  594. {
  595. int i;
  596. for (i=0;i<4;i++) {
  597. struct resource *res;
  598. res = socket->dev->resource + PCI_BRIDGE_RESOURCES + i;
  599. if (res->start != 0 && res->end != 0)
  600. release_resource(res);
  601. res->start = res->end = res->flags = 0;
  602. }
  603. }
  604. /*
  605. * Close it down - release our resources and go home..
  606. */
  607. static void yenta_close(struct pci_dev *dev)
  608. {
  609. struct yenta_socket *sock = pci_get_drvdata(dev);
  610. /* Remove the register attributes */
  611. device_remove_file(&dev->dev, &dev_attr_yenta_registers);
  612. /* we don't want a dying socket registered */
  613. pcmcia_unregister_socket(&sock->socket);
  614. /* Disable all events so we don't die in an IRQ storm */
  615. cb_writel(sock, CB_SOCKET_MASK, 0x0);
  616. exca_writeb(sock, I365_CSCINT, 0);
  617. if (sock->cb_irq)
  618. free_irq(sock->cb_irq, sock);
  619. else
  620. del_timer_sync(&sock->poll_timer);
  621. if (sock->base)
  622. iounmap(sock->base);
  623. yenta_free_resources(sock);
  624. pci_release_regions(dev);
  625. pci_disable_device(dev);
  626. pci_set_drvdata(dev, NULL);
  627. }
  628. static struct pccard_operations yenta_socket_operations = {
  629. .init = yenta_sock_init,
  630. .suspend = yenta_sock_suspend,
  631. .get_status = yenta_get_status,
  632. .set_socket = yenta_set_socket,
  633. .set_io_map = yenta_set_io_map,
  634. .set_mem_map = yenta_set_mem_map,
  635. };
  636. #ifdef CONFIG_YENTA_TI
  637. #include "ti113x.h"
  638. #endif
  639. #ifdef CONFIG_YENTA_RICOH
  640. #include "ricoh.h"
  641. #endif
  642. #ifdef CONFIG_YENTA_TOSHIBA
  643. #include "topic.h"
  644. #endif
  645. #ifdef CONFIG_YENTA_O2
  646. #include "o2micro.h"
  647. #endif
  648. enum {
  649. CARDBUS_TYPE_DEFAULT = -1,
  650. CARDBUS_TYPE_TI,
  651. CARDBUS_TYPE_TI113X,
  652. CARDBUS_TYPE_TI12XX,
  653. CARDBUS_TYPE_TI1250,
  654. CARDBUS_TYPE_RICOH,
  655. CARDBUS_TYPE_TOPIC95,
  656. CARDBUS_TYPE_TOPIC97,
  657. CARDBUS_TYPE_O2MICRO,
  658. CARDBUS_TYPE_ENE,
  659. };
  660. /*
  661. * Different cardbus controllers have slightly different
  662. * initialization sequences etc details. List them here..
  663. */
  664. static struct cardbus_type cardbus_type[] = {
  665. #ifdef CONFIG_YENTA_TI
  666. [CARDBUS_TYPE_TI] = {
  667. .override = ti_override,
  668. .save_state = ti_save_state,
  669. .restore_state = ti_restore_state,
  670. .sock_init = ti_init,
  671. },
  672. [CARDBUS_TYPE_TI113X] = {
  673. .override = ti113x_override,
  674. .save_state = ti_save_state,
  675. .restore_state = ti_restore_state,
  676. .sock_init = ti_init,
  677. },
  678. [CARDBUS_TYPE_TI12XX] = {
  679. .override = ti12xx_override,
  680. .save_state = ti_save_state,
  681. .restore_state = ti_restore_state,
  682. .sock_init = ti_init,
  683. },
  684. [CARDBUS_TYPE_TI1250] = {
  685. .override = ti1250_override,
  686. .save_state = ti_save_state,
  687. .restore_state = ti_restore_state,
  688. .sock_init = ti_init,
  689. },
  690. #endif
  691. #ifdef CONFIG_YENTA_RICOH
  692. [CARDBUS_TYPE_RICOH] = {
  693. .override = ricoh_override,
  694. .save_state = ricoh_save_state,
  695. .restore_state = ricoh_restore_state,
  696. },
  697. #endif
  698. #ifdef CONFIG_YENTA_TOSHIBA
  699. [CARDBUS_TYPE_TOPIC95] = {
  700. .override = topic95_override,
  701. },
  702. [CARDBUS_TYPE_TOPIC97] = {
  703. .override = topic97_override,
  704. },
  705. #endif
  706. #ifdef CONFIG_YENTA_O2
  707. [CARDBUS_TYPE_O2MICRO] = {
  708. .override = o2micro_override,
  709. .restore_state = o2micro_restore_state,
  710. },
  711. #endif
  712. #ifdef CONFIG_YENTA_TI
  713. [CARDBUS_TYPE_ENE] = {
  714. .override = ene_override,
  715. .save_state = ti_save_state,
  716. .restore_state = ti_restore_state,
  717. .sock_init = ti_init,
  718. },
  719. #endif
  720. };
  721. /*
  722. * Only probe "regular" interrupts, don't
  723. * touch dangerous spots like the mouse irq,
  724. * because there are mice that apparently
  725. * get really confused if they get fondled
  726. * too intimately.
  727. *
  728. * Default to 11, 10, 9, 7, 6, 5, 4, 3.
  729. */
  730. static u32 isa_interrupts = 0x0ef8;
  731. static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask)
  732. {
  733. int i;
  734. unsigned long val;
  735. u32 mask;
  736. /*
  737. * Probe for usable interrupts using the force
  738. * register to generate bogus card status events.
  739. */
  740. cb_writel(socket, CB_SOCKET_EVENT, -1);
  741. cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
  742. exca_writeb(socket, I365_CSCINT, 0);
  743. val = probe_irq_on() & isa_irq_mask;
  744. for (i = 1; i < 16; i++) {
  745. if (!((val >> i) & 1))
  746. continue;
  747. exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG | (i << 4));
  748. cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
  749. udelay(100);
  750. cb_writel(socket, CB_SOCKET_EVENT, -1);
  751. }
  752. cb_writel(socket, CB_SOCKET_MASK, 0);
  753. exca_writeb(socket, I365_CSCINT, 0);
  754. mask = probe_irq_mask(val) & 0xffff;
  755. return mask;
  756. }
  757. /**
  758. * yenta PCI irq probing.
  759. * currently only used in the TI/EnE initialization code
  760. */
  761. #ifdef CONFIG_YENTA_TI
  762. /* interrupt handler, only used during probing */
  763. static irqreturn_t yenta_probe_handler(int irq, void *dev_id, struct pt_regs *regs)
  764. {
  765. struct yenta_socket *socket = (struct yenta_socket *) dev_id;
  766. u8 csc;
  767. u32 cb_event;
  768. /* Clear interrupt status for the event */
  769. cb_event = cb_readl(socket, CB_SOCKET_EVENT);
  770. cb_writel(socket, CB_SOCKET_EVENT, -1);
  771. csc = exca_readb(socket, I365_CSC);
  772. if (cb_event || csc) {
  773. socket->probe_status = 1;
  774. return IRQ_HANDLED;
  775. }
  776. return IRQ_NONE;
  777. }
  778. /* probes the PCI interrupt, use only on override functions */
  779. static int yenta_probe_cb_irq(struct yenta_socket *socket)
  780. {
  781. if (!socket->cb_irq)
  782. return -1;
  783. socket->probe_status = 0;
  784. if (request_irq(socket->cb_irq, yenta_probe_handler, SA_SHIRQ, "yenta", socket)) {
  785. printk(KERN_WARNING "Yenta: request_irq() in yenta_probe_cb_irq() failed!\n");
  786. return -1;
  787. }
  788. /* generate interrupt, wait */
  789. exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG);
  790. cb_writel(socket, CB_SOCKET_EVENT, -1);
  791. cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
  792. cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
  793. msleep(100);
  794. /* disable interrupts */
  795. cb_writel(socket, CB_SOCKET_MASK, 0);
  796. exca_writeb(socket, I365_CSCINT, 0);
  797. cb_writel(socket, CB_SOCKET_EVENT, -1);
  798. exca_readb(socket, I365_CSC);
  799. free_irq(socket->cb_irq, socket);
  800. return (int) socket->probe_status;
  801. }
  802. #endif /* CONFIG_YENTA_TI */
  803. /*
  804. * Set static data that doesn't need re-initializing..
  805. */
  806. static void yenta_get_socket_capabilities(struct yenta_socket *socket, u32 isa_irq_mask)
  807. {
  808. socket->socket.pci_irq = socket->cb_irq;
  809. if (isa_probe)
  810. socket->socket.irq_mask = yenta_probe_irq(socket, isa_irq_mask);
  811. else
  812. socket->socket.irq_mask = 0;
  813. printk(KERN_INFO "Yenta: ISA IRQ mask 0x%04x, PCI irq %d\n",
  814. socket->socket.irq_mask, socket->cb_irq);
  815. }
  816. /*
  817. * Initialize the standard cardbus registers
  818. */
  819. static void yenta_config_init(struct yenta_socket *socket)
  820. {
  821. u16 bridge;
  822. struct pci_dev *dev = socket->dev;
  823. struct pci_bus_region region;
  824. pcibios_resource_to_bus(socket->dev, &region, &dev->resource[0]);
  825. config_writel(socket, CB_LEGACY_MODE_BASE, 0);
  826. config_writel(socket, PCI_BASE_ADDRESS_0, region.start);
  827. config_writew(socket, PCI_COMMAND,
  828. PCI_COMMAND_IO |
  829. PCI_COMMAND_MEMORY |
  830. PCI_COMMAND_MASTER |
  831. PCI_COMMAND_WAIT);
  832. /* MAGIC NUMBERS! Fixme */
  833. config_writeb(socket, PCI_CACHE_LINE_SIZE, L1_CACHE_BYTES / 4);
  834. config_writeb(socket, PCI_LATENCY_TIMER, 168);
  835. config_writel(socket, PCI_PRIMARY_BUS,
  836. (176 << 24) | /* sec. latency timer */
  837. (dev->subordinate->subordinate << 16) | /* subordinate bus */
  838. (dev->subordinate->secondary << 8) | /* secondary bus */
  839. dev->subordinate->primary); /* primary bus */
  840. /*
  841. * Set up the bridging state:
  842. * - enable write posting.
  843. * - memory window 0 prefetchable, window 1 non-prefetchable
  844. * - PCI interrupts enabled if a PCI interrupt exists..
  845. */
  846. bridge = config_readw(socket, CB_BRIDGE_CONTROL);
  847. bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN);
  848. bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN;
  849. config_writew(socket, CB_BRIDGE_CONTROL, bridge);
  850. }
  851. /*
  852. * Initialize a cardbus controller. Make sure we have a usable
  853. * interrupt, and that we can map the cardbus area. Fill in the
  854. * socket information structure..
  855. */
  856. static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_id *id)
  857. {
  858. struct yenta_socket *socket;
  859. int ret;
  860. /*
  861. * If we failed to assign proper bus numbers for this cardbus
  862. * controller during PCI probe, its subordinate pci_bus is NULL.
  863. * Bail out if so.
  864. */
  865. if (!dev->subordinate) {
  866. printk(KERN_ERR "Yenta: no bus associated with %s! "
  867. "(try 'pci=assign-busses')\n", pci_name(dev));
  868. return -ENODEV;
  869. }
  870. socket = kzalloc(sizeof(struct yenta_socket), GFP_KERNEL);
  871. if (!socket)
  872. return -ENOMEM;
  873. /* prepare pcmcia_socket */
  874. socket->socket.ops = &yenta_socket_operations;
  875. socket->socket.resource_ops = &pccard_nonstatic_ops;
  876. socket->socket.dev.dev = &dev->dev;
  877. socket->socket.driver_data = socket;
  878. socket->socket.owner = THIS_MODULE;
  879. socket->socket.features = SS_CAP_PAGE_REGS | SS_CAP_PCCARD;
  880. socket->socket.map_size = 0x1000;
  881. socket->socket.cb_dev = dev;
  882. /* prepare struct yenta_socket */
  883. socket->dev = dev;
  884. pci_set_drvdata(dev, socket);
  885. /*
  886. * Do some basic sanity checking..
  887. */
  888. if (pci_enable_device(dev)) {
  889. ret = -EBUSY;
  890. goto free;
  891. }
  892. ret = pci_request_regions(dev, "yenta_socket");
  893. if (ret)
  894. goto disable;
  895. if (!pci_resource_start(dev, 0)) {
  896. printk(KERN_ERR "No cardbus resource!\n");
  897. ret = -ENODEV;
  898. goto release;
  899. }
  900. /*
  901. * Ok, start setup.. Map the cardbus registers,
  902. * and request the IRQ.
  903. */
  904. socket->base = ioremap(pci_resource_start(dev, 0), 0x1000);
  905. if (!socket->base) {
  906. ret = -ENOMEM;
  907. goto release;
  908. }
  909. /*
  910. * report the subsystem vendor and device for help debugging
  911. * the irq stuff...
  912. */
  913. printk(KERN_INFO "Yenta: CardBus bridge found at %s [%04x:%04x]\n",
  914. pci_name(dev), dev->subsystem_vendor, dev->subsystem_device);
  915. yenta_config_init(socket);
  916. /* Disable all events */
  917. cb_writel(socket, CB_SOCKET_MASK, 0x0);
  918. /* Set up the bridge regions.. */
  919. yenta_allocate_resources(socket);
  920. socket->cb_irq = dev->irq;
  921. /* Do we have special options for the device? */
  922. if (id->driver_data != CARDBUS_TYPE_DEFAULT &&
  923. id->driver_data < ARRAY_SIZE(cardbus_type)) {
  924. socket->type = &cardbus_type[id->driver_data];
  925. ret = socket->type->override(socket);
  926. if (ret < 0)
  927. goto unmap;
  928. }
  929. /* We must finish initialization here */
  930. if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, SA_SHIRQ, "yenta", socket)) {
  931. /* No IRQ or request_irq failed. Poll */
  932. socket->cb_irq = 0; /* But zero is a valid IRQ number. */
  933. init_timer(&socket->poll_timer);
  934. socket->poll_timer.function = yenta_interrupt_wrapper;
  935. socket->poll_timer.data = (unsigned long)socket;
  936. socket->poll_timer.expires = jiffies + HZ;
  937. add_timer(&socket->poll_timer);
  938. printk(KERN_INFO "Yenta: no PCI IRQ, CardBus support disabled for this socket.\n"
  939. KERN_INFO "Yenta: check your BIOS CardBus, BIOS IRQ or ACPI settings.\n");
  940. } else {
  941. socket->socket.features |= SS_CAP_CARDBUS;
  942. }
  943. /* Figure out what the dang thing can do for the PCMCIA layer... */
  944. yenta_interrogate(socket);
  945. yenta_get_socket_capabilities(socket, isa_interrupts);
  946. printk(KERN_INFO "Socket status: %08x\n", cb_readl(socket, CB_SOCKET_STATE));
  947. /* Register it with the pcmcia layer.. */
  948. ret = pcmcia_register_socket(&socket->socket);
  949. if (ret == 0) {
  950. /* Add the yenta register attributes */
  951. device_create_file(&dev->dev, &dev_attr_yenta_registers);
  952. goto out;
  953. }
  954. unmap:
  955. iounmap(socket->base);
  956. release:
  957. pci_release_regions(dev);
  958. disable:
  959. pci_disable_device(dev);
  960. free:
  961. kfree(socket);
  962. out:
  963. return ret;
  964. }
  965. static int yenta_dev_suspend (struct pci_dev *dev, pm_message_t state)
  966. {
  967. struct yenta_socket *socket = pci_get_drvdata(dev);
  968. int ret;
  969. ret = pcmcia_socket_dev_suspend(&dev->dev, state);
  970. if (socket) {
  971. if (socket->type && socket->type->save_state)
  972. socket->type->save_state(socket);
  973. /* FIXME: pci_save_state needs to have a better interface */
  974. pci_save_state(dev);
  975. pci_read_config_dword(dev, 16*4, &socket->saved_state[0]);
  976. pci_read_config_dword(dev, 17*4, &socket->saved_state[1]);
  977. pci_disable_device(dev);
  978. /*
  979. * Some laptops (IBM T22) do not like us putting the Cardbus
  980. * bridge into D3. At a guess, some other laptop will
  981. * probably require this, so leave it commented out for now.
  982. */
  983. /* pci_set_power_state(dev, 3); */
  984. }
  985. return ret;
  986. }
  987. static int yenta_dev_resume (struct pci_dev *dev)
  988. {
  989. struct yenta_socket *socket = pci_get_drvdata(dev);
  990. if (socket) {
  991. pci_set_power_state(dev, 0);
  992. /* FIXME: pci_restore_state needs to have a better interface */
  993. pci_restore_state(dev);
  994. pci_write_config_dword(dev, 16*4, socket->saved_state[0]);
  995. pci_write_config_dword(dev, 17*4, socket->saved_state[1]);
  996. pci_enable_device(dev);
  997. pci_set_master(dev);
  998. if (socket->type && socket->type->restore_state)
  999. socket->type->restore_state(socket);
  1000. }
  1001. return pcmcia_socket_dev_resume(&dev->dev);
  1002. }
  1003. #define CB_ID(vend,dev,type) \
  1004. { \
  1005. .vendor = vend, \
  1006. .device = dev, \
  1007. .subvendor = PCI_ANY_ID, \
  1008. .subdevice = PCI_ANY_ID, \
  1009. .class = PCI_CLASS_BRIDGE_CARDBUS << 8, \
  1010. .class_mask = ~0, \
  1011. .driver_data = CARDBUS_TYPE_##type, \
  1012. }
  1013. static struct pci_device_id yenta_table [] = {
  1014. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1031, TI),
  1015. /*
  1016. * TBD: Check if these TI variants can use more
  1017. * advanced overrides instead. (I can't get the
  1018. * data sheets for these devices. --rmk)
  1019. */
  1020. #ifdef CONFIG_YENTA_TI
  1021. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1210, TI),
  1022. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1130, TI113X),
  1023. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1131, TI113X),
  1024. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1211, TI12XX),
  1025. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1220, TI12XX),
  1026. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1221, TI12XX),
  1027. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1225, TI12XX),
  1028. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1251A, TI12XX),
  1029. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1251B, TI12XX),
  1030. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1420, TI12XX),
  1031. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1450, TI12XX),
  1032. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1451A, TI12XX),
  1033. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1510, TI12XX),
  1034. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1520, TI12XX),
  1035. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1620, TI12XX),
  1036. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4410, TI12XX),
  1037. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4450, TI12XX),
  1038. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4451, TI12XX),
  1039. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4510, TI12XX),
  1040. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4520, TI12XX),
  1041. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1250, TI1250),
  1042. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1410, TI1250),
  1043. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX21_XX11, TI12XX),
  1044. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X515, TI12XX),
  1045. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X420, TI12XX),
  1046. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X620, TI12XX),
  1047. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7410, TI12XX),
  1048. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7510, TI12XX),
  1049. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7610, TI12XX),
  1050. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_710, TI12XX),
  1051. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_712, TI12XX),
  1052. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_720, TI12XX),
  1053. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_722, TI12XX),
  1054. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1211, ENE),
  1055. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1225, ENE),
  1056. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1410, ENE),
  1057. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1420, ENE),
  1058. #endif /* CONFIG_YENTA_TI */
  1059. #ifdef CONFIG_YENTA_RICOH
  1060. CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C465, RICOH),
  1061. CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C466, RICOH),
  1062. CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C475, RICOH),
  1063. CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C476, RICOH),
  1064. CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C478, RICOH),
  1065. #endif
  1066. #ifdef CONFIG_YENTA_TOSHIBA
  1067. CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC95, TOPIC95),
  1068. CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC97, TOPIC97),
  1069. CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC100, TOPIC97),
  1070. #endif
  1071. #ifdef CONFIG_YENTA_O2
  1072. CB_ID(PCI_VENDOR_ID_O2, PCI_ANY_ID, O2MICRO),
  1073. #endif
  1074. /* match any cardbus bridge */
  1075. CB_ID(PCI_ANY_ID, PCI_ANY_ID, DEFAULT),
  1076. { /* all zeroes */ }
  1077. };
  1078. MODULE_DEVICE_TABLE(pci, yenta_table);
  1079. static struct pci_driver yenta_cardbus_driver = {
  1080. .name = "yenta_cardbus",
  1081. .id_table = yenta_table,
  1082. .probe = yenta_probe,
  1083. .remove = __devexit_p(yenta_close),
  1084. .suspend = yenta_dev_suspend,
  1085. .resume = yenta_dev_resume,
  1086. };
  1087. static int __init yenta_socket_init(void)
  1088. {
  1089. return pci_register_driver (&yenta_cardbus_driver);
  1090. }
  1091. static void __exit yenta_socket_exit (void)
  1092. {
  1093. pci_unregister_driver (&yenta_cardbus_driver);
  1094. }
  1095. module_init(yenta_socket_init);
  1096. module_exit(yenta_socket_exit);
  1097. MODULE_LICENSE("GPL");