Lines Matching refs:skt

76 struct pcmcia_socket *pcmcia_get_socket(struct pcmcia_socket *skt)  in pcmcia_get_socket()  argument
78 struct device *dev = get_device(&skt->dev); in pcmcia_get_socket()
86 void pcmcia_put_socket(struct pcmcia_socket *skt) in pcmcia_put_socket() argument
88 put_device(&skt->dev); in pcmcia_put_socket()
252 static int socket_reset(struct pcmcia_socket *skt) in socket_reset() argument
256 dev_dbg(&skt->dev, "reset\n"); in socket_reset()
258 skt->socket.flags |= SS_OUTPUT_ENA | SS_RESET; in socket_reset()
259 skt->ops->set_socket(skt, &skt->socket); in socket_reset()
262 skt->socket.flags &= ~SS_RESET; in socket_reset()
263 skt->ops->set_socket(skt, &skt->socket); in socket_reset()
267 skt->ops->get_status(skt, &status); in socket_reset()
278 dev_err(&skt->dev, "time out after reset\n"); in socket_reset()
335 static int socket_setup(struct pcmcia_socket *skt, int initial_delay) in socket_setup() argument
339 dev_dbg(&skt->dev, "setup\n"); in socket_setup()
341 skt->ops->get_status(skt, &status); in socket_setup()
348 skt->ops->get_status(skt, &status); in socket_setup()
359 dev_err(&skt->dev, "voltage interrogation timed out\n"); in socket_setup()
364 if (!(skt->features & SS_CAP_CARDBUS)) { in socket_setup()
365 dev_err(&skt->dev, "cardbus cards are not supported\n"); in socket_setup()
368 skt->state |= SOCKET_CARDBUS; in socket_setup()
370 skt->state &= ~SOCKET_CARDBUS; in socket_setup()
376 skt->socket.Vcc = skt->socket.Vpp = 33; in socket_setup()
378 skt->socket.Vcc = skt->socket.Vpp = 50; in socket_setup()
380 dev_err(&skt->dev, "unsupported voltage key\n"); in socket_setup()
384 if (skt->power_hook) in socket_setup()
385 skt->power_hook(skt, HOOK_POWER_PRE); in socket_setup()
387 skt->socket.flags = 0; in socket_setup()
388 skt->ops->set_socket(skt, &skt->socket); in socket_setup()
395 skt->ops->get_status(skt, &status); in socket_setup()
397 dev_err(&skt->dev, "unable to apply power\n"); in socket_setup()
401 status = socket_reset(skt); in socket_setup()
403 if (skt->power_hook) in socket_setup()
404 skt->power_hook(skt, HOOK_POWER_POST); in socket_setup()
413 static int socket_insert(struct pcmcia_socket *skt) in socket_insert() argument
417 dev_dbg(&skt->dev, "insert\n"); in socket_insert()
419 mutex_lock(&skt->ops_mutex); in socket_insert()
420 if (skt->state & SOCKET_INUSE) { in socket_insert()
421 mutex_unlock(&skt->ops_mutex); in socket_insert()
424 skt->state |= SOCKET_INUSE; in socket_insert()
426 ret = socket_setup(skt, setup_delay); in socket_insert()
428 skt->state |= SOCKET_PRESENT; in socket_insert()
430 dev_notice(&skt->dev, "pccard: %s card inserted into slot %d\n", in socket_insert()
431 (skt->state & SOCKET_CARDBUS) ? "CardBus" : "PCMCIA", in socket_insert()
432 skt->sock); in socket_insert()
435 if (skt->state & SOCKET_CARDBUS) { in socket_insert()
436 cb_alloc(skt); in socket_insert()
437 skt->state |= SOCKET_CARDBUS_CONFIG; in socket_insert()
440 dev_dbg(&skt->dev, "insert done\n"); in socket_insert()
441 mutex_unlock(&skt->ops_mutex); in socket_insert()
443 if (!(skt->state & SOCKET_CARDBUS) && (skt->callback)) in socket_insert()
444 skt->callback->add(skt); in socket_insert()
446 mutex_unlock(&skt->ops_mutex); in socket_insert()
447 socket_shutdown(skt); in socket_insert()
453 static int socket_suspend(struct pcmcia_socket *skt) in socket_suspend() argument
455 if (skt->state & SOCKET_SUSPEND) in socket_suspend()
458 mutex_lock(&skt->ops_mutex); in socket_suspend()
459 skt->suspended_state = skt->state; in socket_suspend()
461 skt->socket = dead_socket; in socket_suspend()
462 skt->ops->set_socket(skt, &skt->socket); in socket_suspend()
463 if (skt->ops->suspend) in socket_suspend()
464 skt->ops->suspend(skt); in socket_suspend()
465 skt->state |= SOCKET_SUSPEND; 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 mutex_unlock(&skt->ops_mutex); in socket_early_resume()
482 static int socket_late_resume(struct pcmcia_socket *skt) in socket_late_resume() argument
486 mutex_lock(&skt->ops_mutex); in socket_late_resume()
487 skt->state &= ~SOCKET_SUSPEND; in socket_late_resume()
488 mutex_unlock(&skt->ops_mutex); in socket_late_resume()
490 if (!(skt->state & SOCKET_PRESENT)) { in socket_late_resume()
491 ret = socket_insert(skt); in socket_late_resume()
497 if (skt->resume_status) { in socket_late_resume()
498 socket_shutdown(skt); in socket_late_resume()
502 if (skt->suspended_state != skt->state) { in socket_late_resume()
503 dev_dbg(&skt->dev, in socket_late_resume()
505 skt->suspended_state, skt->state); in socket_late_resume()
507 socket_shutdown(skt); in socket_late_resume()
508 return socket_insert(skt); in socket_late_resume()
511 if (!(skt->state & SOCKET_CARDBUS) && (skt->callback)) in socket_late_resume()
512 ret = skt->callback->early_resume(skt); in socket_late_resume()
521 static int socket_complete_resume(struct pcmcia_socket *skt) in socket_complete_resume() argument
525 if (skt->state & SOCKET_CARDBUS) { in socket_complete_resume()
529 cb_free(skt); in socket_complete_resume()
530 ret = cb_alloc(skt); in socket_complete_resume()
532 cb_free(skt); in socket_complete_resume()
543 static int socket_resume(struct pcmcia_socket *skt) in socket_resume() argument
546 if (!(skt->state & SOCKET_SUSPEND)) in socket_resume()
549 socket_early_resume(skt); in socket_resume()
550 err = socket_late_resume(skt); in socket_resume()
552 err = socket_complete_resume(skt); in socket_resume()
556 static void socket_remove(struct pcmcia_socket *skt) in socket_remove() argument
558 dev_notice(&skt->dev, "pccard: card ejected from slot %d\n", skt->sock); in socket_remove()
559 socket_shutdown(skt); in socket_remove()
573 static void socket_detect_change(struct pcmcia_socket *skt) in socket_detect_change() argument
575 if (!(skt->state & SOCKET_SUSPEND)) { in socket_detect_change()
578 if (!(skt->state & SOCKET_PRESENT)) in socket_detect_change()
581 skt->ops->get_status(skt, &status); in socket_detect_change()
582 if ((skt->state & SOCKET_PRESENT) && in socket_detect_change()
584 socket_remove(skt); in socket_detect_change()
585 if (!(skt->state & SOCKET_PRESENT) && in socket_detect_change()
587 socket_insert(skt); in socket_detect_change()
593 struct pcmcia_socket *skt = __skt; in pccardd() local
596 skt->thread = current; in pccardd()
597 skt->socket = dead_socket; in pccardd()
598 skt->ops->init(skt); in pccardd()
599 skt->ops->set_socket(skt, &skt->socket); in pccardd()
602 ret = device_register(&skt->dev); in pccardd()
604 dev_warn(&skt->dev, "PCMCIA: unable to register socket\n"); in pccardd()
605 skt->thread = NULL; in pccardd()
606 complete(&skt->thread_done); in pccardd()
609 ret = pccard_sysfs_add_socket(&skt->dev); in pccardd()
611 dev_warn(&skt->dev, "err %d adding socket attributes\n", ret); in pccardd()
613 complete(&skt->thread_done); in pccardd()
624 spin_lock_irqsave(&skt->thread_lock, flags); in pccardd()
625 events = skt->thread_events; in pccardd()
626 skt->thread_events = 0; in pccardd()
627 sysfs_events = skt->sysfs_events; in pccardd()
628 skt->sysfs_events = 0; in pccardd()
629 spin_unlock_irqrestore(&skt->thread_lock, flags); in pccardd()
631 mutex_lock(&skt->skt_mutex); in pccardd()
633 socket_detect_change(skt); in pccardd()
637 socket_remove(skt); in pccardd()
639 socket_insert(skt); in pccardd()
641 !(skt->state & SOCKET_CARDBUS)) { in pccardd()
642 if (skt->callback) in pccardd()
643 ret = skt->callback->suspend(skt); in pccardd()
647 socket_suspend(skt); in pccardd()
652 !(skt->state & SOCKET_CARDBUS)) { in pccardd()
653 ret = socket_resume(skt); in pccardd()
654 if (!ret && skt->callback) in pccardd()
655 skt->callback->resume(skt); in pccardd()
658 !(skt->state & SOCKET_CARDBUS)) { in pccardd()
659 if (!ret && skt->callback) in pccardd()
660 skt->callback->requery(skt); in pccardd()
663 mutex_unlock(&skt->skt_mutex); in pccardd()
682 if (skt->state & SOCKET_PRESENT) { in pccardd()
683 mutex_lock(&skt->skt_mutex); in pccardd()
684 socket_remove(skt); in pccardd()
685 mutex_unlock(&skt->skt_mutex); in pccardd()
689 pccard_sysfs_remove_socket(&skt->dev); in pccardd()
690 device_unregister(&skt->dev); in pccardd()
773 int pcmcia_reset_card(struct pcmcia_socket *skt) in pcmcia_reset_card() argument
777 dev_dbg(&skt->dev, "resetting socket\n"); in pcmcia_reset_card()
779 mutex_lock(&skt->skt_mutex); in pcmcia_reset_card()
781 if (!(skt->state & SOCKET_PRESENT)) { in pcmcia_reset_card()
782 dev_dbg(&skt->dev, "can't reset, not present\n"); in pcmcia_reset_card()
786 if (skt->state & SOCKET_SUSPEND) { in pcmcia_reset_card()
787 dev_dbg(&skt->dev, "can't reset, suspended\n"); in pcmcia_reset_card()
791 if (skt->state & SOCKET_CARDBUS) { in pcmcia_reset_card()
792 dev_dbg(&skt->dev, "can't reset, is cardbus\n"); in pcmcia_reset_card()
797 if (skt->callback) in pcmcia_reset_card()
798 skt->callback->suspend(skt); in pcmcia_reset_card()
799 mutex_lock(&skt->ops_mutex); in pcmcia_reset_card()
800 ret = socket_reset(skt); in pcmcia_reset_card()
801 mutex_unlock(&skt->ops_mutex); in pcmcia_reset_card()
802 if ((ret == 0) && (skt->callback)) in pcmcia_reset_card()
803 skt->callback->resume(skt); in pcmcia_reset_card()
807 mutex_unlock(&skt->skt_mutex); in pcmcia_reset_card()
837 int (*callback) (struct pcmcia_socket *skt)) in __pcmcia_pm_op()