292fda8eb8f1561c3ff5bfafe1969c7d6e7857e0
[openwrt.git] / target / linux / omap / patches-3.12 / 400-ASoC-davinci-evm-Move-sysclk-logic-away-from-evm_hw_.patch
1 From 13254d51149ce1a0fdbb38fa229c6cc91bcbe6ec Mon Sep 17 00:00:00 2001
2 From: Jyri Sarha <jsarha@ti.com>
3 Date: Fri, 13 Sep 2013 17:43:18 +0300
4 Subject: [PATCH 211/752] ASoC: davinci-evm: Move sysclk logic away from
5  evm_hw_params
6
7 The sysclk rate does not change runtime so it should be initialized at
8 init time.
9
10 Signed-off-by: Jyri Sarha <jsarha@ti.com>
11 ---
12  sound/soc/davinci/davinci-evm.c |   64 +++++++++++++++++++++++++++------------
13  1 file changed, 44 insertions(+), 20 deletions(-)
14
15 diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c
16 index fd7c45b..2f8161c 100644
17 --- a/sound/soc/davinci/davinci-evm.c
18 +++ b/sound/soc/davinci/davinci-evm.c
19 @@ -27,6 +27,10 @@
20  #include "davinci-i2s.h"
21  #include "davinci-mcasp.h"
22  
23 +struct snd_soc_card_drvdata_davinci {
24 +       unsigned sysclk;
25 +};
26 +
27  #define AUDIO_FORMAT (SND_SOC_DAIFMT_DSP_B | \
28                 SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF)
29  static int evm_hw_params(struct snd_pcm_substream *substream,
30 @@ -35,27 +39,11 @@ static int evm_hw_params(struct snd_pcm_substream *substream,
31         struct snd_soc_pcm_runtime *rtd = substream->private_data;
32         struct snd_soc_dai *codec_dai = rtd->codec_dai;
33         struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
34 +       struct snd_soc_codec *codec = rtd->codec;
35 +       struct snd_soc_card *soc_card = codec->card;
36         int ret = 0;
37 -       unsigned sysclk;
38 -
39 -       /* ASP1 on DM355 EVM is clocked by an external oscillator */
40 -       if (machine_is_davinci_dm355_evm() || machine_is_davinci_dm6467_evm() ||
41 -           machine_is_davinci_dm365_evm())
42 -               sysclk = 27000000;
43 -
44 -       /* ASP0 in DM6446 EVM is clocked by U55, as configured by
45 -        * board-dm644x-evm.c using GPIOs from U18.  There are six
46 -        * options; here we "know" we use a 48 KHz sample rate.
47 -        */
48 -       else if (machine_is_davinci_evm())
49 -               sysclk = 12288000;
50 -
51 -       else if (machine_is_davinci_da830_evm() ||
52 -                               machine_is_davinci_da850_evm())
53 -               sysclk = 24576000;
54 -
55 -       else
56 -               return -EINVAL;
57 +       unsigned sysclk = ((struct snd_soc_card_drvdata_davinci *)
58 +                          snd_soc_card_get_drvdata(soc_card))->sysclk;
59  
60         /* set codec DAI configuration */
61         ret = snd_soc_dai_set_fmt(codec_dai, AUDIO_FORMAT);
62 @@ -243,35 +231,65 @@ static struct snd_soc_dai_link da850_evm_dai = {
63  };
64  
65  /* davinci dm6446 evm audio machine driver */
66 +/*
67 + * ASP0 in DM6446 EVM is clocked by U55, as configured by
68 + * board-dm644x-evm.c using GPIOs from U18.  There are six
69 + * options; here we "know" we use a 48 KHz sample rate.
70 + */
71 +static struct snd_soc_card_drvdata_davinci dm6446_snd_soc_card_drvdata = {
72 +       .sysclk = 12288000,
73 +};
74 +
75  static struct snd_soc_card dm6446_snd_soc_card_evm = {
76         .name = "DaVinci DM6446 EVM",
77         .owner = THIS_MODULE,
78         .dai_link = &dm6446_evm_dai,
79         .num_links = 1,
80 +       .drvdata = &dm6446_snd_soc_card_drvdata,
81  };
82  
83  /* davinci dm355 evm audio machine driver */
84 +/* ASP1 on DM355 EVM is clocked by an external oscillator */
85 +static struct snd_soc_card_drvdata_davinci dm355_snd_soc_card_drvdata = {
86 +       .sysclk = 27000000,
87 +};
88 +
89  static struct snd_soc_card dm355_snd_soc_card_evm = {
90         .name = "DaVinci DM355 EVM",
91         .owner = THIS_MODULE,
92         .dai_link = &dm355_evm_dai,
93         .num_links = 1,
94 +       .drvdata = &dm355_snd_soc_card_drvdata,
95  };
96  
97  /* davinci dm365 evm audio machine driver */
98 +static struct snd_soc_card_drvdata_davinci dm365_snd_soc_card_drvdata = {
99 +       .sysclk = 27000000,
100 +};
101 +
102  static struct snd_soc_card dm365_snd_soc_card_evm = {
103         .name = "DaVinci DM365 EVM",
104         .owner = THIS_MODULE,
105         .dai_link = &dm365_evm_dai,
106         .num_links = 1,
107 +       .drvdata = &dm365_snd_soc_card_drvdata,
108  };
109  
110  /* davinci dm6467 evm audio machine driver */
111 +static struct snd_soc_card_drvdata_davinci dm6467_snd_soc_card_drvdata = {
112 +       .sysclk = 27000000,
113 +};
114 +
115  static struct snd_soc_card dm6467_snd_soc_card_evm = {
116         .name = "DaVinci DM6467 EVM",
117         .owner = THIS_MODULE,
118         .dai_link = dm6467_evm_dai,
119         .num_links = ARRAY_SIZE(dm6467_evm_dai),
120 +       .drvdata = &dm6467_snd_soc_card_drvdata,
121 +};
122 +
123 +static struct snd_soc_card_drvdata_davinci da830_snd_soc_card_drvdata = {
124 +       .sysclk = 24576000,
125  };
126  
127  static struct snd_soc_card da830_snd_soc_card = {
128 @@ -279,6 +297,11 @@ static struct snd_soc_card da830_snd_soc_card = {
129         .owner = THIS_MODULE,
130         .dai_link = &da830_evm_dai,
131         .num_links = 1,
132 +       .drvdata = &da830_snd_soc_card_drvdata,
133 +};
134 +
135 +static struct snd_soc_card_drvdata_davinci da850_snd_soc_card_drvdata = {
136 +       .sysclk = 24576000,
137  };
138  
139  static struct snd_soc_card da850_snd_soc_card = {
140 @@ -286,6 +309,7 @@ static struct snd_soc_card da850_snd_soc_card = {
141         .owner = THIS_MODULE,
142         .dai_link = &da850_evm_dai,
143         .num_links = 1,
144 +       .drvdata = &da850_snd_soc_card_drvdata,
145  };
146  
147  static struct platform_device *evm_snd_device;
148 -- 
149 1.7.10.4
150