|
@@ -582,8 +582,17 @@ static int davinci_config_channel_size(struct davinci_mcasp *mcasp,
|
|
|
* both left and right channels), so it has to be divided by number of
|
|
|
* tdm-slots (for I2S - divided by 2).
|
|
|
*/
|
|
|
- if (mcasp->bclk_lrclk_ratio)
|
|
|
- word_length = mcasp->bclk_lrclk_ratio / mcasp->tdm_slots;
|
|
|
+ if (mcasp->bclk_lrclk_ratio) {
|
|
|
+ u32 slot_length = mcasp->bclk_lrclk_ratio / mcasp->tdm_slots;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * When we have more bclk then it is needed for the data, we
|
|
|
+ * need to use the rotation to move the received samples to have
|
|
|
+ * correct alignment.
|
|
|
+ */
|
|
|
+ rx_rotate = (slot_length - word_length) / 4;
|
|
|
+ word_length = slot_length;
|
|
|
+ }
|
|
|
|
|
|
/* mapping of the XSSZ bit-field as described in the datasheet */
|
|
|
fmt = (word_length >> 1) - 1;
|
|
@@ -1125,6 +1134,7 @@ static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
|
|
|
},
|
|
|
.ops = &davinci_mcasp_dai_ops,
|
|
|
|
|
|
+ .symmetric_samplebits = 1,
|
|
|
},
|
|
|
{
|
|
|
.name = "davinci-mcasp.1",
|
|
@@ -1391,6 +1401,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
|
|
|
ret = pm_runtime_get_sync(&pdev->dev);
|
|
|
if (IS_ERR_VALUE(ret)) {
|
|
|
dev_err(&pdev->dev, "pm_runtime_get_sync() failed\n");
|
|
|
+ pm_runtime_disable(&pdev->dev);
|
|
|
return ret;
|
|
|
}
|
|
|
|