Lines Matching +full:frame +full:- +full:inversion
1 /*-
83 {"simple-audio-card", 1},
149 sc = ausoc_chan->sc;
151 return AUDIO_DAI_SET_CHANFORMAT(sc->cpu_dev, format);
164 sc = ausoc_chan->sc;
166 if (sc->link_mclk_fs) {
167 rate = speed * sc->link_mclk_fs;
168 if (AUDIO_DAI_SET_SYSCLK(sc->cpu_dev, rate, AUDIO_DAI_CLOCK_IN))
169 device_printf(sc->dev, "failed to set sysclk for CPU node\n");
171 if (AUDIO_DAI_SET_SYSCLK(sc->codec_dev, rate, AUDIO_DAI_CLOCK_OUT))
172 device_printf(sc->dev, "failed to set sysclk for codec node\n");
174 SLIST_FOREACH(aux_node, &sc->aux_devs, link) {
175 if (AUDIO_DAI_SET_SYSCLK(aux_node->dev, rate, AUDIO_DAI_CLOCK_OUT))
176 device_printf(sc->dev, "failed to set sysclk for aux node\n");
183 speed = AUDIO_DAI_SET_CHANSPEED(sc->cpu_dev, speed);
184 AUDIO_DAI_SET_CHANSPEED(sc->codec_dev, speed);
185 SLIST_FOREACH(aux_node, &sc->aux_devs, link) {
186 AUDIO_DAI_SET_CHANSPEED(aux_node->dev, speed);
199 sc = ausoc_chan->sc;
201 return AUDIO_DAI_GET_PTR(sc->cpu_dev, ausoc_chan->dir);
219 ausoc_chan->dir = dir;
220 ausoc_chan->buf = b;
221 ausoc_chan->pcm = c;
234 sc = ausoc_chan->sc;
235 AUDIO_DAI_TRIGGER(sc->codec_dev, go, ausoc_chan->dir);
236 SLIST_FOREACH(aux_node, &sc->aux_devs, link) {
237 AUDIO_DAI_TRIGGER(aux_node->dev, go, ausoc_chan->dir);
240 return AUDIO_DAI_TRIGGER(sc->cpu_dev, go, ausoc_chan->dir);
252 buffer = sndbuf_getbuf(ausoc_chan->buf);
266 sc = ausoc_chan->sc;
268 return AUDIO_DAI_GET_CAPS(sc->cpu_dev);
291 channel_intr_required = AUDIO_DAI_INTR(sc->cpu_dev, sc->play_channel.buf, sc->rec_channel.buf);
293 chn_intr(sc->play_channel.pcm);
295 chn_intr(sc->rec_channel.pcm);
305 if (ofw_bus_search_compatible(dev, compat_data)->ocd_data != 0) {
306 device_set_desc(dev, "simple-audio-card");
325 config_intrhook_disestablish(&sc->init_hook);
327 node = ofw_bus_get_node(sc->dev);
328 /* TODO: handle multi-link nodes */
329 child = ofw_bus_find_child(node, "simple-audio-card,cpu");
331 device_printf(sc->dev, "cpu node is missing\n");
334 if ((OF_getencprop(child, "sound-dai", &xref, sizeof(xref))) <= 0) {
335 device_printf(sc->dev, "missing sound-dai property in cpu node\n");
340 device_printf(sc->dev, "no driver attached to cpu node\n");
343 sc->cpu_dev = daidev;
345 child = ofw_bus_find_child(node, "simple-audio-card,codec");
347 device_printf(sc->dev, "codec node is missing\n");
350 if ((OF_getencprop(child, "sound-dai", &xref, sizeof(xref))) <= 0) {
351 device_printf(sc->dev, "missing sound-dai property in codec node\n");
356 device_printf(sc->dev, "no driver attached to codec node\n");
359 sc->codec_dev = daidev;
363 ncells = OF_getencprop_alloc_multi(node, "simple-audio-card,aux-devs", sizeof(*aux_devs),
369 device_printf(sc->dev, "warning: no driver attached to aux node\n");
372 device_printf(sc->dev, "failed to allocate aux node struct\n");
375 aux_node->dev = auxdev;
376 SLIST_INSERT_HEAD(&sc->aux_devs, aux_node, link);
382 if (AUDIO_DAI_INIT(sc->cpu_dev, sc->format)) {
383 device_printf(sc->dev, "failed to initialize cpu node\n");
388 if (AUDIO_DAI_INIT(sc->codec_dev, audio_soc_reverse_clocks(sc->format))) {
389 device_printf(sc->dev, "failed to initialize codec node\n");
393 SLIST_FOREACH(aux_node, &sc->aux_devs, link) {
394 if (AUDIO_DAI_INIT(aux_node->dev, audio_soc_reverse_clocks(sc->format))) {
395 device_printf(sc->dev, "failed to initialize aux node\n");
400 pcm_init(sc->dev, sc);
402 sc->play_channel.sc = sc;
403 sc->rec_channel.sc = sc;
405 pcm_addchan(sc->dev, PCMDIR_PLAY, &audio_soc_chan_class, &sc->play_channel);
406 pcm_addchan(sc->dev, PCMDIR_REC, &audio_soc_chan_class, &sc->rec_channel);
408 if (pcm_register(sc->dev, "at simplebus")) {
409 device_printf(sc->dev, "failed to register PCM\n");
413 AUDIO_DAI_SETUP_INTR(sc->cpu_dev, audio_soc_intr, sc);
414 AUDIO_DAI_SETUP_MIXER(sc->codec_dev, sc->dev);
415 SLIST_FOREACH(aux_node, &sc->aux_devs, link) {
416 AUDIO_DAI_SETUP_MIXER(aux_node->dev, sc->dev);
433 sc->dev = dev;
437 if (ret == -1)
440 sc->name = strdup(name, M_DEVBUF);
441 device_set_desc(dev, sc->name);
443 if (ret != -1)
446 SLIST_INIT(&sc->aux_devs);
448 ret = OF_getprop(node, "simple-audio-card,format", tmp, sizeof(tmp));
461 if (OF_getencprop(node, "simple-audio-card,mclk-fs",
462 &sc->link_mclk_fs, sizeof(sc->link_mclk_fs)) <= 0)
463 sc->link_mclk_fs = 0;
468 cpu_child = ofw_bus_find_child(node, "simple-audio-card,cpu");
470 if ((OF_getencprop(node, "simple-audio-card,frame-master", &xref, sizeof(xref))) > 0)
473 if ((OF_getencprop(node, "simple-audio-card,bitclock-master", &xref, sizeof(xref))) > 0)
484 bool bitclock_inversion = OF_hasprop(node, "simple-audio-card,bitclock-inversion");
485 bool frame_inversion = OF_hasprop(node, "simple-audio-card,frame-inversion");
494 sc->format = AUDIO_DAI_FORMAT(fmt, pol, clk);
496 sc->init_hook.ich_func = audio_soc_init;
497 sc->init_hook.ich_arg = sc;
498 if (config_intrhook_establish(&sc->init_hook) != 0)
511 if (sc->name)
512 free(sc->name, M_DEVBUF);
514 while ((aux = SLIST_FIRST(&sc->aux_devs)) != NULL) {
515 SLIST_REMOVE_HEAD(&sc->aux_devs, link);