blob: b00ce3d98c05fa3cec232d740117d7fbcebcaa06 [file] [log] [blame]
Texas Instruments pcm186x DT bindings
This driver supports the I2C.
Required properties on I2C:
- compatible: "ti, pcm1864"
- reg: the I2C address
Examples:
&i2c_c {
status = "okay";
pinctrl-names="default";
pinctrl-0=<&c_i2c_master_pin1>;
pcm1864_4a: pcm1864_4a@4a {
compatible = "ti, pcm1864";
#sound-dai-cells = <0>;
slots_mask = <0x0f>;
reg = <0x4a>;
status = "okay";
};
};
Note:
Because pcm1864 need to use a fixed frequency,
So we also need to modify pcm config.
Reference is as follows:
diff --git a/sound/soc/amlogic/auge/tdm.c b/sound/soc/amlogic/auge/tdm.c
index d235a8d..a294e1b 100644
--- a/sound/soc/amlogic/auge/tdm.c
+++ b/sound/soc/amlogic/auge/tdm.c
@@ -451,11 +451,12 @@ static int aml_dai_tdm_trigger(struct snd_pcm_substream *substream, int cmd,
}
static int pcm_setting_init(struct pcm_setting *setting, unsigned int rate,
- unsigned int channels)
+ unsigned int channels, unsigned int fixbclk)
{
unsigned int ratio = 0;
setting->lrclk = rate;
- setting->bclk_lrclk_ratio = setting->slots * setting->slot_width;
+
+ setting->bclk_lrclk_ratio = setting->slots * setting->slot_width * fixbclk;
setting->bclk = setting->lrclk * setting->bclk_lrclk_ratio;
/* calculate mclk */
@@ -534,8 +535,13 @@ static int aml_dai_tdm_hw_params(struct snd_pcm_substream *substream,
unsigned int rate = params_rate(params);
unsigned int channels = params_channels(params);
int ret;
-
- ret = pcm_setting_init(setting, rate, channels);
+
+ // FOR PCM1864 TDM BCLK NEED 12.288MHz
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+ ret = pcm_setting_init(setting, rate, channels, 1);
+ } else {
+ ret = pcm_setting_init(setting, rate, channels, 2);
+ }
if (ret)
return ret;
diff --git a/sound/soc/amlogic/auge/tdm.c b/sound/soc/amlogic/auge/tdm.c
index a294e1b..a756035 100644
--- a/sound/soc/amlogic/auge/tdm.c
+++ b/sound/soc/amlogic/auge/tdm.c
@@ -455,8 +455,11 @@ static int pcm_setting_init(struct pcm_setting *setting, unsigned int rate,
{
unsigned int ratio = 0;
setting->lrclk = rate;
-
- setting->bclk_lrclk_ratio = setting->slots * setting->slot_width * fixbclk;
+
+ if (fixbclk == 2)
+ setting->bclk_lrclk_ratio = setting->slots * 32 * fixbclk;
+ else
+ setting->bclk_lrclk_ratio = setting->slots * setting->slot_width * fixbclk;
setting->bclk = setting->lrclk * setting->bclk_lrclk_ratio;
/* calculate mclk */