[alsa-devel] [PATCH 0/3] Add NAU8812 support
Hi,
this small series adds the documentation and support for the nau8812 devices. The exisiting nau8810 driver can handle both devices so we only need to add the dt-bindings and inform the user by adapting the Kconfig entry.
Futhermore the series adds the support for the aux-port control.
@John Hsu Please can you verify that register accesses to the aux-port control bits don't affect the nau8810 devices? I don't have such a device but the documentations says that those register fields are just '0'ed. So I assume the nau8810 devices ignore such writes.
Marco Felsch (2): dt-bindings: ASoC: add nau8812 documentation ASoC: nau8810: add support for nau8812
Thomas Fehrenbacher (1): ASoC: nau8810: add aux input control, available on NAU8812
Documentation/devicetree/bindings/sound/nau8810.txt | 2 +- sound/soc/codecs/Kconfig | 2 +- sound/soc/codecs/nau8810.c | 9 +++++++++ sound/soc/codecs/nau8810.h | 2 ++ 4 files changed, 13 insertions(+), 2 deletions(-)
Add dt-bindings for the nau8812 device.
Signed-off-by: Marco Felsch m.felsch@pengutronix.de --- Documentation/devicetree/bindings/sound/nau8810.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/sound/nau8810.txt b/Documentation/devicetree/bindings/sound/nau8810.txt index 05830e477acd..ddb007a43e68 100644 --- a/Documentation/devicetree/bindings/sound/nau8810.txt +++ b/Documentation/devicetree/bindings/sound/nau8810.txt @@ -4,7 +4,7 @@ This device supports I2C only.
Required properties:
- - compatible : "nuvoton,nau8810" + - compatible : "nuvoton,nau8810" or "nuvoton,nau8812"
- reg : the I2C address of the device.
On Fri, 15 Nov 2019 17:08:17 +0100, Marco Felsch wrote:
Add dt-bindings for the nau8812 device.
Signed-off-by: Marco Felsch m.felsch@pengutronix.de
Documentation/devicetree/bindings/sound/nau8810.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Acked-by: Rob Herring robh@kernel.org
The nau8812 device [1] uses exactly the same register layout as the nau8810 so there is no need to differentiate those. The only difference is the output power and an additional aux-port input on the nau8812. The registers related to the aux-port don't affect the nau8810 in a negative way. They are just ignored (set to '0').
[1] http://www.nuvoton.com/resource-files/NAU8812DatasheetRev2.7.pdf
Signed-off-by: Marco Felsch m.felsch@pengutronix.de --- sound/soc/codecs/Kconfig | 2 +- sound/soc/codecs/nau8810.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index 229cc89f8c5a..d13a2e5d0afb 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -1470,7 +1470,7 @@ config SND_SOC_NAU8540 depends on I2C
config SND_SOC_NAU8810 - tristate "Nuvoton Technology Corporation NAU88C10 CODEC" + tristate "Nuvoton Technology Corporation NAU88C10/12 CODEC" depends on I2C
config SND_SOC_NAU8822 diff --git a/sound/soc/codecs/nau8810.c b/sound/soc/codecs/nau8810.c index de26758c30a8..a32a4a8d5f50 100644 --- a/sound/soc/codecs/nau8810.c +++ b/sound/soc/codecs/nau8810.c @@ -862,6 +862,7 @@ static int nau8810_i2c_probe(struct i2c_client *i2c,
static const struct i2c_device_id nau8810_i2c_id[] = { { "nau8810", 0 }, + { "nau8812", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, nau8810_i2c_id); @@ -869,6 +870,7 @@ MODULE_DEVICE_TABLE(i2c, nau8810_i2c_id); #ifdef CONFIG_OF static const struct of_device_id nau8810_of_match[] = { { .compatible = "nuvoton,nau8810", }, + { .compatible = "nuvoton,nau8812", }, { } }; MODULE_DEVICE_TABLE(of, nau8810_of_match);
From: Thomas Fehrenbacher thomas.fehrenbacher@siedle.de
This commit adds the support to control the aux-port on the nau8812 devices. We don't need to differentiate the aux-port registers since those bitfields are set to '0' on the nau8810 devices [1,2].
[1] http://www.nuvoton.com/resource-files/NAU8810_Datasheet_Rev_2.8.pdf [2] http://www.nuvoton.com/resource-files/NAU8812DatasheetRev2.7.pdf
Signed-off-by: Thomas Fehrenbacher thomas.fehrenbacher@siedle.de [m.felsch@pengutronix.de: add commit message] Signed-off-by: Marco Felsch m.felsch@pengutronix.de --- sound/soc/codecs/nau8810.c | 7 +++++++ sound/soc/codecs/nau8810.h | 2 ++ 2 files changed, 9 insertions(+)
diff --git a/sound/soc/codecs/nau8810.c b/sound/soc/codecs/nau8810.c index a32a4a8d5f50..b1024d24d413 100644 --- a/sound/soc/codecs/nau8810.c +++ b/sound/soc/codecs/nau8810.c @@ -351,6 +351,9 @@ static const struct snd_kcontrol_new nau8810_snd_controls[] = { NAU8810_DACOS_SFT, 1, 0), SOC_SINGLE("ADC Oversampling Rate(128x) Switch", NAU8810_REG_ADC, NAU8810_ADCOS_SFT, 1, 0), + + SOC_SINGLE("AUX Input Enable Switch", NAU8810_REG_POWER1, + NAU8810_AUX_EN_SFT, 1, 0), };
/* Speaker Output Mixer */ @@ -383,6 +386,8 @@ static const struct snd_kcontrol_new nau8810_inpga[] = { NAU8810_NMICPGA_SFT, 1, 0), SOC_DAPM_SINGLE("MicP Switch", NAU8810_REG_INPUT_SIGNAL, NAU8810_PMICPGA_SFT, 1, 0), + SOC_DAPM_SINGLE("AUX Switch", NAU8810_REG_INPUT_SIGNAL, + NAU8810_AUXPGA_SFT, 1, 0), };
/* Loopback Switch */ @@ -436,6 +441,7 @@ static const struct snd_soc_dapm_widget nau8810_dapm_widgets[] = {
SND_SOC_DAPM_INPUT("MICN"), SND_SOC_DAPM_INPUT("MICP"), + SND_SOC_DAPM_INPUT("AUX"), SND_SOC_DAPM_OUTPUT("MONOOUT"), SND_SOC_DAPM_OUTPUT("SPKOUTP"), SND_SOC_DAPM_OUTPUT("SPKOUTN"), @@ -470,6 +476,7 @@ static const struct snd_soc_dapm_route nau8810_dapm_routes[] = { {"Input PGA", NULL, "Mic Bias"}, {"Input PGA", "MicN Switch", "MICN"}, {"Input PGA", "MicP Switch", "MICP"}, + {"Input PGA", "AUX Switch", "AUX"},
/* Digital Looptack */ {"Digital Loopback", "Switch", "ADC"}, diff --git a/sound/soc/codecs/nau8810.h b/sound/soc/codecs/nau8810.h index 1ada31883dc6..7b5ecad173d3 100644 --- a/sound/soc/codecs/nau8810.h +++ b/sound/soc/codecs/nau8810.h @@ -69,6 +69,7 @@
/* NAU8810_REG_POWER1 (0x1) */ #define NAU8810_DCBUF_EN (0x1 << 8) +#define NAU8810_AUX_EN_SFT 6 #define NAU8810_PLL_EN_SFT 5 #define NAU8810_MICBIAS_EN_SFT 4 #define NAU8810_ABIAS_EN (0x1 << 3) @@ -229,6 +230,7 @@ /* NAU8810_REG_INPUT_SIGNAL (0x2C) */ #define NAU8810_PMICPGA_SFT 0 #define NAU8810_NMICPGA_SFT 1 +#define NAU8810_AUXPGA_SFT 2
/* NAU8810_REG_PGAGAIN (0x2D) */ #define NAU8810_PGAGAIN_SFT 0
On Fri, Nov 15, 2019 at 05:08:19PM +0100, Marco Felsch wrote:
This commit adds the support to control the aux-port on the nau8812 devices. We don't need to differentiate the aux-port registers since those bitfields are set to '0' on the nau8810 devices [1,2].
It'd still be better to only register these controls if the device isn't a nau8812 so that userspace doesn't see them.
Hi Mark,
On 19-11-15 16:12, Mark Brown wrote:
On Fri, Nov 15, 2019 at 05:08:19PM +0100, Marco Felsch wrote:
This commit adds the support to control the aux-port on the nau8812 devices. We don't need to differentiate the aux-port registers since those bitfields are set to '0' on the nau8810 devices [1,2].
It'd still be better to only register these controls if the device isn't a nau8812 so that userspace doesn't see them.
That's the thing I tought about 10min.. Imagine that: You have an embedded device with a very good codec driver (all codec controlls are available) but the hw-guys didn't connect all the in-/outputs. So switching those controls are useless too. IMHO this is exactly the same thing here.
Regards, Marco
On Fri, Nov 15, 2019 at 05:20:53PM +0100, Marco Felsch wrote:
On 19-11-15 16:12, Mark Brown wrote:
It'd still be better to only register these controls if the device isn't a nau8812 so that userspace doesn't see them.
That's the thing I tought about 10min.. Imagine that: You have an embedded device with a very good codec driver (all codec controlls are available) but the hw-guys didn't connect all the in-/outputs. So switching those controls are useless too. IMHO this is exactly the same thing here.
We do have the start of facilities to mask out unreachable controls already (a machine driver could use them manually as things stand). If we ever get the graph API done properly that work is more likely to get finished.
Marco Felsch 於 2019/11/16 上午 12:08 寫道:
From: Thomas Fehrenbacher thomas.fehrenbacher@siedle.de
This commit adds the support to control the aux-port on the nau8812 devices. We don't need to differentiate the aux-port registers since those bitfields are set to '0' on the nau8810 devices [1,2].
[1] http://www.nuvoton.com/resource-files/NAU8810_Datasheet_Rev_2.8.pdf [2] http://www.nuvoton.com/resource-files/NAU8812DatasheetRev2.7.pdf
Signed-off-by: Thomas Fehrenbacher thomas.fehrenbacher@siedle.de [m.felsch@pengutronix.de: add commit message] Signed-off-by: Marco Felsch m.felsch@pengutronix.de
sound/soc/codecs/nau8810.c | 7 +++++++ sound/soc/codecs/nau8810.h | 2 ++ 2 files changed, 9 insertions(+)
diff --git a/sound/soc/codecs/nau8810.c b/sound/soc/codecs/nau8810.c index a32a4a8d5f50..b1024d24d413 100644 --- a/sound/soc/codecs/nau8810.c +++ b/sound/soc/codecs/nau8810.c @@ -351,6 +351,9 @@ static const struct snd_kcontrol_new nau8810_snd_controls[] = { NAU8810_DACOS_SFT, 1, 0), SOC_SINGLE("ADC Oversampling Rate(128x) Switch", NAU8810_REG_ADC, NAU8810_ADCOS_SFT, 1, 0),
+SOC_SINGLE("AUX Input Enable Switch", NAU8810_REG_POWER1, +NAU8810_AUX_EN_SFT, 1, 0), };
The power control has to move to the nau8810_dapm_widgets.
The DAPM can just control the power switch of AUXI dynamically.
/* Speaker Output Mixer */ @@ -383,6 +386,8 @@ static const struct snd_kcontrol_new nau8810_inpga[] = { NAU8810_NMICPGA_SFT, 1, 0), SOC_DAPM_SINGLE("MicP Switch", NAU8810_REG_INPUT_SIGNAL, NAU8810_PMICPGA_SFT, 1, 0), +SOC_DAPM_SINGLE("AUX Switch", NAU8810_REG_INPUT_SIGNAL, +NAU8810_AUXPGA_SFT, 1, 0), };
/* Loopback Switch */ @@ -436,6 +441,7 @@ static const struct snd_soc_dapm_widget nau8810_dapm_widgets[] = {
SND_SOC_DAPM_INPUT("MICN"), SND_SOC_DAPM_INPUT("MICP"), +SND_SOC_DAPM_INPUT("AUX"), SND_SOC_DAPM_OUTPUT("MONOOUT"), SND_SOC_DAPM_OUTPUT("SPKOUTP"), SND_SOC_DAPM_OUTPUT("SPKOUTN"), @@ -470,6 +476,7 @@ static const struct snd_soc_dapm_route nau8810_dapm_routes[] = { {"Input PGA", NULL, "Mic Bias"}, {"Input PGA", "MicN Switch", "MICN"}, {"Input PGA", "MicP Switch", "MICP"}, +{"Input PGA", "AUX Switch", "AUX"},
/* Digital Looptack */ {"Digital Loopback", "Switch", "ADC"}, diff --git a/sound/soc/codecs/nau8810.h b/sound/soc/codecs/nau8810.h index 1ada31883dc6..7b5ecad173d3 100644 --- a/sound/soc/codecs/nau8810.h +++ b/sound/soc/codecs/nau8810.h @@ -69,6 +69,7 @@
/* NAU8810_REG_POWER1 (0x1) */ #define NAU8810_DCBUF_EN(0x1 << 8) +#define NAU8810_AUX_EN_SFT6 #define NAU8810_PLL_EN_SFT5 #define NAU8810_MICBIAS_EN_SFT4 #define NAU8810_ABIAS_EN(0x1 << 3) @@ -229,6 +230,7 @@ /* NAU8810_REG_INPUT_SIGNAL (0x2C) */ #define NAU8810_PMICPGA_SFT0 #define NAU8810_NMICPGA_SFT1 +#define NAU8810_AUXPGA_SFT2
/* NAU8810_REG_PGAGAIN (0x2D) */ #define NAU8810_PGAGAIN_SFT0
________________________________ ________________________________ The privileged confidential information contained in this email is intended for use only by the addressees as indicated by the original sender of this email. If you are not the addressee indicated in this email or are not responsible for delivery of the email to such a person, please kindly reply to the sender indicating this fact and delete all copies of it from your computer and network server immediately. Your cooperation is highly appreciated. It is advised that any unauthorized use of confidential information of Nuvoton is strictly prohibited; and any information in this email irrelevant to the official business of Nuvoton shall be deemed as neither given nor endorsed by Nuvoton.
Hi,
On 19-11-16 01:43, AS50 KCHsu0 wrote:
Marco Felsch 於 2019/11/16 上午 12:08 寫道:
From: Thomas Fehrenbacher thomas.fehrenbacher@siedle.de
This commit adds the support to control the aux-port on the nau8812 devices. We don't need to differentiate the aux-port registers since those bitfields are set to '0' on the nau8810 devices [1,2].
[1] http://www.nuvoton.com/resource-files/NAU8810_Datasheet_Rev_2.8.pdf [2] http://www.nuvoton.com/resource-files/NAU8812DatasheetRev2.7.pdf
Signed-off-by: Thomas Fehrenbacher thomas.fehrenbacher@siedle.de [m.felsch@pengutronix.de: add commit message] Signed-off-by: Marco Felsch m.felsch@pengutronix.de
sound/soc/codecs/nau8810.c | 7 +++++++ sound/soc/codecs/nau8810.h | 2 ++ 2 files changed, 9 insertions(+)
diff --git a/sound/soc/codecs/nau8810.c b/sound/soc/codecs/nau8810.c index a32a4a8d5f50..b1024d24d413 100644 --- a/sound/soc/codecs/nau8810.c +++ b/sound/soc/codecs/nau8810.c @@ -351,6 +351,9 @@ static const struct snd_kcontrol_new nau8810_snd_controls[] = { NAU8810_DACOS_SFT, 1, 0), SOC_SINGLE("ADC Oversampling Rate(128x) Switch", NAU8810_REG_ADC, NAU8810_ADCOS_SFT, 1, 0),
+SOC_SINGLE("AUX Input Enable Switch", NAU8810_REG_POWER1, +NAU8810_AUX_EN_SFT, 1, 0), };
The power control has to move to the nau8810_dapm_widgets.
The DAPM can just control the power switch of AUXI dynamically.
Okay, thanks for covering that. I will prepare a v2 with your and Mark's feedback.
Regards, Marco
/* Speaker Output Mixer */ @@ -383,6 +386,8 @@ static const struct snd_kcontrol_new nau8810_inpga[] = { NAU8810_NMICPGA_SFT, 1, 0), SOC_DAPM_SINGLE("MicP Switch", NAU8810_REG_INPUT_SIGNAL, NAU8810_PMICPGA_SFT, 1, 0), +SOC_DAPM_SINGLE("AUX Switch", NAU8810_REG_INPUT_SIGNAL, +NAU8810_AUXPGA_SFT, 1, 0), };
/* Loopback Switch */ @@ -436,6 +441,7 @@ static const struct snd_soc_dapm_widget nau8810_dapm_widgets[] = {
SND_SOC_DAPM_INPUT("MICN"), SND_SOC_DAPM_INPUT("MICP"), +SND_SOC_DAPM_INPUT("AUX"), SND_SOC_DAPM_OUTPUT("MONOOUT"), SND_SOC_DAPM_OUTPUT("SPKOUTP"), SND_SOC_DAPM_OUTPUT("SPKOUTN"), @@ -470,6 +476,7 @@ static const struct snd_soc_dapm_route nau8810_dapm_routes[] = { {"Input PGA", NULL, "Mic Bias"}, {"Input PGA", "MicN Switch", "MICN"}, {"Input PGA", "MicP Switch", "MICP"}, +{"Input PGA", "AUX Switch", "AUX"},
/* Digital Looptack */ {"Digital Loopback", "Switch", "ADC"}, diff --git a/sound/soc/codecs/nau8810.h b/sound/soc/codecs/nau8810.h index 1ada31883dc6..7b5ecad173d3 100644 --- a/sound/soc/codecs/nau8810.h +++ b/sound/soc/codecs/nau8810.h @@ -69,6 +69,7 @@
/* NAU8810_REG_POWER1 (0x1) */ #define NAU8810_DCBUF_EN(0x1 << 8) +#define NAU8810_AUX_EN_SFT6 #define NAU8810_PLL_EN_SFT5 #define NAU8810_MICBIAS_EN_SFT4 #define NAU8810_ABIAS_EN(0x1 << 3) @@ -229,6 +230,7 @@ /* NAU8810_REG_INPUT_SIGNAL (0x2C) */ #define NAU8810_PMICPGA_SFT0 #define NAU8810_NMICPGA_SFT1 +#define NAU8810_AUXPGA_SFT2
/* NAU8810_REG_PGAGAIN (0x2D) */ #define NAU8810_PGAGAIN_SFT0
The privileged confidential information contained in this email is intended for use only by the addressees as indicated by the original sender of this email. If you are not the addressee indicated in this email or are not responsible for delivery of the email to such a person, please kindly reply to the sender indicating this fact and delete all copies of it from your computer and network server immediately. Your cooperation is highly appreciated. It is advised that any unauthorized use of confidential information of Nuvoton is strictly prohibited; and any information in this email irrelevant to the official business of Nuvoton shall be deemed as neither given nor endorsed by Nuvoton.
participants (4)
-
AS50 KCHsu0
-
Marco Felsch
-
Mark Brown
-
Rob Herring