Skip to contentSkip to conversation

Coefficient configuration support

PATCH In review Mark Brown 2 participants 5 messages Feb 18, 2012 – Feb 20, 2012

Subsystems (3)
lore
Share & tools
lore

Mark Brown

author
#0 lore raw

cover Coefficient configuration support

This series is only compile tested as yet, I'll probably get a chance to test it shortly - it should work out so hopefully the review can overlap usefully with the testing.

Mark Brown (3):
ASoC: core: Add SND_SOC_BYTES control for coefficient blocks
ASoC: core: Add support for masking out parts of coefficient blocks
ASoC: wm5100: Add DRC coefficient configuration

 include/sound/soc.h       |   27 +++++++++++
 sound/soc/codecs/wm5100.c |    2 +
 sound/soc/soc-core.c      |  110 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 139 insertions(+), 0 deletions(-)
author
#1 lore raw

PATCH 1/3 ASoC: core: Add SND_SOC_BYTES control for coefficient blocks

Allow devices to export blocks of registers to the application layer, intended for use for reading and writing coefficient data which can't usefully be worked with by the kernel at runtime (for example, due to requiring complex and expensive calculations or being the results of callibration procedures). Currently drivers are using platform data to provide configurations for coefficient blocks which isn't at all convenient for runtime management or configuration development.

Currently only devices using regmap are supported, an error will be generated for any attempt to work with a byte control on a non-regmap device. There's no fundamental block to other devices so support could be added if required.

---
 include/sound/soc.h  |   18 ++++++++++++++++++
 sound/soc/soc-core.c |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 67 insertions(+), 0 deletions(-)
include/sound/soc.h +18 -0
index 1e16d6e..3e9cae0 100644
@@ -185,6 +185,12 @@
 		 .rreg = xreg_right, .shift = xshift, \
 		 .min = xmin, .max = xmax} }
 
+#define SND_SOC_BYTES(xname, xbase, xregs)		      \
+{	.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,   \
+	.info = snd_soc_bytes_info, .get = snd_soc_bytes_get, \
+	.put = snd_soc_bytes_put, .private_value =	      \
+		((unsigned long)&(struct soc_bytes)           \
+		{.base = xbase, .num_regs = xregs }) }
 
 /*
  * Simplified versions of above macros, declaring a struct and calculating
@@ -413,6 +419,13 @@ int snd_soc_get_volsw_2r_sx(struct snd_kcontrol *kcontrol,
 	struct snd_ctl_elem_value *ucontrol);
 int snd_soc_put_volsw_2r_sx(struct snd_kcontrol *kcontrol,
 	struct snd_ctl_elem_value *ucontrol);
+int snd_soc_bytes_info(struct snd_kcontrol *kcontrol,
+		       struct snd_ctl_elem_info *uinfo);
+int snd_soc_bytes_get(struct snd_kcontrol *kcontrol,
+		      struct snd_ctl_elem_value *ucontrol);
+int snd_soc_bytes_put(struct snd_kcontrol *kcontrol,
+		      struct snd_ctl_elem_value *ucontrol);
+
 
 /**
  * struct snd_soc_reg_access - Describes whether a given register is
@@ -888,6 +901,11 @@ struct soc_mixer_control {
 	unsigned int reg, rreg, shift, rshift, invert;
 };
 
+struct soc_bytes {
+	int base;
+	int num_regs;
+};
+
 /* enumerated kcontrol */
 struct soc_enum {
 	unsigned short reg;
sound/soc/soc-core.c +49 -0

55 lines not on this page · raw message

Signature · 1 line
1.7.9
author
#2 lore raw

PATCH 2/3 ASoC: core: Add support for masking out parts of coefficient blocks

Chip designers frequently include things like the enable and disable controls for algorithms in the register blocks which also hold the coefficients. Since it's desirable to split out the enable/disable control from userspace the plain SND_SOC_BYTES() isn't optimal for these devices.

Add a SND_SOC_BYTES_MASK() which allows a bitmask from the first word of the block to be excluded from the control. This supports the needs of devices I've looked at and lets us have a reasonably simple API. Further controls can be added in future if that's needed.

---
 include/sound/soc.h  |    9 ++++++
 sound/soc/soc-core.c |   75 +++++++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 77 insertions(+), 7 deletions(-)
include/sound/soc.h +9 -0
index 3e9cae0..82bd773 100644
@@ -192,6 +192,14 @@
 		((unsigned long)&(struct soc_bytes)           \
 		{.base = xbase, .num_regs = xregs }) }
 
+#define SND_SOC_BYTES_MASK(xname, xbase, xregs, xmask)	      \
+{	.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,   \
+	.info = snd_soc_bytes_info, .get = snd_soc_bytes_get, \
+	.put = snd_soc_bytes_put, .private_value =	      \
+		((unsigned long)&(struct soc_bytes)           \
+		{.base = xbase, .num_regs = xregs,	      \
+		 .mask = xmask }) }
+
 /*
  * Simplified versions of above macros, declaring a struct and calculating
  * ARRAY_SIZE internally
@@ -904,6 +912,7 @@ struct soc_mixer_control {
 struct soc_bytes {
 	int base;
 	int num_regs;
+	u32 mask;
 };
 
 /* enumerated kcontrol */
sound/soc/soc-core.c +68 -7

88 lines not on this page · raw message

Signature · 1 line
1.7.9
author
#3 lore raw

PATCH 3/3 ASoC: wm5100: Add DRC coefficient configuration

In reply to Mark Brown
---
 sound/soc/codecs/wm5100.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
sound/soc/codecs/wm5100.c +2 -0
index 74e9372..7fbcd6d 100644
@@ -744,6 +744,8 @@ WM5100_MIXER_CONTROLS("EQ4", WM5100_EQ4MIX_INPUT_1_SOURCE),
 
 WM5100_MIXER_CONTROLS("DRC1L", WM5100_DRC1LMIX_INPUT_1_SOURCE),
 WM5100_MIXER_CONTROLS("DRC1R", WM5100_DRC1RMIX_INPUT_1_SOURCE),
+SND_SOC_BYTES_MASK("DRC", WM5100_DRC1_CTRL1, 5,
+		   WM5100_DRCL_ENA | WM5100_DRCR_ENA),
 
 WM5100_MIXER_CONTROLS("LHPF1", WM5100_HPLP1MIX_INPUT_1_SOURCE),
 WM5100_MIXER_CONTROLS("LHPF2", WM5100_HPLP2MIX_INPUT_1_SOURCE),
Signature · 1 line
1.7.9
Acked-by on the v1 series
#4 lore raw
In reply to Mark Brown
Quoted 9 lines · Mark Brown

This series is only compile tested as yet, I'll probably get a chance to test it shortly - it should work out so hopefully the review can overlap usefully with the testing.

Mark Brown (3):
ASoC: core: Add SND_SOC_BYTES control for coefficient blocks
ASoC: core: Add support for masking out parts of coefficient blocks
ASoC: wm5100: Add DRC coefficient configuration

Quoted 4 lines
 include/sound/soc.h       |   27 +++++++++++
 sound/soc/codecs/wm5100.c |    2 +
 sound/soc/soc-core.c      |  110 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 139 insertions(+), 0 deletions(-)

All