Lines Matching refs:skt

73 struct pcmcia_socket *pcmcia_get_socket(struct pcmcia_socket *skt)  in pcmcia_get_socket()  argument
75 struct device *dev = get_device(&skt->dev); in pcmcia_get_socket()
83 void pcmcia_put_socket(struct pcmcia_socket *skt) in pcmcia_put_socket() argument
85 put_device(&skt->dev); in pcmcia_put_socket()
249 static int socket_reset(struct pcmcia_socket *skt) in socket_reset() argument
253 dev_dbg(&skt->dev, "reset\n"); in socket_reset()
255 skt->socket.flags |= SS_OUTPUT_ENA | SS_RESET; in socket_reset()
256 skt->ops->set_socket(skt, &skt->socket); in socket_reset()
259 skt->socket.flags &= ~SS_RESET; in socket_reset()
260 skt->ops->set_socket(skt, &skt->socket); in socket_reset()
264 skt->ops->get_status(skt, &status); in socket_reset()
275 dev_err(&skt->dev, "time out after reset\n"); in socket_reset()
332 static int socket_setup(struct pcmcia_socket *skt, int initial_delay) in socket_setup() argument
336 dev_dbg(&skt->dev, "setup\n"); in socket_setup()
338 skt->ops->get_status(skt, &status); in socket_setup()
345 skt->ops->get_status(skt, &status); in socket_setup()
356 dev_err(&skt->dev, "voltage interrogation timed out\n"); in socket_setup()
361 if (!(skt->features & SS_CAP_CARDBUS)) { in socket_setup()
362 dev_err(&skt->dev, "cardbus cards are not supported\n"); in socket_setup()
365 skt->state |= SOCKET_CARDBUS; in socket_setup()
367 skt->state &= ~SOCKET_CARDBUS; in socket_setup()
373 skt->socket.Vcc = skt->socket.Vpp = 33; in socket_setup()
375 skt->socket.Vcc = skt->socket.Vpp = 50; in socket_setup()
377 dev_err(&skt->dev, "unsupported voltage key\n"); in socket_setup()
381 if (skt->power_hook) in socket_setup()
382 skt->power_hook(skt, HOOK_POWER_PRE); in socket_setup()
384 skt->socket.flags = 0; in socket_setup()
385 skt->ops->set_socket(skt, &skt->socket); in socket_setup()
392 skt->ops->get_status(skt, &status); in socket_setup()
394 dev_err(&skt->dev, "unable to apply power\n"); in socket_setup()
398 status = socket_reset(skt); in socket_setup()
400 if (skt->power_hook) in socket_setup()
401 skt->power_hook(skt, HOOK_POWER_POST); in socket_setup()
410 static int socket_insert(struct pcmcia_socket *skt) in socket_insert() argument
414 dev_dbg(&skt->dev, "insert\n"); in socket_insert()
416 mutex_lock(&skt->ops_mutex); in socket_insert()
417 if (skt->state & SOCKET_INUSE) { in socket_insert()
418 mutex_unlock(&skt->ops_mutex); in socket_insert()
421 skt->state |= SOCKET_INUSE; in socket_insert()
423 ret = socket_setup(skt, setup_delay); in socket_insert()
425 skt->state |= SOCKET_PRESENT; in socket_insert()
427 dev_notice(&skt->dev, "pccard: %s card inserted into slot %d\n", in socket_insert()
428 (skt->state & SOCKET_CARDBUS) ? "CardBus" : "PCMCIA", in socket_insert()
429 skt->sock); in socket_insert()
432 if (skt->state & SOCKET_CARDBUS) { in socket_insert()
433 cb_alloc(skt); in socket_insert()
434 skt->state |= SOCKET_CARDBUS_CONFIG; in socket_insert()
437 dev_dbg(&skt->dev, "insert done\n"); in socket_insert()
438 mutex_unlock(&skt->ops_mutex); in socket_insert()
440 if (!(skt->state & SOCKET_CARDBUS) && (skt->callback)) in socket_insert()
441 skt->callback->add(skt); in socket_insert()
443 mutex_unlock(&skt->ops_mutex); in socket_insert()
444 socket_shutdown(skt); in socket_insert()
450 static int socket_suspend(struct pcmcia_socket *skt) in socket_suspend() argument
452 if ((skt->state & SOCKET_SUSPEND) && !(skt->state & SOCKET_IN_RESUME)) in socket_suspend()
455 mutex_lock(&skt->ops_mutex); in socket_suspend()
457 if (!(skt->state & SOCKET_IN_RESUME)) in socket_suspend()
458 skt->suspended_state = skt->state; in socket_suspend()
460 skt->socket = dead_socket; in socket_suspend()
461 skt->ops->set_socket(skt, &skt->socket); in socket_suspend()
462 if (skt->ops->suspend) in socket_suspend()
463 skt->ops->suspend(skt); in socket_suspend()
464 skt->state |= SOCKET_SUSPEND; in socket_suspend()
465 skt->state &= ~SOCKET_IN_RESUME; in socket_suspend()
466 mutex_unlock(&skt->ops_mutex); in socket_suspend()
470 static int socket_early_resume(struct pcmcia_socket *skt) in socket_early_resume() argument
472 mutex_lock(&skt->ops_mutex); in socket_early_resume()
473 skt->socket = dead_socket; in socket_early_resume()
474 skt->ops->init(skt); in socket_early_resume()
475 skt->ops->set_socket(skt, &skt->socket); in socket_early_resume()
476 if (skt->state & SOCKET_PRESENT) in socket_early_resume()
477 skt->resume_status = socket_setup(skt, resume_delay); in socket_early_resume()
478 skt->state |= SOCKET_IN_RESUME; in socket_early_resume()
479 mutex_unlock(&skt->ops_mutex); in socket_early_resume()
483 static int socket_late_resume(struct pcmcia_socket *skt) in socket_late_resume() argument
487 mutex_lock(&skt->ops_mutex); in socket_late_resume()
488 skt->state &= ~(SOCKET_SUSPEND | SOCKET_IN_RESUME); in socket_late_resume()
489 mutex_unlock(&skt->ops_mutex); in socket_late_resume()
491 if (!(skt->state & SOCKET_PRESENT)) { in socket_late_resume()
492 ret = socket_insert(skt); in socket_late_resume()
498 if (skt->resume_status) { in socket_late_resume()
499 socket_shutdown(skt); in socket_late_resume()
503 if (skt->suspended_state != skt->state) { in socket_late_resume()
504 dev_dbg(&skt->dev, in socket_late_resume()
506 skt->suspended_state, skt->state); in socket_late_resume()
508 socket_shutdown(skt); in socket_late_resume()
509 return socket_insert(skt); in socket_late_resume()
512 if (!(skt->state & SOCKET_CARDBUS) && (skt->callback)) in socket_late_resume()
513 ret = skt->callback->early_resume(skt); in socket_late_resume()
522 static int socket_complete_resume(struct pcmcia_socket *skt) in socket_complete_resume() argument
526 if (skt->state & SOCKET_CARDBUS) { in socket_complete_resume()
530 cb_free(skt); in socket_complete_resume()
531 ret = cb_alloc(skt); in socket_complete_resume()
533 cb_free(skt); in socket_complete_resume()
544 static int socket_resume(struct pcmcia_socket *skt) in socket_resume() argument
547 if (!(skt->state & SOCKET_SUSPEND)) in socket_resume()
550 socket_early_resume(skt); in socket_resume()
551 err = socket_late_resume(skt); in socket_resume()
553 err = socket_complete_resume(skt); in socket_resume()
557 static void socket_remove(struct pcmcia_socket *skt) in socket_remove() argument
559 dev_notice(&skt->dev, "pccard: card ejected from slot %d\n", skt->sock); in socket_remove()
560 socket_shutdown(skt); in socket_remove()
574 static void socket_detect_change(struct pcmcia_socket *skt) in socket_detect_change() argument
576 if (!(skt->state & SOCKET_SUSPEND)) { in socket_detect_change()
579 if (!(skt->state & SOCKET_PRESENT)) in socket_detect_change()
582 skt->ops->get_status(skt, &status); in socket_detect_change()
583 if ((skt->state & SOCKET_PRESENT) && in socket_detect_change()
585 socket_remove(skt); in socket_detect_change()
586 if (!(skt->state & SOCKET_PRESENT) && in socket_detect_change()
588 socket_insert(skt); in socket_detect_change()
594 struct pcmcia_socket *skt = __skt; in pccardd() local
597 skt->thread = current; in pccardd()
598 skt->socket = dead_socket; in pccardd()
599 skt->ops->init(skt); in pccardd()
600 skt->ops->set_socket(skt, &skt->socket); in pccardd()
603 ret = device_register(&skt->dev); in pccardd()
605 dev_warn(&skt->dev, "PCMCIA: unable to register socket\n"); in pccardd()
606 skt->thread = NULL; in pccardd()
607 complete(&skt->thread_done); in pccardd()
610 ret = pccard_sysfs_add_socket(&skt->dev); in pccardd()
612 dev_warn(&skt->dev, "err %d adding socket attributes\n", ret); in pccardd()
614 complete(&skt->thread_done); in pccardd()
625 spin_lock_irqsave(&skt->thread_lock, flags); in pccardd()
626 events = skt->thread_events; in pccardd()
627 skt->thread_events = 0; in pccardd()
628 sysfs_events = skt->sysfs_events; in pccardd()
629 skt->sysfs_events = 0; in pccardd()
630 spin_unlock_irqrestore(&skt->thread_lock, flags); in pccardd()
632 mutex_lock(&skt->skt_mutex); in pccardd()
634 socket_detect_change(skt); in pccardd()
638 socket_remove(skt); in pccardd()
640 socket_insert(skt); in pccardd()
642 !(skt->state & SOCKET_CARDBUS)) { in pccardd()
643 if (skt->callback) in pccardd()
644 ret = skt->callback->suspend(skt); in pccardd()
648 socket_suspend(skt); in pccardd()
653 !(skt->state & SOCKET_CARDBUS)) { in pccardd()
654 ret = socket_resume(skt); in pccardd()
655 if (!ret && skt->callback) in pccardd()
656 skt->callback->resume(skt); in pccardd()
659 !(skt->state & SOCKET_CARDBUS)) { in pccardd()
660 if (!ret && skt->callback) in pccardd()
661 skt->callback->requery(skt); in pccardd()
664 mutex_unlock(&skt->skt_mutex); in pccardd()
683 if (skt->state & SOCKET_PRESENT) { in pccardd()
684 mutex_lock(&skt->skt_mutex); in pccardd()
685 socket_remove(skt); in pccardd()
686 mutex_unlock(&skt->skt_mutex); in pccardd()
690 pccard_sysfs_remove_socket(&skt->dev); in pccardd()
691 device_unregister(&skt->dev); in pccardd()
774 int pcmcia_reset_card(struct pcmcia_socket *skt) in pcmcia_reset_card() argument
778 dev_dbg(&skt->dev, "resetting socket\n"); in pcmcia_reset_card()
780 mutex_lock(&skt->skt_mutex); in pcmcia_reset_card()
782 if (!(skt->state & SOCKET_PRESENT)) { in pcmcia_reset_card()
783 dev_dbg(&skt->dev, "can't reset, not present\n"); in pcmcia_reset_card()
787 if (skt->state & SOCKET_SUSPEND) { in pcmcia_reset_card()
788 dev_dbg(&skt->dev, "can't reset, suspended\n"); in pcmcia_reset_card()
792 if (skt->state & SOCKET_CARDBUS) { in pcmcia_reset_card()
793 dev_dbg(&skt->dev, "can't reset, is cardbus\n"); in pcmcia_reset_card()
798 if (skt->callback) in pcmcia_reset_card()
799 skt->callback->suspend(skt); in pcmcia_reset_card()
800 mutex_lock(&skt->ops_mutex); in pcmcia_reset_card()
801 ret = socket_reset(skt); in pcmcia_reset_card()
802 mutex_unlock(&skt->ops_mutex); in pcmcia_reset_card()
803 if ((ret == 0) && (skt->callback)) in pcmcia_reset_card()
804 skt->callback->resume(skt); in pcmcia_reset_card()
808 mutex_unlock(&skt->skt_mutex); in pcmcia_reset_card()
838 int (*callback) (struct pcmcia_socket *skt)) in __pcmcia_pm_op()