Lines Matching refs:dice

66 static int check_clock_caps(struct snd_dice *dice)  in check_clock_caps()  argument
72 if (dice->clock_caps > 0) { in check_clock_caps()
73 err = snd_dice_transaction_read_global(dice, in check_clock_caps()
78 dice->clock_caps = be32_to_cpu(value); in check_clock_caps()
81 dice->clock_caps = CLOCK_CAP_RATE_44100 | in check_clock_caps()
90 static void dice_card_strings(struct snd_dice *dice) in dice_card_strings() argument
92 struct snd_card *card = dice->card; in dice_card_strings()
93 struct fw_device *dev = fw_parent_device(dice->unit); in dice_card_strings()
102 err = snd_dice_transaction_read_global(dice, GLOBAL_NICK_NAME, in dice_card_strings()
116 fw_csr_string(dice->unit->directory, CSR_MODEL, model, sizeof(model)); in dice_card_strings()
120 dev_name(&dice->unit->device), 100 << dev->max_speed); in dice_card_strings()
125 static void dice_free(struct snd_dice *dice) in dice_free() argument
127 snd_dice_stream_destroy_duplex(dice); in dice_free()
128 snd_dice_transaction_destroy(dice); in dice_free()
129 fw_unit_put(dice->unit); in dice_free()
131 mutex_destroy(&dice->mutex); in dice_free()
132 kfree(dice); in dice_free()
148 struct snd_dice *dice = container_of(work, struct snd_dice, dwork.work); in do_registration() local
151 if (dice->registered) in do_registration()
154 err = snd_card_new(&dice->unit->device, -1, NULL, THIS_MODULE, 0, in do_registration()
155 &dice->card); in do_registration()
159 err = snd_dice_transaction_init(dice); in do_registration()
163 err = check_clock_caps(dice); in do_registration()
167 dice_card_strings(dice); in do_registration()
169 err = dice->detect_formats(dice); in do_registration()
173 err = snd_dice_stream_init_duplex(dice); in do_registration()
177 snd_dice_create_proc(dice); in do_registration()
179 err = snd_dice_create_pcm(dice); in do_registration()
183 err = snd_dice_create_midi(dice); in do_registration()
187 err = snd_dice_create_hwdep(dice); in do_registration()
191 err = snd_card_register(dice->card); in do_registration()
199 dice->card->private_free = dice_card_free; in do_registration()
200 dice->card->private_data = dice; in do_registration()
201 dice->registered = true; in do_registration()
205 snd_dice_stream_destroy_duplex(dice); in do_registration()
206 snd_dice_transaction_destroy(dice); in do_registration()
207 snd_dice_stream_destroy_duplex(dice); in do_registration()
208 snd_card_free(dice->card); in do_registration()
209 dev_info(&dice->unit->device, in do_registration()
216 struct snd_dice *dice; in dice_probe() local
226 dice = kzalloc(sizeof(struct snd_dice), GFP_KERNEL); in dice_probe()
227 if (dice == NULL) in dice_probe()
230 dice->unit = fw_unit_get(unit); in dice_probe()
231 dev_set_drvdata(&unit->device, dice); in dice_probe()
234 dice->detect_formats = snd_dice_stream_detect_current_formats; in dice_probe()
236 dice->detect_formats = in dice_probe()
240 spin_lock_init(&dice->lock); in dice_probe()
241 mutex_init(&dice->mutex); in dice_probe()
242 init_completion(&dice->clock_accepted); in dice_probe()
243 init_waitqueue_head(&dice->hwdep_wait); in dice_probe()
246 INIT_DEFERRABLE_WORK(&dice->dwork, do_registration); in dice_probe()
247 snd_fw_schedule_registration(unit, &dice->dwork); in dice_probe()
254 struct snd_dice *dice = dev_get_drvdata(&unit->device); in dice_remove() local
261 cancel_delayed_work_sync(&dice->dwork); in dice_remove()
263 if (dice->registered) { in dice_remove()
265 snd_card_free_when_closed(dice->card); in dice_remove()
268 dice_free(dice); in dice_remove()
274 struct snd_dice *dice = dev_get_drvdata(&unit->device); in dice_bus_reset() local
277 if (!dice->registered) in dice_bus_reset()
278 snd_fw_schedule_registration(unit, &dice->dwork); in dice_bus_reset()
281 snd_dice_transaction_reinit(dice); in dice_bus_reset()
287 if (dice->registered) { in dice_bus_reset()
288 mutex_lock(&dice->mutex); in dice_bus_reset()
289 snd_dice_stream_update_duplex(dice); in dice_bus_reset()
290 mutex_unlock(&dice->mutex); in dice_bus_reset()