diff options
author | Charles Keepax <ckeepax@opensource.cirrus.com> | 2022-06-21 11:20:41 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2022-06-21 13:15:35 +0100 |
commit | 6b183919f7051294dc5fc331bb608d5d7f29f5da (patch) | |
tree | 91890ddb5738ef203a2df738660f2b305f466421 /include/sound/soc.h | |
parent | 289a3ec0b5b9a2de6fc75633aa81f017792ecc99 (diff) | |
download | linux-stable-6b183919f7051294dc5fc331bb608d5d7f29f5da.tar.gz linux-stable-6b183919f7051294dc5fc331bb608d5d7f29f5da.tar.bz2 linux-stable-6b183919f7051294dc5fc331bb608d5d7f29f5da.zip |
ASoC: core: Add new SOC_DOUBLE_SX_TLV macro
Currently macros only exist for SX style (implicit sign bit 2's
compliment) volume controls where the volumes for left and right
are in separate registers. Some future Cirrus devices will have
both volumes in the same register, as such add a new macro to
support this.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20220621102041.1713504-4-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'include/sound/soc.h')
-rw-r--r-- | include/sound/soc.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/include/sound/soc.h b/include/sound/soc.h index 8909cc7d311e..76ee3c2b8b56 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -136,6 +136,18 @@ .put = snd_soc_put_volsw, \ .private_value = SOC_DOUBLE_VALUE(reg, shift_left, shift_right, \ max, invert, 0) } +#define SOC_DOUBLE_SX_TLV(xname, xreg, shift_left, shift_right, xmin, xmax, tlv_array) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ + .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ + SNDRV_CTL_ELEM_ACCESS_READWRITE, \ + .tlv.p = (tlv_array), \ + .info = snd_soc_info_volsw_sx, \ + .get = snd_soc_get_volsw_sx, \ + .put = snd_soc_put_volsw_sx, \ + .private_value = (unsigned long)&(struct soc_mixer_control) \ + {.reg = xreg, .rreg = xreg, \ + .shift = shift_left, .rshift = shift_right, \ + .max = xmax, .min = xmin} } #define SOC_DOUBLE_R_TLV(xname, reg_left, reg_right, xshift, xmax, xinvert, tlv_array) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ |