@@ -39,6 +39,10 @@ Optional properties:
please refer to pinctrl-bindings.txt
- fck_parent : Should contain a valid clock name which will be used as parent
for the McASP fck
+- ahclkx-en: In case the MCASP runs in slave mode, e.g. i2s SCK and WS slave,
+ we can still provide the MCLK to a codec PLL using the AHCLKX
+ transmit clock output. This setup can be activated by using this
+ property. Clock master mode remains unaffected.
Example:
@@ -44,6 +44,11 @@ struct davinci_mcasp_pdata {
int clk_input_pin;
/*
+ * Activate AHCLKX clock output in slave mode.
+ */
+ bool ahclkx_en;
+
+ /*
* This flag works when both clock and FS are outputs for the cpu
* and makes clock more accurate (FS is not symmetrical and the
* clock is very fast.
@@ -94,6 +94,7 @@ struct davinci_mcasp {
int sysclk_freq;
bool bclk_master;
+ bool ahclkx_en;
/* McASP FIFO related */
u8 txnumevt;
@@ -605,6 +606,10 @@ static int davinci_mcasp_set_sysclk(struct snd_soc_dai *dai, int clk_id,
mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AHCLKX);
+ } else if (mcasp->ahclkx_en) {
+ mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
+ mcasp_set_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
+ mcasp_set_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AHCLKX);
} else {
mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKXCTL_REG, AHCLKXE);
mcasp_clr_bits(mcasp, DAVINCI_MCASP_AHCLKRCTL_REG, AHCLKRE);
@@ -1610,6 +1615,8 @@ static struct davinci_mcasp_pdata *davinci_mcasp_set_pdata_from_of(
if (ret >= 0)
pdata->op_mode = val;
+ pdata->ahclkx_en = of_property_read_bool(np, "ahclkx-en");
+
ret = of_property_read_u32(np, "tdm-slots", &val);
if (ret >= 0) {
if (val < 2 || val > 32) {
@@ -1851,6 +1858,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
mcasp->version = pdata->version;
mcasp->txnumevt = pdata->txnumevt;
mcasp->rxnumevt = pdata->rxnumevt;
+ mcasp->ahclkx_en = pdata->ahclkx_en;
mcasp->dev = &pdev->dev;
The AHCLKX clock output of the McASP can be used as audio MCLK, even if the McASP runs in slave mode. Add a DT binding to make this option available in a simple-card setup. Signed-off-by: Stefan Müller-Klieser <s.mueller-klieser@phytec.de> --- Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt | 4 ++++ include/linux/platform_data/davinci_asp.h | 5 +++++ sound/soc/davinci/davinci-mcasp.c | 8 ++++++++ 3 files changed, 17 insertions(+)