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()
668 struct snd_pcm_substream *substream = io->substream; in rsnd_dai_period_elapsed()
673 * - if rsnd_dai_pointer_update() returns true in rsnd_dai_period_elapsed()
674 * - without spin lock in rsnd_dai_period_elapsed()
683 io->substream = substream; in rsnd_dai_stream_init()
688 io->substream = NULL; in rsnd_dai_stream_quit()
703 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) in rsnd_rdai_to_io()
704 return &rdai->playback; in rsnd_rdai_to_io()
706 return &rdai->capture; in rsnd_rdai_to_io()
709 static int rsnd_soc_dai_trigger(struct snd_pcm_substream *substream, int cmd, in rsnd_soc_dai_trigger() argument
718 spin_lock_irqsave(&priv->lock, flags); in rsnd_soc_dai_trigger()
720 switch (cmd) { in rsnd_soc_dai_trigger()
746 ret = -EINVAL; in rsnd_soc_dai_trigger()
750 spin_unlock_irqrestore(&priv->lock, flags); in rsnd_soc_dai_trigger()
762 rdai->clk_master = 0; in rsnd_soc_dai_set_fmt()
765 rdai->clk_master = 1; /* cpu is master */ in rsnd_soc_dai_set_fmt()
768 return -EINVAL; in rsnd_soc_dai_set_fmt()
772 rdai->bit_clk_inv = 0; in rsnd_soc_dai_set_fmt()
775 rdai->sys_delay = 0; in rsnd_soc_dai_set_fmt()
776 rdai->data_alignment = 0; in rsnd_soc_dai_set_fmt()
777 rdai->frm_clk_inv = 0; in rsnd_soc_dai_set_fmt()
781 rdai->sys_delay = 1; in rsnd_soc_dai_set_fmt()
782 rdai->data_alignment = 0; in rsnd_soc_dai_set_fmt()
783 rdai->frm_clk_inv = 1; in rsnd_soc_dai_set_fmt()
786 rdai->sys_delay = 1; in rsnd_soc_dai_set_fmt()
787 rdai->data_alignment = 1; in rsnd_soc_dai_set_fmt()
788 rdai->frm_clk_inv = 1; in rsnd_soc_dai_set_fmt()
791 rdai->sys_delay = 0; in rsnd_soc_dai_set_fmt()
792 rdai->data_alignment = 0; in rsnd_soc_dai_set_fmt()
793 rdai->frm_clk_inv = 1; in rsnd_soc_dai_set_fmt()
800 rdai->frm_clk_inv = !rdai->frm_clk_inv; in rsnd_soc_dai_set_fmt()
803 rdai->bit_clk_inv = !rdai->bit_clk_inv; in rsnd_soc_dai_set_fmt()
806 rdai->bit_clk_inv = !rdai->bit_clk_inv; in rsnd_soc_dai_set_fmt()
807 rdai->frm_clk_inv = !rdai->frm_clk_inv; in rsnd_soc_dai_set_fmt()
833 * Indicate warning if DT has "dai-tdm-slot-width" in rsnd_soc_set_dai_tdm_slot()
854 return -EINVAL; in rsnd_soc_set_dai_tdm_slot()
898 baseline->min, list[i], NULL); in rsnd_soc_hw_rule()
905 baseline->max, list[i], NULL); in rsnd_soc_hw_rule()
917 dev_warn(dev, "It can't handle %d %s <-> %d %s\n", in rsnd_soc_hw_rule()
918 baseline->min, unit, baseline->max, unit); in rsnd_soc_hw_rule()
931 struct rsnd_dai_stream *io = rule->private; in rsnd_soc_hw_rule_rate()
954 struct rsnd_dai_stream *io = rule->private; in rsnd_soc_hw_rule_channels()
988 struct snd_pcm_hw_constraint_list *constraint = &rdai->constraint; in rsnd_soc_dai_startup()
989 struct snd_pcm_runtime *runtime = substream->runtime; in rsnd_soc_dai_startup()
1001 constraint->list = rsnd_soc_hw_channels_list; in rsnd_soc_dai_startup()
1002 constraint->count = 0; in rsnd_soc_dai_startup()
1003 constraint->mask = 0; in rsnd_soc_dai_startup()
1008 constraint->count = i + 1; in rsnd_soc_dai_startup()
1024 int is_play = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; in rsnd_soc_dai_startup()
1028 is_play ? &rdai->playback : &rdai->capture, in rsnd_soc_dai_startup()
1029 SNDRV_PCM_HW_PARAM_CHANNELS, -1); in rsnd_soc_dai_startup()
1032 is_play ? &rdai->playback : &rdai->capture, in rsnd_soc_dai_startup()
1033 SNDRV_PCM_HW_PARAM_RATE, -1); in rsnd_soc_dai_startup()
1117 dev_dbg(dev, "%s is part of TDM Split\n", io->name); in rsnd_parse_tdm_split_mode()
1150 if (strstr(remote_node->full_name, "hdmi@fead0000")) { in rsnd_parse_connect_graph()
1152 dev_dbg(dev, "%s connected to HDMI0\n", io->name); in rsnd_parse_connect_graph()
1156 if (strstr(remote_node->full_name, "hdmi@feae0000")) { in rsnd_parse_connect_graph()
1158 dev_dbg(dev, "%s connected to HDMI1\n", io->name); in rsnd_parse_connect_graph()
1193 rsnd_dai_connect(mod, &rdai->playback, mod->type); in rsnd_parse_connect_common()
1195 rsnd_dai_connect(mod, &rdai->capture, mod->type); in rsnd_parse_connect_common()
1213 * ssi-0 in rsnd_node_fixed_index()
1214 * ssi-1 in rsnd_node_fixed_index()
1215 * ssi-2 in rsnd_node_fixed_index()
1216 * ssi-3 ssi-3 in rsnd_node_fixed_index()
1217 * ssi-4 ssi-4 in rsnd_node_fixed_index()
1223 snprintf(node_name, sizeof(node_name), "%s-%d", name, idx); in rsnd_node_fixed_index()
1231 return -EINVAL; in rsnd_node_fixed_index()
1256 struct device_node *np = dev->of_node; in rsnd_dai_of_node()
1269 * Simple-Card in rsnd_dai_of_node()
1281 priv->component_dais[i] = of_get_child_count(node); in rsnd_dai_of_node()
1282 nr += priv->component_dais[i]; in rsnd_dai_of_node()
1295 * Audio-Graph-Card in rsnd_dai_of_node()
1301 priv->component_dais[i] = of_graph_get_endpoint_count(ports); in rsnd_dai_of_node()
1302 nr += priv->component_dais[i]; in rsnd_dai_of_node()
1329 * use Audio-DMAC dev if we can use IPMMU in rsnd_preallocate_pages()
1333 if (io->dmac_dev) in rsnd_preallocate_pages()
1334 dev = io->dmac_dev; in rsnd_preallocate_pages()
1336 for (substream = rtd->pcm->streams[stream].substream; in rsnd_preallocate_pages()
1338 substream = substream->next) { in rsnd_preallocate_pages()
1353 ret = rsnd_dai_call(pcm_new, &rdai->playback, rtd); in rsnd_soc_dai_pcm_new()
1357 ret = rsnd_dai_call(pcm_new, &rdai->capture, rtd); in rsnd_soc_dai_pcm_new()
1361 ret = rsnd_preallocate_pages(rtd, &rdai->playback, in rsnd_soc_dai_pcm_new()
1366 ret = rsnd_preallocate_pages(rtd, &rdai->capture, in rsnd_soc_dai_pcm_new()
1402 io_playback = &rdai->playback; in __rsnd_dai_probe()
1403 io_capture = &rdai->capture; in __rsnd_dai_probe()
1405 snprintf(rdai->name, RSND_DAI_NAME_SIZE, "rsnd-dai.%d", dai_i); in __rsnd_dai_probe()
1408 rdai->dai_args.np = node_np; in __rsnd_dai_probe()
1409 rdai->dai_args.args_count = 1; in __rsnd_dai_probe()
1410 rdai->dai_args.args[0] = node_arg; in __rsnd_dai_probe()
1412 rdai->priv = priv; in __rsnd_dai_probe()
1413 drv->name = rdai->name; in __rsnd_dai_probe()
1414 drv->ops = &rsnd_soc_dai_ops; in __rsnd_dai_probe()
1415 drv->id = dai_i; in __rsnd_dai_probe()
1416 drv->dai_args = &rdai->dai_args; in __rsnd_dai_probe()
1418 io_playback->rdai = rdai; in __rsnd_dai_probe()
1419 io_capture->rdai = rdai; in __rsnd_dai_probe()
1451 snprintf(io_playback->name, RSND_DAI_NAME_SIZE, "DAI%d Playback", dai_i); in __rsnd_dai_probe()
1452 drv->playback.rates = RSND_RATES; in __rsnd_dai_probe()
1453 drv->playback.formats = RSND_FMTS; in __rsnd_dai_probe()
1454 drv->playback.channels_min = 2; in __rsnd_dai_probe()
1455 drv->playback.channels_max = 8; in __rsnd_dai_probe()
1456 drv->playback.stream_name = io_playback->name; in __rsnd_dai_probe()
1459 snprintf(io_capture->name, RSND_DAI_NAME_SIZE, "DAI%d Capture", dai_i); in __rsnd_dai_probe()
1460 drv->capture.rates = RSND_RATES; in __rsnd_dai_probe()
1461 drv->capture.formats = RSND_FMTS; in __rsnd_dai_probe()
1462 drv->capture.channels_min = 2; in __rsnd_dai_probe()
1463 drv->capture.channels_max = 8; in __rsnd_dai_probe()
1464 drv->capture.stream_name = io_capture->name; in __rsnd_dai_probe()
1470 drv->symmetric_rate = 1; in __rsnd_dai_probe()
1473 dev_dbg(dev, "%s (%s/%s)\n", rdai->name, in __rsnd_dai_probe()
1474 rsnd_io_to_mod_ssi(io_playback) ? "play" : " -- ", in __rsnd_dai_probe()
1475 rsnd_io_to_mod_ssi(io_capture) ? "capture" : " -- "); in __rsnd_dai_probe()
1482 struct device_node *np = dev->of_node; in rsnd_dai_probe()
1490 return -EINVAL; in rsnd_dai_probe()
1495 return -ENOMEM; in rsnd_dai_probe()
1497 priv->rdai_nr = nr; in rsnd_dai_probe()
1498 priv->daidrv = rdrv; in rsnd_dai_probe()
1499 priv->rdai = rdai; in rsnd_dai_probe()
1518 rsnd_parse_connect_graph(priv, &rdai->playback, dai_np); in rsnd_dai_probe()
1519 rsnd_parse_connect_graph(priv, &rdai->capture, dai_np); in rsnd_dai_probe()
1537 rsnd_parse_connect_simple(priv, &rdai->playback, dai_np); in rsnd_dai_probe()
1538 rsnd_parse_connect_simple(priv, &rdai->capture, dai_np); in rsnd_dai_probe()
1561 spin_lock_irqsave(&priv->lock, flags); in rsnd_hw_update()
1566 spin_unlock_irqrestore(&priv->lock, flags); in rsnd_hw_update()
1589 io->converted_rate = 0; in rsnd_hw_params()
1590 io->converted_chan = 0; in rsnd_hw_params()
1591 if (fe->dai_link->dynamic) { in rsnd_hw_params()
1595 int stream = substream->stream; in rsnd_hw_params()
1598 struct snd_soc_pcm_runtime *be = dpcm->be; in rsnd_hw_params()
1599 struct snd_pcm_hw_params *be_params = &be->dpcm[stream].hw_params; in rsnd_hw_params()
1602 io->converted_chan = params_channels(be_params); in rsnd_hw_params()
1604 io->converted_rate = params_rate(be_params); in rsnd_hw_params()
1606 if (io->converted_chan) in rsnd_hw_params()
1607 dev_dbg(dev, "convert channels = %d\n", io->converted_chan); in rsnd_hw_params()
1608 if (io->converted_rate) { in rsnd_hw_params()
1622 dev_dbg(dev, "convert rate = %d\n", io->converted_rate); in rsnd_hw_params()
1624 channel = io->converted_chan ? io->converted_chan : in rsnd_hw_params()
1651 return -EINVAL; in rsnd_hw_params()
1654 if (params_rate(hw_params) > io->converted_rate * k_down) { in rsnd_hw_params()
1655 hw_param_interval(hw_params, SNDRV_PCM_HW_PARAM_RATE)->min = in rsnd_hw_params()
1656 io->converted_rate * k_down; in rsnd_hw_params()
1657 hw_param_interval(hw_params, SNDRV_PCM_HW_PARAM_RATE)->max = in rsnd_hw_params()
1658 io->converted_rate * k_down; in rsnd_hw_params()
1659 hw_params->cmask |= SNDRV_PCM_HW_PARAM_RATE; in rsnd_hw_params()
1660 } else if (params_rate(hw_params) * k_up < io->converted_rate) { in rsnd_hw_params()
1661 hw_param_interval(hw_params, SNDRV_PCM_HW_PARAM_RATE)->min = in rsnd_hw_params()
1662 DIV_ROUND_UP(io->converted_rate, k_up); in rsnd_hw_params()
1663 hw_param_interval(hw_params, SNDRV_PCM_HW_PARAM_RATE)->max = in rsnd_hw_params()
1664 DIV_ROUND_UP(io->converted_rate, k_up); in rsnd_hw_params()
1665 hw_params->cmask |= SNDRV_PCM_HW_PARAM_RATE; in rsnd_hw_params()
1709 if (cfg->texts) { in rsnd_kctrl_info()
1710 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; in rsnd_kctrl_info()
1711 uinfo->count = cfg->size; in rsnd_kctrl_info()
1712 uinfo->value.enumerated.items = cfg->max; in rsnd_kctrl_info()
1713 if (uinfo->value.enumerated.item >= cfg->max) in rsnd_kctrl_info()
1714 uinfo->value.enumerated.item = cfg->max - 1; in rsnd_kctrl_info()
1715 strscpy(uinfo->value.enumerated.name, in rsnd_kctrl_info()
1716 cfg->texts[uinfo->value.enumerated.item], in rsnd_kctrl_info()
1717 sizeof(uinfo->value.enumerated.name)); in rsnd_kctrl_info()
1719 uinfo->count = cfg->size; in rsnd_kctrl_info()
1720 uinfo->value.integer.min = 0; in rsnd_kctrl_info()
1721 uinfo->value.integer.max = cfg->max; in rsnd_kctrl_info()
1722 uinfo->type = (cfg->max == 1) ? in rsnd_kctrl_info()
1736 for (i = 0; i < cfg->size; i++) in rsnd_kctrl_get()
1737 if (cfg->texts) in rsnd_kctrl_get()
1738 uc->value.enumerated.item[i] = cfg->val[i]; in rsnd_kctrl_get()
1740 uc->value.integer.value[i] = cfg->val[i]; in rsnd_kctrl_get()
1751 if (!cfg->accept(cfg->io)) in rsnd_kctrl_put()
1754 for (i = 0; i < cfg->size; i++) { in rsnd_kctrl_put()
1755 if (cfg->texts) { in rsnd_kctrl_put()
1756 change |= (uc->value.enumerated.item[i] != cfg->val[i]); in rsnd_kctrl_put()
1757 cfg->val[i] = uc->value.enumerated.item[i]; in rsnd_kctrl_put()
1759 change |= (uc->value.integer.value[i] != cfg->val[i]); in rsnd_kctrl_put()
1760 cfg->val[i] = uc->value.integer.value[i]; in rsnd_kctrl_put()
1764 if (change && cfg->update) in rsnd_kctrl_put()
1765 cfg->update(cfg->io, cfg->mod); in rsnd_kctrl_put()
1791 cfg->cfg.val = cfg->val; in rsnd_kctrl_init_m()
1793 return &cfg->cfg; in rsnd_kctrl_init_m()
1798 cfg->cfg.val = &cfg->val; in rsnd_kctrl_init_s()
1800 return &cfg->cfg; in rsnd_kctrl_init_s()
1804 "128 dB/1 step", /* 00000 */
1805 "64 dB/1 step", /* 00001 */
1806 "32 dB/1 step", /* 00010 */
1807 "16 dB/1 step", /* 00011 */
1808 "8 dB/1 step", /* 00100 */
1809 "4 dB/1 step", /* 00101 */
1810 "2 dB/1 step", /* 00110 */
1811 "1 dB/1 step", /* 00111 */
1812 "0.5 dB/1 step", /* 01000 */
1813 "0.25 dB/1 step", /* 01001 */
1814 "0.125 dB/1 step", /* 01010 = VOLUME_RAMP_MAX_MIX */
1815 "0.125 dB/2 steps", /* 01011 */
1816 "0.125 dB/4 steps", /* 01100 */
1817 "0.125 dB/8 steps", /* 01101 */
1818 "0.125 dB/16 steps", /* 01110 */
1819 "0.125 dB/32 steps", /* 01111 */
1820 "0.125 dB/64 steps", /* 10000 */
1821 "0.125 dB/128 steps", /* 10001 */
1822 "0.125 dB/256 steps", /* 10010 */
1823 "0.125 dB/512 steps", /* 10011 */
1824 "0.125 dB/1024 steps", /* 10100 */
1825 "0.125 dB/2048 steps", /* 10101 */
1826 "0.125 dB/4096 steps", /* 10110 */
1827 "0.125 dB/8192 steps", /* 10111 = VOLUME_RAMP_MAX_DVC */
1842 struct snd_card *card = rtd->card->snd_card; in rsnd_kctrl_new()
1848 .index = rtd->num, in rsnd_kctrl_new()
1857 * 3) re-register if card was rebinded in rsnd_kctrl_new()
1859 list_for_each_entry(kctrl, &card->controls, list) { in rsnd_kctrl_new()
1860 struct rsnd_kctrl_cfg *c = kctrl->private_data; in rsnd_kctrl_new()
1867 return -EINVAL; in rsnd_kctrl_new()
1871 return -ENOMEM; in rsnd_kctrl_new()
1877 cfg->texts = texts; in rsnd_kctrl_new()
1878 cfg->max = max; in rsnd_kctrl_new()
1879 cfg->size = size; in rsnd_kctrl_new()
1880 cfg->accept = accept; in rsnd_kctrl_new()
1881 cfg->update = update; in rsnd_kctrl_new()
1882 cfg->card = card; in rsnd_kctrl_new()
1883 cfg->kctrl = kctrl; in rsnd_kctrl_new()
1884 cfg->io = io; in rsnd_kctrl_new()
1885 cfg->mod = mod; in rsnd_kctrl_new()
1908 if (ret == -EAGAIN) { in rsnd_rdai_continuance_probe()
1955 struct device *dev = &pdev->dev; in rsnd_probe()
1978 return -ENODEV; in rsnd_probe()
1980 priv->pdev = pdev; in rsnd_probe()
1981 priv->flags = (unsigned long)of_device_get_match_data(dev); in rsnd_probe()
1982 spin_lock_init(&priv->lock); in rsnd_probe()
1994 ret = rsnd_rdai_continuance_probe(priv, &rdai->playback); in rsnd_probe()
1998 ret = rsnd_rdai_continuance_probe(priv, &rdai->capture); in rsnd_probe()
2009 for (i = 0; priv->component_dais[i] > 0; i++) { in rsnd_probe()
2010 int nr = priv->component_dais[i]; in rsnd_probe()
2013 priv->daidrv + ci, nr); in rsnd_probe()
2029 rsnd_dai_call(remove, &rdai->playback, priv); in rsnd_probe()
2030 rsnd_dai_call(remove, &rdai->capture, priv); in rsnd_probe()
2037 * Mainly it is assuming -EPROBE_DEFER case in rsnd_probe()
2046 struct rsnd_priv *priv = dev_get_drvdata(&pdev->dev); in rsnd_remove()
2060 pm_runtime_disable(&pdev->dev); in rsnd_remove()
2065 ret = rsnd_dai_call(remove, &rdai->playback, priv); in rsnd_remove()
2067 dev_warn(&pdev->dev, "Failed to remove playback dai #%d\n", i); in rsnd_remove()
2069 ret = rsnd_dai_call(remove, &rdai->capture, priv); in rsnd_remove()
2071 dev_warn(&pdev->dev, "Failed to remove capture dai #%d\n", i); in rsnd_remove()
2112 MODULE_DESCRIPTION("Renesas R-Car audio driver");
2114 MODULE_ALIAS("platform:rcar-pcm-audio");