qmc_audio
struct qmc_audio *qmc_audio = dev_get_drvdata(component->dev);
for (i = 0; i < qmc_audio->num_dais; i++) {
dai_driver = qmc_audio->dai_drivers + i;
struct qmc_audio *qmc_audio = snd_soc_dai_get_drvdata(dai);
return dai->driver - qmc_audio->dai_drivers;
struct qmc_audio *qmc_audio = snd_soc_dai_get_drvdata(dai);
if (index > qmc_audio->num_dais)
return qmc_audio->dais + index;
static int qmc_audio_dai_parse(struct qmc_audio *qmc_audio, struct device_node *np,
qmc_dai->dev = qmc_audio->dev;
dev_err(qmc_audio->dev, "%pOF: failed to read reg\n", np);
qmc_dai->name = devm_kasprintf(qmc_audio->dev, GFP_KERNEL, "%s.%d",
return dev_err_probe(qmc_audio->dev, count,
return dev_err_probe(qmc_audio->dev, -EINVAL,
qmc_dai->qmc_chans = devm_kcalloc(qmc_audio->dev, count, sizeof(*qmc_dai->qmc_chans),
qmc_dai->qmc_chans[i] = devm_qmc_chan_get_byphandles_index(qmc_audio->dev, np,
return dev_err_probe(qmc_audio->dev, PTR_ERR(qmc_dai->qmc_chans[i]),
dev_err(qmc_audio->dev, "dai %d get QMC %d channel info failed %d\n",
dev_err(qmc_audio->dev, "dai %d QMC chan %d mode %d is not QMC_TRANSPARENT\n",
dev_err(qmc_audio->dev, "dai %d QMC chan %d inconsistent number of Tx timeslots (%u instead of %u)\n",
dev_err(qmc_audio->dev, "dai %d QMC chan %d inconsistent number of Rx timeslots (%u instead of %u)\n",
dev_err(qmc_audio->dev, "dai %d QMC chan %d inconsistent Tx frame sample rate (%lu instead of %lu)\n",
dev_err(qmc_audio->dev, "dai %d QMC chan %d inconsistent Rx frame sample rate (%lu instead of %lu)\n",
dev_err(qmc_audio->dev, "dai %d get QMC %d channel TS info failed %d\n",
dev_err(qmc_audio->dev, "dai %d QMC chan %d unordered channels (RX timeslot %d before %d)\n",
dev_err(qmc_audio->dev, "dai %d QMC chan %d unordered channels (TX timeslot %d before %d)\n",
struct qmc_audio *qmc_audio;
qmc_audio = devm_kzalloc(&pdev->dev, sizeof(*qmc_audio), GFP_KERNEL);
if (!qmc_audio)
qmc_audio->dev = &pdev->dev;
qmc_audio->num_dais = of_get_available_child_count(np);
if (qmc_audio->num_dais) {
qmc_audio->dais = devm_kcalloc(&pdev->dev, qmc_audio->num_dais,
sizeof(*qmc_audio->dais),
if (!qmc_audio->dais)
qmc_audio->dai_drivers = devm_kcalloc(&pdev->dev, qmc_audio->num_dais,
sizeof(*qmc_audio->dai_drivers),
if (!qmc_audio->dai_drivers)
ret = qmc_audio_dai_parse(qmc_audio, child,
qmc_audio->dais + i,
qmc_audio->dai_drivers + i);
platform_set_drvdata(pdev, qmc_audio);
ret = devm_snd_soc_register_component(qmc_audio->dev,
qmc_audio->dai_drivers,
qmc_audio->num_dais);