diff --git a/tas2770-codec.c b/tas2770-codec.c
index 23d99c9d1489ecc98055b1993635f2ee66771ed8..5ba3efe1e58909a7e4642593a530c3724d29a49b 100644 (file)
--- a/tas2770-codec.c
+++ b/tas2770-codec.c
#define TAS2770_MDELAY 0xFFFFFFFE
//#define KCONTROL_CODEC
+#define DAPM_TO_CODEC
static unsigned int tas2770_codec_read(struct snd_soc_codec *codec, unsigned int reg)
{
struct tas2770_priv *pTAS2770 = snd_soc_codec_get_drvdata(codec);
dev_dbg(pTAS2770->dev, "%s, reg: 0x%x, value: 0x%x\n", __func__, reg, value);
mutex_unlock(&pTAS2770->dev_lock);
- return nResult;
+ if(nResult >= 0)
+ return value;
+ else
+ return nResult;
}
static int tas2770_dac_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event)
{
-#if 1
+#ifdef DAPM_TO_CODEC
+ struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
+#else
struct snd_soc_codec *codec = w->codec;
+#endif
// struct tas2770_priv *pTAS2770 = snd_soc_codec_get_drvdata(codec);
-
+ pr_err("%s",__func__);
switch (event) {
case SND_SOC_DAPM_POST_PMU:
snd_soc_update_bits(codec, TAS2770_PowerControl,
break;
}
-#endif
return 0;
}
static int tas2770_mute(struct snd_soc_dai *dai, int mute)
{
-#if 1
struct snd_soc_codec *codec = dai->codec;
struct tas2770_priv *pTAS2770 = snd_soc_codec_get_drvdata(codec);
+ dev_err(pTAS2770->dev, "%s mute %d",__func__, mute);
+
mutex_lock(&pTAS2770->codec_lock);
if(mute) {
snd_soc_update_bits(codec, TAS2770_PowerControl,
TAS2770_PowerControl_OperationalMode10_Active);
}
mutex_unlock(&pTAS2770->codec_lock);
-#endif
return 0;
}
{
struct snd_soc_codec *codec = dai->codec;
struct tas2770_priv *pTAS2770 = snd_soc_codec_get_drvdata(codec);
- int blr_clk_ratio;
int ret = 0;
-
+ dev_err(pTAS2770->dev, "%s",__func__);
dev_dbg(pTAS2770->dev, "%s, format: %d\n", __func__, params_format(params));
switch(params_format(params)) {
TAS2770_TDMConfigurationReg2_RXWLEN32_16Bits );
pTAS2770->ch_size = 16;
break;
- case SNDRV_PCM_FMTBIT_S24_LE:
+ case SNDRV_PCM_FORMAT_S24_LE:
snd_soc_update_bits(codec,
TAS2770_TDMConfigurationReg2,
TAS2770_TDMConfigurationReg2_RXWLEN32_Mask |
TAS2770_TDMConfigurationReg2_RXWLEN32_24Bits );
pTAS2770->ch_size = 24;
break;
- case SNDRV_PCM_FMTBIT_S32_LE:
+ case SNDRV_PCM_FORMAT_S32_LE:
snd_soc_update_bits(codec,
TAS2770_TDMConfigurationReg2,
TAS2770_TDMConfigurationReg2_RXWLEN32_Mask |
}
- blr_clk_ratio = params_channels(params) * pTAS2770->ch_size;
- dev_dbg(pTAS2770->dev, "blr_clk_ratio: %d\n", blr_clk_ratio);
-
- switch(blr_clk_ratio) {
- case 16:
- snd_soc_update_bits(codec,
- TAS2770_ClockConfiguration,
- TAS2770_ClockConfiguration_SBCLKtoFS52_Mask,
- TAS2770_ClockConfiguration_SBCLKtoFS52_16);
- break;
- case 24:
- snd_soc_update_bits(codec,
- TAS2770_ClockConfiguration,
- TAS2770_ClockConfiguration_SBCLKtoFS52_Mask,
- TAS2770_ClockConfiguration_SBCLKtoFS52_24);
- break;
- case 32:
- snd_soc_update_bits(codec,
- TAS2770_ClockConfiguration,
- TAS2770_ClockConfiguration_SBCLKtoFS52_Mask,
- TAS2770_ClockConfiguration_SBCLKtoFS52_32);
- break;
- case 48:
- snd_soc_update_bits(codec,
- TAS2770_ClockConfiguration,
- TAS2770_ClockConfiguration_SBCLKtoFS52_Mask,
- TAS2770_ClockConfiguration_SBCLKtoFS52_48);
- break;
- case 64:
- snd_soc_update_bits(codec,
- TAS2770_ClockConfiguration,
- TAS2770_ClockConfiguration_SBCLKtoFS52_Mask,
- TAS2770_ClockConfiguration_SBCLKtoFS52_64);
- break;
- case 96:
- snd_soc_update_bits(codec,
- TAS2770_ClockConfiguration,
- TAS2770_ClockConfiguration_SBCLKtoFS52_Mask,
- TAS2770_ClockConfiguration_SBCLKtoFS52_96);
- break;
- case 128:
- snd_soc_update_bits(codec,
- TAS2770_ClockConfiguration,
- TAS2770_ClockConfiguration_SBCLKtoFS52_Mask,
- TAS2770_ClockConfiguration_SBCLKtoFS52_128);
- break;
- case 192:
- snd_soc_update_bits(codec,
- TAS2770_ClockConfiguration,
- TAS2770_ClockConfiguration_SBCLKtoFS52_Mask,
- TAS2770_ClockConfiguration_SBCLKtoFS52_192);
- break;
- case 256:
- snd_soc_update_bits(codec,
- TAS2770_ClockConfiguration,
- TAS2770_ClockConfiguration_SBCLKtoFS52_Mask,
- TAS2770_ClockConfiguration_SBCLKtoFS52_256);
- break;
- case 384:
- snd_soc_update_bits(codec,
- TAS2770_ClockConfiguration,
- TAS2770_ClockConfiguration_SBCLKtoFS52_Mask,
- TAS2770_ClockConfiguration_SBCLKtoFS52_384);
- break;
- case 512:
- snd_soc_update_bits(codec,
- TAS2770_ClockConfiguration,
- TAS2770_ClockConfiguration_SBCLKtoFS52_Mask,
- TAS2770_ClockConfiguration_SBCLKtoFS52_512);
- break;
- default:
- dev_err(pTAS2770->dev, "Invalid BCLK to FSYNC ratio\n");
- ret = -EINVAL;
- }
-
dev_dbg(pTAS2770->dev, "%s, sample rate: %d\n", __func__, params_rate(params));
switch(params_rate(params))
{
.write = tas2770_codec_write,
.suspend = tas2770_codec_suspend,
.resume = tas2770_codec_resume,
-// .controls = tas2770_snd_controls,
-// .num_controls = ARRAY_SIZE(tas2770_snd_controls),
- .dapm_widgets = tas2770_dapm_widgets,
- .num_dapm_widgets = ARRAY_SIZE(tas2770_dapm_widgets),
- .dapm_routes = tas2770_audio_map,
- .num_dapm_routes = ARRAY_SIZE(tas2770_audio_map),
+ .component_driver = {
+// .controls = tas2770_snd_controls,
+// .num_controls = ARRAY_SIZE(tas2770_snd_controls),
+ .dapm_widgets = tas2770_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(tas2770_dapm_widgets),
+ .dapm_routes = tas2770_audio_map,
+ .num_dapm_routes = ARRAY_SIZE(tas2770_audio_map),
+ },
};
int tas2770_register_codec(struct tas2770_priv *pTAS2770)
nResult = snd_soc_register_codec(pTAS2770->dev,
&soc_codec_driver_tas2770,
tas2770_dai_driver, ARRAY_SIZE(tas2770_dai_driver));
-
+ dev_info(pTAS2770->dev, "%s, enter result %d\n", __func__,nResult);
return nResult;
}