* [PATCH v2] ASoC: wm8741: Add differential mono mode support
@ 2015-05-05 20:46 Sergej Sawazki
2015-05-10 10:23 ` Sergej Sawazki
2015-05-11 8:12 ` Charles Keepax
0 siblings, 2 replies; 7+ messages in thread
From: Sergej Sawazki @ 2015-05-05 20:46 UTC (permalink / raw)
To: broonie, lgirdwood, ckeepax, lars; +Cc: Sergej Sawazki, alsa-devel, patches
The WM8741 DAC supports several differential output modes (stereo,
stereo reversed, mono left, mono right). Add platform data and DT
bindings to configure it.
Signed-off-by: Sergej Sawazki <ce3a@gmx.de>
---
Documentation/devicetree/bindings/sound/wm8741.txt | 11 +++
sound/soc/codecs/wm8741.c | 108 ++++++++++++++++++---
sound/soc/codecs/wm8741.h | 10 ++
3 files changed, 117 insertions(+), 12 deletions(-)
diff --git a/Documentation/devicetree/bindings/sound/wm8741.txt b/Documentation/devicetree/bindings/sound/wm8741.txt
index 74bda58..a133154 100644
--- a/Documentation/devicetree/bindings/sound/wm8741.txt
+++ b/Documentation/devicetree/bindings/sound/wm8741.txt
@@ -10,9 +10,20 @@ Required properties:
- reg : the I2C address of the device for I2C, the chip select
number for SPI.
+Optional properties:
+
+ - diff-mode: Differential output mode configuration. Default value for field
+ DIFF in register R8 (MODE_CONTROL_2). If absent, the default is 0, shall be:
+ 0 = stereo
+ 1 = mono left
+ 2 = stereo reversed
+ 3 = mono right
+
Example:
codec: wm8741@1a {
compatible = "wlf,wm8741";
reg = <0x1a>;
+
+ diff-mode = <3>;
};
diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c
index 9e71c76..cbf90ab 100644
--- a/sound/soc/codecs/wm8741.c
+++ b/sound/soc/codecs/wm8741.c
@@ -41,6 +41,7 @@ static const char *wm8741_supply_names[WM8741_NUM_SUPPLIES] = {
/* codec private data */
struct wm8741_priv {
+ struct wm8741_platform_data pdata;
struct regmap *regmap;
struct regulator_bulk_data supplies[WM8741_NUM_SUPPLIES];
unsigned int sysclk;
@@ -398,7 +399,7 @@ static struct snd_soc_dai_driver wm8741_dai = {
.name = "wm8741",
.playback = {
.stream_name = "Playback",
- .channels_min = 2, /* Mono modes not yet supported */
+ .channels_min = 2,
.channels_max = 2,
.rates = WM8741_RATES,
.formats = WM8741_FORMATS,
@@ -416,6 +417,60 @@ static int wm8741_resume(struct snd_soc_codec *codec)
#define wm8741_resume NULL
#endif
+static int wm8741_configure(struct snd_soc_codec *codec)
+{
+ struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
+
+ /* Configure differential mode */
+ switch (wm8741->pdata.diff_mode) {
+ case WM8741_DIFF_MODE_STEREO:
+ case WM8741_DIFF_MODE_STEREO_REVERSED:
+ case WM8741_DIFF_MODE_MONO_LEFT:
+ case WM8741_DIFF_MODE_MONO_RIGHT:
+ snd_soc_update_bits(codec, WM8741_MODE_CONTROL_2,
+ WM8741_DIFF_MASK,
+ wm8741->pdata.diff_mode << WM8741_DIFF_SHIFT);
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ /* Change some default settings - latch VU */
+ snd_soc_update_bits(codec, WM8741_DACLLSB_ATTENUATION,
+ WM8741_UPDATELL, WM8741_UPDATELL);
+ snd_soc_update_bits(codec, WM8741_DACLMSB_ATTENUATION,
+ WM8741_UPDATELM, WM8741_UPDATELM);
+ snd_soc_update_bits(codec, WM8741_DACRLSB_ATTENUATION,
+ WM8741_UPDATERL, WM8741_UPDATERL);
+ snd_soc_update_bits(codec, WM8741_DACRMSB_ATTENUATION,
+ WM8741_UPDATERM, WM8741_UPDATERM);
+
+ return 0;
+}
+
+static int wm8741_add_controls(struct snd_soc_codec *codec)
+{
+ struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
+
+ switch (wm8741->pdata.diff_mode) {
+ case WM8741_DIFF_MODE_STEREO:
+ case WM8741_DIFF_MODE_STEREO_REVERSED:
+ snd_soc_add_codec_controls(codec, wm8741_snd_controls,
+ ARRAY_SIZE(wm8741_snd_controls));
+ break;
+ case WM8741_DIFF_MODE_MONO_LEFT:
+ case WM8741_DIFF_MODE_MONO_RIGHT:
+ /* The machine driver is responsible for mixer controls
+ * if the codec is configured in differential mono mode.
+ */
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
static int wm8741_probe(struct snd_soc_codec *codec)
{
struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
@@ -434,15 +489,17 @@ static int wm8741_probe(struct snd_soc_codec *codec)
goto err_enable;
}
- /* Change some default settings - latch VU */
- snd_soc_update_bits(codec, WM8741_DACLLSB_ATTENUATION,
- WM8741_UPDATELL, WM8741_UPDATELL);
- snd_soc_update_bits(codec, WM8741_DACLMSB_ATTENUATION,
- WM8741_UPDATELM, WM8741_UPDATELM);
- snd_soc_update_bits(codec, WM8741_DACRLSB_ATTENUATION,
- WM8741_UPDATERL, WM8741_UPDATERL);
- snd_soc_update_bits(codec, WM8741_DACRMSB_ATTENUATION,
- WM8741_UPDATERM, WM8741_UPDATERM);
+ ret = wm8741_configure(codec);
+ if (ret < 0) {
+ dev_err(codec->dev, "Failed to change default settings\n");
+ goto err_enable;
+ }
+
+ ret = wm8741_add_controls(codec);
+ if (ret < 0) {
+ dev_err(codec->dev, "Failed to add controls\n");
+ goto err_enable;
+ }
dev_dbg(codec->dev, "Successful registration\n");
return ret;
@@ -467,8 +524,6 @@ static struct snd_soc_codec_driver soc_codec_dev_wm8741 = {
.remove = wm8741_remove,
.resume = wm8741_resume,
- .controls = wm8741_snd_controls,
- .num_controls = ARRAY_SIZE(wm8741_snd_controls),
.dapm_widgets = wm8741_dapm_widgets,
.num_dapm_widgets = ARRAY_SIZE(wm8741_dapm_widgets),
.dapm_routes = wm8741_dapm_routes,
@@ -493,6 +548,23 @@ static const struct regmap_config wm8741_regmap = {
.readable_reg = wm8741_readable,
};
+static int wm8741_set_pdata(struct device *dev, struct wm8741_priv *wm8741)
+{
+ const struct wm8741_platform_data *pdata = dev_get_platdata(dev);
+ u32 diff_mode;
+
+ if (dev->of_node) {
+ if (of_property_read_u32(dev->of_node, "diff-mode", &diff_mode)
+ >= 0)
+ wm8741->pdata.diff_mode = diff_mode;
+ } else {
+ if (pdata != NULL)
+ memcpy(&wm8741->pdata, pdata, sizeof(wm8741->pdata));
+ }
+
+ return 0;
+}
+
#if IS_ENABLED(CONFIG_I2C)
static int wm8741_i2c_probe(struct i2c_client *i2c,
const struct i2c_device_id *id)
@@ -522,6 +594,12 @@ static int wm8741_i2c_probe(struct i2c_client *i2c,
return ret;
}
+ wm8741_set_pdata(&i2c->dev, wm8741);
+ if (ret != 0) {
+ dev_err(&i2c->dev, "Failed to set pdata: %d\n", ret);
+ return ret;
+ }
+
i2c_set_clientdata(i2c, wm8741);
ret = snd_soc_register_codec(&i2c->dev,
@@ -582,6 +660,12 @@ static int wm8741_spi_probe(struct spi_device *spi)
return ret;
}
+ wm8741_set_pdata(&spi->dev, wm8741);
+ if (ret != 0) {
+ dev_err(&spi->dev, "Failed to set pdata: %d\n", ret);
+ return ret;
+ }
+
spi_set_drvdata(spi, wm8741);
ret = snd_soc_register_codec(&spi->dev,
diff --git a/sound/soc/codecs/wm8741.h b/sound/soc/codecs/wm8741.h
index 56c1b1d..c8835f6 100644
--- a/sound/soc/codecs/wm8741.h
+++ b/sound/soc/codecs/wm8741.h
@@ -194,6 +194,12 @@
#define WM8741_DITHER_SHIFT 0 /* DITHER - [1:0] */
#define WM8741_DITHER_WIDTH 2 /* DITHER - [1:0] */
+/* DIFF field values */
+#define WM8741_DIFF_MODE_STEREO 0 /* stereo normal */
+#define WM8741_DIFF_MODE_STEREO_REVERSED 2 /* stereo reversed */
+#define WM8741_DIFF_MODE_MONO_LEFT 1 /* mono left */
+#define WM8741_DIFF_MODE_MONO_RIGHT 3 /* mono right */
+
/*
* R32 (0x20) - ADDITONAL_CONTROL_1
*/
@@ -208,4 +214,8 @@
#define WM8741_SYSCLK 0
+struct wm8741_platform_data {
+ u32 diff_mode; /* Differential Output Mode */
+};
+
#endif
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2] ASoC: wm8741: Add differential mono mode support
2015-05-05 20:46 [PATCH v2] ASoC: wm8741: Add differential mono mode support Sergej Sawazki
@ 2015-05-10 10:23 ` Sergej Sawazki
2015-05-11 17:21 ` Mark Brown
2015-05-11 8:12 ` Charles Keepax
1 sibling, 1 reply; 7+ messages in thread
From: Sergej Sawazki @ 2015-05-10 10:23 UTC (permalink / raw)
To: broonie, lgirdwood, ckeepax, lars; +Cc: alsa-devel, patches
On 05.05.2015 22:46, Sergej Sawazki wrote:
> The WM8741 DAC supports several differential output modes (stereo,
> stereo reversed, mono left, mono right). Add platform data and DT
> bindings to configure it.
>
> Signed-off-by: Sergej Sawazki <ce3a@gmx.de>
> ---
> Documentation/devicetree/bindings/sound/wm8741.txt | 11 +++
> sound/soc/codecs/wm8741.c | 108 ++++++++++++++++++---
> sound/soc/codecs/wm8741.h | 10 ++
> 3 files changed, 117 insertions(+), 12 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/sound/wm8741.txt b/Documentation/devicetree/bindings/sound/wm8741.txt
> index 74bda58..a133154 100644
> --- a/Documentation/devicetree/bindings/sound/wm8741.txt
> +++ b/Documentation/devicetree/bindings/sound/wm8741.txt
> @@ -10,9 +10,20 @@ Required properties:
> - reg : the I2C address of the device for I2C, the chip select
> number for SPI.
>
> +Optional properties:
> +
> + - diff-mode: Differential output mode configuration. Default value for field
> + DIFF in register R8 (MODE_CONTROL_2). If absent, the default is 0, shall be:
> + 0 = stereo
> + 1 = mono left
> + 2 = stereo reversed
> + 3 = mono right
> +
> Example:
>
> codec: wm8741@1a {
> compatible = "wlf,wm8741";
> reg = <0x1a>;
> +
> + diff-mode = <3>;
> };
> diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c
> index 9e71c76..cbf90ab 100644
> --- a/sound/soc/codecs/wm8741.c
> +++ b/sound/soc/codecs/wm8741.c
> @@ -41,6 +41,7 @@ static const char *wm8741_supply_names[WM8741_NUM_SUPPLIES] = {
>
> /* codec private data */
> struct wm8741_priv {
> + struct wm8741_platform_data pdata;
> struct regmap *regmap;
> struct regulator_bulk_data supplies[WM8741_NUM_SUPPLIES];
> unsigned int sysclk;
> @@ -398,7 +399,7 @@ static struct snd_soc_dai_driver wm8741_dai = {
> .name = "wm8741",
> .playback = {
> .stream_name = "Playback",
> - .channels_min = 2, /* Mono modes not yet supported */
> + .channels_min = 2,
> .channels_max = 2,
> .rates = WM8741_RATES,
> .formats = WM8741_FORMATS,
> @@ -416,6 +417,60 @@ static int wm8741_resume(struct snd_soc_codec *codec)
> #define wm8741_resume NULL
> #endif
>
> +static int wm8741_configure(struct snd_soc_codec *codec)
> +{
> + struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
> +
> + /* Configure differential mode */
> + switch (wm8741->pdata.diff_mode) {
> + case WM8741_DIFF_MODE_STEREO:
> + case WM8741_DIFF_MODE_STEREO_REVERSED:
> + case WM8741_DIFF_MODE_MONO_LEFT:
> + case WM8741_DIFF_MODE_MONO_RIGHT:
> + snd_soc_update_bits(codec, WM8741_MODE_CONTROL_2,
> + WM8741_DIFF_MASK,
> + wm8741->pdata.diff_mode << WM8741_DIFF_SHIFT);
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> + /* Change some default settings - latch VU */
> + snd_soc_update_bits(codec, WM8741_DACLLSB_ATTENUATION,
> + WM8741_UPDATELL, WM8741_UPDATELL);
> + snd_soc_update_bits(codec, WM8741_DACLMSB_ATTENUATION,
> + WM8741_UPDATELM, WM8741_UPDATELM);
> + snd_soc_update_bits(codec, WM8741_DACRLSB_ATTENUATION,
> + WM8741_UPDATERL, WM8741_UPDATERL);
> + snd_soc_update_bits(codec, WM8741_DACRMSB_ATTENUATION,
> + WM8741_UPDATERM, WM8741_UPDATERM);
> +
> + return 0;
> +}
> +
> +static int wm8741_add_controls(struct snd_soc_codec *codec)
> +{
> + struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
> +
> + switch (wm8741->pdata.diff_mode) {
> + case WM8741_DIFF_MODE_STEREO:
> + case WM8741_DIFF_MODE_STEREO_REVERSED:
> + snd_soc_add_codec_controls(codec, wm8741_snd_controls,
> + ARRAY_SIZE(wm8741_snd_controls));
> + break;
> + case WM8741_DIFF_MODE_MONO_LEFT:
> + case WM8741_DIFF_MODE_MONO_RIGHT:
> + /* The machine driver is responsible for mixer controls
> + * if the codec is configured in differential mono mode.
> + */
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> static int wm8741_probe(struct snd_soc_codec *codec)
> {
> struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
> @@ -434,15 +489,17 @@ static int wm8741_probe(struct snd_soc_codec *codec)
> goto err_enable;
> }
>
> - /* Change some default settings - latch VU */
> - snd_soc_update_bits(codec, WM8741_DACLLSB_ATTENUATION,
> - WM8741_UPDATELL, WM8741_UPDATELL);
> - snd_soc_update_bits(codec, WM8741_DACLMSB_ATTENUATION,
> - WM8741_UPDATELM, WM8741_UPDATELM);
> - snd_soc_update_bits(codec, WM8741_DACRLSB_ATTENUATION,
> - WM8741_UPDATERL, WM8741_UPDATERL);
> - snd_soc_update_bits(codec, WM8741_DACRMSB_ATTENUATION,
> - WM8741_UPDATERM, WM8741_UPDATERM);
> + ret = wm8741_configure(codec);
> + if (ret < 0) {
> + dev_err(codec->dev, "Failed to change default settings\n");
> + goto err_enable;
> + }
> +
> + ret = wm8741_add_controls(codec);
> + if (ret < 0) {
> + dev_err(codec->dev, "Failed to add controls\n");
> + goto err_enable;
> + }
>
> dev_dbg(codec->dev, "Successful registration\n");
> return ret;
> @@ -467,8 +524,6 @@ static struct snd_soc_codec_driver soc_codec_dev_wm8741 = {
> .remove = wm8741_remove,
> .resume = wm8741_resume,
>
> - .controls = wm8741_snd_controls,
> - .num_controls = ARRAY_SIZE(wm8741_snd_controls),
> .dapm_widgets = wm8741_dapm_widgets,
> .num_dapm_widgets = ARRAY_SIZE(wm8741_dapm_widgets),
> .dapm_routes = wm8741_dapm_routes,
> @@ -493,6 +548,23 @@ static const struct regmap_config wm8741_regmap = {
> .readable_reg = wm8741_readable,
> };
>
> +static int wm8741_set_pdata(struct device *dev, struct wm8741_priv *wm8741)
> +{
> + const struct wm8741_platform_data *pdata = dev_get_platdata(dev);
> + u32 diff_mode;
> +
> + if (dev->of_node) {
> + if (of_property_read_u32(dev->of_node, "diff-mode", &diff_mode)
> + >= 0)
> + wm8741->pdata.diff_mode = diff_mode;
> + } else {
> + if (pdata != NULL)
> + memcpy(&wm8741->pdata, pdata, sizeof(wm8741->pdata));
> + }
> +
> + return 0;
> +}
> +
> #if IS_ENABLED(CONFIG_I2C)
> static int wm8741_i2c_probe(struct i2c_client *i2c,
> const struct i2c_device_id *id)
> @@ -522,6 +594,12 @@ static int wm8741_i2c_probe(struct i2c_client *i2c,
> return ret;
> }
>
> + wm8741_set_pdata(&i2c->dev, wm8741);
> + if (ret != 0) {
> + dev_err(&i2c->dev, "Failed to set pdata: %d\n", ret);
> + return ret;
> + }
> +
> i2c_set_clientdata(i2c, wm8741);
>
> ret = snd_soc_register_codec(&i2c->dev,
> @@ -582,6 +660,12 @@ static int wm8741_spi_probe(struct spi_device *spi)
> return ret;
> }
>
> + wm8741_set_pdata(&spi->dev, wm8741);
> + if (ret != 0) {
> + dev_err(&spi->dev, "Failed to set pdata: %d\n", ret);
> + return ret;
> + }
> +
> spi_set_drvdata(spi, wm8741);
>
> ret = snd_soc_register_codec(&spi->dev,
> diff --git a/sound/soc/codecs/wm8741.h b/sound/soc/codecs/wm8741.h
> index 56c1b1d..c8835f6 100644
> --- a/sound/soc/codecs/wm8741.h
> +++ b/sound/soc/codecs/wm8741.h
> @@ -194,6 +194,12 @@
> #define WM8741_DITHER_SHIFT 0 /* DITHER - [1:0] */
> #define WM8741_DITHER_WIDTH 2 /* DITHER - [1:0] */
>
> +/* DIFF field values */
> +#define WM8741_DIFF_MODE_STEREO 0 /* stereo normal */
> +#define WM8741_DIFF_MODE_STEREO_REVERSED 2 /* stereo reversed */
> +#define WM8741_DIFF_MODE_MONO_LEFT 1 /* mono left */
> +#define WM8741_DIFF_MODE_MONO_RIGHT 3 /* mono right */
> +
> /*
> * R32 (0x20) - ADDITONAL_CONTROL_1
> */
> @@ -208,4 +214,8 @@
>
> #define WM8741_SYSCLK 0
>
> +struct wm8741_platform_data {
> + u32 diff_mode; /* Differential Output Mode */
> +};
> +
> #endif
>
Gentle ping.
Best regards,
Sergej
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] ASoC: wm8741: Add differential mono mode support
2015-05-05 20:46 [PATCH v2] ASoC: wm8741: Add differential mono mode support Sergej Sawazki
2015-05-10 10:23 ` Sergej Sawazki
@ 2015-05-11 8:12 ` Charles Keepax
2015-05-11 9:12 ` Sergej Sawazki
1 sibling, 1 reply; 7+ messages in thread
From: Charles Keepax @ 2015-05-11 8:12 UTC (permalink / raw)
To: Sergej Sawazki; +Cc: alsa-devel, broonie, lgirdwood, lars, patches
On Tue, May 05, 2015 at 10:46:31PM +0200, Sergej Sawazki wrote:
> The WM8741 DAC supports several differential output modes (stereo,
> stereo reversed, mono left, mono right). Add platform data and DT
> bindings to configure it.
>
> Signed-off-by: Sergej Sawazki <ce3a@gmx.de>
> ---
> Documentation/devicetree/bindings/sound/wm8741.txt | 11 +++
> sound/soc/codecs/wm8741.c | 108 ++++++++++++++++++---
> sound/soc/codecs/wm8741.h | 10 ++
> 3 files changed, 117 insertions(+), 12 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/sound/wm8741.txt b/Documentation/devicetree/bindings/sound/wm8741.txt
> index 74bda58..a133154 100644
> --- a/Documentation/devicetree/bindings/sound/wm8741.txt
> +++ b/Documentation/devicetree/bindings/sound/wm8741.txt
> @@ -10,9 +10,20 @@ Required properties:
> - reg : the I2C address of the device for I2C, the chip select
> number for SPI.
>
> +Optional properties:
> +
> + - diff-mode: Differential output mode configuration. Default value for field
> + DIFF in register R8 (MODE_CONTROL_2). If absent, the default is 0, shall be:
> + 0 = stereo
> + 1 = mono left
> + 2 = stereo reversed
> + 3 = mono right
> +
> Example:
>
> codec: wm8741@1a {
> compatible = "wlf,wm8741";
> reg = <0x1a>;
> +
> + diff-mode = <3>;
> };
> diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c
> index 9e71c76..cbf90ab 100644
> --- a/sound/soc/codecs/wm8741.c
> +++ b/sound/soc/codecs/wm8741.c
> @@ -41,6 +41,7 @@ static const char *wm8741_supply_names[WM8741_NUM_SUPPLIES] = {
>
> /* codec private data */
> struct wm8741_priv {
> + struct wm8741_platform_data pdata;
> struct regmap *regmap;
> struct regulator_bulk_data supplies[WM8741_NUM_SUPPLIES];
> unsigned int sysclk;
> @@ -398,7 +399,7 @@ static struct snd_soc_dai_driver wm8741_dai = {
> .name = "wm8741",
> .playback = {
> .stream_name = "Playback",
> - .channels_min = 2, /* Mono modes not yet supported */
> + .channels_min = 2,
> .channels_max = 2,
> .rates = WM8741_RATES,
> .formats = WM8741_FORMATS,
> @@ -416,6 +417,60 @@ static int wm8741_resume(struct snd_soc_codec *codec)
> #define wm8741_resume NULL
> #endif
>
> +static int wm8741_configure(struct snd_soc_codec *codec)
> +{
> + struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
> +
> + /* Configure differential mode */
> + switch (wm8741->pdata.diff_mode) {
> + case WM8741_DIFF_MODE_STEREO:
> + case WM8741_DIFF_MODE_STEREO_REVERSED:
> + case WM8741_DIFF_MODE_MONO_LEFT:
> + case WM8741_DIFF_MODE_MONO_RIGHT:
> + snd_soc_update_bits(codec, WM8741_MODE_CONTROL_2,
> + WM8741_DIFF_MASK,
> + wm8741->pdata.diff_mode << WM8741_DIFF_SHIFT);
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> + /* Change some default settings - latch VU */
> + snd_soc_update_bits(codec, WM8741_DACLLSB_ATTENUATION,
> + WM8741_UPDATELL, WM8741_UPDATELL);
> + snd_soc_update_bits(codec, WM8741_DACLMSB_ATTENUATION,
> + WM8741_UPDATELM, WM8741_UPDATELM);
> + snd_soc_update_bits(codec, WM8741_DACRLSB_ATTENUATION,
> + WM8741_UPDATERL, WM8741_UPDATERL);
> + snd_soc_update_bits(codec, WM8741_DACRMSB_ATTENUATION,
> + WM8741_UPDATERM, WM8741_UPDATERM);
> +
> + return 0;
> +}
> +
> +static int wm8741_add_controls(struct snd_soc_codec *codec)
> +{
> + struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
> +
> + switch (wm8741->pdata.diff_mode) {
> + case WM8741_DIFF_MODE_STEREO:
> + case WM8741_DIFF_MODE_STEREO_REVERSED:
> + snd_soc_add_codec_controls(codec, wm8741_snd_controls,
> + ARRAY_SIZE(wm8741_snd_controls));
> + break;
> + case WM8741_DIFF_MODE_MONO_LEFT:
> + case WM8741_DIFF_MODE_MONO_RIGHT:
> + /* The machine driver is responsible for mixer controls
> + * if the codec is configured in differential mono mode.
> + */
Would it not be better to add controls but with a channel neutral
name and then the machine driver can use the name_prefix stuff to
stick left and right onto them? Seems a bit odd for the machine
driver to have to know exact register details of the CODEC and
manually add the volume controls?
Thanks,
Charles
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] ASoC: wm8741: Add differential mono mode support
2015-05-11 8:12 ` Charles Keepax
@ 2015-05-11 9:12 ` Sergej Sawazki
2015-05-11 11:50 ` Charles Keepax
0 siblings, 1 reply; 7+ messages in thread
From: Sergej Sawazki @ 2015-05-11 9:12 UTC (permalink / raw)
To: Charles Keepax, broonie, lgirdwood, lars; +Cc: alsa-devel, patches
On 11.05.2015 at 10:12, Charles Keepax wrote:
> On Tue, May 05, 2015 at 10:46:31PM +0200, Sergej Sawazki wrote:
>> +static int wm8741_add_controls(struct snd_soc_codec *codec)
>> +{
>> + struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
>> +
>> + switch (wm8741->pdata.diff_mode) {
>> + case WM8741_DIFF_MODE_STEREO:
>> + case WM8741_DIFF_MODE_STEREO_REVERSED:
>> + snd_soc_add_codec_controls(codec, wm8741_snd_controls,
>> + ARRAY_SIZE(wm8741_snd_controls));
>> + break;
>> + case WM8741_DIFF_MODE_MONO_LEFT:
>> + case WM8741_DIFF_MODE_MONO_RIGHT:
>> + /* The machine driver is responsible for mixer controls
>> + * if the codec is configured in differential mono mode.
>> + */
> Would it not be better to add controls but with a channel neutral
> name and then the machine driver can use the name_prefix stuff to
> stick left and right onto them? Seems a bit odd for the machine
> driver to have to know exact register details of the CODEC and
> manually add the volume controls?
>
> Thanks,
> Charles
Charles, could you point me to an "name_prefix" example please?
Thanks,
Sergej
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] ASoC: wm8741: Add differential mono mode support
2015-05-11 9:12 ` Sergej Sawazki
@ 2015-05-11 11:50 ` Charles Keepax
0 siblings, 0 replies; 7+ messages in thread
From: Charles Keepax @ 2015-05-11 11:50 UTC (permalink / raw)
To: Sergej Sawazki; +Cc: alsa-devel, broonie, lgirdwood, lars, patches
On Mon, May 11, 2015 at 11:12:00AM +0200, Sergej Sawazki wrote:
> On 11.05.2015 at 10:12, Charles Keepax wrote:
> > On Tue, May 05, 2015 at 10:46:31PM +0200, Sergej Sawazki wrote:
> >> +static int wm8741_add_controls(struct snd_soc_codec *codec)
> >> +{
> >> + struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
> >> +
> >> + switch (wm8741->pdata.diff_mode) {
> >> + case WM8741_DIFF_MODE_STEREO:
> >> + case WM8741_DIFF_MODE_STEREO_REVERSED:
> >> + snd_soc_add_codec_controls(codec, wm8741_snd_controls,
> >> + ARRAY_SIZE(wm8741_snd_controls));
> >> + break;
> >> + case WM8741_DIFF_MODE_MONO_LEFT:
> >> + case WM8741_DIFF_MODE_MONO_RIGHT:
> >> + /* The machine driver is responsible for mixer controls
> >> + * if the codec is configured in differential mono mode.
> >> + */
> > Would it not be better to add controls but with a channel neutral
> > name and then the machine driver can use the name_prefix stuff to
> > stick left and right onto them? Seems a bit odd for the machine
> > driver to have to know exact register details of the CODEC and
> > manually add the volume controls?
> >
> > Thanks,
> > Charles
>
> Charles, could you point me to an "name_prefix" example please?
>
> Thanks,
> Sergej
>
The wm9081's handling in sound/soc/samsung/bells.c would be a
reasonable example.
Thanks,
Charles
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] ASoC: wm8741: Add differential mono mode support
2015-05-10 10:23 ` Sergej Sawazki
@ 2015-05-11 17:21 ` Mark Brown
2015-05-11 20:27 ` Sergej Sawazki
0 siblings, 1 reply; 7+ messages in thread
From: Mark Brown @ 2015-05-11 17:21 UTC (permalink / raw)
To: Sergej Sawazki; +Cc: ckeepax, lars, lgirdwood, alsa-devel, patches
[-- Attachment #1.1: Type: text/plain, Size: 596 bytes --]
On Sun, May 10, 2015 at 12:23:28PM +0200, Sergej Sawazki wrote:
> On 05.05.2015 22:46, Sergej Sawazki wrote:
> >+struct wm8741_platform_data {
> >+ u32 diff_mode; /* Differential Output Mode */
> >+};
> >+
> > #endif
> Gentle ping.
Don't send content free pings, *especially* not content free pings
quoting the entire message with the text at the bottom of the mail.
Content free pings just add to e-mail volume and waste everyone's time.
It's been less than a week since you sent your patch, you need to allow
a reasonable amount of time in case people are busy, on holiday or
something.
[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 473 bytes --]
[-- Attachment #2: Type: text/plain, Size: 0 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] ASoC: wm8741: Add differential mono mode support
2015-05-11 17:21 ` Mark Brown
@ 2015-05-11 20:27 ` Sergej Sawazki
0 siblings, 0 replies; 7+ messages in thread
From: Sergej Sawazki @ 2015-05-11 20:27 UTC (permalink / raw)
To: Mark Brown; +Cc: ckeepax, Lars-Peter Clausen, lgirdwood, alsa-devel, patches
Am 11.05.2015 um 19:21 schrieb Mark Brown:
> On Sun, May 10, 2015 at 12:23:28PM +0200, Sergej Sawazki wrote:
>> On 05.05.2015 22:46, Sergej Sawazki wrote:
>
>>> +struct wm8741_platform_data {
>>> + u32 diff_mode; /* Differential Output Mode */
>>> +};
>>> +
>>> #endif
>
>> Gentle ping.
>
> Don't send content free pings, *especially* not content free pings
> quoting the entire message with the text at the bottom of the mail.
> Content free pings just add to e-mail volume and waste everyone's time.
>
> It's been less than a week since you sent your patch, you need to allow
> a reasonable amount of time in case people are busy, on holiday or
> something.
>
Mark,
you are right. I am sorry and I promise to improve.
Thanks for your answer, nevertheless.
Sergej
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-05-11 20:27 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-05 20:46 [PATCH v2] ASoC: wm8741: Add differential mono mode support Sergej Sawazki
2015-05-10 10:23 ` Sergej Sawazki
2015-05-11 17:21 ` Mark Brown
2015-05-11 20:27 ` Sergej Sawazki
2015-05-11 8:12 ` Charles Keepax
2015-05-11 9:12 ` Sergej Sawazki
2015-05-11 11:50 ` Charles Keepax
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox