Lines Matching refs:chip

132 static int snd_usb_create_stream(struct snd_usb_audio *chip, int ctrlif, int interface)  in snd_usb_create_stream()  argument
134 struct usb_device *dev = chip->dev; in snd_usb_create_stream()
152 if ((chip->usb_id == USB_ID(0x18d1, 0x2d04) || in snd_usb_create_stream()
153 chip->usb_id == USB_ID(0x18d1, 0x2d05)) && in snd_usb_create_stream()
174 int err = snd_usbmidi_create(chip->card, iface, in snd_usb_create_stream()
175 &chip->midi_list, NULL); in snd_usb_create_stream()
202 if (! snd_usb_parse_audio_interface(chip, interface)) { in snd_usb_create_stream()
214 static int snd_usb_create_streams(struct snd_usb_audio *chip, int ctrlif) in snd_usb_create_streams() argument
216 struct usb_device *dev = chip->dev; in snd_usb_create_streams()
256 snd_usb_create_stream(chip, ctrlif, h1->baInterfaceNr[i]); in snd_usb_create_streams()
289 snd_usb_create_stream(chip, ctrlif, intf); in snd_usb_create_streams()
306 static int snd_usb_audio_free(struct snd_usb_audio *chip) in snd_usb_audio_free() argument
310 list_for_each_entry_safe(ep, n, &chip->ep_list, list) in snd_usb_audio_free()
313 mutex_destroy(&chip->mutex); in snd_usb_audio_free()
314 kfree(chip); in snd_usb_audio_free()
320 struct snd_usb_audio *chip = device->device_data; in snd_usb_audio_dev_free() local
321 return snd_usb_audio_free(chip); in snd_usb_audio_dev_free()
333 struct snd_usb_audio *chip; in snd_usb_audio_create() local
361 chip = kzalloc(sizeof(*chip), GFP_KERNEL); in snd_usb_audio_create()
362 if (! chip) { in snd_usb_audio_create()
367 mutex_init(&chip->mutex); in snd_usb_audio_create()
368 init_waitqueue_head(&chip->shutdown_wait); in snd_usb_audio_create()
369 chip->index = idx; in snd_usb_audio_create()
370 chip->dev = dev; in snd_usb_audio_create()
371 chip->card = card; in snd_usb_audio_create()
372 chip->setup = device_setup[idx]; in snd_usb_audio_create()
373 chip->autoclock = autoclock; in snd_usb_audio_create()
374 chip->probing = 1; in snd_usb_audio_create()
375 atomic_set(&chip->usage_count, 0); in snd_usb_audio_create()
376 atomic_set(&chip->shutdown, 0); in snd_usb_audio_create()
378 chip->usb_id = USB_ID(le16_to_cpu(dev->descriptor.idVendor), in snd_usb_audio_create()
380 INIT_LIST_HEAD(&chip->pcm_list); in snd_usb_audio_create()
381 INIT_LIST_HEAD(&chip->ep_list); in snd_usb_audio_create()
382 INIT_LIST_HEAD(&chip->midi_list); in snd_usb_audio_create()
383 INIT_LIST_HEAD(&chip->mixer_list); in snd_usb_audio_create()
385 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { in snd_usb_audio_create()
386 snd_usb_audio_free(chip); in snd_usb_audio_create()
393 USB_ID_VENDOR(chip->usb_id), USB_ID_PRODUCT(chip->usb_id)); in snd_usb_audio_create()
405 USB_ID_VENDOR(chip->usb_id), in snd_usb_audio_create()
406 USB_ID_PRODUCT(chip->usb_id)); in snd_usb_audio_create()
452 snd_usb_audio_create_proc(chip); in snd_usb_audio_create()
454 *rchip = chip; in snd_usb_audio_create()
474 struct snd_usb_audio *chip; in usb_audio_probe() local
496 chip = NULL; in usb_audio_probe()
505 chip = usb_chip[i]; in usb_audio_probe()
506 chip->probing = 1; in usb_audio_probe()
510 if (! chip) { in usb_audio_probe()
519 &chip); in usb_audio_probe()
522 chip->pm_intf = intf; in usb_audio_probe()
525 if (!chip) { in usb_audio_probe()
537 if (!chip->ctrl_intf) in usb_audio_probe()
538 chip->ctrl_intf = alts; in usb_audio_probe()
540 chip->txfr_quirk = 0; in usb_audio_probe()
544 err = snd_usb_create_quirk(chip, intf, &usb_audio_driver, quirk); in usb_audio_probe()
551 err = snd_usb_create_streams(chip, ifnum); in usb_audio_probe()
554 err = snd_usb_create_mixer(chip, ifnum, ignore_ctl_error); in usb_audio_probe()
560 err = snd_card_register(chip->card); in usb_audio_probe()
564 usb_chip[chip->index] = chip; in usb_audio_probe()
565 chip->num_interfaces++; in usb_audio_probe()
566 chip->probing = 0; in usb_audio_probe()
567 usb_set_intfdata(intf, chip); in usb_audio_probe()
572 if (chip) { in usb_audio_probe()
573 if (!chip->num_interfaces) in usb_audio_probe()
574 snd_card_free(chip->card); in usb_audio_probe()
575 chip->probing = 0; in usb_audio_probe()
587 struct snd_usb_audio *chip = usb_get_intfdata(intf); in usb_audio_disconnect() local
591 if (chip == (void *)-1L) in usb_audio_disconnect()
594 card = chip->card; in usb_audio_disconnect()
597 if (atomic_inc_return(&chip->shutdown) == 1) { in usb_audio_disconnect()
605 wait_event(chip->shutdown_wait, in usb_audio_disconnect()
606 !atomic_read(&chip->usage_count)); in usb_audio_disconnect()
609 list_for_each_entry(as, &chip->pcm_list, list) { in usb_audio_disconnect()
613 list_for_each_entry(ep, &chip->ep_list, list) { in usb_audio_disconnect()
617 list_for_each(p, &chip->midi_list) { in usb_audio_disconnect()
621 list_for_each_entry(mixer, &chip->mixer_list, list) { in usb_audio_disconnect()
626 chip->num_interfaces--; in usb_audio_disconnect()
627 if (chip->num_interfaces <= 0) { in usb_audio_disconnect()
628 usb_chip[chip->index] = NULL; in usb_audio_disconnect()
637 int snd_usb_lock_shutdown(struct snd_usb_audio *chip) in snd_usb_lock_shutdown() argument
641 atomic_inc(&chip->usage_count); in snd_usb_lock_shutdown()
642 if (atomic_read(&chip->shutdown)) { in snd_usb_lock_shutdown()
646 err = snd_usb_autoresume(chip); in snd_usb_lock_shutdown()
652 if (atomic_dec_and_test(&chip->usage_count)) in snd_usb_lock_shutdown()
653 wake_up(&chip->shutdown_wait); in snd_usb_lock_shutdown()
658 void snd_usb_unlock_shutdown(struct snd_usb_audio *chip) in snd_usb_unlock_shutdown() argument
660 snd_usb_autosuspend(chip); in snd_usb_unlock_shutdown()
661 if (atomic_dec_and_test(&chip->usage_count)) in snd_usb_unlock_shutdown()
662 wake_up(&chip->shutdown_wait); in snd_usb_unlock_shutdown()
667 int snd_usb_autoresume(struct snd_usb_audio *chip) in snd_usb_autoresume() argument
669 if (atomic_read(&chip->shutdown)) in snd_usb_autoresume()
671 if (chip->probing) in snd_usb_autoresume()
673 if (atomic_inc_return(&chip->active) == 1) in snd_usb_autoresume()
674 return usb_autopm_get_interface(chip->pm_intf); in snd_usb_autoresume()
678 void snd_usb_autosuspend(struct snd_usb_audio *chip) in snd_usb_autosuspend() argument
680 if (chip->probing) in snd_usb_autosuspend()
682 if (atomic_read(&chip->shutdown)) in snd_usb_autosuspend()
684 if (atomic_dec_and_test(&chip->active)) in snd_usb_autosuspend()
685 usb_autopm_put_interface(chip->pm_intf); in snd_usb_autosuspend()
690 struct snd_usb_audio *chip = usb_get_intfdata(intf); in usb_audio_suspend() local
695 if (chip == (void *)-1L) in usb_audio_suspend()
699 snd_power_change_state(chip->card, SNDRV_CTL_POWER_D3hot); in usb_audio_suspend()
700 if (!chip->num_suspended_intf++) { in usb_audio_suspend()
701 list_for_each_entry(as, &chip->pcm_list, list) { in usb_audio_suspend()
706 list_for_each(p, &chip->midi_list) { in usb_audio_suspend()
715 if (!chip->num_suspended_intf++) in usb_audio_suspend()
716 chip->autosuspended = 1; in usb_audio_suspend()
719 if (chip->num_suspended_intf == 1) in usb_audio_suspend()
720 list_for_each_entry(mixer, &chip->mixer_list, list) in usb_audio_suspend()
728 struct snd_usb_audio *chip = usb_get_intfdata(intf); in __usb_audio_resume() local
733 if (chip == (void *)-1L) in __usb_audio_resume()
735 if (--chip->num_suspended_intf) in __usb_audio_resume()
738 atomic_inc(&chip->active); /* avoid autopm */ in __usb_audio_resume()
743 list_for_each_entry(mixer, &chip->mixer_list, list) { in __usb_audio_resume()
749 list_for_each(p, &chip->midi_list) { in __usb_audio_resume()
753 if (!chip->autosuspended) in __usb_audio_resume()
754 snd_power_change_state(chip->card, SNDRV_CTL_POWER_D0); in __usb_audio_resume()
755 chip->autosuspended = 0; in __usb_audio_resume()
758 atomic_dec(&chip->active); /* allow autopm after this point */ in __usb_audio_resume()