Lines Matching +full:cmd +full:- +full:db
1 // SPDX-License-Identifier: GPL-2.0
3 // Renesas R-Car SRU/SCU/SSIU/SSI support
12 * Renesas R-Car sound device structure
17 * - SRC : Sampling Rate Converter
18 * - CMD
19 * - CTU : Channel Count Conversion Unit
20 * - MIX : Mixer
21 * - DVC : Digital Volume and Mute Function
22 * - SSI : Serial Sound Interface
27 * - SRC : Sampling Rate Converter
28 * - CMD
29 * - CTU : Channel Count Conversion Unit
30 * - MIX : Mixer
31 * - DVC : Digital Volume and Mute Function
33 * - SSI : Serial Sound Interface
43 * +- gen
48 * +- rdai[0]
50 * | +- playback -> [mod] -> [mod] -> [mod] -> ...
53 * | +- capture -> [mod] -> [mod] -> [mod] -> ...
55 * +- rdai[1]
57 * | +- playback -> [mod] -> [mod] -> [mod] -> ...
60 * | +- capture -> [mod] -> [mod] -> [mod] -> ...
65 * +- ssi
67 * | +- ssi[0]
68 * | +- ssi[1]
69 * | +- ssi[2]
74 * +- src
76 * +- src[0]
77 * +- src[1]
78 * +- src[2]
89 * [mod]->fn() -> [mod]->fn() -> [mod]->fn()...
103 { .compatible = "renesas,rcar_sound-gen1", .data = (void *)RSND_GEN1 },
104 { .compatible = "renesas,rcar_sound-gen2", .data = (void *)RSND_GEN2 },
105 { .compatible = "renesas,rcar_sound-gen3", .data = (void *)RSND_GEN3 },
106 { .compatible = "renesas,rcar_sound-gen4", .data = (void *)RSND_GEN4 },
108 { .compatible = "renesas,rcar_sound-r8a77990", .data = (void *)(RSND_GEN3 | RSND_SOC_E) },
118 if (mod->type != type) { in rsnd_mod_make_sure()
130 if (!mod || !mod->ops || !mod->ops->dma_req) in rsnd_mod_dma_req()
133 return mod->ops->dma_req(io, mod); in rsnd_mod_dma_req()
153 if ((mod)->ops->id_sub) { in rsnd_mod_name()
155 mod->ops->name, in rsnd_mod_name()
160 mod->ops->name, in rsnd_mod_name()
171 return &mod->status; in rsnd_mod_get_status()
176 return mod->id; in rsnd_mod_id_raw()
181 if ((mod)->ops->id) in rsnd_mod_id()
182 return (mod)->ops->id(mod); in rsnd_mod_id()
189 if ((mod)->ops->id_sub) in rsnd_mod_id_sub()
190 return (mod)->ops->id_sub(mod); in rsnd_mod_id_sub()
207 mod->id = id; in rsnd_mod_init()
208 mod->ops = ops; in rsnd_mod_init()
209 mod->type = type; in rsnd_mod_init()
210 mod->clk = clk; in rsnd_mod_init()
211 mod->priv = priv; in rsnd_mod_init()
218 clk_unprepare(mod->clk); in rsnd_mod_quit()
219 mod->clk = NULL; in rsnd_mod_quit()
231 struct rsnd_dai_stream *io = &rdai->playback; in rsnd_mod_interrupt()
233 if (mod == io->mod[mod->type]) in rsnd_mod_interrupt()
236 io = &rdai->capture; in rsnd_mod_interrupt()
237 if (mod == io->mod[mod->type]) in rsnd_mod_interrupt()
245 if (io->substream) in rsnd_io_is_working()
246 return snd_pcm_running(io->substream); in rsnd_io_is_working()
265 return runtime->channels; in rsnd_runtime_channel_original_with_params()
355 switch (snd_pcm_format_width(runtime->format)) { in rsnd_get_adinr_bit()
399 * [MEM] -> [SRC] -> [DVC] -> [CMD] -> [SSIU] -> [SSI] -> codec in rsnd_get_dalign()
403 * codec -> [SSI] -> [SSIU] -> [SRC] -> [DVC] -> [CMD] -> [MEM] in rsnd_get_dalign()
410 struct rsnd_mod *cmd = rsnd_io_to_mod_cmd(io); in rsnd_get_dalign() local
412 target = cmd ? cmd : ssiu; in rsnd_get_dalign()
420 if (mod == target && snd_pcm_format_width(runtime->format) == 16) { in rsnd_get_dalign()
456 if (snd_pcm_format_width(runtime->format) != 24) in rsnd_get_busif_shift()
535 u32 *status = mod->ops->get_status(mod, io, type); in rsnd_status_update()
546 func_call = -1; in rsnd_status_update()
566 if (func_call > 0 && (mod)->ops->fn) \
567 tmp = (mod)->ops->fn(mod, io, param); \
569 unlikely(tmp && (tmp != -EPROBE_DEFER))) \
585 return -EIO; in rsnd_dai_connect()
587 if (io->mod[type] == mod) in rsnd_dai_connect()
590 if (io->mod[type]) in rsnd_dai_connect()
591 return -EINVAL; in rsnd_dai_connect()
596 io->mod[type] = mod; in rsnd_dai_connect()
609 io->mod[type] = NULL; in rsnd_dai_disconnect()
616 rdai->max_channels = max_channels; in rsnd_rdai_channels_ctrl()
618 return rdai->max_channels; in rsnd_rdai_channels_ctrl()
625 rdai->ssi_lane = ssi_lane; in rsnd_rdai_ssi_lane_ctrl()
627 return rdai->ssi_lane; in rsnd_rdai_ssi_lane_ctrl()
633 rdai->chan_width = width; in rsnd_rdai_width_ctrl()
635 return rdai->chan_width; in rsnd_rdai_width_ctrl()
643 return priv->rdai + id; in rsnd_rdai_get()
652 return priv->daidrv + id; in rsnd_daidrv_get()
660 return rsnd_rdai_get(priv, dai->id); in rsnd_dai_to_rdai()
666 io->substream = substream; in rsnd_dai_stream_init()
671 io->substream = NULL; in rsnd_dai_stream_quit()
686 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) in rsnd_rdai_to_io()
687 return &rdai->playback; in rsnd_rdai_to_io()
689 return &rdai->capture; in rsnd_rdai_to_io()
692 static int rsnd_soc_dai_trigger(struct snd_pcm_substream *substream, int cmd, in rsnd_soc_dai_trigger() argument
701 spin_lock_irqsave(&priv->lock, flags); in rsnd_soc_dai_trigger()
703 switch (cmd) { in rsnd_soc_dai_trigger()
729 ret = -EINVAL; in rsnd_soc_dai_trigger()
733 spin_unlock_irqrestore(&priv->lock, flags); in rsnd_soc_dai_trigger()
745 rdai->clk_master = 0; in rsnd_soc_dai_set_fmt()
748 rdai->clk_master = 1; /* cpu is master */ in rsnd_soc_dai_set_fmt()
751 return -EINVAL; in rsnd_soc_dai_set_fmt()
755 rdai->bit_clk_inv = 0; in rsnd_soc_dai_set_fmt()
758 rdai->sys_delay = 0; in rsnd_soc_dai_set_fmt()
759 rdai->data_alignment = 0; in rsnd_soc_dai_set_fmt()
760 rdai->frm_clk_inv = 0; in rsnd_soc_dai_set_fmt()
764 rdai->sys_delay = 1; in rsnd_soc_dai_set_fmt()
765 rdai->data_alignment = 0; in rsnd_soc_dai_set_fmt()
766 rdai->frm_clk_inv = 1; in rsnd_soc_dai_set_fmt()
769 rdai->sys_delay = 1; in rsnd_soc_dai_set_fmt()
770 rdai->data_alignment = 1; in rsnd_soc_dai_set_fmt()
771 rdai->frm_clk_inv = 1; in rsnd_soc_dai_set_fmt()
774 rdai->sys_delay = 0; in rsnd_soc_dai_set_fmt()
775 rdai->data_alignment = 0; in rsnd_soc_dai_set_fmt()
776 rdai->frm_clk_inv = 1; in rsnd_soc_dai_set_fmt()
783 rdai->frm_clk_inv = !rdai->frm_clk_inv; in rsnd_soc_dai_set_fmt()
786 rdai->bit_clk_inv = !rdai->bit_clk_inv; in rsnd_soc_dai_set_fmt()
789 rdai->bit_clk_inv = !rdai->bit_clk_inv; in rsnd_soc_dai_set_fmt()
790 rdai->frm_clk_inv = !rdai->frm_clk_inv; in rsnd_soc_dai_set_fmt()
816 * Indicate warning if DT has "dai-tdm-slot-width" in rsnd_soc_set_dai_tdm_slot()
837 return -EINVAL; in rsnd_soc_set_dai_tdm_slot()
881 baseline->min, list[i], NULL); in rsnd_soc_hw_rule()
888 baseline->max, list[i], NULL); in rsnd_soc_hw_rule()
900 dev_warn(dev, "It can't handle %d %s <-> %d %s\n", in rsnd_soc_hw_rule()
901 baseline->min, unit, baseline->max, unit); in rsnd_soc_hw_rule()
914 struct rsnd_dai_stream *io = rule->private; in rsnd_soc_hw_rule_rate()
937 struct rsnd_dai_stream *io = rule->private; in rsnd_soc_hw_rule_channels()
971 struct snd_pcm_hw_constraint_list *constraint = &rdai->constraint; in rsnd_soc_dai_startup()
972 struct snd_pcm_runtime *runtime = substream->runtime; in rsnd_soc_dai_startup()
984 constraint->list = rsnd_soc_hw_channels_list; in rsnd_soc_dai_startup()
985 constraint->count = 0; in rsnd_soc_dai_startup()
986 constraint->mask = 0; in rsnd_soc_dai_startup()
991 constraint->count = i + 1; in rsnd_soc_dai_startup()
1007 int is_play = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; in rsnd_soc_dai_startup()
1011 is_play ? &rdai->playback : &rdai->capture, in rsnd_soc_dai_startup()
1012 SNDRV_PCM_HW_PARAM_CHANNELS, -1); in rsnd_soc_dai_startup()
1015 is_play ? &rdai->playback : &rdai->capture, in rsnd_soc_dai_startup()
1016 SNDRV_PCM_HW_PARAM_RATE, -1); in rsnd_soc_dai_startup()
1100 dev_dbg(dev, "%s is part of TDM Split\n", io->name); in rsnd_parse_tdm_split_mode()
1133 if (strstr(remote_node->full_name, "hdmi@fead0000")) { in rsnd_parse_connect_graph()
1135 dev_dbg(dev, "%s connected to HDMI0\n", io->name); in rsnd_parse_connect_graph()
1139 if (strstr(remote_node->full_name, "hdmi@feae0000")) { in rsnd_parse_connect_graph()
1141 dev_dbg(dev, "%s connected to HDMI1\n", io->name); in rsnd_parse_connect_graph()
1176 rsnd_dai_connect(mod, &rdai->playback, mod->type); in rsnd_parse_connect_common()
1178 rsnd_dai_connect(mod, &rdai->capture, mod->type); in rsnd_parse_connect_common()
1196 * ssi-0 in rsnd_node_fixed_index()
1197 * ssi-1 in rsnd_node_fixed_index()
1198 * ssi-2 in rsnd_node_fixed_index()
1199 * ssi-3 ssi-3 in rsnd_node_fixed_index()
1200 * ssi-4 ssi-4 in rsnd_node_fixed_index()
1206 snprintf(node_name, sizeof(node_name), "%s-%d", name, idx); in rsnd_node_fixed_index()
1214 return -EINVAL; in rsnd_node_fixed_index()
1252 struct device_node *np = dev->of_node; in rsnd_dai_of_node()
1265 * Simple-Card in rsnd_dai_of_node()
1277 priv->component_dais[i] = of_get_child_count(node); in rsnd_dai_of_node()
1278 nr += priv->component_dais[i]; in rsnd_dai_of_node()
1291 * Audio-Graph-Card in rsnd_dai_of_node()
1297 priv->component_dais[i] = of_graph_get_endpoint_count(node); in rsnd_dai_of_node()
1298 nr += priv->component_dais[i]; in rsnd_dai_of_node()
1325 * use Audio-DMAC dev if we can use IPMMU in rsnd_preallocate_pages()
1329 if (io->dmac_dev) in rsnd_preallocate_pages()
1330 dev = io->dmac_dev; in rsnd_preallocate_pages()
1332 for (substream = rtd->pcm->streams[stream].substream; in rsnd_preallocate_pages()
1334 substream = substream->next) { in rsnd_preallocate_pages()
1349 ret = rsnd_dai_call(pcm_new, &rdai->playback, rtd); in rsnd_soc_dai_pcm_new()
1353 ret = rsnd_dai_call(pcm_new, &rdai->capture, rtd); in rsnd_soc_dai_pcm_new()
1357 ret = rsnd_preallocate_pages(rtd, &rdai->playback, in rsnd_soc_dai_pcm_new()
1362 ret = rsnd_preallocate_pages(rtd, &rdai->capture, in rsnd_soc_dai_pcm_new()
1398 io_playback = &rdai->playback; in __rsnd_dai_probe()
1399 io_capture = &rdai->capture; in __rsnd_dai_probe()
1401 snprintf(rdai->name, RSND_DAI_NAME_SIZE, "rsnd-dai.%d", dai_i); in __rsnd_dai_probe()
1404 rdai->dai_args.np = node_np; in __rsnd_dai_probe()
1405 rdai->dai_args.args_count = 1; in __rsnd_dai_probe()
1406 rdai->dai_args.args[0] = node_arg; in __rsnd_dai_probe()
1408 rdai->priv = priv; in __rsnd_dai_probe()
1409 drv->name = rdai->name; in __rsnd_dai_probe()
1410 drv->ops = &rsnd_soc_dai_ops; in __rsnd_dai_probe()
1411 drv->id = dai_i; in __rsnd_dai_probe()
1412 drv->dai_args = &rdai->dai_args; in __rsnd_dai_probe()
1414 io_playback->rdai = rdai; in __rsnd_dai_probe()
1415 io_capture->rdai = rdai; in __rsnd_dai_probe()
1447 snprintf(io_playback->name, RSND_DAI_NAME_SIZE, "DAI%d Playback", dai_i); in __rsnd_dai_probe()
1448 drv->playback.rates = RSND_RATES; in __rsnd_dai_probe()
1449 drv->playback.formats = RSND_FMTS; in __rsnd_dai_probe()
1450 drv->playback.channels_min = 2; in __rsnd_dai_probe()
1451 drv->playback.channels_max = 8; in __rsnd_dai_probe()
1452 drv->playback.stream_name = io_playback->name; in __rsnd_dai_probe()
1455 snprintf(io_capture->name, RSND_DAI_NAME_SIZE, "DAI%d Capture", dai_i); in __rsnd_dai_probe()
1456 drv->capture.rates = RSND_RATES; in __rsnd_dai_probe()
1457 drv->capture.formats = RSND_FMTS; in __rsnd_dai_probe()
1458 drv->capture.channels_min = 2; in __rsnd_dai_probe()
1459 drv->capture.channels_max = 8; in __rsnd_dai_probe()
1460 drv->capture.stream_name = io_capture->name; in __rsnd_dai_probe()
1466 drv->symmetric_rate = 1; in __rsnd_dai_probe()
1469 dev_dbg(dev, "%s (%s/%s)\n", rdai->name, in __rsnd_dai_probe()
1470 rsnd_io_to_mod_ssi(io_playback) ? "play" : " -- ", in __rsnd_dai_probe()
1471 rsnd_io_to_mod_ssi(io_capture) ? "capture" : " -- "); in __rsnd_dai_probe()
1478 struct device_node *np = dev->of_node; in rsnd_dai_probe()
1486 return -EINVAL; in rsnd_dai_probe()
1491 return -ENOMEM; in rsnd_dai_probe()
1493 priv->rdai_nr = nr; in rsnd_dai_probe()
1494 priv->daidrv = rdrv; in rsnd_dai_probe()
1495 priv->rdai = rdai; in rsnd_dai_probe()
1516 rsnd_parse_connect_graph(priv, &rdai->playback, dai_np); in rsnd_dai_probe()
1517 rsnd_parse_connect_graph(priv, &rdai->capture, dai_np); in rsnd_dai_probe()
1535 rsnd_parse_connect_simple(priv, &rdai->playback, dai_np); in rsnd_dai_probe()
1536 rsnd_parse_connect_simple(priv, &rdai->capture, dai_np); in rsnd_dai_probe()
1559 spin_lock_irqsave(&priv->lock, flags); in rsnd_hw_update()
1564 spin_unlock_irqrestore(&priv->lock, flags); in rsnd_hw_update()
1587 io->converted_rate = 0; in rsnd_hw_params()
1588 io->converted_chan = 0; in rsnd_hw_params()
1589 if (fe->dai_link->dynamic) { in rsnd_hw_params()
1593 int stream = substream->stream; in rsnd_hw_params()
1596 struct snd_soc_pcm_runtime *be = dpcm->be; in rsnd_hw_params()
1597 struct snd_pcm_hw_params *be_params = &be->dpcm[stream].hw_params; in rsnd_hw_params()
1600 io->converted_chan = params_channels(be_params); in rsnd_hw_params()
1602 io->converted_rate = params_rate(be_params); in rsnd_hw_params()
1604 if (io->converted_chan) in rsnd_hw_params()
1605 dev_dbg(dev, "convert channels = %d\n", io->converted_chan); in rsnd_hw_params()
1606 if (io->converted_rate) { in rsnd_hw_params()
1620 dev_dbg(dev, "convert rate = %d\n", io->converted_rate); in rsnd_hw_params()
1622 channel = io->converted_chan ? io->converted_chan : in rsnd_hw_params()
1649 return -EINVAL; in rsnd_hw_params()
1652 if (params_rate(hw_params) > io->converted_rate * k_down) { in rsnd_hw_params()
1653 hw_param_interval(hw_params, SNDRV_PCM_HW_PARAM_RATE)->min = in rsnd_hw_params()
1654 io->converted_rate * k_down; in rsnd_hw_params()
1655 hw_param_interval(hw_params, SNDRV_PCM_HW_PARAM_RATE)->max = in rsnd_hw_params()
1656 io->converted_rate * k_down; in rsnd_hw_params()
1657 hw_params->cmask |= SNDRV_PCM_HW_PARAM_RATE; in rsnd_hw_params()
1658 } else if (params_rate(hw_params) * k_up < io->converted_rate) { in rsnd_hw_params()
1659 hw_param_interval(hw_params, SNDRV_PCM_HW_PARAM_RATE)->min = in rsnd_hw_params()
1660 DIV_ROUND_UP(io->converted_rate, k_up); in rsnd_hw_params()
1661 hw_param_interval(hw_params, SNDRV_PCM_HW_PARAM_RATE)->max = in rsnd_hw_params()
1662 DIV_ROUND_UP(io->converted_rate, k_up); in rsnd_hw_params()
1663 hw_params->cmask |= SNDRV_PCM_HW_PARAM_RATE; in rsnd_hw_params()
1707 if (cfg->texts) { in rsnd_kctrl_info()
1708 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; in rsnd_kctrl_info()
1709 uinfo->count = cfg->size; in rsnd_kctrl_info()
1710 uinfo->value.enumerated.items = cfg->max; in rsnd_kctrl_info()
1711 if (uinfo->value.enumerated.item >= cfg->max) in rsnd_kctrl_info()
1712 uinfo->value.enumerated.item = cfg->max - 1; in rsnd_kctrl_info()
1713 strscpy(uinfo->value.enumerated.name, in rsnd_kctrl_info()
1714 cfg->texts[uinfo->value.enumerated.item], in rsnd_kctrl_info()
1715 sizeof(uinfo->value.enumerated.name)); in rsnd_kctrl_info()
1717 uinfo->count = cfg->size; in rsnd_kctrl_info()
1718 uinfo->value.integer.min = 0; in rsnd_kctrl_info()
1719 uinfo->value.integer.max = cfg->max; in rsnd_kctrl_info()
1720 uinfo->type = (cfg->max == 1) ? in rsnd_kctrl_info()
1734 for (i = 0; i < cfg->size; i++) in rsnd_kctrl_get()
1735 if (cfg->texts) in rsnd_kctrl_get()
1736 uc->value.enumerated.item[i] = cfg->val[i]; in rsnd_kctrl_get()
1738 uc->value.integer.value[i] = cfg->val[i]; in rsnd_kctrl_get()
1749 if (!cfg->accept(cfg->io)) in rsnd_kctrl_put()
1752 for (i = 0; i < cfg->size; i++) { in rsnd_kctrl_put()
1753 if (cfg->texts) { in rsnd_kctrl_put()
1754 change |= (uc->value.enumerated.item[i] != cfg->val[i]); in rsnd_kctrl_put()
1755 cfg->val[i] = uc->value.enumerated.item[i]; in rsnd_kctrl_put()
1757 change |= (uc->value.integer.value[i] != cfg->val[i]); in rsnd_kctrl_put()
1758 cfg->val[i] = uc->value.integer.value[i]; in rsnd_kctrl_put()
1762 if (change && cfg->update) in rsnd_kctrl_put()
1763 cfg->update(cfg->io, cfg->mod); in rsnd_kctrl_put()
1775 cfg->cfg.val = cfg->val; in rsnd_kctrl_init_m()
1777 return &cfg->cfg; in rsnd_kctrl_init_m()
1782 cfg->cfg.val = &cfg->val; in rsnd_kctrl_init_s()
1784 return &cfg->cfg; in rsnd_kctrl_init_s()
1788 "128 dB/1 step", /* 00000 */
1789 "64 dB/1 step", /* 00001 */
1790 "32 dB/1 step", /* 00010 */
1791 "16 dB/1 step", /* 00011 */
1792 "8 dB/1 step", /* 00100 */
1793 "4 dB/1 step", /* 00101 */
1794 "2 dB/1 step", /* 00110 */
1795 "1 dB/1 step", /* 00111 */
1796 "0.5 dB/1 step", /* 01000 */
1797 "0.25 dB/1 step", /* 01001 */
1798 "0.125 dB/1 step", /* 01010 = VOLUME_RAMP_MAX_MIX */
1799 "0.125 dB/2 steps", /* 01011 */
1800 "0.125 dB/4 steps", /* 01100 */
1801 "0.125 dB/8 steps", /* 01101 */
1802 "0.125 dB/16 steps", /* 01110 */
1803 "0.125 dB/32 steps", /* 01111 */
1804 "0.125 dB/64 steps", /* 10000 */
1805 "0.125 dB/128 steps", /* 10001 */
1806 "0.125 dB/256 steps", /* 10010 */
1807 "0.125 dB/512 steps", /* 10011 */
1808 "0.125 dB/1024 steps", /* 10100 */
1809 "0.125 dB/2048 steps", /* 10101 */
1810 "0.125 dB/4096 steps", /* 10110 */
1811 "0.125 dB/8192 steps", /* 10111 = VOLUME_RAMP_MAX_DVC */
1826 struct snd_card *card = rtd->card->snd_card; in rsnd_kctrl_new()
1832 .index = rtd->id, in rsnd_kctrl_new()
1841 * 3) re-register if card was rebinded in rsnd_kctrl_new()
1843 list_for_each_entry(kctrl, &card->controls, list) { in rsnd_kctrl_new()
1844 struct rsnd_kctrl_cfg *c = kctrl->private_data; in rsnd_kctrl_new()
1851 return -EINVAL; in rsnd_kctrl_new()
1855 return -ENOMEM; in rsnd_kctrl_new()
1861 cfg->texts = texts; in rsnd_kctrl_new()
1862 cfg->max = max; in rsnd_kctrl_new()
1863 cfg->size = size; in rsnd_kctrl_new()
1864 cfg->accept = accept; in rsnd_kctrl_new()
1865 cfg->update = update; in rsnd_kctrl_new()
1866 cfg->card = card; in rsnd_kctrl_new()
1867 cfg->kctrl = kctrl; in rsnd_kctrl_new()
1868 cfg->io = io; in rsnd_kctrl_new()
1869 cfg->mod = mod; in rsnd_kctrl_new()
1892 if (ret == -EAGAIN) { in rsnd_rdai_continuance_probe()
1939 struct device *dev = &pdev->dev; in rsnd_probe()
1962 return -ENODEV; in rsnd_probe()
1964 priv->pdev = pdev; in rsnd_probe()
1965 priv->flags = (unsigned long)of_device_get_match_data(dev); in rsnd_probe()
1966 spin_lock_init(&priv->lock); in rsnd_probe()
1978 ret = rsnd_rdai_continuance_probe(priv, &rdai->playback); in rsnd_probe()
1982 ret = rsnd_rdai_continuance_probe(priv, &rdai->capture); in rsnd_probe()
1993 for (i = 0; priv->component_dais[i] > 0; i++) { in rsnd_probe()
1994 int nr = priv->component_dais[i]; in rsnd_probe()
1997 priv->daidrv + ci, nr); in rsnd_probe()
2013 rsnd_dai_call(remove, &rdai->playback, priv); in rsnd_probe()
2014 rsnd_dai_call(remove, &rdai->capture, priv); in rsnd_probe()
2021 * Mainly it is assuming -EPROBE_DEFER case in rsnd_probe()
2030 struct rsnd_priv *priv = dev_get_drvdata(&pdev->dev); in rsnd_remove()
2044 pm_runtime_disable(&pdev->dev); in rsnd_remove()
2049 ret = rsnd_dai_call(remove, &rdai->playback, priv); in rsnd_remove()
2051 dev_warn(&pdev->dev, "Failed to remove playback dai #%d\n", i); in rsnd_remove()
2053 ret = rsnd_dai_call(remove, &rdai->capture, priv); in rsnd_remove()
2055 dev_warn(&pdev->dev, "Failed to remove capture dai #%d\n", i); in rsnd_remove()
2094 MODULE_DESCRIPTION("Renesas R-Car audio driver");
2096 MODULE_ALIAS("platform:rcar-pcm-audio");