Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ASoC: Tidy up SOC_DOUBLE_* and SOC_SINGLE_* helpers

Re-implement SOC_DOUBLE_VALUE() in terms of SOC_DOUBLE_S_VALUE().
SOC_DOUBLE_S_VALUE() already had a minimum value so add this to
SOC_DOUBLE_VALUE as well, this allows replacement of several hard coded
value entries. Likewise update SOC_SINGLE_VALUE to match, which allows
replacement of even more hard coded values.

Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://patch.msgid.link/20250304140500.976127-14-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Charles Keepax and committed by
Mark Brown
6db63090 2cb6290a

+26 -43
+2 -2
include/sound/soc-dapm.h
··· 356 356 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 357 357 .info = snd_soc_info_volsw, \ 358 358 .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \ 359 - .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert, 1) } 359 + .private_value = SOC_SINGLE_VALUE(reg, shift, 0, max, invert, 1) } 360 360 #define SOC_DAPM_SINGLE_TLV_AUTODISABLE(xname, reg, shift, max, invert, tlv_array) \ 361 361 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 362 362 .info = snd_soc_info_volsw, \ 363 363 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | SNDRV_CTL_ELEM_ACCESS_READWRITE,\ 364 364 .tlv.p = (tlv_array), \ 365 365 .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \ 366 - .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert, 1) } 366 + .private_value = SOC_SINGLE_VALUE(reg, shift, 0, max, invert, 1) } 367 367 #define SOC_DAPM_PIN_SWITCH(xname) \ 368 368 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname " Switch", \ 369 369 .info = snd_soc_dapm_info_pin_switch, \
+24 -41
include/sound/soc.h
··· 39 39 /* 40 40 * Convenience kcontrol builders 41 41 */ 42 - #define SOC_DOUBLE_VALUE(xreg, shift_left, shift_right, xmax, xinvert, xautodisable) \ 43 - ((unsigned long)&(struct soc_mixer_control) \ 44 - {.reg = xreg, .rreg = xreg, .shift = shift_left, \ 45 - .rshift = shift_right, .max = xmax, \ 46 - .invert = xinvert, .autodisable = xautodisable}) 47 - #define SOC_DOUBLE_S_VALUE(xreg, shift_left, shift_right, xmin, xmax, xsign_bit, xinvert, xautodisable) \ 42 + #define SOC_DOUBLE_S_VALUE(xreg, shift_left, shift_right, xmin, xmax, xsign_bit, \ 43 + xinvert, xautodisable) \ 48 44 ((unsigned long)&(struct soc_mixer_control) \ 49 45 {.reg = xreg, .rreg = xreg, .shift = shift_left, \ 50 46 .rshift = shift_right, .min = xmin, .max = xmax, \ 51 47 .sign_bit = xsign_bit, .invert = xinvert, .autodisable = xautodisable}) 52 - #define SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert, xautodisable) \ 53 - SOC_DOUBLE_VALUE(xreg, xshift, xshift, xmax, xinvert, xautodisable) 48 + #define SOC_DOUBLE_VALUE(xreg, shift_left, shift_right, xmin, xmax, xinvert, xautodisable) \ 49 + SOC_DOUBLE_S_VALUE(xreg, shift_left, shift_right, xmin, xmax, 0, xinvert, \ 50 + xautodisable) 51 + #define SOC_SINGLE_VALUE(xreg, xshift, xmin, xmax, xinvert, xautodisable) \ 52 + SOC_DOUBLE_VALUE(xreg, xshift, xshift, xmin, xmax, xinvert, xautodisable) 54 53 #define SOC_DOUBLE_R_S_VALUE(xlreg, xrreg, xshift, xmin, xmax, xsign_bit, xinvert) \ 55 54 ((unsigned long)&(struct soc_mixer_control) \ 56 55 {.reg = xlreg, .rreg = xrreg, .shift = xshift, .rshift = xshift, \ ··· 62 63 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 63 64 .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\ 64 65 .put = snd_soc_put_volsw, \ 65 - .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert, 0) } 66 + .private_value = SOC_SINGLE_VALUE(reg, shift, 0, max, invert, 0) } 66 67 #define SOC_SINGLE_RANGE(xname, xreg, xshift, xmin, xmax, xinvert) \ 67 68 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ 68 69 .info = snd_soc_info_volsw_range, .get = snd_soc_get_volsw_range, \ 69 70 .put = snd_soc_put_volsw_range, \ 70 - .private_value = (unsigned long)&(struct soc_mixer_control) \ 71 - {.reg = xreg, .rreg = xreg, .shift = xshift, \ 72 - .rshift = xshift, .min = xmin, .max = xmax, \ 73 - .invert = xinvert} } 71 + .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmin, xmax, xinvert, 0) } 74 72 #define SOC_SINGLE_TLV(xname, reg, shift, max, invert, tlv_array) \ 75 73 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 76 74 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ ··· 75 79 .tlv.p = (tlv_array), \ 76 80 .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\ 77 81 .put = snd_soc_put_volsw, \ 78 - .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert, 0) } 82 + .private_value = SOC_SINGLE_VALUE(reg, shift, 0, max, invert, 0) } 79 83 #define SOC_SINGLE_SX_TLV(xname, xreg, xshift, xmin, xmax, tlv_array) \ 80 84 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 81 85 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ ··· 84 88 .info = snd_soc_info_volsw_sx, \ 85 89 .get = snd_soc_get_volsw_sx,\ 86 90 .put = snd_soc_put_volsw_sx, \ 87 - .private_value = (unsigned long)&(struct soc_mixer_control) \ 88 - {.reg = xreg, .rreg = xreg, \ 89 - .shift = xshift, .rshift = xshift, \ 90 - .max = xmax, .min = xmin} } 91 + .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmin, xmax, 0, 0) } 91 92 #define SOC_SINGLE_RANGE_TLV(xname, xreg, xshift, xmin, xmax, xinvert, tlv_array) \ 92 93 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ 93 94 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ ··· 92 99 .tlv.p = (tlv_array), \ 93 100 .info = snd_soc_info_volsw_range, \ 94 101 .get = snd_soc_get_volsw_range, .put = snd_soc_put_volsw_range, \ 95 - .private_value = (unsigned long)&(struct soc_mixer_control) \ 96 - {.reg = xreg, .rreg = xreg, .shift = xshift, \ 97 - .rshift = xshift, .min = xmin, .max = xmax, \ 98 - .invert = xinvert} } 102 + .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmin, xmax, xinvert, 0) } 99 103 #define SOC_DOUBLE(xname, reg, shift_left, shift_right, max, invert) \ 100 104 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ 101 105 .info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \ 102 106 .put = snd_soc_put_volsw, \ 103 107 .private_value = SOC_DOUBLE_VALUE(reg, shift_left, shift_right, \ 104 - max, invert, 0) } 108 + 0, max, invert, 0) } 105 109 #define SOC_DOUBLE_STS(xname, reg, shift_left, shift_right, max, invert) \ 106 110 { \ 107 111 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ ··· 106 116 .access = SNDRV_CTL_ELEM_ACCESS_READ | \ 107 117 SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ 108 118 .private_value = SOC_DOUBLE_VALUE(reg, shift_left, shift_right, \ 109 - max, invert, 0) } 119 + 0, max, invert, 0) } 110 120 #define SOC_DOUBLE_R(xname, reg_left, reg_right, xshift, xmax, xinvert) \ 111 121 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ 112 122 .info = snd_soc_info_volsw, \ ··· 128 138 .info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \ 129 139 .put = snd_soc_put_volsw, \ 130 140 .private_value = SOC_DOUBLE_VALUE(reg, shift_left, shift_right, \ 131 - max, invert, 0) } 141 + 0, max, invert, 0) } 132 142 #define SOC_DOUBLE_SX_TLV(xname, xreg, shift_left, shift_right, xmin, xmax, tlv_array) \ 133 143 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ 134 144 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ ··· 137 147 .info = snd_soc_info_volsw_sx, \ 138 148 .get = snd_soc_get_volsw_sx, \ 139 149 .put = snd_soc_put_volsw_sx, \ 140 - .private_value = (unsigned long)&(struct soc_mixer_control) \ 141 - {.reg = xreg, .rreg = xreg, \ 142 - .shift = shift_left, .rshift = shift_right, \ 143 - .max = xmax, .min = xmin} } 150 + .private_value = SOC_DOUBLE_VALUE(xreg, shift_left, shift_right, \ 151 + xmin, xmax, 0, 0) } 144 152 #define SOC_DOUBLE_RANGE_TLV(xname, xreg, xshift_left, xshift_right, xmin, xmax, \ 145 153 xinvert, tlv_array) \ 146 154 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ ··· 147 159 .tlv.p = (tlv_array), \ 148 160 .info = snd_soc_info_volsw, \ 149 161 .get = snd_soc_get_volsw, .put = snd_soc_put_volsw, \ 150 - .private_value = (unsigned long)&(struct soc_mixer_control) \ 151 - {.reg = xreg, .rreg = xreg, \ 152 - .shift = xshift_left, .rshift = xshift_right, \ 153 - .min = xmin, .max = xmax, .invert = xinvert} } 162 + .private_value = SOC_DOUBLE_VALUE(xreg, xshift_left, xshift_right, \ 163 + xmin, xmax, xinvert, 0) } 154 164 #define SOC_DOUBLE_R_TLV(xname, reg_left, reg_right, xshift, xmax, xinvert, tlv_array) \ 155 165 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ 156 166 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ ··· 236 250 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 237 251 .info = snd_soc_info_volsw, \ 238 252 .get = xhandler_get, .put = xhandler_put, \ 239 - .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert, 0) } 253 + .private_value = SOC_SINGLE_VALUE(xreg, xshift, 0, xmax, xinvert, 0) } 240 254 #define SOC_DOUBLE_EXT(xname, reg, shift_left, shift_right, max, invert,\ 241 255 xhandler_get, xhandler_put) \ 242 256 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ 243 257 .info = snd_soc_info_volsw, \ 244 258 .get = xhandler_get, .put = xhandler_put, \ 245 259 .private_value = \ 246 - SOC_DOUBLE_VALUE(reg, shift_left, shift_right, max, invert, 0) } 260 + SOC_DOUBLE_VALUE(reg, shift_left, shift_right, 0, max, invert, 0) } 247 261 #define SOC_DOUBLE_R_EXT(xname, reg_left, reg_right, xshift, xmax, xinvert,\ 248 262 xhandler_get, xhandler_put) \ 249 263 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ ··· 259 273 .tlv.p = (tlv_array), \ 260 274 .info = snd_soc_info_volsw, \ 261 275 .get = xhandler_get, .put = xhandler_put, \ 262 - .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert, 0) } 276 + .private_value = SOC_SINGLE_VALUE(xreg, xshift, 0, xmax, xinvert, 0) } 263 277 #define SOC_SINGLE_RANGE_EXT_TLV(xname, xreg, xshift, xmin, xmax, xinvert, \ 264 278 xhandler_get, xhandler_put, tlv_array) \ 265 279 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ ··· 268 282 .tlv.p = (tlv_array), \ 269 283 .info = snd_soc_info_volsw_range, \ 270 284 .get = xhandler_get, .put = xhandler_put, \ 271 - .private_value = (unsigned long)&(struct soc_mixer_control) \ 272 - {.reg = xreg, .rreg = xreg, .shift = xshift, \ 273 - .rshift = xshift, .min = xmin, .max = xmax, \ 274 - .invert = xinvert} } 285 + .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmin, xmax, xinvert, 0) } 275 286 #define SOC_DOUBLE_EXT_TLV(xname, xreg, shift_left, shift_right, xmax, xinvert,\ 276 287 xhandler_get, xhandler_put, tlv_array) \ 277 288 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ ··· 278 295 .info = snd_soc_info_volsw, \ 279 296 .get = xhandler_get, .put = xhandler_put, \ 280 297 .private_value = SOC_DOUBLE_VALUE(xreg, shift_left, shift_right, \ 281 - xmax, xinvert, 0) } 298 + 0, xmax, xinvert, 0) } 282 299 #define SOC_DOUBLE_R_EXT_TLV(xname, reg_left, reg_right, xshift, xmax, xinvert,\ 283 300 xhandler_get, xhandler_put, tlv_array) \ 284 301 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \