Skip to content

Commit ad7880d

Browse files
committed
bcm2835-i2s: setup clock only if CPU is clock master
Introduced in commit: commit c14827e Author: Phil Elwell <[email protected]> Date: Mon Sep 1 16:35:56 2014 +0100 bcm2708: Allow option card devices to be configured via DT
1 parent a472d41 commit ad7880d

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

sound/soc/bcm/bcm2835-i2s.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -411,15 +411,19 @@ static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream,
411411
divf = dividend & BCM2835_CLK_DIVF_MASK;
412412
}
413413

414-
/* Set clock divider */
415-
regmap_write(dev->clk_regmap, BCM2835_CLK_PCMDIV_REG, BCM2835_CLK_PASSWD
416-
| BCM2835_CLK_DIVI(divi)
417-
| BCM2835_CLK_DIVF(divf));
418-
419-
/* Setup clock, but don't start it yet */
420-
regmap_write(dev->clk_regmap, BCM2835_CLK_PCMCTL_REG, BCM2835_CLK_PASSWD
421-
| BCM2835_CLK_MASH(mash)
422-
| BCM2835_CLK_SRC(clk_src));
414+
/* Clock should only be set up here if CPU is clock master */
415+
if (((dev->fmt & SND_SOC_DAIFMT_MASTER_MASK) == SND_SOC_DAIFMT_CBS_CFS) ||
416+
((dev->fmt & SND_SOC_DAIFMT_MASTER_MASK) == SND_SOC_DAIFMT_CBS_CFM)) {
417+
/* Set clock divider */
418+
regmap_write(dev->clk_regmap, BCM2835_CLK_PCMDIV_REG, BCM2835_CLK_PASSWD
419+
| BCM2835_CLK_DIVI(divi)
420+
| BCM2835_CLK_DIVF(divf));
421+
422+
/* Setup clock, but don't start it yet */
423+
regmap_write(dev->clk_regmap, BCM2835_CLK_PCMCTL_REG, BCM2835_CLK_PASSWD
424+
| BCM2835_CLK_MASH(mash)
425+
| BCM2835_CLK_SRC(clk_src));
426+
}
423427

424428
/* Setup the frame format */
425429
format = BCM2835_I2S_CHEN;

0 commit comments

Comments
 (0)