Lines Matching refs:dev

40 static int send_control_msg(struct au0828_dev *dev, u16 request, u32 value,
42 static int recv_control_msg(struct au0828_dev *dev, u16 request, u32 value,
49 u32 au0828_readreg(struct au0828_dev *dev, u16 reg) in au0828_readreg() argument
53 recv_control_msg(dev, CMD_REQUEST_IN, 0, reg, &result, 1); in au0828_readreg()
59 u32 au0828_writereg(struct au0828_dev *dev, u16 reg, u32 val) in au0828_writereg() argument
62 return send_control_msg(dev, CMD_REQUEST_OUT, val, reg); in au0828_writereg()
65 static int send_control_msg(struct au0828_dev *dev, u16 request, u32 value, in send_control_msg() argument
70 if (dev->usbdev) { in send_control_msg()
73 status = usb_control_msg(dev->usbdev, in send_control_msg()
74 usb_sndctrlpipe(dev->usbdev, 0), in send_control_msg()
92 static int recv_control_msg(struct au0828_dev *dev, u16 request, u32 value, in recv_control_msg() argument
96 mutex_lock(&dev->mutex); in recv_control_msg()
97 if (dev->usbdev) { in recv_control_msg()
98 status = usb_control_msg(dev->usbdev, in recv_control_msg()
99 usb_rcvctrlpipe(dev->usbdev, 0), in recv_control_msg()
103 dev->ctrlmsg, size, 1000); in recv_control_msg()
114 memcpy(cp, dev->ctrlmsg, size); in recv_control_msg()
116 mutex_unlock(&dev->mutex); in recv_control_msg()
125 static void au0828_unregister_media_device(struct au0828_dev *dev) in au0828_unregister_media_device() argument
128 struct media_device *mdev = dev->media_dev; in au0828_unregister_media_device()
143 dev->media_dev->source_priv = NULL; in au0828_unregister_media_device()
144 dev->media_dev->enable_source = NULL; in au0828_unregister_media_device()
145 dev->media_dev->disable_source = NULL; in au0828_unregister_media_device()
148 media_device_delete(dev->media_dev, KBUILD_MODNAME, THIS_MODULE); in au0828_unregister_media_device()
149 dev->media_dev = NULL; in au0828_unregister_media_device()
153 void au0828_usb_release(struct au0828_dev *dev) in au0828_usb_release() argument
155 au0828_unregister_media_device(dev); in au0828_usb_release()
158 au0828_i2c_unregister(dev); in au0828_usb_release()
160 kfree(dev); in au0828_usb_release()
165 struct au0828_dev *dev = usb_get_intfdata(interface); in au0828_usb_disconnect() local
175 set_bit(DEV_DISCONNECTED, &dev->dev_state); in au0828_usb_disconnect()
177 au0828_rc_unregister(dev); in au0828_usb_disconnect()
179 au0828_dvb_unregister(dev); in au0828_usb_disconnect()
182 mutex_lock(&dev->mutex); in au0828_usb_disconnect()
183 dev->usbdev = NULL; in au0828_usb_disconnect()
184 mutex_unlock(&dev->mutex); in au0828_usb_disconnect()
185 if (au0828_analog_unregister(dev)) { in au0828_usb_disconnect()
192 au0828_usb_release(dev); in au0828_usb_disconnect()
195 static int au0828_media_device_init(struct au0828_dev *dev, in au0828_media_device_init() argument
205 dev->media_dev = mdev; in au0828_media_device_init()
214 struct au0828_dev *dev = notify_data; in au0828_media_graph_notify() local
224 media_device_for_each_entity(entity, dev->media_dev) { in au0828_media_graph_notify()
236 if (dev->decoder) in au0828_media_graph_notify()
237 decoder = dev->decoder; in au0828_media_graph_notify()
241 media_device_for_each_entity(entity, dev->media_dev) { in au0828_media_graph_notify()
260 dev_err(&dev->usbdev->dev, in au0828_media_graph_notify()
296 struct au0828_dev *dev; in au0828_enable_source() local
301 dev = mdev->source_priv; in au0828_enable_source()
316 find_source = dev->tuner; in au0828_enable_source()
319 if (!dev->decoder) { in au0828_enable_source()
324 sink = dev->decoder; in au0828_enable_source()
343 if (dev->input_type == AU0828_VMUX_TELEVISION) in au0828_enable_source()
344 find_source = dev->tuner; in au0828_enable_source()
345 else if (dev->input_type == AU0828_VMUX_SVIDEO || in au0828_enable_source()
346 dev->input_type == AU0828_VMUX_COMPOSITE) in au0828_enable_source()
347 find_source = &dev->input_ent[dev->input_type]; in au0828_enable_source()
356 if (dev->active_link) { in au0828_enable_source()
357 if (dev->active_link_owner == entity) { in au0828_enable_source()
365 } else if (au0828_is_link_shareable(dev->active_link_owner, in au0828_enable_source()
375 dev->active_link_shared = true; in au0828_enable_source()
377 dev->active_link_user = entity; in au0828_enable_source()
378 dev->active_link_user_pipe = pipe; in au0828_enable_source()
380 dev->active_link_owner->name, in au0828_enable_source()
427 dev->active_link = found_link; in au0828_enable_source()
428 dev->active_link_owner = entity; in au0828_enable_source()
429 dev->active_source = source; in au0828_enable_source()
430 dev->active_sink = sink; in au0828_enable_source()
433 dev->active_source->name, dev->active_sink->name, in au0828_enable_source()
434 dev->active_link_owner->name, ret); in au0828_enable_source()
446 struct au0828_dev *dev; in au0828_disable_source() local
451 dev = mdev->source_priv; in au0828_disable_source()
453 if (!dev->active_link) in au0828_disable_source()
461 if (dev->active_link->sink->entity == dev->active_sink && in au0828_disable_source()
462 dev->active_link->source->entity == dev->active_source) { in au0828_disable_source()
471 if (dev->active_link_owner->function == in au0828_disable_source()
475 if (dev->active_link_shared) { in au0828_disable_source()
477 dev->active_link_owner->name, in au0828_disable_source()
478 entity->name, dev->users); in au0828_disable_source()
488 if (dev->active_link_owner != entity) { in au0828_disable_source()
490 if (owner_is_audio && dev->users > 1) in au0828_disable_source()
493 dev->active_link_user = NULL; in au0828_disable_source()
494 dev->active_link_user_pipe = NULL; in au0828_disable_source()
495 dev->active_link_shared = false; in au0828_disable_source()
500 if (!owner_is_audio && dev->users > 1) in au0828_disable_source()
504 __media_pipeline_stop(dev->active_link_owner->pads); in au0828_disable_source()
506 dev->active_link_owner->name); in au0828_disable_source()
509 dev->active_link_user->pads, in au0828_disable_source()
510 dev->active_link_user_pipe); in au0828_disable_source()
513 dev->active_source->name, in au0828_disable_source()
514 dev->active_link_user->name, in au0828_disable_source()
519 dev->active_link_owner = dev->active_link_user; in au0828_disable_source()
520 dev->active_link_user = NULL; in au0828_disable_source()
521 dev->active_link_user_pipe = NULL; in au0828_disable_source()
522 dev->active_link_shared = false; in au0828_disable_source()
525 dev->active_link_owner->name); in au0828_disable_source()
527 } else if (!owner_is_audio && dev->users > 1) in au0828_disable_source()
531 if (dev->active_link_owner != entity) in au0828_disable_source()
535 __media_pipeline_stop(dev->active_link_owner->pads); in au0828_disable_source()
537 dev->active_link_owner->name); in au0828_disable_source()
540 ret = __media_entity_setup_link(dev->active_link, 0); in au0828_disable_source()
545 dev->active_source->name, dev->active_sink->name, in au0828_disable_source()
546 dev->active_link_owner->name, ret); in au0828_disable_source()
548 dev->active_link = NULL; in au0828_disable_source()
549 dev->active_link_owner = NULL; in au0828_disable_source()
550 dev->active_source = NULL; in au0828_disable_source()
551 dev->active_sink = NULL; in au0828_disable_source()
552 dev->active_link_shared = false; in au0828_disable_source()
553 dev->active_link_user = NULL; in au0828_disable_source()
558 static int au0828_media_device_register(struct au0828_dev *dev, in au0828_media_device_register() argument
566 if (!dev->media_dev) in au0828_media_device_register()
569 if (!media_devnode_is_registered(dev->media_dev->devnode)) { in au0828_media_device_register()
572 ret = media_device_register(dev->media_dev); in au0828_media_device_register()
574 media_device_delete(dev->media_dev, KBUILD_MODNAME, in au0828_media_device_register()
576 dev->media_dev = NULL; in au0828_media_device_register()
577 dev_err(&udev->dev, in au0828_media_device_register()
589 au0828_media_graph_notify(NULL, (void *) dev); in au0828_media_device_register()
603 media_device_for_each_entity(entity, dev->media_dev) { in au0828_media_device_register()
606 dev->tuner = entity; in au0828_media_device_register()
609 dev->decoder = entity; in au0828_media_device_register()
618 if (dev->tuner) { in au0828_media_device_register()
619 list_for_each_entry(link, &dev->tuner->links, list) { in au0828_media_device_register()
622 if (dev->decoder && link->sink->entity == dev->decoder) in au0828_media_device_register()
628 dev->entity_notify.notify_data = (void *) dev; in au0828_media_device_register()
629 dev->entity_notify.notify = (void *) au0828_media_graph_notify; in au0828_media_device_register()
630 media_device_register_entity_notify(dev->media_dev, in au0828_media_device_register()
631 &dev->entity_notify); in au0828_media_device_register()
634 mutex_lock(&dev->media_dev->graph_mutex); in au0828_media_device_register()
635 dev->media_dev->source_priv = (void *) dev; in au0828_media_device_register()
636 dev->media_dev->enable_source = au0828_enable_source; in au0828_media_device_register()
637 dev->media_dev->disable_source = au0828_disable_source; in au0828_media_device_register()
638 mutex_unlock(&dev->media_dev->graph_mutex); in au0828_media_device_register()
649 struct au0828_dev *dev; in au0828_usb_probe() local
673 dev = kzalloc(sizeof(*dev), GFP_KERNEL); in au0828_usb_probe()
674 if (dev == NULL) { in au0828_usb_probe()
679 mutex_init(&dev->lock); in au0828_usb_probe()
680 mutex_lock(&dev->lock); in au0828_usb_probe()
681 mutex_init(&dev->mutex); in au0828_usb_probe()
682 mutex_init(&dev->dvb.lock); in au0828_usb_probe()
683 dev->usbdev = usbdev; in au0828_usb_probe()
684 dev->boardnr = id->driver_info; in au0828_usb_probe()
685 dev->board = au0828_boards[dev->boardnr]; in au0828_usb_probe()
688 retval = au0828_media_device_init(dev, usbdev); in au0828_usb_probe()
692 mutex_unlock(&dev->lock); in au0828_usb_probe()
693 kfree(dev); in au0828_usb_probe()
697 retval = au0828_v4l2_device_register(interface, dev); in au0828_usb_probe()
699 au0828_usb_v4l2_media_release(dev); in au0828_usb_probe()
700 mutex_unlock(&dev->lock); in au0828_usb_probe()
701 kfree(dev); in au0828_usb_probe()
706 au0828_write(dev, REG_600, 1 << 4); in au0828_usb_probe()
709 au0828_gpio_setup(dev); in au0828_usb_probe()
712 au0828_i2c_register(dev); in au0828_usb_probe()
715 au0828_card_setup(dev); in au0828_usb_probe()
721 usb_set_intfdata(interface, dev); in au0828_usb_probe()
724 retval = au0828_analog_register(dev, interface); in au0828_usb_probe()
728 mutex_unlock(&dev->lock); in au0828_usb_probe()
733 retval = au0828_dvb_register(dev); in au0828_usb_probe()
739 au0828_rc_register(dev); in au0828_usb_probe()
742 dev->board.name == NULL ? "Unset" : dev->board.name); in au0828_usb_probe()
744 mutex_unlock(&dev->lock); in au0828_usb_probe()
746 retval = au0828_media_device_register(dev, usbdev); in au0828_usb_probe()
758 struct au0828_dev *dev = usb_get_intfdata(interface); in au0828_suspend() local
760 if (!dev) in au0828_suspend()
765 au0828_rc_suspend(dev); in au0828_suspend()
766 au0828_v4l2_suspend(dev); in au0828_suspend()
767 au0828_dvb_suspend(dev); in au0828_suspend()
776 struct au0828_dev *dev = usb_get_intfdata(interface); in au0828_resume() local
777 if (!dev) in au0828_resume()
783 au0828_write(dev, REG_600, 1 << 4); in au0828_resume()
786 au0828_gpio_setup(dev); in au0828_resume()
788 au0828_rc_resume(dev); in au0828_resume()
789 au0828_v4l2_resume(dev); in au0828_resume()
790 au0828_dvb_resume(dev); in au0828_resume()