On 3. 6. 2022, at 13:25, Mark Brown broonie@kernel.org wrote:
Currently snd_soc_info_volsw() will set a platform_max based on the limit the control has if one is not already set. This isn't really great, we shouldn't be modifying the passed in driver data especially in a path like this which may not ever be executed or where we may execute other callbacks before this one. Instead make this function leave the data unchanged, and clarify things a bit by referring to max rather than platform_max within the function. platform_max is now applied as a limit after working out the natural maximum value for the control.
This means that platform_max is no longer treated as a direct register value for controls were min is non-zero. The put() callbacks already validate on this basis, and there do not appear to be any in tree users that would be affected.
At least ‘put_volsw' seem to validate on the other conflicting interpretation of platform_max [as was introduced in commit 9bdd10d57a88 (“ASoC: ops: Shift tested values in snd_soc_put_volsw() by +min”)].
Also, the soc.h definitions of SOC_SINGLE_*/SOC_DOUBLE_* set platform_max to the register maximum, again interpreting platform_max the other way.
Signed-off-by: Mark Brown broonie@kernel.org
This commit breaks controls with non-zero minimum.
Best, Martin