ASoC: make clock direction configurable in asoc-simple
Some CPU drivers (e. g. davinci-mcasp) may require the system clock to be configured as OUT, while there's no good way currently to set SND_SOC_CLK_OUT in simple-soc driver if the clock is fixed-rate. This patch makes asoc_simple_card_init_dai() initialize clock to SND_SOCK_CLK_OUT if explicitly stated in the relevant dts file. This change is transparent and doesn't change the default behavior. Signed-off-by: Vitaly Wool <vitaly.wool@konsulko.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
0995fb7c98
commit
a728f56094
|
@ -86,6 +86,9 @@ Optional CPU/CODEC subnodes properties:
|
||||||
in dai startup() and disabled with
|
in dai startup() and disabled with
|
||||||
clk_disable_unprepare() in dai
|
clk_disable_unprepare() in dai
|
||||||
shutdown().
|
shutdown().
|
||||||
|
- system-clock-direction-out : specifies clock direction as 'out' on
|
||||||
|
initialization. It is useful for some aCPUs with
|
||||||
|
fixed clocks.
|
||||||
|
|
||||||
Example 1 - single DAI link:
|
Example 1 - single DAI link:
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
struct asoc_simple_dai {
|
struct asoc_simple_dai {
|
||||||
const char *name;
|
const char *name;
|
||||||
unsigned int sysclk;
|
unsigned int sysclk;
|
||||||
|
int clk_direction;
|
||||||
int slots;
|
int slots;
|
||||||
int slot_width;
|
int slot_width;
|
||||||
unsigned int tx_slot_mask;
|
unsigned int tx_slot_mask;
|
||||||
|
|
|
@ -196,7 +196,11 @@ int asoc_simple_card_parse_clk(struct device *dev,
|
||||||
simple_dai->sysclk = clk_get_rate(clk);
|
simple_dai->sysclk = clk_get_rate(clk);
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_dbg(dev, "%s : sysclk = %d\n", name, simple_dai->sysclk);
|
if (of_property_read_bool(node, "system-clock-direction-out"))
|
||||||
|
simple_dai->clk_direction = SND_SOC_CLOCK_OUT;
|
||||||
|
|
||||||
|
dev_dbg(dev, "%s : sysclk = %d, direction %d\n", name,
|
||||||
|
simple_dai->sysclk, simple_dai->clk_direction);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -310,7 +314,8 @@ int asoc_simple_card_init_dai(struct snd_soc_dai *dai,
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (simple_dai->sysclk) {
|
if (simple_dai->sysclk) {
|
||||||
ret = snd_soc_dai_set_sysclk(dai, 0, simple_dai->sysclk, 0);
|
ret = snd_soc_dai_set_sysclk(dai, 0, simple_dai->sysclk,
|
||||||
|
simple_dai->clk_direction);
|
||||||
if (ret && ret != -ENOTSUPP) {
|
if (ret && ret != -ENOTSUPP) {
|
||||||
dev_err(dai->dev, "simple-card: set_sysclk error\n");
|
dev_err(dai->dev, "simple-card: set_sysclk error\n");
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue