Lines Matching refs:sock
70 static int db1300_card_inserted(struct db1x_pcmcia_sock *sock) in db1300_card_inserted() argument
76 static int db1200_card_inserted(struct db1x_pcmcia_sock *sock) in db1200_card_inserted() argument
81 return sigstat & 1 << (8 + 2 * sock->nr); in db1200_card_inserted()
85 static int db1000_card_inserted(struct db1x_pcmcia_sock *sock) in db1000_card_inserted() argument
87 return !gpio_get_value(sock->insert_gpio); in db1000_card_inserted()
90 static int db1x_card_inserted(struct db1x_pcmcia_sock *sock) in db1x_card_inserted() argument
92 switch (sock->board_type) { in db1x_card_inserted()
94 return db1200_card_inserted(sock); in db1x_card_inserted()
96 return db1300_card_inserted(sock); in db1x_card_inserted()
98 return db1000_card_inserted(sock); in db1x_card_inserted()
106 static inline void set_stschg(struct db1x_pcmcia_sock *sock, int en) in set_stschg() argument
108 if (sock->stschg_irq != -1) { in set_stschg()
110 enable_irq(sock->stschg_irq); in set_stschg()
112 disable_irq(sock->stschg_irq); in set_stschg()
118 struct db1x_pcmcia_sock *sock = data; in db1000_pcmcia_cdirq() local
120 pcmcia_parse_events(&sock->socket, SS_DETECT); in db1000_pcmcia_cdirq()
127 struct db1x_pcmcia_sock *sock = data; in db1000_pcmcia_stschgirq() local
129 pcmcia_parse_events(&sock->socket, SS_STSCHG); in db1000_pcmcia_stschgirq()
136 struct db1x_pcmcia_sock *sock = data; in db1200_pcmcia_cdirq() local
143 if (irq == sock->insert_irq) { in db1200_pcmcia_cdirq()
144 disable_irq_nosync(sock->insert_irq); in db1200_pcmcia_cdirq()
145 enable_irq(sock->eject_irq); in db1200_pcmcia_cdirq()
147 disable_irq_nosync(sock->eject_irq); in db1200_pcmcia_cdirq()
148 enable_irq(sock->insert_irq); in db1200_pcmcia_cdirq()
151 pcmcia_parse_events(&sock->socket, SS_DETECT); in db1200_pcmcia_cdirq()
156 static int db1x_pcmcia_setup_irqs(struct db1x_pcmcia_sock *sock) in db1x_pcmcia_setup_irqs() argument
160 if (sock->stschg_irq != -1) { in db1x_pcmcia_setup_irqs()
161 ret = request_irq(sock->stschg_irq, db1000_pcmcia_stschgirq, in db1x_pcmcia_setup_irqs()
162 0, "pcmcia_stschg", sock); in db1x_pcmcia_setup_irqs()
173 if ((sock->board_type == BOARD_TYPE_DB1200) || in db1x_pcmcia_setup_irqs()
174 (sock->board_type == BOARD_TYPE_DB1300)) { in db1x_pcmcia_setup_irqs()
175 ret = request_irq(sock->insert_irq, db1200_pcmcia_cdirq, in db1x_pcmcia_setup_irqs()
176 0, "pcmcia_insert", sock); in db1x_pcmcia_setup_irqs()
180 ret = request_irq(sock->eject_irq, db1200_pcmcia_cdirq, in db1x_pcmcia_setup_irqs()
181 0, "pcmcia_eject", sock); in db1x_pcmcia_setup_irqs()
183 free_irq(sock->insert_irq, sock); in db1x_pcmcia_setup_irqs()
188 if (db1x_card_inserted(sock)) in db1x_pcmcia_setup_irqs()
189 enable_irq(sock->eject_irq); in db1x_pcmcia_setup_irqs()
191 enable_irq(sock->insert_irq); in db1x_pcmcia_setup_irqs()
196 irq_set_irq_type(sock->insert_irq, IRQ_TYPE_EDGE_BOTH); in db1x_pcmcia_setup_irqs()
197 ret = request_irq(sock->insert_irq, db1000_pcmcia_cdirq, in db1x_pcmcia_setup_irqs()
198 0, "pcmcia_carddetect", sock); in db1x_pcmcia_setup_irqs()
207 if (sock->stschg_irq != -1) in db1x_pcmcia_setup_irqs()
208 free_irq(sock->stschg_irq, sock); in db1x_pcmcia_setup_irqs()
213 static void db1x_pcmcia_free_irqs(struct db1x_pcmcia_sock *sock) in db1x_pcmcia_free_irqs() argument
215 if (sock->stschg_irq != -1) in db1x_pcmcia_free_irqs()
216 free_irq(sock->stschg_irq, sock); in db1x_pcmcia_free_irqs()
218 free_irq(sock->insert_irq, sock); in db1x_pcmcia_free_irqs()
219 if (sock->eject_irq != -1) in db1x_pcmcia_free_irqs()
220 free_irq(sock->eject_irq, sock); in db1x_pcmcia_free_irqs()
239 struct db1x_pcmcia_sock *sock = to_db1x_socket(skt); in db1x_pcmcia_configure() local
245 cr_clr = (0xf << (sock->nr * 8)); /* clear voltage settings */ in db1x_pcmcia_configure()
258 sock->nr, state->Vcc); in db1x_pcmcia_configure()
271 sock->nr, state->Vpp); in db1x_pcmcia_configure()
278 sock->nr, state->Vcc, state->Vpp); in db1x_pcmcia_configure()
284 if (sock->board_type != BOARD_TYPE_DB1300) in db1x_pcmcia_configure()
285 cr_set |= ((v << 2) | p) << (sock->nr * 8); in db1x_pcmcia_configure()
287 changed = state->flags ^ sock->old_flags; in db1x_pcmcia_configure()
291 set_stschg(sock, 0); in db1x_pcmcia_configure()
293 cr_clr |= (1 << (7 + (sock->nr * 8))); in db1x_pcmcia_configure()
294 cr_clr |= (1 << (4 + (sock->nr * 8))); in db1x_pcmcia_configure()
297 cr_set |= 1 << (7 + (sock->nr * 8)); in db1x_pcmcia_configure()
298 cr_set |= 1 << (4 + (sock->nr * 8)); in db1x_pcmcia_configure()
305 sock->old_flags = state->flags; in db1x_pcmcia_configure()
310 set_stschg(sock, 1); in db1x_pcmcia_configure()
331 struct db1x_pcmcia_sock *sock = to_db1x_socket(skt); in db1x_pcmcia_get_status() local
335 status = db1x_card_inserted(sock) ? SS_DETECT : 0; in db1x_pcmcia_get_status()
341 if (sock->board_type == BOARD_TYPE_PB1100) in db1x_pcmcia_get_status()
345 switch (GET_VS(sr, sock->nr)) { in db1x_pcmcia_get_status()
356 status |= GET_VCC(cr, sock->nr) ? SS_POWERON : 0; in db1x_pcmcia_get_status()
359 if ((sock->board_type == BOARD_TYPE_DB1300) && (status & SS_DETECT)) in db1x_pcmcia_get_status()
363 status |= (GET_RESET(cr, sock->nr)) ? SS_READY : SS_RESET; in db1x_pcmcia_get_status()
383 struct db1x_pcmcia_sock *sock = to_db1x_socket(skt); in au1x00_pcmcia_set_io_map() local
385 map->start = (u32)sock->virt_io; in au1x00_pcmcia_set_io_map()
394 struct db1x_pcmcia_sock *sock = to_db1x_socket(skt); in au1x00_pcmcia_set_mem_map() local
397 map->static_start = sock->phys_attr + map->card_start; in au1x00_pcmcia_set_mem_map()
399 map->static_start = sock->phys_mem + map->card_start; in au1x00_pcmcia_set_mem_map()
415 struct db1x_pcmcia_sock *sock; in db1x_pcmcia_socket_probe() local
419 sock = kzalloc(sizeof(struct db1x_pcmcia_sock), GFP_KERNEL); in db1x_pcmcia_socket_probe()
420 if (!sock) in db1x_pcmcia_socket_probe()
423 sock->nr = pdev->id; in db1x_pcmcia_socket_probe()
430 sock->board_type = BOARD_TYPE_PB1100; in db1x_pcmcia_socket_probe()
433 sock->board_type = BOARD_TYPE_DEFAULT; in db1x_pcmcia_socket_probe()
436 sock->board_type = BOARD_TYPE_DB1200; in db1x_pcmcia_socket_probe()
439 sock->board_type = BOARD_TYPE_DB1300; in db1x_pcmcia_socket_probe()
459 sock->card_irq = r ? r->start : 0; in db1x_pcmcia_socket_probe()
465 sock->insert_irq = r ? r->start : -1; in db1x_pcmcia_socket_probe()
466 if (sock->board_type == BOARD_TYPE_DEFAULT) { in db1x_pcmcia_socket_probe()
467 sock->insert_gpio = r ? r->start : -1; in db1x_pcmcia_socket_probe()
468 sock->insert_irq = r ? gpio_to_irq(r->start) : -1; in db1x_pcmcia_socket_probe()
473 sock->stschg_irq = r ? r->start : -1; in db1x_pcmcia_socket_probe()
477 sock->eject_irq = r ? r->start : -1; in db1x_pcmcia_socket_probe()
485 sock->nr); in db1x_pcmcia_socket_probe()
488 sock->phys_attr = r->start; in db1x_pcmcia_socket_probe()
494 sock->nr); in db1x_pcmcia_socket_probe()
497 sock->phys_mem = r->start; in db1x_pcmcia_socket_probe()
503 sock->nr); in db1x_pcmcia_socket_probe()
506 sock->phys_io = r->start; in db1x_pcmcia_socket_probe()
516 sock->virt_io = (void *)(ioremap(sock->phys_io, IO_MAP_SIZE) - in db1x_pcmcia_socket_probe()
519 if (!sock->virt_io) { in db1x_pcmcia_socket_probe()
521 sock->nr); in db1x_pcmcia_socket_probe()
526 sock->socket.ops = &db1x_pcmcia_operations; in db1x_pcmcia_socket_probe()
527 sock->socket.owner = THIS_MODULE; in db1x_pcmcia_socket_probe()
528 sock->socket.pci_irq = sock->card_irq; in db1x_pcmcia_socket_probe()
529 sock->socket.features = SS_CAP_STATIC_MAP | SS_CAP_PCCARD; in db1x_pcmcia_socket_probe()
530 sock->socket.map_size = MEM_MAP_SIZE; in db1x_pcmcia_socket_probe()
531 sock->socket.io_offset = (unsigned long)sock->virt_io; in db1x_pcmcia_socket_probe()
532 sock->socket.dev.parent = &pdev->dev; in db1x_pcmcia_socket_probe()
533 sock->socket.resource_ops = &pccard_static_ops; in db1x_pcmcia_socket_probe()
535 platform_set_drvdata(pdev, sock); in db1x_pcmcia_socket_probe()
537 ret = db1x_pcmcia_setup_irqs(sock); in db1x_pcmcia_socket_probe()
540 sock->nr); in db1x_pcmcia_socket_probe()
544 set_stschg(sock, 0); in db1x_pcmcia_socket_probe()
546 ret = pcmcia_register_socket(&sock->socket); in db1x_pcmcia_socket_probe()
548 printk(KERN_ERR "pcmcia%d failed to register\n", sock->nr); in db1x_pcmcia_socket_probe()
554 "%d %d %d\n", sock->nr, sock->phys_io, sock->virt_io, in db1x_pcmcia_socket_probe()
555 sock->phys_attr, sock->phys_mem, sock->card_irq, in db1x_pcmcia_socket_probe()
556 sock->insert_irq, sock->stschg_irq, sock->eject_irq); in db1x_pcmcia_socket_probe()
561 db1x_pcmcia_free_irqs(sock); in db1x_pcmcia_socket_probe()
563 iounmap((void *)(sock->virt_io + (u32)mips_io_port_base)); in db1x_pcmcia_socket_probe()
565 kfree(sock); in db1x_pcmcia_socket_probe()
571 struct db1x_pcmcia_sock *sock = platform_get_drvdata(pdev); in db1x_pcmcia_socket_remove() local
573 db1x_pcmcia_free_irqs(sock); in db1x_pcmcia_socket_remove()
574 pcmcia_unregister_socket(&sock->socket); in db1x_pcmcia_socket_remove()
575 iounmap((void *)(sock->virt_io + (u32)mips_io_port_base)); in db1x_pcmcia_socket_remove()
576 kfree(sock); in db1x_pcmcia_socket_remove()