Lines Matching refs:sock

71 static int db1300_card_inserted(struct db1x_pcmcia_sock *sock)
77 static int db1200_card_inserted(struct db1x_pcmcia_sock *sock)
82 return sigstat & 1 << (8 + 2 * sock->nr);
86 static int db1000_card_inserted(struct db1x_pcmcia_sock *sock)
88 return !gpio_get_value(sock->insert_gpio);
91 static int db1x_card_inserted(struct db1x_pcmcia_sock *sock)
93 switch (sock->board_type) {
95 return db1200_card_inserted(sock);
97 return db1300_card_inserted(sock);
99 return db1000_card_inserted(sock);
107 static inline void set_stschg(struct db1x_pcmcia_sock *sock, int en)
109 if (sock->stschg_irq != -1) {
111 enable_irq(sock->stschg_irq);
113 disable_irq(sock->stschg_irq);
119 struct db1x_pcmcia_sock *sock = data;
121 pcmcia_parse_events(&sock->socket, SS_DETECT);
128 struct db1x_pcmcia_sock *sock = data;
130 pcmcia_parse_events(&sock->socket, SS_STSCHG);
148 struct db1x_pcmcia_sock *sock = data;
152 if (irq == sock->insert_irq)
153 enable_irq(sock->eject_irq);
155 enable_irq(sock->insert_irq);
157 pcmcia_parse_events(&sock->socket, SS_DETECT);
162 static int db1x_pcmcia_setup_irqs(struct db1x_pcmcia_sock *sock)
166 if (sock->stschg_irq != -1) {
167 ret = request_irq(sock->stschg_irq, db1000_pcmcia_stschgirq,
168 0, "pcmcia_stschg", sock);
179 if ((sock->board_type == BOARD_TYPE_DB1200) ||
180 (sock->board_type == BOARD_TYPE_DB1300)) {
181 ret = request_threaded_irq(sock->insert_irq, db1200_pcmcia_cdirq,
182 db1200_pcmcia_cdirq_fn, 0, "pcmcia_insert", sock);
186 ret = request_threaded_irq(sock->eject_irq, db1200_pcmcia_cdirq,
187 db1200_pcmcia_cdirq_fn, 0, "pcmcia_eject", sock);
189 free_irq(sock->insert_irq, sock);
194 if (db1x_card_inserted(sock))
195 enable_irq(sock->eject_irq);
197 enable_irq(sock->insert_irq);
202 irq_set_irq_type(sock->insert_irq, IRQ_TYPE_EDGE_BOTH);
203 ret = request_irq(sock->insert_irq, db1000_pcmcia_cdirq,
204 0, "pcmcia_carddetect", sock);
213 if (sock->stschg_irq != -1)
214 free_irq(sock->stschg_irq, sock);
219 static void db1x_pcmcia_free_irqs(struct db1x_pcmcia_sock *sock)
221 if (sock->stschg_irq != -1)
222 free_irq(sock->stschg_irq, sock);
224 free_irq(sock->insert_irq, sock);
225 if (sock->eject_irq != -1)
226 free_irq(sock->eject_irq, sock);
245 struct db1x_pcmcia_sock *sock = to_db1x_socket(skt);
251 cr_clr = (0xf << (sock->nr * 8)); /* clear voltage settings */
266 sock->nr, state->Vcc);
281 sock->nr, state->Vpp);
288 sock->nr, state->Vcc, state->Vpp);
294 if (sock->board_type != BOARD_TYPE_DB1300)
295 cr_set |= ((v << 2) | p) << (sock->nr * 8);
297 changed = state->flags ^ sock->old_flags;
301 set_stschg(sock, 0);
303 cr_clr |= (1 << (7 + (sock->nr * 8)));
304 cr_clr |= (1 << (4 + (sock->nr * 8)));
307 cr_set |= 1 << (7 + (sock->nr * 8));
308 cr_set |= 1 << (4 + (sock->nr * 8));
315 sock->old_flags = state->flags;
320 set_stschg(sock, 1);
341 struct db1x_pcmcia_sock *sock = to_db1x_socket(skt);
345 status = db1x_card_inserted(sock) ? SS_DETECT : 0;
351 if (sock->board_type == BOARD_TYPE_PB1100)
355 switch (GET_VS(sr, sock->nr)) {
366 status |= GET_VCC(cr, sock->nr) ? SS_POWERON : 0;
369 if ((sock->board_type == BOARD_TYPE_DB1300) && (status & SS_DETECT))
373 status |= (GET_RESET(cr, sock->nr)) ? SS_READY : SS_RESET;
393 struct db1x_pcmcia_sock *sock = to_db1x_socket(skt);
395 map->start = (u32)sock->virt_io;
404 struct db1x_pcmcia_sock *sock = to_db1x_socket(skt);
407 map->static_start = sock->phys_attr + map->card_start;
409 map->static_start = sock->phys_mem + map->card_start;
425 struct db1x_pcmcia_sock *sock;
429 sock = kzalloc(sizeof(struct db1x_pcmcia_sock), GFP_KERNEL);
430 if (!sock)
433 sock->nr = pdev->id;
440 sock->board_type = BOARD_TYPE_PB1100;
443 sock->board_type = BOARD_TYPE_DEFAULT;
446 sock->board_type = BOARD_TYPE_DB1200;
449 sock->board_type = BOARD_TYPE_DB1300;
469 sock->card_irq = r ? r->start : 0;
475 sock->insert_irq = r ? r->start : -1;
476 if (sock->board_type == BOARD_TYPE_DEFAULT) {
477 sock->insert_gpio = r ? r->start : -1;
478 sock->insert_irq = r ? gpio_to_irq(r->start) : -1;
483 sock->stschg_irq = r ? r->start : -1;
487 sock->eject_irq = r ? r->start : -1;
495 sock->nr);
498 sock->phys_attr = r->start;
504 sock->nr);
507 sock->phys_mem = r->start;
513 sock->nr);
516 sock->phys_io = r->start;
526 sock->virt_io = (void *)(ioremap(sock->phys_io, IO_MAP_SIZE) -
529 if (!sock->virt_io) {
531 sock->nr);
536 sock->socket.ops = &db1x_pcmcia_operations;
537 sock->socket.owner = THIS_MODULE;
538 sock->socket.pci_irq = sock->card_irq;
539 sock->socket.features = SS_CAP_STATIC_MAP | SS_CAP_PCCARD;
540 sock->socket.map_size = MEM_MAP_SIZE;
541 sock->socket.io_offset = (unsigned long)sock->virt_io;
542 sock->socket.dev.parent = &pdev->dev;
543 sock->socket.resource_ops = &pccard_static_ops;
545 platform_set_drvdata(pdev, sock);
547 ret = db1x_pcmcia_setup_irqs(sock);
550 sock->nr);
554 set_stschg(sock, 0);
556 ret = pcmcia_register_socket(&sock->socket);
558 printk(KERN_ERR "pcmcia%d failed to register\n", sock->nr);
564 "%d %d %d\n", sock->nr, sock->phys_io, sock->virt_io,
565 sock->phys_attr, sock->phys_mem, sock->card_irq,
566 sock->insert_irq, sock->stschg_irq, sock->eject_irq);
571 db1x_pcmcia_free_irqs(sock);
573 iounmap((void *)(sock->virt_io + (u32)mips_io_port_base));
575 kfree(sock);
581 struct db1x_pcmcia_sock *sock = platform_get_drvdata(pdev);
583 db1x_pcmcia_free_irqs(sock);
584 pcmcia_unregister_socket(&sock->socket);
585 iounmap((void *)(sock->virt_io + (u32)mips_io_port_base));
586 kfree(sock);