]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: wm_adsp: Convert '/' to '-' when normalizing firmware filenames
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Tue, 10 Mar 2026 14:18:14 +0000 (14:18 +0000)
committerMark Brown <broonie@kernel.org>
Tue, 10 Mar 2026 14:52:54 +0000 (14:52 +0000)
Don't preserve '/' in firmware filename fields - convert it to '-' like
other punctuation characters.

The code originally normalized the entire string, including the
directory prefix. To prevent breaking the directory it had to preserve
'/' characters in the name, but this meant that the system name and ALSA
prefix must not contain those characters.

It's trivial to skip the directory name prefix and start the
normalization after it, and that means the normalization does not need
to make a special case for '/'.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://patch.msgid.link/20260310141817.1871794-8-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/wm_adsp.c

index 9f39db680e07bf28a3f4e4e122b32ca36137868b..74c503fc3088c6edf6975799c4f7094ff970716c 100644 (file)
@@ -776,16 +776,15 @@ static int wm_adsp_request_firmware_file(struct wm_adsp *dsp,
                return -ENOMEM;
 
        /*
-        * Make sure that filename is lower-case and any non alpha-numeric
-        * characters except full stop and forward slash are replaced with
-        * hyphens.
+        * Make sure that filename after dir is lower-case and any non-alpha-numeric
+        * characters except full-stop are replaced with hyphens.
         */
-       s = *filename;
+       s = *filename + strlen(dir);
        while (*s) {
                c = *s;
                if (isalnum(c))
                        *s = tolower(c);
-               else if ((c != '.') && (c != '/'))
+               else if (c != '.')
                        *s = '-';
                s++;
        }