Lines Matching refs:dev

64 static int em28xx_deinit_isoc_audio(struct em28xx *dev)  in em28xx_deinit_isoc_audio()  argument
69 for (i = 0; i < dev->adev.num_urb; i++) { in em28xx_deinit_isoc_audio()
70 struct urb *urb = dev->adev.urb[i]; in em28xx_deinit_isoc_audio()
83 struct em28xx *dev = urb->context; in em28xx_audio_isocirq() local
93 if (dev->disconnected) { in em28xx_audio_isocirq()
95 atomic_set(&dev->adev.stream_started, 0); in em28xx_audio_isocirq()
112 if (atomic_read(&dev->adev.stream_started) == 0) in em28xx_audio_isocirq()
115 if (dev->adev.capture_pcm_substream) { in em28xx_audio_isocirq()
116 substream = dev->adev.capture_pcm_substream; in em28xx_audio_isocirq()
129 oldptr = dev->adev.hwptr_done_capture; in em28xx_audio_isocirq()
144 dev->adev.hwptr_done_capture += length; in em28xx_audio_isocirq()
145 if (dev->adev.hwptr_done_capture >= in em28xx_audio_isocirq()
147 dev->adev.hwptr_done_capture -= in em28xx_audio_isocirq()
150 dev->adev.capture_transfer_done += length; in em28xx_audio_isocirq()
151 if (dev->adev.capture_transfer_done >= in em28xx_audio_isocirq()
153 dev->adev.capture_transfer_done -= in em28xx_audio_isocirq()
172 static int em28xx_init_audio_isoc(struct em28xx *dev) in em28xx_init_audio_isoc() argument
179 for (i = 0; i < dev->adev.num_urb; i++) { in em28xx_init_audio_isoc()
180 memset(dev->adev.transfer_buffer[i], 0x80, in em28xx_init_audio_isoc()
181 dev->adev.urb[i]->transfer_buffer_length); in em28xx_init_audio_isoc()
183 errCode = usb_submit_urb(dev->adev.urb[i], GFP_ATOMIC); in em28xx_init_audio_isoc()
187 em28xx_deinit_isoc_audio(dev); in em28xx_init_audio_isoc()
188 atomic_set(&dev->adev.stream_started, 0); in em28xx_init_audio_isoc()
252 struct em28xx *dev = snd_pcm_substream_chip(substream); in snd_em28xx_capture_open() local
256 if (!dev) { in snd_em28xx_capture_open()
262 if (dev->disconnected) in snd_em28xx_capture_open()
269 if (!mutex_trylock(&dev->lock)) in snd_em28xx_capture_open()
272 mutex_lock(&dev->lock); in snd_em28xx_capture_open()
276 if (dev->adev.users == 0) { in snd_em28xx_capture_open()
277 if (dev->alt == 0 || dev->is_audio_only) { in snd_em28xx_capture_open()
278 if (dev->is_audio_only) in snd_em28xx_capture_open()
280 dev->alt = 1; in snd_em28xx_capture_open()
283 dev->alt = 7; in snd_em28xx_capture_open()
294 dev->ifnum, dev->alt); in snd_em28xx_capture_open()
295 usb_set_interface(dev->udev, dev->ifnum, dev->alt); in snd_em28xx_capture_open()
299 dev->mute = 0; in snd_em28xx_capture_open()
300 ret = em28xx_audio_analog_set(dev); in snd_em28xx_capture_open()
305 kref_get(&dev->ref); in snd_em28xx_capture_open()
306 dev->adev.users++; in snd_em28xx_capture_open()
307 mutex_unlock(&dev->lock); in snd_em28xx_capture_open()
312 dev->adev.period * 95 / 100, in snd_em28xx_capture_open()
313 dev->adev.period * 105 / 100); in snd_em28xx_capture_open()
315 dev->adev.capture_pcm_substream = substream; in snd_em28xx_capture_open()
319 mutex_unlock(&dev->lock); in snd_em28xx_capture_open()
327 struct em28xx *dev = snd_pcm_substream_chip(substream); in snd_em28xx_pcm_close() local
331 dev->mute = 1; in snd_em28xx_pcm_close()
332 mutex_lock(&dev->lock); in snd_em28xx_pcm_close()
333 dev->adev.users--; in snd_em28xx_pcm_close()
334 if (atomic_read(&dev->adev.stream_started) > 0) { in snd_em28xx_pcm_close()
335 atomic_set(&dev->adev.stream_started, 0); in snd_em28xx_pcm_close()
336 schedule_work(&dev->adev.wq_trigger); in snd_em28xx_pcm_close()
339 em28xx_audio_analog_set(dev); in snd_em28xx_pcm_close()
345 mutex_unlock(&dev->lock); in snd_em28xx_pcm_close()
346 kref_put(&dev->ref, em28xx_free_device); in snd_em28xx_pcm_close()
355 struct em28xx *dev = snd_pcm_substream_chip(substream); in snd_em28xx_hw_capture_params() local
357 if (dev->disconnected) in snd_em28xx_hw_capture_params()
382 struct em28xx *dev = snd_pcm_substream_chip(substream); in snd_em28xx_hw_capture_free() local
383 struct em28xx_audio *adev = &dev->adev; in snd_em28xx_hw_capture_free()
397 struct em28xx *dev = snd_pcm_substream_chip(substream); in snd_em28xx_prepare() local
399 if (dev->disconnected) in snd_em28xx_prepare()
402 dev->adev.hwptr_done_capture = 0; in snd_em28xx_prepare()
403 dev->adev.capture_transfer_done = 0; in snd_em28xx_prepare()
412 struct em28xx *dev = container_of(adev, struct em28xx, adev); in audio_trigger() local
416 em28xx_init_audio_isoc(dev); in audio_trigger()
419 em28xx_deinit_isoc_audio(dev); in audio_trigger()
426 struct em28xx *dev = snd_pcm_substream_chip(substream); in snd_em28xx_capture_trigger() local
429 if (dev->disconnected) in snd_em28xx_capture_trigger()
436 atomic_set(&dev->adev.stream_started, 1); in snd_em28xx_capture_trigger()
441 atomic_set(&dev->adev.stream_started, 0); in snd_em28xx_capture_trigger()
446 schedule_work(&dev->adev.wq_trigger); in snd_em28xx_capture_trigger()
454 struct em28xx *dev; in snd_em28xx_capture_pointer() local
457 dev = snd_pcm_substream_chip(substream); in snd_em28xx_capture_pointer()
458 if (dev->disconnected) in snd_em28xx_capture_pointer()
461 spin_lock_irqsave(&dev->adev.slock, flags); in snd_em28xx_capture_pointer()
462 hwptr_done = dev->adev.hwptr_done_capture; in snd_em28xx_capture_pointer()
463 spin_unlock_irqrestore(&dev->adev.slock, flags); in snd_em28xx_capture_pointer()
482 struct em28xx *dev = snd_kcontrol_chip(kcontrol); in em28xx_vol_info() local
484 if (dev->disconnected) in em28xx_vol_info()
498 struct em28xx *dev = snd_kcontrol_chip(kcontrol); in em28xx_vol_put() local
499 struct snd_pcm_substream *substream = dev->adev.capture_pcm_substream; in em28xx_vol_put()
505 if (dev->disconnected) in em28xx_vol_put()
511 if (!mutex_trylock(&dev->lock)) in em28xx_vol_put()
514 mutex_lock(&dev->lock); in em28xx_vol_put()
515 rc = em28xx_read_ac97(dev, kcontrol->private_value); in em28xx_vol_put()
521 rc = em28xx_write_ac97(dev, kcontrol->private_value, val); in em28xx_vol_put()
531 mutex_unlock(&dev->lock); in em28xx_vol_put()
538 struct em28xx *dev = snd_kcontrol_chip(kcontrol); in em28xx_vol_get() local
539 struct snd_pcm_substream *substream = dev->adev.capture_pcm_substream; in em28xx_vol_get()
543 if (dev->disconnected) in em28xx_vol_get()
549 if (!mutex_trylock(&dev->lock)) in em28xx_vol_get()
552 mutex_lock(&dev->lock); in em28xx_vol_get()
553 val = em28xx_read_ac97(dev, kcontrol->private_value); in em28xx_vol_get()
554 mutex_unlock(&dev->lock); in em28xx_vol_get()
572 struct em28xx *dev = snd_kcontrol_chip(kcontrol); in em28xx_vol_put_mute() local
574 struct snd_pcm_substream *substream = dev->adev.capture_pcm_substream; in em28xx_vol_put_mute()
578 if (dev->disconnected) in em28xx_vol_put_mute()
584 if (!mutex_trylock(&dev->lock)) in em28xx_vol_put_mute()
587 mutex_lock(&dev->lock); in em28xx_vol_put_mute()
588 rc = em28xx_read_ac97(dev, kcontrol->private_value); in em28xx_vol_put_mute()
597 rc = em28xx_write_ac97(dev, kcontrol->private_value, rc); in em28xx_vol_put_mute()
607 mutex_unlock(&dev->lock); in em28xx_vol_put_mute()
614 struct em28xx *dev = snd_kcontrol_chip(kcontrol); in em28xx_vol_get_mute() local
615 struct snd_pcm_substream *substream = dev->adev.capture_pcm_substream; in em28xx_vol_get_mute()
619 if (dev->disconnected) in em28xx_vol_get_mute()
625 if (!mutex_trylock(&dev->lock)) in em28xx_vol_get_mute()
628 mutex_lock(&dev->lock); in em28xx_vol_get_mute()
629 val = em28xx_read_ac97(dev, kcontrol->private_value); in em28xx_vol_get_mute()
630 mutex_unlock(&dev->lock); in em28xx_vol_get_mute()
649 static int em28xx_cvol_new(struct snd_card *card, struct em28xx *dev, in em28xx_cvol_new() argument
667 kctl = snd_ctl_new1(&tmp, dev); in em28xx_cvol_new()
685 kctl = snd_ctl_new1(&tmp, dev); in em28xx_cvol_new()
710 static void em28xx_audio_free_urb(struct em28xx *dev) in em28xx_audio_free_urb() argument
714 for (i = 0; i < dev->adev.num_urb; i++) { in em28xx_audio_free_urb()
715 struct urb *urb = dev->adev.urb[i]; in em28xx_audio_free_urb()
720 usb_free_coherent(dev->udev, urb->transfer_buffer_length, in em28xx_audio_free_urb()
721 dev->adev.transfer_buffer[i], in em28xx_audio_free_urb()
726 kfree(dev->adev.urb); in em28xx_audio_free_urb()
727 kfree(dev->adev.transfer_buffer); in em28xx_audio_free_urb()
728 dev->adev.num_urb = 0; in em28xx_audio_free_urb()
743 static int em28xx_audio_urb_init(struct em28xx *dev) in em28xx_audio_urb_init() argument
751 if (dev->ifnum) in em28xx_audio_urb_init()
756 intf = usb_ifnum_to_if(dev->udev, dev->ifnum); in em28xx_audio_urb_init()
760 dev->ifnum, alt); in em28xx_audio_urb_init()
779 ep_size = em28xx_audio_ep_packet_size(dev->udev, ep); in em28xx_audio_urb_init()
783 EM28XX_EP_AUDIO, usb_speed_string(dev->udev->speed), in em28xx_audio_urb_init()
784 dev->ifnum, alt, in em28xx_audio_urb_init()
827 dev->adev.period = urb_size * npackets; in em28xx_audio_urb_init()
831 dev->adev.transfer_buffer = kcalloc(num_urb, in em28xx_audio_urb_init()
832 sizeof(*dev->adev.transfer_buffer), in em28xx_audio_urb_init()
834 if (!dev->adev.transfer_buffer) { in em28xx_audio_urb_init()
838 dev->adev.urb = kcalloc(num_urb, sizeof(*dev->adev.urb), GFP_ATOMIC); in em28xx_audio_urb_init()
839 if (!dev->adev.urb) { in em28xx_audio_urb_init()
840 kfree(dev->adev.transfer_buffer); in em28xx_audio_urb_init()
845 dev->adev.num_urb = num_urb; in em28xx_audio_urb_init()
854 em28xx_audio_free_urb(dev); in em28xx_audio_urb_init()
857 dev->adev.urb[i] = urb; in em28xx_audio_urb_init()
859 buf = usb_alloc_coherent(dev->udev, npackets * ep_size, GFP_ATOMIC, in em28xx_audio_urb_init()
863 em28xx_audio_free_urb(dev); in em28xx_audio_urb_init()
866 dev->adev.transfer_buffer[i] = buf; in em28xx_audio_urb_init()
868 urb->dev = dev->udev; in em28xx_audio_urb_init()
869 urb->context = dev; in em28xx_audio_urb_init()
870 urb->pipe = usb_rcvisocpipe(dev->udev, EM28XX_EP_AUDIO); in em28xx_audio_urb_init()
887 static int em28xx_audio_init(struct em28xx *dev) in em28xx_audio_init() argument
889 struct em28xx_audio *adev = &dev->adev; in em28xx_audio_init()
895 if (dev->usb_audio_type != EM28XX_USB_AUDIO_VENDOR) { in em28xx_audio_init()
904 kref_get(&dev->ref); in em28xx_audio_init()
911 err = snd_card_new(&dev->udev->dev, index[devnr], "Em28xx Audio", in em28xx_audio_init()
918 adev->udev = dev->udev; in em28xx_audio_init()
926 pcm->private_data = dev; in em28xx_audio_init()
935 if (dev->audio_mode.ac97 != EM28XX_NO_AC97) { in em28xx_audio_init()
936 em28xx_cvol_new(card, dev, "Video", AC97_VIDEO); in em28xx_audio_init()
937 em28xx_cvol_new(card, dev, "Line In", AC97_LINE); in em28xx_audio_init()
938 em28xx_cvol_new(card, dev, "Phone", AC97_PHONE); in em28xx_audio_init()
939 em28xx_cvol_new(card, dev, "Microphone", AC97_MIC); in em28xx_audio_init()
940 em28xx_cvol_new(card, dev, "CD", AC97_CD); in em28xx_audio_init()
941 em28xx_cvol_new(card, dev, "AUX", AC97_AUX); in em28xx_audio_init()
942 em28xx_cvol_new(card, dev, "PCM", AC97_PCM); in em28xx_audio_init()
944 em28xx_cvol_new(card, dev, "Master", AC97_MASTER); in em28xx_audio_init()
945 em28xx_cvol_new(card, dev, "Line", AC97_HEADPHONE); in em28xx_audio_init()
946 em28xx_cvol_new(card, dev, "Mono", AC97_MASTER_MONO); in em28xx_audio_init()
947 em28xx_cvol_new(card, dev, "LFE", AC97_CENTER_LFE_MASTER); in em28xx_audio_init()
948 em28xx_cvol_new(card, dev, "Surround", AC97_SURROUND_MASTER); in em28xx_audio_init()
951 err = em28xx_audio_urb_init(dev); in em28xx_audio_init()
963 em28xx_audio_free_urb(dev); in em28xx_audio_init()
972 static int em28xx_audio_fini(struct em28xx *dev) in em28xx_audio_fini() argument
974 if (dev == NULL) in em28xx_audio_fini()
977 if (dev->usb_audio_type != EM28XX_USB_AUDIO_VENDOR) { in em28xx_audio_fini()
986 if (dev->adev.sndcard) { in em28xx_audio_fini()
987 snd_card_disconnect(dev->adev.sndcard); in em28xx_audio_fini()
988 flush_work(&dev->adev.wq_trigger); in em28xx_audio_fini()
990 em28xx_audio_free_urb(dev); in em28xx_audio_fini()
992 snd_card_free(dev->adev.sndcard); in em28xx_audio_fini()
993 dev->adev.sndcard = NULL; in em28xx_audio_fini()
996 kref_put(&dev->ref, em28xx_free_device); in em28xx_audio_fini()
1000 static int em28xx_audio_suspend(struct em28xx *dev) in em28xx_audio_suspend() argument
1002 if (dev == NULL) in em28xx_audio_suspend()
1005 if (dev->usb_audio_type != EM28XX_USB_AUDIO_VENDOR) in em28xx_audio_suspend()
1009 em28xx_deinit_isoc_audio(dev); in em28xx_audio_suspend()
1010 atomic_set(&dev->adev.stream_started, 0); in em28xx_audio_suspend()
1014 static int em28xx_audio_resume(struct em28xx *dev) in em28xx_audio_resume() argument
1016 if (dev == NULL) in em28xx_audio_resume()
1019 if (dev->usb_audio_type != EM28XX_USB_AUDIO_VENDOR) in em28xx_audio_resume()
1024 schedule_work(&dev->adev.wq_trigger); in em28xx_audio_resume()