Message ID | 20220311163258.175627-1-ckeepax@opensource.cirrus.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ASoC: core: Add new SOC_DOUBLE_SX_TLV macro | expand |
On Fri, Mar 11, 2022 at 04:32:58PM +0000, Charles Keepax wrote: > 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. Have you tested the bounds checking on _SX controls with mixer-test?
On Fri, Mar 11, 2022 at 04:39:57PM +0000, Mark Brown wrote: > On Fri, Mar 11, 2022 at 04:32:58PM +0000, Charles Keepax wrote: > > 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. > > Have you tested the bounds checking on _SX controls with mixer-test? I have tested against some experimental code for a future CODEC, but this is a good point. Let me run some tests through mixer-test before we apply. Thanks, Charles
diff --git a/include/sound/soc.h b/include/sound/soc.h index 7a1650b303f14..5e187236c2ad6 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 |\
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> --- include/sound/soc.h | 12 ++++++++++++ 1 file changed, 12 insertions(+)