Merge remote-tracking branches 'asoc/topic/fsl', 'asoc/topic/fsl-card', 'asoc/topic/fsl-dt' and 'asoc/topic/fsl-ssi' into asoc-next
This commit is contained in:
@@ -105,7 +105,7 @@ static int eukrea_tlv320_probe(struct platform_device *pdev)
|
||||
int ret;
|
||||
int int_port = 0, ext_port;
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
struct device_node *ssi_np, *codec_np;
|
||||
struct device_node *ssi_np = NULL, *codec_np = NULL;
|
||||
|
||||
eukrea_tlv320.dev = &pdev->dev;
|
||||
if (np) {
|
||||
@@ -217,8 +217,7 @@ static int eukrea_tlv320_probe(struct platform_device *pdev)
|
||||
err:
|
||||
if (ret)
|
||||
dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", ret);
|
||||
if (np)
|
||||
of_node_put(ssi_np);
|
||||
of_node_put(ssi_np);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@@ -51,6 +51,7 @@ struct codec_priv {
|
||||
* @sysclk_freq[2]: SYSCLK rates for set_sysclk()
|
||||
* @sysclk_dir[2]: SYSCLK directions for set_sysclk()
|
||||
* @sysclk_id[2]: SYSCLK ids for set_sysclk()
|
||||
* @slot_width: Slot width of each frame
|
||||
*
|
||||
* Note: [1] for tx and [0] for rx
|
||||
*/
|
||||
@@ -58,6 +59,7 @@ struct cpu_priv {
|
||||
unsigned long sysclk_freq[2];
|
||||
u32 sysclk_dir[2];
|
||||
u32 sysclk_id[2];
|
||||
u32 slot_width;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -125,7 +127,12 @@ static int fsl_asoc_card_hw_params(struct snd_pcm_substream *substream,
|
||||
priv->sample_rate = params_rate(params);
|
||||
priv->sample_format = params_format(params);
|
||||
|
||||
if (priv->card.set_bias_level)
|
||||
/*
|
||||
* If codec-dai is DAI Master and all configurations are already in the
|
||||
* set_bias_level(), bypass the remaining settings in hw_params().
|
||||
* Note: (dai_fmt & CBM_CFM) includes CBM_CFM and CBM_CFS.
|
||||
*/
|
||||
if (priv->card.set_bias_level && priv->dai_fmt & SND_SOC_DAIFMT_CBM_CFM)
|
||||
return 0;
|
||||
|
||||
/* Specific configurations of DAIs starts from here */
|
||||
@@ -137,6 +144,15 @@ static int fsl_asoc_card_hw_params(struct snd_pcm_substream *substream,
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (cpu_priv->slot_width) {
|
||||
ret = snd_soc_dai_set_tdm_slot(rtd->cpu_dai, 0x3, 0x3, 2,
|
||||
cpu_priv->slot_width);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to set TDM slot for cpu dai\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -448,6 +464,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
|
||||
priv->cpu_priv.sysclk_freq[RX] = priv->codec_priv.mclk_freq;
|
||||
priv->cpu_priv.sysclk_dir[TX] = SND_SOC_CLOCK_OUT;
|
||||
priv->cpu_priv.sysclk_dir[RX] = SND_SOC_CLOCK_OUT;
|
||||
priv->cpu_priv.slot_width = 32;
|
||||
priv->dai_fmt |= SND_SOC_DAIFMT_CBS_CFS;
|
||||
} else if (of_device_is_compatible(np, "fsl,imx-audio-sgtl5000")) {
|
||||
priv->codec_priv.mclk_id = SGTL5000_SYSCLK;
|
||||
|
@@ -67,8 +67,6 @@
|
||||
/**
|
||||
* FSLSSI_I2S_FORMATS: audio formats supported by the SSI
|
||||
*
|
||||
* This driver currently only supports the SSI running in I2S slave mode.
|
||||
*
|
||||
* The SSI has a limitation in that the samples must be in the same byte
|
||||
* order as the host CPU. This is because when multiple bytes are written
|
||||
* to the STX register, the bytes and bits must be written in the same
|
||||
@@ -1363,7 +1361,7 @@ static int fsl_ssi_probe(struct platform_device *pdev)
|
||||
return PTR_ERR(ssi_private->regs);
|
||||
}
|
||||
|
||||
ssi_private->irq = irq_of_parse_and_map(np, 0);
|
||||
ssi_private->irq = platform_get_irq(pdev, 0);
|
||||
if (!ssi_private->irq) {
|
||||
dev_err(&pdev->dev, "no irq for node %s\n", np->full_name);
|
||||
return -ENXIO;
|
||||
@@ -1389,7 +1387,7 @@ static int fsl_ssi_probe(struct platform_device *pdev)
|
||||
if (ssi_private->soc->imx) {
|
||||
ret = fsl_ssi_imx_probe(pdev, ssi_private, iomem);
|
||||
if (ret)
|
||||
goto error_irqmap;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = snd_soc_register_component(&pdev->dev, &fsl_ssi_component,
|
||||
@@ -1412,7 +1410,7 @@ static int fsl_ssi_probe(struct platform_device *pdev)
|
||||
|
||||
ret = fsl_ssi_debugfs_create(&ssi_private->dbg_stats, &pdev->dev);
|
||||
if (ret)
|
||||
goto error_asoc_register;
|
||||
goto error_irq;
|
||||
|
||||
/*
|
||||
* If codec-handle property is missing from SSI node, we assume
|
||||
@@ -1460,10 +1458,6 @@ error_asoc_register:
|
||||
if (ssi_private->soc->imx)
|
||||
fsl_ssi_imx_clean(pdev, ssi_private);
|
||||
|
||||
error_irqmap:
|
||||
if (ssi_private->use_dma)
|
||||
irq_dispose_mapping(ssi_private->irq);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1480,9 +1474,6 @@ static int fsl_ssi_remove(struct platform_device *pdev)
|
||||
if (ssi_private->soc->imx)
|
||||
fsl_ssi_imx_clean(pdev, ssi_private);
|
||||
|
||||
if (ssi_private->use_dma)
|
||||
irq_dispose_mapping(ssi_private->irq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -175,10 +175,8 @@ static int imx_sgtl5000_probe(struct platform_device *pdev)
|
||||
fail:
|
||||
if (data && !IS_ERR(data->codec_clk))
|
||||
clk_put(data->codec_clk);
|
||||
if (ssi_np)
|
||||
of_node_put(ssi_np);
|
||||
if (codec_np)
|
||||
of_node_put(codec_np);
|
||||
of_node_put(ssi_np);
|
||||
of_node_put(codec_np);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@@ -74,8 +74,7 @@ static int imx_spdif_audio_probe(struct platform_device *pdev)
|
||||
platform_set_drvdata(pdev, data);
|
||||
|
||||
end:
|
||||
if (spdif_np)
|
||||
of_node_put(spdif_np);
|
||||
of_node_put(spdif_np);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@@ -281,10 +281,8 @@ static int imx_wm8962_probe(struct platform_device *pdev)
|
||||
clk_fail:
|
||||
clk_disable_unprepare(data->codec_clk);
|
||||
fail:
|
||||
if (ssi_np)
|
||||
of_node_put(ssi_np);
|
||||
if (codec_np)
|
||||
of_node_put(codec_np);
|
||||
of_node_put(ssi_np);
|
||||
of_node_put(codec_np);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
مرجع در شماره جدید
Block a user