• Home
  • Raw
  • Download

Lines Matching refs:card

97 int (*snd_mixer_oss_notify_callback)(struct snd_card *card, int free_flag);
105 snd_iprintf(buffer, "%s\n", entry->card->id); in snd_card_id_read()
108 static inline int init_info_for_card(struct snd_card *card) in init_info_for_card() argument
113 if ((err = snd_info_card_register(card)) < 0) { in init_info_for_card()
117 if ((entry = snd_info_create_card_entry(card, "id", card->proc_root)) == NULL) { in init_info_for_card()
126 card->proc_id = entry; in init_info_for_card()
130 #define init_info_for_card(card) argument
153 struct snd_card *card; in snd_card_create() local
162 card = kzalloc(sizeof(*card) + extra_size, GFP_KERNEL); in snd_card_create()
163 if (!card) in snd_card_create()
166 strlcpy(card->id, xid, sizeof(card->id)); in snd_card_create()
206 card->number = idx; in snd_card_create()
207 card->module = module; in snd_card_create()
208 INIT_LIST_HEAD(&card->devices); in snd_card_create()
209 init_rwsem(&card->controls_rwsem); in snd_card_create()
210 rwlock_init(&card->ctl_files_rwlock); in snd_card_create()
211 INIT_LIST_HEAD(&card->controls); in snd_card_create()
212 INIT_LIST_HEAD(&card->ctl_files); in snd_card_create()
213 spin_lock_init(&card->files_lock); in snd_card_create()
214 INIT_LIST_HEAD(&card->files_list); in snd_card_create()
215 init_waitqueue_head(&card->shutdown_sleep); in snd_card_create()
216 atomic_set(&card->refcount, 0); in snd_card_create()
218 mutex_init(&card->power_lock); in snd_card_create()
219 init_waitqueue_head(&card->power_sleep); in snd_card_create()
223 err = snd_ctl_create(card); in snd_card_create()
228 err = snd_info_card_create(card); in snd_card_create()
234 card->private_data = (char *)card + sizeof(struct snd_card); in snd_card_create()
235 *card_ret = card; in snd_card_create()
239 snd_device_free_all(card, SNDRV_DEV_CMD_PRE); in snd_card_create()
241 kfree(card); in snd_card_create()
247 int snd_card_locked(int card) in snd_card_locked() argument
252 locked = snd_cards_lock & (1 << card); in snd_card_locked()
345 int snd_card_disconnect(struct snd_card *card) in snd_card_disconnect() argument
350 if (!card) in snd_card_disconnect()
353 spin_lock(&card->files_lock); in snd_card_disconnect()
354 if (card->shutdown) { in snd_card_disconnect()
355 spin_unlock(&card->files_lock); in snd_card_disconnect()
358 card->shutdown = 1; in snd_card_disconnect()
359 spin_unlock(&card->files_lock); in snd_card_disconnect()
363 snd_cards[card->number] = NULL; in snd_card_disconnect()
364 snd_cards_lock &= ~(1 << card->number); in snd_card_disconnect()
369 spin_lock(&card->files_lock); in snd_card_disconnect()
370 list_for_each_entry(mfile, &card->files_list, list) { in snd_card_disconnect()
382 spin_unlock(&card->files_lock); in snd_card_disconnect()
389 snd_mixer_oss_notify_callback(card, SND_MIXER_OSS_NOTIFY_DISCONNECT); in snd_card_disconnect()
393 err = snd_device_disconnect_all(card); in snd_card_disconnect()
395 snd_printk(KERN_ERR "not all devices for card %i can be disconnected\n", card->number); in snd_card_disconnect()
397 snd_info_card_disconnect(card); in snd_card_disconnect()
398 if (card->card_dev) { in snd_card_disconnect()
399 device_unregister(card->card_dev); in snd_card_disconnect()
400 card->card_dev = NULL; in snd_card_disconnect()
403 wake_up(&card->power_sleep); in snd_card_disconnect()
421 static int snd_card_do_free(struct snd_card *card) in snd_card_do_free() argument
425 snd_mixer_oss_notify_callback(card, SND_MIXER_OSS_NOTIFY_FREE); in snd_card_do_free()
427 if (snd_device_free_all(card, SNDRV_DEV_CMD_PRE) < 0) { in snd_card_do_free()
431 if (snd_device_free_all(card, SNDRV_DEV_CMD_NORMAL) < 0) { in snd_card_do_free()
435 if (snd_device_free_all(card, SNDRV_DEV_CMD_POST) < 0) { in snd_card_do_free()
439 if (card->private_free) in snd_card_do_free()
440 card->private_free(card); in snd_card_do_free()
441 snd_info_free_entry(card->proc_id); in snd_card_do_free()
442 if (snd_info_card_free(card) < 0) { in snd_card_do_free()
446 kfree(card); in snd_card_do_free()
457 void snd_card_unref(struct snd_card *card) in snd_card_unref() argument
459 if (atomic_dec_and_test(&card->refcount)) { in snd_card_unref()
460 wake_up(&card->shutdown_sleep); in snd_card_unref()
461 if (card->free_on_last_close) in snd_card_unref()
462 snd_card_do_free(card); in snd_card_unref()
467 int snd_card_free_when_closed(struct snd_card *card) in snd_card_free_when_closed() argument
471 atomic_inc(&card->refcount); in snd_card_free_when_closed()
472 ret = snd_card_disconnect(card); in snd_card_free_when_closed()
474 atomic_dec(&card->refcount); in snd_card_free_when_closed()
478 card->free_on_last_close = 1; in snd_card_free_when_closed()
479 if (atomic_dec_and_test(&card->refcount)) in snd_card_free_when_closed()
480 snd_card_do_free(card); in snd_card_free_when_closed()
486 int snd_card_free(struct snd_card *card) in snd_card_free() argument
488 int ret = snd_card_disconnect(card); in snd_card_free()
493 wait_event(card->shutdown_sleep, !atomic_read(&card->refcount)); in snd_card_free()
494 snd_card_do_free(card); in snd_card_free()
514 static bool card_id_ok(struct snd_card *card, const char *id) in card_id_ok() argument
520 if (snd_cards[i] && snd_cards[i] != card && in card_id_ok()
528 static void copy_valid_id_string(struct snd_card *card, const char *src, in copy_valid_id_string() argument
531 char *id = card->id; in copy_valid_id_string()
537 while (*nid && (size_t)(id - card->id) < sizeof(card->id) - 1) { in copy_valid_id_string()
548 static void snd_card_set_id_no_lock(struct snd_card *card, const char *src, in snd_card_set_id_no_lock() argument
556 copy_valid_id_string(card, src, nid); in snd_card_set_id_no_lock()
557 id = card->id; in snd_card_set_id_no_lock()
570 if (card_id_ok(card, id)) in snd_card_set_id_no_lock()
577 if (len > sizeof(card->id) - 3) in snd_card_set_id_no_lock()
578 spos = id + sizeof(card->id) - 3; in snd_card_set_id_no_lock()
596 if (card->proc_root->name) in snd_card_set_id_no_lock()
597 strcpy(card->id, card->proc_root->name); in snd_card_set_id_no_lock()
608 void snd_card_set_id(struct snd_card *card, const char *nid) in snd_card_set_id() argument
611 if (card->id[0] != '\0') in snd_card_set_id()
614 snd_card_set_id_no_lock(card, nid, nid); in snd_card_set_id()
623 struct snd_card *card = dev_get_drvdata(dev); in card_id_show_attr() local
624 return snprintf(buf, PAGE_SIZE, "%s\n", card ? card->id : "(null)"); in card_id_show_attr()
631 struct snd_card *card = dev_get_drvdata(dev); in card_id_store_attr() local
632 char buf1[sizeof(card->id)]; in card_id_store_attr()
633 size_t copy = count > sizeof(card->id) - 1 ? in card_id_store_attr()
634 sizeof(card->id) - 1 : count; in card_id_store_attr()
650 strcpy(card->id, buf1); in card_id_store_attr()
651 snd_info_card_id_change(card); in card_id_store_attr()
664 struct snd_card *card = dev_get_drvdata(dev); in card_number_show_attr() local
665 return snprintf(buf, PAGE_SIZE, "%i\n", card ? card->number : -1); in card_number_show_attr()
682 int snd_card_register(struct snd_card *card) in snd_card_register() argument
686 if (snd_BUG_ON(!card)) in snd_card_register()
689 if (!card->card_dev) { in snd_card_register()
690 card->card_dev = device_create(sound_class, card->dev, in snd_card_register()
691 MKDEV(0, 0), card, in snd_card_register()
692 "card%i", card->number); in snd_card_register()
693 if (IS_ERR(card->card_dev)) in snd_card_register()
694 card->card_dev = NULL; in snd_card_register()
697 if ((err = snd_device_register_all(card)) < 0) in snd_card_register()
700 if (snd_cards[card->number]) { in snd_card_register()
705 if (*card->id) { in snd_card_register()
707 char tmpid[sizeof(card->id)]; in snd_card_register()
708 memcpy(tmpid, card->id, sizeof(card->id)); in snd_card_register()
709 snd_card_set_id_no_lock(card, tmpid, tmpid); in snd_card_register()
713 src = *card->shortname ? card->shortname : card->longname; in snd_card_register()
714 snd_card_set_id_no_lock(card, src, in snd_card_register()
717 snd_cards[card->number] = card; in snd_card_register()
719 init_info_for_card(card); in snd_card_register()
722 snd_mixer_oss_notify_callback(card, SND_MIXER_OSS_NOTIFY_REGISTER); in snd_card_register()
724 if (card->card_dev) { in snd_card_register()
725 err = device_create_file(card->card_dev, &card_id_attrs); in snd_card_register()
728 err = device_create_file(card->card_dev, &card_number_attrs); in snd_card_register()
745 struct snd_card *card; in snd_card_info_read() local
749 if ((card = snd_cards[idx]) != NULL) { in snd_card_info_read()
753 card->id, in snd_card_info_read()
754 card->driver, in snd_card_info_read()
755 card->shortname); in snd_card_info_read()
757 card->longname); in snd_card_info_read()
770 struct snd_card *card; in snd_card_info_read_oss() local
774 if ((card = snd_cards[idx]) != NULL) { in snd_card_info_read_oss()
776 snd_iprintf(buffer, "%s\n", card->longname); in snd_card_info_read_oss()
793 struct snd_card *card; in snd_card_module_info_read() local
797 if ((card = snd_cards[idx]) != NULL) in snd_card_module_info_read()
799 idx, card->module->name); in snd_card_module_info_read()
855 int snd_component_add(struct snd_card *card, const char *component) in snd_component_add() argument
860 ptr = strstr(card->components, component); in snd_component_add()
865 if (strlen(card->components) + 1 + len + 1 > sizeof(card->components)) { in snd_component_add()
869 if (card->components[0] != '\0') in snd_component_add()
870 strcat(card->components, " "); in snd_component_add()
871 strcat(card->components, component); in snd_component_add()
888 int snd_card_file_add(struct snd_card *card, struct file *file) in snd_card_file_add() argument
898 spin_lock(&card->files_lock); in snd_card_file_add()
899 if (card->shutdown) { in snd_card_file_add()
900 spin_unlock(&card->files_lock); in snd_card_file_add()
904 list_add(&mfile->list, &card->files_list); in snd_card_file_add()
905 atomic_inc(&card->refcount); in snd_card_file_add()
906 spin_unlock(&card->files_lock); in snd_card_file_add()
925 int snd_card_file_remove(struct snd_card *card, struct file *file) in snd_card_file_remove() argument
929 spin_lock(&card->files_lock); in snd_card_file_remove()
930 list_for_each_entry(mfile, &card->files_list, list) { in snd_card_file_remove()
942 spin_unlock(&card->files_lock); in snd_card_file_remove()
948 snd_card_unref(card); in snd_card_file_remove()
966 int snd_power_wait(struct snd_card *card, unsigned int power_state) in snd_power_wait() argument
972 if (snd_power_get_state(card) == power_state) in snd_power_wait()
975 add_wait_queue(&card->power_sleep, &wait); in snd_power_wait()
977 if (card->shutdown) { in snd_power_wait()
981 if (snd_power_get_state(card) == power_state) in snd_power_wait()
984 snd_power_unlock(card); in snd_power_wait()
986 snd_power_lock(card); in snd_power_wait()
988 remove_wait_queue(&card->power_sleep, &wait); in snd_power_wait()