Lines Matching refs:drv
521 static int cx8802_request_acquire(struct cx8802_driver *drv) in cx8802_request_acquire() argument
523 struct cx88_core *core = drv->core; in cx8802_request_acquire()
528 core->active_type_id != drv->type_id) in cx8802_request_acquire()
531 if (drv->type_id == CX88_MPEG_DVB) { in cx8802_request_acquire()
545 if (drv->advise_acquire) in cx8802_request_acquire()
549 core->active_type_id = drv->type_id; in cx8802_request_acquire()
550 drv->advise_acquire(drv); in cx8802_request_acquire()
560 static int cx8802_request_release(struct cx8802_driver *drv) in cx8802_request_release() argument
562 struct cx88_core *core = drv->core; in cx8802_request_release()
564 if (drv->advise_release && --core->active_ref == 0) in cx8802_request_release()
566 if (drv->type_id == CX88_MPEG_DVB) { in cx8802_request_release()
572 drv->advise_release(drv); in cx8802_request_release()
580 static int cx8802_check_driver(struct cx8802_driver *drv) in cx8802_check_driver() argument
582 if (drv == NULL) in cx8802_check_driver()
585 if ((drv->type_id != CX88_MPEG_DVB) && in cx8802_check_driver()
586 (drv->type_id != CX88_MPEG_BLACKBIRD)) in cx8802_check_driver()
589 if ((drv->hw_access != CX8802_DRVCTL_SHARED) && in cx8802_check_driver()
590 (drv->hw_access != CX8802_DRVCTL_EXCLUSIVE)) in cx8802_check_driver()
593 if ((drv->probe == NULL) || in cx8802_check_driver()
594 (drv->remove == NULL) || in cx8802_check_driver()
595 (drv->advise_acquire == NULL) || in cx8802_check_driver()
596 (drv->advise_release == NULL)) in cx8802_check_driver()
602 int cx8802_register_driver(struct cx8802_driver *drv) in cx8802_register_driver() argument
610 drv->type_id == CX88_MPEG_DVB ? "dvb" : "blackbird", in cx8802_register_driver()
611 drv->hw_access == CX8802_DRVCTL_SHARED ? "shared" : "exclusive"); in cx8802_register_driver()
613 if ((err = cx8802_check_driver(drv)) != 0) { in cx8802_register_driver()
628 driver = kzalloc(sizeof(*drv),GFP_KERNEL); in cx8802_register_driver()
635 drv->core = dev->core; in cx8802_register_driver()
636 drv->suspend = cx8802_suspend_common; in cx8802_register_driver()
637 drv->resume = cx8802_resume_common; in cx8802_register_driver()
638 drv->request_acquire = cx8802_request_acquire; in cx8802_register_driver()
639 drv->request_release = cx8802_request_release; in cx8802_register_driver()
640 memcpy(driver, drv, sizeof(*driver)); in cx8802_register_driver()
642 mutex_lock(&drv->core->lock); in cx8802_register_driver()
643 err = drv->probe(driver); in cx8802_register_driver()
652 mutex_unlock(&drv->core->lock); in cx8802_register_driver()
661 int cx8802_unregister_driver(struct cx8802_driver *drv) in cx8802_unregister_driver() argument
669 drv->type_id == CX88_MPEG_DVB ? "dvb" : "blackbird", in cx8802_unregister_driver()
670 drv->hw_access == CX8802_DRVCTL_SHARED ? "shared" : "exclusive"); in cx8802_unregister_driver()
685 if (d->type_id != drv->type_id) in cx8802_unregister_driver()
775 struct cx8802_driver *drv, *tmp; in cx8802_remove() local
782 list_for_each_entry_safe(drv, tmp, &dev->drvlist, drvlist) { in cx8802_remove()
783 err = drv->remove(drv); in cx8802_remove()
785 list_del(&drv->drvlist); in cx8802_remove()
789 kfree(drv); in cx8802_remove()