ASoC: es8328 codec improvements
cover ASoC: es8328 codec improvements
The first 4 patches are bug fixes, then the next 4 add support for more sample rates and formats.
The final patch I'm slightly unsure about since the hardware does allow different playback and capture rates, but it only allows 8kHz and 48kHz or 8.0182kHz and 44.1kHz, all other rates have to be symmetric.
All of these patches have been tested on a Radxa Rock2 Square with rockchip-i2s.
John Keeping (9):
ASoC: es8328: Move clock setup to hw_params
ASoC: es8328: Fix ADC format setup
ASoC: es8328: Fix mask for VMIDSEL
ASoC: es8328: Use single R/W for regmap
ASoC: es8328: Use more suitable definition for mic bias
ASoC: es8328: Move sample size setup to hw_params
ASoC: es8328: Support more sample formats
ASoC: es8328: Support more sample rates
ASoC: es8328: Set symmetric rates
sound/soc/codecs/es8328.c | 198 +++++++++++++++++++++++++++++++++++----------- sound/soc/codecs/es8328.h | 23 ++++-- 2 files changed, 168 insertions(+), 53 deletions(-)
Signature · 1 line
2.8.0.rc4.238.g874082a
PATCH 1/9 ASoC: es8328: Move clock setup to hw_params
This ensures that the clock is setup after its frequency has been set; the existing code in set_dai_fmt may be called before the clock rate has been set resulting in an incorrect configuration.
--- sound/soc/codecs/es8328.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-)
sound/soc/codecs/es8328.c +16 -15
@@ -445,9 +445,10 @@ static int es8328_hw_params(struct snd_pcm_substream *substream, {struct snd_soc_codec *codec = dai->codec;struct es8328_priv *es8328 =snd_soc_codec_get_drvdata (codec); -int clk_rate; +int clk_rate =clk_get_rate (es8328->clk);int i;int reg; +int val;u8 ratio;if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK )
@@ -455,16 +456,24 @@ static int es8328_hw_params(struct snd_pcm_substream *substream,else reg =ES8328_ADCCONTROL5 ; - clk_rate =clk_get_rate (es8328->clk); - -if ((clk_rate !=ES8328_SYSCLK_RATE_1X ) && - (clk_rate !=ES8328_SYSCLK_RATE_2X )) { +switch (clk_rate) { +case ES8328_SYSCLK_RATE_1X : + val =0 ; +break ; +case ES8328_SYSCLK_RATE_2X : + val =ES8328_MASTERMODE_MCLKDIV2 ; +break ; +default :dev_err (codec->dev,"%s: clock is running at %d Hz, not %d or %d Hz\n" , __func__, clk_rate,ES8328_SYSCLK_RATE_1X ,ES8328_SYSCLK_RATE_2X );return -EINVAL ; } + ret =snd_soc_update_bits (codec,ES8328_MASTERMODE , +ES8328_MASTERMODE_MCLKDIV2 , val); +if (ret <0 ) +return ret;/* find master mode MCLK to sampling frequency ratio */ ratio = mclk_ratios[0 ].rate;
@@ -484,8 +493,6 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) {struct snd_soc_codec *codec = codec_dai->codec; -struct es8328_priv *es8328 =snd_soc_codec_get_drvdata (codec); -int clk_rate;u8 mode =ES8328_DACCONTROL1_DACWL_16 ;/* set master/slave audio interface */
@@ -515,14 +522,8 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai,snd_soc_write (codec,ES8328_ADCCONTROL4 , mode);/* Master serial port mode, with BCLK generated automatically */ - clk_rate =clk_get_rate (es8328->clk); -if (clk_rate ==ES8328_SYSCLK_RATE_1X ) -snd_soc_write (codec,ES8328_MASTERMODE , -ES8328_MASTERMODE_MSC ); -else -snd_soc_write (codec,ES8328_MASTERMODE , -ES8328_MASTERMODE_MCLKDIV2 | -ES8328_MASTERMODE_MSC ); +snd_soc_update_bits (codec,ES8328_MASTERMODE , +ES8328_MASTERMODE_MSC ,ES8328_MASTERMODE_MSC );return 0 ; }
Signature · 1 line
2.8.0.rc4.238.g874082a
Mark Brown
maintainerApplied "ASoC: es8328: Move clock setup to hw_params" to the asoc tree
The patch
ASoC: es8328: Move clock setup to hw_params
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
420c470d6b5c2924a3182edf5b002870ff770331Mon Sep 17 00:00:00 2001
From: John Keeping <[email protected]>
Date: Mon, 9 May 2016 12:24:29 +0100
Subject: [PATCH] ASoC: es8328: Move clock setup to hw_params
This ensures that the clock is setup after its frequency has been set; the existing code in set_dai_fmt may be called before the clock rate has been set resulting in an incorrect configuration.
--- sound/soc/codecs/es8328.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-)
sound/soc/codecs/es8328.c +16 -15
@@ -445,9 +445,10 @@ static int es8328_hw_params(struct snd_pcm_substream *substream, {struct snd_soc_codec *codec = dai->codec;struct es8328_priv *es8328 =snd_soc_codec_get_drvdata (codec); -int clk_rate; +int clk_rate =clk_get_rate (es8328->clk);int i;int reg; +int val;u8 ratio;if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK )
@@ -455,16 +456,24 @@ static int es8328_hw_params(struct snd_pcm_substream *substream,else reg =ES8328_ADCCONTROL5 ; - clk_rate =clk_get_rate (es8328->clk); - -if ((clk_rate !=ES8328_SYSCLK_RATE_1X ) && - (clk_rate !=ES8328_SYSCLK_RATE_2X )) { +switch (clk_rate) { +case ES8328_SYSCLK_RATE_1X : + val =0 ; +break ; +case ES8328_SYSCLK_RATE_2X : + val =ES8328_MASTERMODE_MCLKDIV2 ; +break ; +default :dev_err (codec->dev,"%s: clock is running at %d Hz, not %d or %d Hz\n" , __func__, clk_rate,ES8328_SYSCLK_RATE_1X ,ES8328_SYSCLK_RATE_2X );return -EINVAL ; } + ret =snd_soc_update_bits (codec,ES8328_MASTERMODE , +ES8328_MASTERMODE_MCLKDIV2 , val); +if (ret <0 ) +return ret;/* find master mode MCLK to sampling frequency ratio */ ratio = mclk_ratios[0 ].rate;
@@ -484,8 +493,6 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) {struct snd_soc_codec *codec = codec_dai->codec; -struct es8328_priv *es8328 =snd_soc_codec_get_drvdata (codec); -int clk_rate;u8 mode =ES8328_DACCONTROL1_DACWL_16 ;/* set master/slave audio interface */
@@ -515,14 +522,8 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai,snd_soc_write (codec,ES8328_ADCCONTROL4 , mode);/* Master serial port mode, with BCLK generated automatically */ - clk_rate =clk_get_rate (es8328->clk); -if (clk_rate ==ES8328_SYSCLK_RATE_1X ) -snd_soc_write (codec,ES8328_MASTERMODE , -ES8328_MASTERMODE_MSC ); -else -snd_soc_write (codec,ES8328_MASTERMODE , -ES8328_MASTERMODE_MCLKDIV2 | -ES8328_MASTERMODE_MSC ); +snd_soc_update_bits (codec,ES8328_MASTERMODE , +ES8328_MASTERMODE_MSC ,ES8328_MASTERMODE_MSC );return 0 ; }
Signature · 1 line
2.8.1
PATCH 2/9 ASoC: es8328: Fix ADC format setup
In reply to John KeepingThe ADCCONTROL4 and DACCONTROL1 registers are similar but not identical, with the DACCONTROL1 having each field starting one bit higher than ADCCONTROL4.
Instead of introducing a magic shift, add new constants for the values in ADCCONTROL4 and use a second variable to setup the ADC.
--- sound/soc/codecs/es8328.c | 16 ++++++++++------ sound/soc/codecs/es8328.h | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-)
sound/soc/codecs/es8328.c +10 -6
@@ -493,7 +493,8 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) {struct snd_soc_codec *codec = codec_dai->codec; -u8 mode =ES8328_DACCONTROL1_DACWL_16 ; +u8 dac_mode =ES8328_DACCONTROL1_DACWL_16 ; +u8 adc_mode =ES8328_ADCCONTROL4_ADCWL_16 ;/* set master/slave audio interface */ if ((fmt &SND_SOC_DAIFMT_MASTER_MASK ) !=SND_SOC_DAIFMT_CBM_CFM )
@@ -502,13 +503,16 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai,/* interface format */ switch (fmt &SND_SOC_DAIFMT_FORMAT_MASK ) {case SND_SOC_DAIFMT_I2S : - mode |=ES8328_DACCONTROL1_DACFORMAT_I2S ; + dac_mode |=ES8328_DACCONTROL1_DACFORMAT_I2S ; + adc_mode |=ES8328_ADCCONTROL4_ADCFORMAT_I2S ;break ;case SND_SOC_DAIFMT_RIGHT_J : - mode |=ES8328_DACCONTROL1_DACFORMAT_RJUST ; + dac_mode |=ES8328_DACCONTROL1_DACFORMAT_RJUST ; + adc_mode |=ES8328_ADCCONTROL4_ADCFORMAT_RJUST ;break ;case SND_SOC_DAIFMT_LEFT_J : - mode |=ES8328_DACCONTROL1_DACFORMAT_LJUST ; + dac_mode |=ES8328_DACCONTROL1_DACFORMAT_LJUST ; + adc_mode |=ES8328_ADCCONTROL4_ADCFORMAT_LJUST ;break ;default :return -EINVAL ;
@@ -518,8 +522,8 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai,if ((fmt &SND_SOC_DAIFMT_INV_MASK ) !=SND_SOC_DAIFMT_NB_NF )return -EINVAL ; -snd_soc_write (codec,ES8328_DACCONTROL1 , mode); -snd_soc_write (codec,ES8328_ADCCONTROL4 , mode); +snd_soc_write (codec,ES8328_DACCONTROL1 , dac_mode); +snd_soc_write (codec,ES8328_ADCCONTROL4 , adc_mode);/* Master serial port mode, with BCLK generated automatically */ snd_soc_update_bits(codec, ES8328_MASTERMODE,
sound/soc/codecs/es8328.h +15 -0
@@ -84,7 +84,22 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_ADCCONTROL1 0x09#define ES8328_ADCCONTROL2 0x0a#define ES8328_ADCCONTROL3 0x0b +#define ES8328_ADCCONTROL4 0x0c +#define ES8328_ADCCONTROL4_ADCFORMAT_I2S (0 << 0) +#define ES8328_ADCCONTROL4_ADCFORMAT_LJUST (1 << 0) +#define ES8328_ADCCONTROL4_ADCFORMAT_RJUST (2 << 0) +#define ES8328_ADCCONTROL4_ADCFORMAT_PCM (3 << 0) +#define ES8328_ADCCONTROL4_ADCWL_24 (0 << 2) +#define ES8328_ADCCONTROL4_ADCWL_20 (1 << 2) +#define ES8328_ADCCONTROL4_ADCWL_18 (2 << 2) +#define ES8328_ADCCONTROL4_ADCWL_16 (3 << 2) +#define ES8328_ADCCONTROL4_ADCWL_32 (4 << 2) +#define ES8328_ADCCONTROL4_ADCLRP_I2S_POL_NORMAL (0 << 5) +#define ES8328_ADCCONTROL4_ADCLRP_I2S_POL_INV (1 << 5) +#define ES8328_ADCCONTROL4_ADCLRP_PCM_MSB_CLK2 (0 << 5) +#define ES8328_ADCCONTROL4_ADCLRP_PCM_MSB_CLK1 (1 << 5) +#define ES8328_ADCCONTROL5 0x0d#define ES8328_ADCCONTROL5_RATEMASK (0x1f << 0)
Signature · 1 line
2.8.0.rc4.238.g874082a
Mark Brown
maintainerApplied "ASoC: es8328: Fix ADC format setup" to the asoc tree
The patch
ASoC: es8328: Fix ADC format setup
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
57e41f3fb32a359753a3b2679c2502b2750bf6afMon Sep 17 00:00:00 2001
From: John Keeping <[email protected]>
Date: Mon, 9 May 2016 12:24:30 +0100
Subject: [PATCH] ASoC: es8328: Fix ADC format setup
The ADCCONTROL4 and DACCONTROL1 registers are similar but not identical, with the DACCONTROL1 having each field starting one bit higher than ADCCONTROL4.
Instead of introducing a magic shift, add new constants for the values in ADCCONTROL4 and use a second variable to setup the ADC.
--- sound/soc/codecs/es8328.c | 16 ++++++++++------ sound/soc/codecs/es8328.h | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-)
sound/soc/codecs/es8328.c +10 -6
@@ -493,7 +493,8 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) {struct snd_soc_codec *codec = codec_dai->codec; -u8 mode =ES8328_DACCONTROL1_DACWL_16 ; +u8 dac_mode =ES8328_DACCONTROL1_DACWL_16 ; +u8 adc_mode =ES8328_ADCCONTROL4_ADCWL_16 ;/* set master/slave audio interface */ if ((fmt &SND_SOC_DAIFMT_MASTER_MASK ) !=SND_SOC_DAIFMT_CBM_CFM )
@@ -502,13 +503,16 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai,/* interface format */ switch (fmt &SND_SOC_DAIFMT_FORMAT_MASK ) {case SND_SOC_DAIFMT_I2S : - mode |=ES8328_DACCONTROL1_DACFORMAT_I2S ; + dac_mode |=ES8328_DACCONTROL1_DACFORMAT_I2S ; + adc_mode |=ES8328_ADCCONTROL4_ADCFORMAT_I2S ;break ;case SND_SOC_DAIFMT_RIGHT_J : - mode |=ES8328_DACCONTROL1_DACFORMAT_RJUST ; + dac_mode |=ES8328_DACCONTROL1_DACFORMAT_RJUST ; + adc_mode |=ES8328_ADCCONTROL4_ADCFORMAT_RJUST ;break ;case SND_SOC_DAIFMT_LEFT_J : - mode |=ES8328_DACCONTROL1_DACFORMAT_LJUST ; + dac_mode |=ES8328_DACCONTROL1_DACFORMAT_LJUST ; + adc_mode |=ES8328_ADCCONTROL4_ADCFORMAT_LJUST ;break ;default :return -EINVAL ;
@@ -518,8 +522,8 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai,if ((fmt &SND_SOC_DAIFMT_INV_MASK ) !=SND_SOC_DAIFMT_NB_NF )return -EINVAL ; -snd_soc_write (codec,ES8328_DACCONTROL1 , mode); -snd_soc_write (codec,ES8328_ADCCONTROL4 , mode); +snd_soc_write (codec,ES8328_DACCONTROL1 , dac_mode); +snd_soc_write (codec,ES8328_ADCCONTROL4 , adc_mode);/* Master serial port mode, with BCLK generated automatically */ snd_soc_update_bits(codec, ES8328_MASTERMODE,
sound/soc/codecs/es8328.h +15 -0
@@ -84,7 +84,22 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_ADCCONTROL1 0x09#define ES8328_ADCCONTROL2 0x0a#define ES8328_ADCCONTROL3 0x0b +#define ES8328_ADCCONTROL4 0x0c +#define ES8328_ADCCONTROL4_ADCFORMAT_I2S (0 << 0) +#define ES8328_ADCCONTROL4_ADCFORMAT_LJUST (1 << 0) +#define ES8328_ADCCONTROL4_ADCFORMAT_RJUST (2 << 0) +#define ES8328_ADCCONTROL4_ADCFORMAT_PCM (3 << 0) +#define ES8328_ADCCONTROL4_ADCWL_24 (0 << 2) +#define ES8328_ADCCONTROL4_ADCWL_20 (1 << 2) +#define ES8328_ADCCONTROL4_ADCWL_18 (2 << 2) +#define ES8328_ADCCONTROL4_ADCWL_16 (3 << 2) +#define ES8328_ADCCONTROL4_ADCWL_32 (4 << 2) +#define ES8328_ADCCONTROL4_ADCLRP_I2S_POL_NORMAL (0 << 5) +#define ES8328_ADCCONTROL4_ADCLRP_I2S_POL_INV (1 << 5) +#define ES8328_ADCCONTROL4_ADCLRP_PCM_MSB_CLK2 (0 << 5) +#define ES8328_ADCCONTROL4_ADCLRP_PCM_MSB_CLK1 (1 << 5) +#define ES8328_ADCCONTROL5 0x0d#define ES8328_ADCCONTROL5_RATEMASK (0x1f << 0)
Signature · 1 line
2.8.1
PATCH 3/9 ASoC: es8328: Fix mask for VMIDSEL
In reply to John KeepingThis is always used along with ES8328_CONTROL1_ENREF so there is no change in the generated code as a result of this fix.
--- sound/soc/codecs/es8328.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/codecs/es8328.h +1 -1
@@ -22,7 +22,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_CONTROL1_VMIDSEL_50k (1 << 0)#define ES8328_CONTROL1_VMIDSEL_500k (2 << 0)#define ES8328_CONTROL1_VMIDSEL_5k (3 << 0) -#define ES8328_CONTROL1_VMIDSEL_MASK (7 << 0) +#define ES8328_CONTROL1_VMIDSEL_MASK (3 << 0)#define ES8328_CONTROL1_ENREF (1 << 2)#define ES8328_CONTROL1_SEQEN (1 << 3)#define ES8328_CONTROL1_SAMEFS (1 << 4)
Signature · 1 line
2.8.0.rc4.238.g874082a
Mark Brown
maintainerApplied "ASoC: es8328: Fix mask for VMIDSEL" to the asoc tree
The patch
ASoC: es8328: Fix mask for VMIDSEL
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
2da1ab667a506cc6a7dea88b70e6df3d281458f8Mon Sep 17 00:00:00 2001
From: John Keeping <[email protected]>
Date: Mon, 9 May 2016 12:24:31 +0100
Subject: [PATCH] ASoC: es8328: Fix mask for VMIDSEL
This is always used along with ES8328_CONTROL1_ENREF so there is no change in the generated code as a result of this fix.
--- sound/soc/codecs/es8328.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/codecs/es8328.h +1 -1
@@ -22,7 +22,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_CONTROL1_VMIDSEL_50k (1 << 0)#define ES8328_CONTROL1_VMIDSEL_500k (2 << 0)#define ES8328_CONTROL1_VMIDSEL_5k (3 << 0) -#define ES8328_CONTROL1_VMIDSEL_MASK (7 << 0) +#define ES8328_CONTROL1_VMIDSEL_MASK (3 << 0)#define ES8328_CONTROL1_ENREF (1 << 2)#define ES8328_CONTROL1_SEQEN (1 << 3)#define ES8328_CONTROL1_SAMEFS (1 << 4)
Signature · 1 line
2.8.1
PATCH 4/9 ASoC: es8328: Use single R/W for regmap
In reply to John KeepingThe chip only supports single reads and writes.
--- sound/soc/codecs/es8328.c | 1 + 1 file changed, 1 insertion(+)
sound/soc/codecs/es8328.c +1 -0
@@ -713,6 +713,7 @@ const struct regmap_config es8328_regmap_config = { .val_bits = 8, .max_register = ES8328_REG_MAX, .cache_type = REGCACHE_RBTREE, + .use_single_rw = true, };EXPORT_SYMBOL_GPL (es8328_regmap_config);
Signature · 1 line
2.8.0.rc4.238.g874082a
Mark Brown
maintainerApplied "ASoC: es8328: Use single R/W for regmap" to the asoc tree
The patch
ASoC: es8328: Use single R/W for regmap
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
f2ed04a4317e5c8074d98a5c1da175596811a2d8Mon Sep 17 00:00:00 2001
From: John Keeping <[email protected]>
Date: Mon, 9 May 2016 12:24:32 +0100
Subject: [PATCH] ASoC: es8328: Use single R/W for regmap
The chip only supports single reads and writes.
--- sound/soc/codecs/es8328.c | 1 + 1 file changed, 1 insertion(+)
sound/soc/codecs/es8328.c +1 -0
@@ -713,6 +713,7 @@ const struct regmap_config es8328_regmap_config = { .val_bits = 8, .max_register = ES8328_REG_MAX, .cache_type = REGCACHE_RBTREE, + .use_single_rw = true, };EXPORT_SYMBOL_GPL (es8328_regmap_config);
Signature · 1 line
2.8.1
PATCH 5/9 ASoC: es8328: Use more suitable definition for mic bias
In reply to John Keeping--- sound/soc/codecs/es8328.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
sound/soc/codecs/es8328.c +2 -2
@@ -287,8 +287,8 @@ static const struct snd_soc_dapm_widget es8328_dapm_widgets[] = {SND_SOC_DAPM_ADC ("Left ADC" ,"Left Capture" ,ES8328_ADCPOWER ,ES8328_ADCPOWER_ADCL_OFF ,1 ), -SND_SOC_DAPM_SUPPLY ("Mic Bias" ,ES8328_ADCPOWER , -ES8328_ADCPOWER_MIC_BIAS_OFF ,1 ,NULL ,0 ), +SND_SOC_DAPM_MICBIAS ("Mic Bias" ,ES8328_ADCPOWER , +ES8328_ADCPOWER_MIC_BIAS_OFF ,1 ),SND_SOC_DAPM_SUPPLY ("Mic Bias Gen" ,ES8328_ADCPOWER , ES8328_ADCPOWER_ADC_BIAS_GEN_OFF, 1, NULL, 0),
Signature · 1 line
2.8.0.rc4.238.g874082a
Mark Brown
maintainerRe: [PATCH 5/9] ASoC: es8328: Use more suitable definition for mic bias
sound/soc/codecs/es8328.c static const struct snd_soc_dapm_widget es8328_dapm_widgets[] = { · line 291
Quoted 4 lines · John Keeping
sound/soc/codecs/es8328.c +2
-2-SND_SOC_DAPM_SUPPLY ("Mic Bias" ,ES8328_ADCPOWER , - ES8328_ADCPOWER_MIC_BIAS_OFF, 1, NULL, 0), +SND_SOC_DAPM_MICBIAS ("Mic Bias" ,ES8328_ADCPOWER , + ES8328_ADCPOWER_MIC_BIAS_OFF, 1),
No, this is broken. The specialist MICBIAS widget is legacy and should not be used.
Re: [PATCH 5/9] ASoC: es8328: Use more suitable definition for mic bias
Quoted 9 lines · Mark Brown
Review
Quoted 4 lines · John Keeping
(quoted diff) +2
-2- SND_SOC_DAPM_SUPPLY("Mic Bias", ES8328_ADCPOWER, - ES8328_ADCPOWER_MIC_BIAS_OFF, 1, NULL, 0), + SND_SOC_DAPM_MICBIAS("Mic Bias", ES8328_ADCPOWER, + ES8328_ADCPOWER_MIC_BIAS_OFF, 1),No, this is broken. The specialist MICBIAS widget is legacy and should not be used.
OK, this can be dropped. Would you consider doing something like the patch below?
The only reference I can find to MICBIAS being legacy is in commit 086d7f804e26 ("ASoC: Convert WM8962 MICBIAS to a supply widget", 2011-09-23) and some following commits, there don't seem to be any comments in the documentation indicating that it's not to be used.
-- >8 --
include/sound/soc-dapm.h +2 -1
@@ -100,6 +100,7 @@ struct device; { .id = snd_soc_dapm_mixer_named_ctl, .name = wname, \SND_SOC_DAPM_INIT_REG_VAL (wreg, wshift, winvert), \ .kcontrol_news = wcontrols, .num_kcontrols = wncontrols} +/* DEPRECATED: use SND_SOC_DAPM_SUPPLY */ #define SND_SOC_DAPM_MICBIAS (wname, wreg, wshift, winvert) \ { .id = snd_soc_dapm_micbias, .name = wname, \ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
@@ -473,7 +474,7 @@ enum snd_soc_dapm_type { snd_soc_dapm_out_drv,/* output driver */ snd_soc_dapm_adc,/* analog to digital converter */ snd_soc_dapm_dac,/* digital to analog converter */ - snd_soc_dapm_micbias,/* microphone bias (power) */ + snd_soc_dapm_micbias,/* microphone bias (power) - DEPRECATED: use snd_soc_dapm_supply */ snd_soc_dapm_mic,/* microphone */ snd_soc_dapm_hp,/* headphones */ snd_soc_dapm_spk, /* speaker */
Mark Brown
maintainerRe: [PATCH 5/9] ASoC: es8328: Use more suitable definition for mic bias
Quoted 2 lines · John Keeping
OK, this can be dropped. Would you consider doing something like the patch below?
Documentation/SubmittingPatches.
PATCH 1/1 ASoC: dapm: deprecate MICBIAS widget type
Commit 086d7f804e26 ("ASoC: Convert WM8962 MICBIAS to a supply widget", 2011-09-23) says:
A supply widget is generally clearer than a MICBIAS widget and a mic bias is just a type of supply so use a supply widget for the MICBIAS. This also avoids confusion with the routing when connected to multiple inputs.
but this has never been documented as a policy. Add some comments to make it clear.
--- include/sound/soc-dapm.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
include/sound/soc-dapm.h +2 -1
@@ -100,6 +100,7 @@ struct device; { .id = snd_soc_dapm_mixer_named_ctl, .name = wname, \SND_SOC_DAPM_INIT_REG_VAL (wreg, wshift, winvert), \ .kcontrol_news = wcontrols, .num_kcontrols = wncontrols} +/* DEPRECATED: use SND_SOC_DAPM_SUPPLY */ #define SND_SOC_DAPM_MICBIAS (wname, wreg, wshift, winvert) \ { .id = snd_soc_dapm_micbias, .name = wname, \ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
@@ -473,7 +474,7 @@ enum snd_soc_dapm_type { snd_soc_dapm_out_drv,/* output driver */ snd_soc_dapm_adc,/* analog to digital converter */ snd_soc_dapm_dac,/* digital to analog converter */ - snd_soc_dapm_micbias,/* microphone bias (power) */ + snd_soc_dapm_micbias,/* microphone bias (power) - DEPRECATED: use snd_soc_dapm_supply */ snd_soc_dapm_mic,/* microphone */ snd_soc_dapm_hp,/* headphones */ snd_soc_dapm_spk, /* speaker */
Signature · 1 line
2.8.2.565.gdb84f68.dirty
Mark Brown
maintainerApplied "ASoC: dapm: deprecate MICBIAS widget type" to the asoc tree
In reply to John KeepingThe patch
ASoC: dapm: deprecate MICBIAS widget type
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
32902177f7f6ae70e1d5e71d935aa1bfcae7f01cMon Sep 17 00:00:00 2001
From: John Keeping <[email protected]>
Date: Thu, 12 May 2016 13:55:53 +0100
Subject: [PATCH] ASoC: dapm: deprecate MICBIAS widget type
Commit 086d7f804e26 ("ASoC: Convert WM8962 MICBIAS to a supply widget", 2011-09-23) says:
A supply widget is generally clearer than a MICBIAS widget and a mic bias is just a type of supply so use a supply widget for the MICBIAS. This also avoids confusion with the routing when connected to multiple inputs.
but this has never been documented as a policy. Add some comments to make it clear.
--- include/sound/soc-dapm.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
include/sound/soc-dapm.h +2 -1
@@ -100,6 +100,7 @@ struct device; { .id = snd_soc_dapm_mixer_named_ctl, .name = wname, \SND_SOC_DAPM_INIT_REG_VAL (wreg, wshift, winvert), \ .kcontrol_news = wcontrols, .num_kcontrols = wncontrols} +/* DEPRECATED: use SND_SOC_DAPM_SUPPLY */ #define SND_SOC_DAPM_MICBIAS (wname, wreg, wshift, winvert) \ { .id = snd_soc_dapm_micbias, .name = wname, \ SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
@@ -473,7 +474,7 @@ enum snd_soc_dapm_type { snd_soc_dapm_out_drv,/* output driver */ snd_soc_dapm_adc,/* analog to digital converter */ snd_soc_dapm_dac,/* digital to analog converter */ - snd_soc_dapm_micbias,/* microphone bias (power) */ + snd_soc_dapm_micbias,/* microphone bias (power) - DEPRECATED: use snd_soc_dapm_supply */ snd_soc_dapm_mic,/* microphone */ snd_soc_dapm_hp,/* headphones */ snd_soc_dapm_spk, /* speaker */
Signature · 1 line
2.8.1
PATCH 6/9 ASoC: es8328: Move sample size setup to hw_params
In reply to John KeepingThis is a refactor in preparation for supporting more sample sizes which has no functional change.
--- sound/soc/codecs/es8328.c | 19 ++++++++++++++----- sound/soc/codecs/es8328.h | 4 ++++ 2 files changed, 18 insertions(+), 5 deletions(-)
sound/soc/codecs/es8328.c +14 -5
@@ -482,9 +482,16 @@ static int es8328_hw_params(struct snd_pcm_substream *substream, ratio = mclk_ratios[i].ratio;if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK ) { +snd_soc_update_bits (codec,ES8328_DACCONTROL1 , +ES8328_DACCONTROL1_DACWL_MASK , +ES8328_DACCONTROL1_DACWL_16 ); + es8328->playback_fs =params_rate (params);es8328_set_deemph (codec); - } + }else +snd_soc_update_bits (codec,ES8328_ADCCONTROL4 , +ES8328_ADCCONTROL4_ADCWL_MASK , +ES8328_ADCCONTROL4_ADCWL_16 );return snd_soc_update_bits (codec, reg,ES8328_RATEMASK , ratio); }
@@ -493,8 +500,8 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) {struct snd_soc_codec *codec = codec_dai->codec; -u8 dac_mode =ES8328_DACCONTROL1_DACWL_16 ; -u8 adc_mode =ES8328_ADCCONTROL4_ADCWL_16 ; +u8 dac_mode =0 ; +u8 adc_mode =0 ;/* set master/slave audio interface */ if ((fmt &SND_SOC_DAIFMT_MASTER_MASK ) !=SND_SOC_DAIFMT_CBM_CFM )
@@ -522,8 +529,10 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai,if ((fmt &SND_SOC_DAIFMT_INV_MASK ) !=SND_SOC_DAIFMT_NB_NF )return -EINVAL ; -snd_soc_write (codec,ES8328_DACCONTROL1 , dac_mode); -snd_soc_write (codec,ES8328_ADCCONTROL4 , adc_mode); +snd_soc_update_bits (codec,ES8328_DACCONTROL1 , +ES8328_DACCONTROL1_DACFORMAT_MASK , dac_mode); +snd_soc_update_bits (codec,ES8328_ADCCONTROL4 , +ES8328_ADCCONTROL4_ADCFORMAT_MASK , adc_mode);/* Master serial port mode, with BCLK generated automatically */ snd_soc_update_bits(codec, ES8328_MASTERMODE,
sound/soc/codecs/es8328.h +4 -0
@@ -86,6 +86,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_ADCCONTROL3 0x0b#define ES8328_ADCCONTROL4 0x0c +#define ES8328_ADCCONTROL4_ADCFORMAT_MASK (3 << 0)#define ES8328_ADCCONTROL4_ADCFORMAT_I2S (0 << 0)#define ES8328_ADCCONTROL4_ADCFORMAT_LJUST (1 << 0)#define ES8328_ADCCONTROL4_ADCFORMAT_RJUST (2 << 0)
@@ -95,6 +96,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_ADCCONTROL4_ADCWL_18 (2 << 2)#define ES8328_ADCCONTROL4_ADCWL_16 (3 << 2)#define ES8328_ADCCONTROL4_ADCWL_32 (4 << 2) +#define ES8328_ADCCONTROL4_ADCWL_MASK (7 << 2)#define ES8328_ADCCONTROL4_ADCLRP_I2S_POL_NORMAL (0 << 5)#define ES8328_ADCCONTROL4_ADCLRP_I2S_POL_INV (1 << 5)#define ES8328_ADCCONTROL4_ADCLRP_PCM_MSB_CLK2 (0 << 5)
@@ -124,6 +126,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_ADCCONTROL14 0x16#define ES8328_DACCONTROL1 0x17 +#define ES8328_DACCONTROL1_DACFORMAT_MASK (3 << 1)#define ES8328_DACCONTROL1_DACFORMAT_I2S (0 << 1)#define ES8328_DACCONTROL1_DACFORMAT_LJUST (1 << 1)#define ES8328_DACCONTROL1_DACFORMAT_RJUST (2 << 1)
@@ -133,6 +136,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_DACCONTROL1_DACWL_18 (2 << 3)#define ES8328_DACCONTROL1_DACWL_16 (3 << 3)#define ES8328_DACCONTROL1_DACWL_32 (4 << 3) +#define ES8328_DACCONTROL1_DACWL_MASK (7 << 3)#define ES8328_DACCONTROL1_DACLRP_I2S_POL_NORMAL (0 << 6)#define ES8328_DACCONTROL1_DACLRP_I2S_POL_INV (1 << 6)#define ES8328_DACCONTROL1_DACLRP_PCM_MSB_CLK2 (0 << 6)
Signature · 1 line
2.8.0.rc4.238.g874082a
Mark Brown
maintainerApplied "ASoC: es8328: Move sample size setup to hw_params" to the asoc tree
The patch
ASoC: es8328: Move sample size setup to hw_params
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
8865c95e43257e6676bc0f6b042ecce17eff74feMon Sep 17 00:00:00 2001
From: John Keeping <[email protected]>
Date: Mon, 9 May 2016 12:24:34 +0100
Subject: [PATCH] ASoC: es8328: Move sample size setup to hw_params
This is a refactor in preparation for supporting more sample sizes which has no functional change.
--- sound/soc/codecs/es8328.c | 19 ++++++++++++++----- sound/soc/codecs/es8328.h | 4 ++++ 2 files changed, 18 insertions(+), 5 deletions(-)
sound/soc/codecs/es8328.c +14 -5
@@ -482,9 +482,16 @@ static int es8328_hw_params(struct snd_pcm_substream *substream, ratio = mclk_ratios[i].ratio;if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK ) { +snd_soc_update_bits (codec,ES8328_DACCONTROL1 , +ES8328_DACCONTROL1_DACWL_MASK , +ES8328_DACCONTROL1_DACWL_16 ); + es8328->playback_fs =params_rate (params);es8328_set_deemph (codec); - } + }else +snd_soc_update_bits (codec,ES8328_ADCCONTROL4 , +ES8328_ADCCONTROL4_ADCWL_MASK , +ES8328_ADCCONTROL4_ADCWL_16 );return snd_soc_update_bits (codec, reg,ES8328_RATEMASK , ratio); }
@@ -493,8 +500,8 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) {struct snd_soc_codec *codec = codec_dai->codec; -u8 dac_mode =ES8328_DACCONTROL1_DACWL_16 ; -u8 adc_mode =ES8328_ADCCONTROL4_ADCWL_16 ; +u8 dac_mode =0 ; +u8 adc_mode =0 ;/* set master/slave audio interface */ if ((fmt &SND_SOC_DAIFMT_MASTER_MASK ) !=SND_SOC_DAIFMT_CBM_CFM )
@@ -522,8 +529,10 @@ static int es8328_set_dai_fmt(struct snd_soc_dai *codec_dai,if ((fmt &SND_SOC_DAIFMT_INV_MASK ) !=SND_SOC_DAIFMT_NB_NF )return -EINVAL ; -snd_soc_write (codec,ES8328_DACCONTROL1 , dac_mode); -snd_soc_write (codec,ES8328_ADCCONTROL4 , adc_mode); +snd_soc_update_bits (codec,ES8328_DACCONTROL1 , +ES8328_DACCONTROL1_DACFORMAT_MASK , dac_mode); +snd_soc_update_bits (codec,ES8328_ADCCONTROL4 , +ES8328_ADCCONTROL4_ADCFORMAT_MASK , adc_mode);/* Master serial port mode, with BCLK generated automatically */ snd_soc_update_bits(codec, ES8328_MASTERMODE,
sound/soc/codecs/es8328.h +4 -0
@@ -86,6 +86,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_ADCCONTROL3 0x0b#define ES8328_ADCCONTROL4 0x0c +#define ES8328_ADCCONTROL4_ADCFORMAT_MASK (3 << 0)#define ES8328_ADCCONTROL4_ADCFORMAT_I2S (0 << 0)#define ES8328_ADCCONTROL4_ADCFORMAT_LJUST (1 << 0)#define ES8328_ADCCONTROL4_ADCFORMAT_RJUST (2 << 0)
@@ -95,6 +96,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_ADCCONTROL4_ADCWL_18 (2 << 2)#define ES8328_ADCCONTROL4_ADCWL_16 (3 << 2)#define ES8328_ADCCONTROL4_ADCWL_32 (4 << 2) +#define ES8328_ADCCONTROL4_ADCWL_MASK (7 << 2)#define ES8328_ADCCONTROL4_ADCLRP_I2S_POL_NORMAL (0 << 5)#define ES8328_ADCCONTROL4_ADCLRP_I2S_POL_INV (1 << 5)#define ES8328_ADCCONTROL4_ADCLRP_PCM_MSB_CLK2 (0 << 5)
@@ -124,6 +126,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_ADCCONTROL14 0x16#define ES8328_DACCONTROL1 0x17 +#define ES8328_DACCONTROL1_DACFORMAT_MASK (3 << 1)#define ES8328_DACCONTROL1_DACFORMAT_I2S (0 << 1)#define ES8328_DACCONTROL1_DACFORMAT_LJUST (1 << 1)#define ES8328_DACCONTROL1_DACFORMAT_RJUST (2 << 1)
@@ -133,6 +136,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_DACCONTROL1_DACWL_18 (2 << 3)#define ES8328_DACCONTROL1_DACWL_16 (3 << 3)#define ES8328_DACCONTROL1_DACWL_32 (4 << 3) +#define ES8328_DACCONTROL1_DACWL_MASK (7 << 3)#define ES8328_DACCONTROL1_DACLRP_I2S_POL_NORMAL (0 << 6)#define ES8328_DACCONTROL1_DACLRP_I2S_POL_INV (1 << 6)#define ES8328_DACCONTROL1_DACLRP_PCM_MSB_CLK2 (0 << 6)
Signature · 1 line
2.8.1
PATCH 7/9 ASoC: es8328: Support more sample formats
In reply to John KeepingThe values are the same for the DAC and ADC so remove the specific values and use values with shifts.
--- sound/soc/codecs/es8328.c | 35 +++++++++++++++++++++++++++++------ sound/soc/codecs/es8328.h | 12 ++---------- 2 files changed, 31 insertions(+), 16 deletions(-)
sound/soc/codecs/es8328.c +29 -6
@@ -60,7 +60,11 @@ static const char * const supply_names[ES8328_SUPPLY_NUM] = {#define ES8328_RATES (SNDRV_PCM_RATE_44100 | \ SNDRV_PCM_RATE_22050 | \ SNDRV_PCM_RATE_11025) -#define ES8328_FORMATS (SNDRV_PCM_FMTBIT_S16_LE) +#define ES8328_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \ + SNDRV_PCM_FMTBIT_S18_3LE | \ + SNDRV_PCM_FMTBIT_S20_3LE | \ + SNDRV_PCM_FMTBIT_S24_LE | \ + SNDRV_PCM_FMTBIT_S32_LE)struct es8328_priv {struct regmap *regmap;
@@ -449,6 +453,7 @@ static int es8328_hw_params(struct snd_pcm_substream *substream,int i;int reg;int val; +int wl;u8 ratio;if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK )
@@ -470,10 +475,28 @@ static int es8328_hw_params(struct snd_pcm_substream *substream, ES8328_SYSCLK_RATE_1X, ES8328_SYSCLK_RATE_2X);return -EINVAL ; } - ret =snd_soc_update_bits (codec,ES8328_MASTERMODE , +snd_soc_update_bits (codec,ES8328_MASTERMODE ,ES8328_MASTERMODE_MCLKDIV2 , val); -if (ret <0 ) -return ret; + +switch (params_width (params)) { +case 16 : + wl =3 ; +break ; +case 18 : + wl =2 ; +break ; +case 20 : + wl =1 ; +break ; +case 24 : + wl =0 ; +break ; +case 32 : + wl =4 ; +break ; +default : +return -EINVAL ; + }/* find master mode MCLK to sampling frequency ratio */ ratio = mclk_ratios[0 ].rate;
@@ -484,14 +507,14 @@ static int es8328_hw_params(struct snd_pcm_substream *substream,if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK ) {snd_soc_update_bits (codec,ES8328_DACCONTROL1 ,ES8328_DACCONTROL1_DACWL_MASK , -ES8328_DACCONTROL1_DACWL_16 ); + wl <<ES8328_DACCONTROL1_DACWL_SHIFT ); es8328->playback_fs =params_rate (params);es8328_set_deemph (codec); }else snd_soc_update_bits (codec,ES8328_ADCCONTROL4 ,ES8328_ADCCONTROL4_ADCWL_MASK , -ES8328_ADCCONTROL4_ADCWL_16 ); + wl <<ES8328_ADCCONTROL4_ADCWL_SHIFT );return snd_soc_update_bits (codec, reg,ES8328_RATEMASK , ratio); }
sound/soc/codecs/es8328.h +2 -10
@@ -91,11 +91,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_ADCCONTROL4_ADCFORMAT_LJUST (1 << 0)#define ES8328_ADCCONTROL4_ADCFORMAT_RJUST (2 << 0)#define ES8328_ADCCONTROL4_ADCFORMAT_PCM (3 << 0) -#define ES8328_ADCCONTROL4_ADCWL_24 (0 << 2) -#define ES8328_ADCCONTROL4_ADCWL_20 (1 << 2) -#define ES8328_ADCCONTROL4_ADCWL_18 (2 << 2) -#define ES8328_ADCCONTROL4_ADCWL_16 (3 << 2) -#define ES8328_ADCCONTROL4_ADCWL_32 (4 << 2) +#define ES8328_ADCCONTROL4_ADCWL_SHIFT 2#define ES8328_ADCCONTROL4_ADCWL_MASK (7 << 2)#define ES8328_ADCCONTROL4_ADCLRP_I2S_POL_NORMAL (0 << 5)#define ES8328_ADCCONTROL4_ADCLRP_I2S_POL_INV (1 << 5)
@@ -131,11 +127,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_DACCONTROL1_DACFORMAT_LJUST (1 << 1)#define ES8328_DACCONTROL1_DACFORMAT_RJUST (2 << 1)#define ES8328_DACCONTROL1_DACFORMAT_PCM (3 << 1) -#define ES8328_DACCONTROL1_DACWL_24 (0 << 3) -#define ES8328_DACCONTROL1_DACWL_20 (1 << 3) -#define ES8328_DACCONTROL1_DACWL_18 (2 << 3) -#define ES8328_DACCONTROL1_DACWL_16 (3 << 3) -#define ES8328_DACCONTROL1_DACWL_32 (4 << 3) +#define ES8328_DACCONTROL1_DACWL_SHIFT 3#define ES8328_DACCONTROL1_DACWL_MASK (7 << 3)#define ES8328_DACCONTROL1_DACLRP_I2S_POL_NORMAL (0 << 6)#define ES8328_DACCONTROL1_DACLRP_I2S_POL_INV (1 << 6)
Signature · 1 line
2.8.0.rc4.238.g874082a
Mark Brown
maintainerApplied "ASoC: es8328: Support more sample formats" to the asoc tree
The patch
ASoC: es8328: Support more sample formats
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
779e86a31402c3f33f20bb02e99a5b75595bdf7fMon Sep 17 00:00:00 2001
From: John Keeping <[email protected]>
Date: Mon, 9 May 2016 12:24:35 +0100
Subject: [PATCH] ASoC: es8328: Support more sample formats
The values are the same for the DAC and ADC so remove the specific values and use values with shifts.
--- sound/soc/codecs/es8328.c | 35 +++++++++++++++++++++++++++++------ sound/soc/codecs/es8328.h | 12 ++---------- 2 files changed, 31 insertions(+), 16 deletions(-)
sound/soc/codecs/es8328.c +29 -6
@@ -60,7 +60,11 @@ static const char * const supply_names[ES8328_SUPPLY_NUM] = {#define ES8328_RATES (SNDRV_PCM_RATE_44100 | \ SNDRV_PCM_RATE_22050 | \ SNDRV_PCM_RATE_11025) -#define ES8328_FORMATS (SNDRV_PCM_FMTBIT_S16_LE) +#define ES8328_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \ + SNDRV_PCM_FMTBIT_S18_3LE | \ + SNDRV_PCM_FMTBIT_S20_3LE | \ + SNDRV_PCM_FMTBIT_S24_LE | \ + SNDRV_PCM_FMTBIT_S32_LE)struct es8328_priv {struct regmap *regmap;
@@ -449,6 +453,7 @@ static int es8328_hw_params(struct snd_pcm_substream *substream,int i;int reg;int val; +int wl;u8 ratio;if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK )
@@ -470,10 +475,28 @@ static int es8328_hw_params(struct snd_pcm_substream *substream, ES8328_SYSCLK_RATE_1X, ES8328_SYSCLK_RATE_2X);return -EINVAL ; } - ret =snd_soc_update_bits (codec,ES8328_MASTERMODE , +snd_soc_update_bits (codec,ES8328_MASTERMODE ,ES8328_MASTERMODE_MCLKDIV2 , val); -if (ret <0 ) -return ret; + +switch (params_width (params)) { +case 16 : + wl =3 ; +break ; +case 18 : + wl =2 ; +break ; +case 20 : + wl =1 ; +break ; +case 24 : + wl =0 ; +break ; +case 32 : + wl =4 ; +break ; +default : +return -EINVAL ; + }/* find master mode MCLK to sampling frequency ratio */ ratio = mclk_ratios[0 ].rate;
@@ -484,14 +507,14 @@ static int es8328_hw_params(struct snd_pcm_substream *substream,if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK ) {snd_soc_update_bits (codec,ES8328_DACCONTROL1 ,ES8328_DACCONTROL1_DACWL_MASK , -ES8328_DACCONTROL1_DACWL_16 ); + wl <<ES8328_DACCONTROL1_DACWL_SHIFT ); es8328->playback_fs =params_rate (params);es8328_set_deemph (codec); }else snd_soc_update_bits (codec,ES8328_ADCCONTROL4 ,ES8328_ADCCONTROL4_ADCWL_MASK , -ES8328_ADCCONTROL4_ADCWL_16 ); + wl <<ES8328_ADCCONTROL4_ADCWL_SHIFT );return snd_soc_update_bits (codec, reg,ES8328_RATEMASK , ratio); }
sound/soc/codecs/es8328.h +2 -10
@@ -91,11 +91,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_ADCCONTROL4_ADCFORMAT_LJUST (1 << 0)#define ES8328_ADCCONTROL4_ADCFORMAT_RJUST (2 << 0)#define ES8328_ADCCONTROL4_ADCFORMAT_PCM (3 << 0) -#define ES8328_ADCCONTROL4_ADCWL_24 (0 << 2) -#define ES8328_ADCCONTROL4_ADCWL_20 (1 << 2) -#define ES8328_ADCCONTROL4_ADCWL_18 (2 << 2) -#define ES8328_ADCCONTROL4_ADCWL_16 (3 << 2) -#define ES8328_ADCCONTROL4_ADCWL_32 (4 << 2) +#define ES8328_ADCCONTROL4_ADCWL_SHIFT 2#define ES8328_ADCCONTROL4_ADCWL_MASK (7 << 2)#define ES8328_ADCCONTROL4_ADCLRP_I2S_POL_NORMAL (0 << 5)#define ES8328_ADCCONTROL4_ADCLRP_I2S_POL_INV (1 << 5)
@@ -131,11 +127,7 @@ int es8328_probe(struct device *dev, struct regmap *regmap);#define ES8328_DACCONTROL1_DACFORMAT_LJUST (1 << 1)#define ES8328_DACCONTROL1_DACFORMAT_RJUST (2 << 1)#define ES8328_DACCONTROL1_DACFORMAT_PCM (3 << 1) -#define ES8328_DACCONTROL1_DACWL_24 (0 << 3) -#define ES8328_DACCONTROL1_DACWL_20 (1 << 3) -#define ES8328_DACCONTROL1_DACWL_18 (2 << 3) -#define ES8328_DACCONTROL1_DACWL_16 (3 << 3) -#define ES8328_DACCONTROL1_DACWL_32 (4 << 3) +#define ES8328_DACCONTROL1_DACWL_SHIFT 3#define ES8328_DACCONTROL1_DACWL_MASK (7 << 3)#define ES8328_DACCONTROL1_DACLRP_I2S_POL_NORMAL (0 << 6)#define ES8328_DACCONTROL1_DACLRP_I2S_POL_INV (1 << 6)
Signature · 1 line
2.8.1
PATCH 8/9 ASoC: es8328: Support more sample rates
In reply to John Keeping--- sound/soc/codecs/es8328.c | 135 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 100 insertions(+), 35 deletions(-)
sound/soc/codecs/es8328.c +100 -35
@@ -26,18 +26,30 @@#include <sound/tlv.h> #include "es8328.h" -#define ES8328_SYSCLK_RATE_1X 11289600 -#define ES8328_SYSCLK_RATE_2X 22579200 +static const unsigned int rates_12288[] = { +8000 ,12000 ,16000 ,24000 ,32000 ,48000 ,96000 , +}; -/* Run the codec at 22.5792 or 11.2896 MHz to support these rates */ -static struct { -int rate; -u8 ratio; -} mclk_ratios[] = { - {8000 ,9 }, - {11025 ,7 }, - {22050 ,4 }, - {44100 ,2 }, +static const int ratios_12288[] = { +10 ,7 ,6 ,4 ,3 ,2 ,0 , +}; + +static const struct snd_pcm_hw_constraint_list constraints_12288 = { + .count =ARRAY_SIZE (rates_12288), + .list = rates_12288, +}; + +static const unsigned int rates_11289[] = { +8018 ,11025 ,22050 ,44100 ,88200 , +}; + +static const int ratios_11289[] = { +9 ,7 ,4 ,2 ,0 , +}; + +static const struct snd_pcm_hw_constraint_list constraints_11289 = { + .count =ARRAY_SIZE (rates_11289), + .list = rates_11289, };/* regulator supplies for sgtl5000, VDDD is an optional external supply */
@@ -57,9 +69,14 @@ static const char * const supply_names[ES8328_SUPPLY_NUM] = { "HPVDD", }; -#define ES8328_RATES (SNDRV_PCM_RATE_44100 | \ +#define ES8328_RATES (SNDRV_PCM_RATE_96000 | \ + SNDRV_PCM_RATE_48000 | \ + SNDRV_PCM_RATE_44100 | \ + SNDRV_PCM_RATE_32000 | \ SNDRV_PCM_RATE_22050 | \ - SNDRV_PCM_RATE_11025) + SNDRV_PCM_RATE_16000 | \ + SNDRV_PCM_RATE_11025 | \ + SNDRV_PCM_RATE_8000)#define ES8328_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \ SNDRV_PCM_FMTBIT_S18_3LE | \ SNDRV_PCM_FMTBIT_S20_3LE | \
@@ -71,6 +88,9 @@ struct es8328_priv {struct clk *clk;int playback_fs;bool deemph; +int mclkdiv2; +const struct snd_pcm_hw_constraint_list *sysclk_constraints; +const int *mclk_ratios;struct regulator_bulk_data supplies[ES8328_SUPPLY_NUM ]; };
@@ -443,40 +463,55 @@ static int es8328_mute(struct snd_soc_dai *dai, int mute) mute ? ES8328_DACCONTROL3_DACMUTE : 0); } +static int es8328_startup (struct snd_pcm_substream *substream, +struct snd_soc_dai *dai) +{ +struct snd_soc_codec *codec = dai->codec; +struct es8328_priv *es8328 =snd_soc_codec_get_drvdata (codec); + +if (es8328->sysclk_constraints) +snd_pcm_hw_constraint_list (substream->runtime,0 , +SNDRV_PCM_HW_PARAM_RATE , + es8328->sysclk_constraints); + +return 0 ; +} +static int es8328_hw_params (struct snd_pcm_substream *substream,struct snd_pcm_hw_params *params,struct snd_soc_dai *dai) {struct snd_soc_codec *codec = dai->codec;struct es8328_priv *es8328 =snd_soc_codec_get_drvdata (codec); -int clk_rate =clk_get_rate (es8328->clk);int i;int reg; -int val;int wl; -u8 ratio; +int ratio; + +if (!es8328->sysclk_constraints) { +dev_err (codec->dev,"No MCLK configured\n" ); +return -EINVAL ; + }if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK ) reg =ES8328_DACCONTROL2 ;else reg =ES8328_ADCCONTROL5 ; -switch (clk_rate) { -case ES8328_SYSCLK_RATE_1X : - val =0 ; -break ; -case ES8328_SYSCLK_RATE_2X : - val =ES8328_MASTERMODE_MCLKDIV2 ; -break ; -default : -dev_err (codec->dev, -"%s: clock is running at %d Hz, not %d or %d Hz\n" , - __func__, clk_rate, -ES8328_SYSCLK_RATE_1X ,ES8328_SYSCLK_RATE_2X ); +for (i =0 ; i < es8328->sysclk_constraints->count; i++) +if (es8328->sysclk_constraints->list[i] ==params_rate (params)) +break ; + +if (i == es8328->sysclk_constraints->count) { +dev_err (codec->dev,"LRCLK %d unsupported with current clock\n" , +params_rate (params));return -EINVAL ; } + + ratio = es8328->mclk_ratios[i];snd_soc_update_bits (codec,ES8328_MASTERMODE , -ES8328_MASTERMODE_MCLKDIV2 , val); +ES8328_MASTERMODE_MCLKDIV2 , + es8328->mclkdiv2 ?ES8328_MASTERMODE_MCLKDIV2 :0 );switch (params_width (params)) {case 16 :
@@ -498,12 +533,6 @@ static int es8328_hw_params(struct snd_pcm_substream *substream,return -EINVAL ; } -/* find master mode MCLK to sampling frequency ratio */ - ratio = mclk_ratios[0 ].rate; -for (i =1 ; i <ARRAY_SIZE (mclk_ratios); i++) -if (params_rate (params) <= mclk_ratios[i].rate) - ratio = mclk_ratios[i].ratio; -if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK ) { snd_soc_update_bits(codec, ES8328_DACCONTROL1, ES8328_DACCONTROL1_DACWL_MASK,
@@ -519,6 +548,40 @@ static int es8328_hw_params(struct snd_pcm_substream *substream,return snd_soc_update_bits (codec, reg,ES8328_RATEMASK , ratio); } +static int es8328_set_sysclk (struct snd_soc_dai *codec_dai, +int clk_id,unsigned int freq,int dir) +{ +struct snd_soc_codec *codec = codec_dai->codec; +struct es8328_priv *es8328 =snd_soc_codec_get_drvdata (codec); +int mclkdiv2 =0 ; + +switch (freq) { +case 0 : + es8328->sysclk_constraints =NULL ; + es8328->mclk_ratios =NULL ; +break ; +case 22579200 : + mclkdiv2 =1 ; +/* fallthru */ +case 11289600 : + es8328->sysclk_constraints = &constraints_11289; + es8328->mclk_ratios = ratios_11289; +break ; +case 24576000 : + mclkdiv2 =1 ; +/* fallthru */ +case 12288000 : + es8328->sysclk_constraints = &constraints_12288; + es8328->mclk_ratios = ratios_12288; +break ; +default : +return -EINVAL ; + } + + es8328->mclkdiv2 = mclkdiv2; +return 0 ; +} +static int es8328_set_dai_fmt (struct snd_soc_dai *codec_dai,unsigned int fmt) {
@@ -616,8 +679,10 @@ static int es8328_set_bias_level(struct snd_soc_codec *codec, }static const struct snd_soc_dai_ops es8328_dai_ops = { + .startup = es8328_startup, .hw_params = es8328_hw_params, .digital_mute = es8328_mute, + .set_sysclk = es8328_set_sysclk, .set_fmt = es8328_set_dai_fmt, };
Signature · 1 line
2.8.0.rc4.238.g874082a
Mark Brown
maintainerApplied "ASoC: es8328: Support more sample rates" to the asoc tree
The patch
ASoC: es8328: Support more sample rates
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
45749c918129e409c44777f051dc0a5afb689459Mon Sep 17 00:00:00 2001
From: John Keeping <[email protected]>
Date: Mon, 9 May 2016 12:24:36 +0100
Subject: [PATCH] ASoC: es8328: Support more sample rates
--- sound/soc/codecs/es8328.c | 135 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 100 insertions(+), 35 deletions(-)
sound/soc/codecs/es8328.c +100 -35
@@ -26,18 +26,30 @@#include <sound/tlv.h> #include "es8328.h" -#define ES8328_SYSCLK_RATE_1X 11289600 -#define ES8328_SYSCLK_RATE_2X 22579200 +static const unsigned int rates_12288[] = { +8000 ,12000 ,16000 ,24000 ,32000 ,48000 ,96000 , +}; -/* Run the codec at 22.5792 or 11.2896 MHz to support these rates */ -static struct { -int rate; -u8 ratio; -} mclk_ratios[] = { - {8000 ,9 }, - {11025 ,7 }, - {22050 ,4 }, - {44100 ,2 }, +static const int ratios_12288[] = { +10 ,7 ,6 ,4 ,3 ,2 ,0 , +}; + +static const struct snd_pcm_hw_constraint_list constraints_12288 = { + .count =ARRAY_SIZE (rates_12288), + .list = rates_12288, +}; + +static const unsigned int rates_11289[] = { +8018 ,11025 ,22050 ,44100 ,88200 , +}; + +static const int ratios_11289[] = { +9 ,7 ,4 ,2 ,0 , +}; + +static const struct snd_pcm_hw_constraint_list constraints_11289 = { + .count =ARRAY_SIZE (rates_11289), + .list = rates_11289, };/* regulator supplies for sgtl5000, VDDD is an optional external supply */
@@ -57,9 +69,14 @@ static const char * const supply_names[ES8328_SUPPLY_NUM] = { "HPVDD", }; -#define ES8328_RATES (SNDRV_PCM_RATE_44100 | \ +#define ES8328_RATES (SNDRV_PCM_RATE_96000 | \ + SNDRV_PCM_RATE_48000 | \ + SNDRV_PCM_RATE_44100 | \ + SNDRV_PCM_RATE_32000 | \ SNDRV_PCM_RATE_22050 | \ - SNDRV_PCM_RATE_11025) + SNDRV_PCM_RATE_16000 | \ + SNDRV_PCM_RATE_11025 | \ + SNDRV_PCM_RATE_8000)#define ES8328_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \ SNDRV_PCM_FMTBIT_S18_3LE | \ SNDRV_PCM_FMTBIT_S20_3LE | \
@@ -71,6 +88,9 @@ struct es8328_priv {struct clk *clk;int playback_fs;bool deemph; +int mclkdiv2; +const struct snd_pcm_hw_constraint_list *sysclk_constraints; +const int *mclk_ratios;struct regulator_bulk_data supplies[ES8328_SUPPLY_NUM ]; };
@@ -443,40 +463,55 @@ static int es8328_mute(struct snd_soc_dai *dai, int mute) mute ? ES8328_DACCONTROL3_DACMUTE : 0); } +static int es8328_startup (struct snd_pcm_substream *substream, +struct snd_soc_dai *dai) +{ +struct snd_soc_codec *codec = dai->codec; +struct es8328_priv *es8328 =snd_soc_codec_get_drvdata (codec); + +if (es8328->sysclk_constraints) +snd_pcm_hw_constraint_list (substream->runtime,0 , +SNDRV_PCM_HW_PARAM_RATE , + es8328->sysclk_constraints); + +return 0 ; +} +static int es8328_hw_params (struct snd_pcm_substream *substream,struct snd_pcm_hw_params *params,struct snd_soc_dai *dai) {struct snd_soc_codec *codec = dai->codec;struct es8328_priv *es8328 =snd_soc_codec_get_drvdata (codec); -int clk_rate =clk_get_rate (es8328->clk);int i;int reg; -int val;int wl; -u8 ratio; +int ratio; + +if (!es8328->sysclk_constraints) { +dev_err (codec->dev,"No MCLK configured\n" ); +return -EINVAL ; + }if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK ) reg =ES8328_DACCONTROL2 ;else reg =ES8328_ADCCONTROL5 ; -switch (clk_rate) { -case ES8328_SYSCLK_RATE_1X : - val =0 ; -break ; -case ES8328_SYSCLK_RATE_2X : - val =ES8328_MASTERMODE_MCLKDIV2 ; -break ; -default : -dev_err (codec->dev, -"%s: clock is running at %d Hz, not %d or %d Hz\n" , - __func__, clk_rate, -ES8328_SYSCLK_RATE_1X ,ES8328_SYSCLK_RATE_2X ); +for (i =0 ; i < es8328->sysclk_constraints->count; i++) +if (es8328->sysclk_constraints->list[i] ==params_rate (params)) +break ; + +if (i == es8328->sysclk_constraints->count) { +dev_err (codec->dev,"LRCLK %d unsupported with current clock\n" , +params_rate (params));return -EINVAL ; } + + ratio = es8328->mclk_ratios[i];snd_soc_update_bits (codec,ES8328_MASTERMODE , -ES8328_MASTERMODE_MCLKDIV2 , val); +ES8328_MASTERMODE_MCLKDIV2 , + es8328->mclkdiv2 ?ES8328_MASTERMODE_MCLKDIV2 :0 );switch (params_width (params)) {case 16 :
@@ -498,12 +533,6 @@ static int es8328_hw_params(struct snd_pcm_substream *substream,return -EINVAL ; } -/* find master mode MCLK to sampling frequency ratio */ - ratio = mclk_ratios[0 ].rate; -for (i =1 ; i <ARRAY_SIZE (mclk_ratios); i++) -if (params_rate (params) <= mclk_ratios[i].rate) - ratio = mclk_ratios[i].ratio; -if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK ) { snd_soc_update_bits(codec, ES8328_DACCONTROL1, ES8328_DACCONTROL1_DACWL_MASK,
@@ -519,6 +548,40 @@ static int es8328_hw_params(struct snd_pcm_substream *substream,return snd_soc_update_bits (codec, reg,ES8328_RATEMASK , ratio); } +static int es8328_set_sysclk (struct snd_soc_dai *codec_dai, +int clk_id,unsigned int freq,int dir) +{ +struct snd_soc_codec *codec = codec_dai->codec; +struct es8328_priv *es8328 =snd_soc_codec_get_drvdata (codec); +int mclkdiv2 =0 ; + +switch (freq) { +case 0 : + es8328->sysclk_constraints =NULL ; + es8328->mclk_ratios =NULL ; +break ; +case 22579200 : + mclkdiv2 =1 ; +/* fallthru */ +case 11289600 : + es8328->sysclk_constraints = &constraints_11289; + es8328->mclk_ratios = ratios_11289; +break ; +case 24576000 : + mclkdiv2 =1 ; +/* fallthru */ +case 12288000 : + es8328->sysclk_constraints = &constraints_12288; + es8328->mclk_ratios = ratios_12288; +break ; +default : +return -EINVAL ; + } + + es8328->mclkdiv2 = mclkdiv2; +return 0 ; +} +static int es8328_set_dai_fmt (struct snd_soc_dai *codec_dai,unsigned int fmt) {
@@ -616,8 +679,10 @@ static int es8328_set_bias_level(struct snd_soc_codec *codec, }static const struct snd_soc_dai_ops es8328_dai_ops = { + .startup = es8328_startup, .hw_params = es8328_hw_params, .digital_mute = es8328_mute, + .set_sysclk = es8328_set_sysclk, .set_fmt = es8328_set_dai_fmt, };
Signature · 1 line
2.8.1
PATCH 9/9 ASoC: es8328: Set symmetric rates
In reply to John KeepingAlthough the ES8328 does support different rates for capture and playback, only very limited combinations are supported (8kHz and 48kHz or 8.0182kHz and 44.1kHz) with most rates required to be symmetric.
Instead of adding a lot of complexity for little gain, let's enforce symmetric rates.
--- sound/soc/codecs/es8328.c | 1 + 1 file changed, 1 insertion(+)
sound/soc/codecs/es8328.c +1 -0
@@ -703,6 +703,7 @@ static struct snd_soc_dai_driver es8328_dai = { .formats = ES8328_FORMATS, }, .ops = &es8328_dai_ops, + .symmetric_rates = 1, };static int es8328_suspend (struct snd_soc_codec *codec)
Signature · 1 line
2.8.0.rc4.238.g874082a
Mark Brown
maintainerApplied "ASoC: es8328: Set symmetric rates" to the asoc tree
The patch
ASoC: es8328: Set symmetric rates
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
ca0d8797397c5daa6260a6c67b845d79f65140f5Mon Sep 17 00:00:00 2001
From: John Keeping <[email protected]>
Date: Mon, 9 May 2016 12:24:37 +0100
Subject: [PATCH] ASoC: es8328: Set symmetric rates
Although the ES8328 does support different rates for capture and playback, only very limited combinations are supported (8kHz and 48kHz or 8.0182kHz and 44.1kHz) with most rates required to be symmetric.
Instead of adding a lot of complexity for little gain, let's enforce symmetric rates.
--- sound/soc/codecs/es8328.c | 1 + 1 file changed, 1 insertion(+)
sound/soc/codecs/es8328.c +1 -0
@@ -703,6 +703,7 @@ static struct snd_soc_dai_driver es8328_dai = { .formats = ES8328_FORMATS, }, .ops = &es8328_dai_ops, + .symmetric_rates = 1, };static int es8328_suspend (struct snd_soc_codec *codec)
Signature · 1 line
2.8.1