2023-03-29 13:09:43

by Jianhua Lu

[permalink] [raw]
Subject: [PATCH] Asoc: wm_adsp: Add support for loading firmware with prefix name

For platform using fdt, system_name is NULL, it doesn't provide
a way to load firmware with prefix name, so add it.

Signed-off-by: Jianhua Lu <[email protected]>
---
sound/soc/codecs/wm_adsp.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)

diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
index 216120b68b64..17481e42d440 100644
--- a/sound/soc/codecs/wm_adsp.c
+++ b/sound/soc/codecs/wm_adsp.c
@@ -760,6 +760,10 @@ static int wm_adsp_request_firmware_file(struct wm_adsp *dsp,
*filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s-%s.%s", dir, dsp->part,
dsp->fwf_name, wm_adsp_fw[dsp->fw].file, system_name,
filetype);
+ else if (asoc_component_prefix)
+ *filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s-%s.%s", dir, dsp->part,
+ dsp->fwf_name, wm_adsp_fw[dsp->fw].file, asoc_component_prefix,
+ filetype);
else
*filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s.%s", dir, dsp->part, dsp->fwf_name,
wm_adsp_fw[dsp->fw].file, filetype);
@@ -831,6 +835,16 @@ static int wm_adsp_request_firmware_files(struct wm_adsp *dsp,
NULL, "bin");
return 0;
}
+ } else if (asoc_component_prefix) {
+ if (!wm_adsp_request_firmware_file(dsp, wmfw_firmware, wmfw_filename,
+ cirrus_dir, NULL,
+ asoc_component_prefix, "wmfw")) {
+ adsp_dbg(dsp, "Found '%s'\n", *wmfw_filename);
+ wm_adsp_request_firmware_file(dsp, coeff_firmware, coeff_filename,
+ cirrus_dir, NULL,
+ asoc_component_prefix, "bin");
+ return 0;
+ }
}

if (!wm_adsp_request_firmware_file(dsp, wmfw_firmware, wmfw_filename,
--
2.39.2


2023-03-29 14:12:44

by Charles Keepax

[permalink] [raw]
Subject: Re: [PATCH] Asoc: wm_adsp: Add support for loading firmware with prefix name

On Wed, Mar 29, 2023 at 09:05:25PM +0800, Jianhua Lu wrote:
> For platform using fdt, system_name is NULL, it doesn't provide
> a way to load firmware with prefix name, so add it.
>
> Signed-off-by: Jianhua Lu <[email protected]>
> ---
> sound/soc/codecs/wm_adsp.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
> index 216120b68b64..17481e42d440 100644
> --- a/sound/soc/codecs/wm_adsp.c
> +++ b/sound/soc/codecs/wm_adsp.c
> @@ -760,6 +760,10 @@ static int wm_adsp_request_firmware_file(struct wm_adsp *dsp,
> *filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s-%s.%s", dir, dsp->part,
> dsp->fwf_name, wm_adsp_fw[dsp->fw].file, system_name,
> filetype);
> + else if (asoc_component_prefix)
> + *filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s-%s.%s", dir, dsp->part,
> + dsp->fwf_name, wm_adsp_fw[dsp->fw].file, asoc_component_prefix,
> + filetype);
> else
> *filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s.%s", dir, dsp->part, dsp->fwf_name,
> wm_adsp_fw[dsp->fw].file, filetype);
> @@ -831,6 +835,16 @@ static int wm_adsp_request_firmware_files(struct wm_adsp *dsp,
> NULL, "bin");
> return 0;
> }
> + } else if (asoc_component_prefix) {
> + if (!wm_adsp_request_firmware_file(dsp, wmfw_firmware, wmfw_filename,
> + cirrus_dir, NULL,
> + asoc_component_prefix, "wmfw")) {
> + adsp_dbg(dsp, "Found '%s'\n", *wmfw_filename);
> + wm_adsp_request_firmware_file(dsp, coeff_firmware, coeff_filename,
> + cirrus_dir, NULL,
> + asoc_component_prefix, "bin");
> + return 0;
> + }
> }

This direction seems slightly problematic, especially in the
context of amps (which I presume this relates to, please let know
if that is wrong). It would probably be better to be fixing
things up such that the amp in question sets system_name when
registered through DT. Generally speaking the idea is the amp
tuning is going to be specific to the enclosure/speaker involved,
so a generic tuning for say left amps doesn't really make a lot
of sense.

Thanks,
Charles

2023-03-29 14:44:26

by Jianhua Lu

[permalink] [raw]
Subject: Re: [PATCH] Asoc: wm_adsp: Add support for loading firmware with prefix name

On Wed, Mar 29, 2023 at 02:05:24PM +0000, Charles Keepax wrote:
>
> This direction seems slightly problematic, especially in the
> context of amps (which I presume this relates to, please let know
> if that is wrong). It would probably be better to be fixing
> things up such that the amp in question sets system_name when
> registered through DT. Generally speaking the idea is the amp
I also consider setting system_name when registered by DT, but I don't
known setting what name to it. Card name or something else?
> tuning is going to be specific to the enclosure/speaker involved,
> so a generic tuning for say left amps doesn't really make a lot
> of sense.
I don't known about amp tuning much, my need just is loading firmware for
more than 1 speaker amp at the platform using fdt.

One of the both way is good to me.
>
> Thanks,
> Charles

2023-03-29 15:36:21

by Richard Fitzgerald

[permalink] [raw]
Subject: Re: [PATCH] Asoc: wm_adsp: Add support for loading firmware with prefix name

On 29/3/23 14:05, Jianhua Lu wrote:
> For platform using fdt, system_name is NULL, it doesn't provide
> a way to load firmware with prefix name, so add it.

This is intended behavior.

To load per-amp tuning you must know the function of each amp.
You only know that if you know what hardware platform you are running
on.

So if system_name is NULL it should fall back to generic firmware.

>
> Signed-off-by: Jianhua Lu <[email protected]>
> ---
> sound/soc/codecs/wm_adsp.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
> index 216120b68b64..17481e42d440 100644
> --- a/sound/soc/codecs/wm_adsp.c
> +++ b/sound/soc/codecs/wm_adsp.c
> @@ -760,6 +760,10 @@ static int wm_adsp_request_firmware_file(struct wm_adsp *dsp,
> *filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s-%s.%s", dir, dsp->part,
> dsp->fwf_name, wm_adsp_fw[dsp->fw].file, system_name,
> filetype);
> + else if (asoc_component_prefix)
> + *filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s-%s.%s", dir, dsp->part,
> + dsp->fwf_name, wm_adsp_fw[dsp->fw].file, asoc_component_prefix,
> + filetype);
> else
> *filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s.%s", dir, dsp->part, dsp->fwf_name,
> wm_adsp_fw[dsp->fw].file, filetype);
> @@ -831,6 +835,16 @@ static int wm_adsp_request_firmware_files(struct wm_adsp *dsp,
> NULL, "bin");
> return 0;
> }
> + } else if (asoc_component_prefix) {
> + if (!wm_adsp_request_firmware_file(dsp, wmfw_firmware, wmfw_filename,
> + cirrus_dir, NULL,
> + asoc_component_prefix, "wmfw")) {
> + adsp_dbg(dsp, "Found '%s'\n", *wmfw_filename);
> + wm_adsp_request_firmware_file(dsp, coeff_firmware, coeff_filename,
> + cirrus_dir, NULL,
> + asoc_component_prefix, "bin");
> + return 0;
> + }
> }
>
> if (!wm_adsp_request_firmware_file(dsp, wmfw_firmware, wmfw_filename,

2023-03-29 15:38:57

by Richard Fitzgerald

[permalink] [raw]
Subject: Re: [PATCH] Asoc: wm_adsp: Add support for loading firmware with prefix name

On 29/3/23 15:37, Jianhua Lu wrote:
> On Wed, Mar 29, 2023 at 02:05:24PM +0000, Charles Keepax wrote:
>>
>> This direction seems slightly problematic, especially in the
>> context of amps (which I presume this relates to, please let know
>> if that is wrong). It would probably be better to be fixing
>> things up such that the amp in question sets system_name when
>> registered through DT. Generally speaking the idea is the amp
> I also consider setting system_name when registered by DT, but I don't
> known setting what name to it. Card name or something else?

It just has to be a unique string.
The normal process is that Cirrus would release the firmware with the
correct name for the platform, so the system-name matches the string in
those release firmware files.

Do you have an official firmware for your platform?

>> tuning is going to be specific to the enclosure/speaker involved,
>> so a generic tuning for say left amps doesn't really make a lot
>> of sense.
> I don't known about amp tuning much, my need just is loading firmware for
> more than 1 speaker amp at the platform using fdt.
>
> One of the both way is good to me.
>>
>> Thanks,
>> Charles

2023-03-29 15:51:06

by Jianhua Lu

[permalink] [raw]
Subject: Re: [PATCH] Asoc: wm_adsp: Add support for loading firmware with prefix name

On Wed, Mar 29, 2023 at 04:33:08PM +0100, Richard Fitzgerald wrote:
> On 29/3/23 14:05, Jianhua Lu wrote:
> > For platform using fdt, system_name is NULL, it doesn't provide
> > a way to load firmware with prefix name, so add it.
>
> This is intended behavior.
>
> To load per-amp tuning you must know the function of each amp.
> You only know that if you know what hardware platform you are running
> on.
>
> So if system_name is NULL it should fall back to generic firmware.
Make sense

2023-03-29 15:53:41

by Jianhua Lu

[permalink] [raw]
Subject: Re: [PATCH] Asoc: wm_adsp: Add support for loading firmware with prefix name

On Wed, Mar 29, 2023 at 04:38:07PM +0100, Richard Fitzgerald wrote:
> On 29/3/23 15:37, Jianhua Lu wrote:
> > On Wed, Mar 29, 2023 at 02:05:24PM +0000, Charles Keepax wrote:
> >>
> >> This direction seems slightly problematic, especially in the
> >> context of amps (which I presume this relates to, please let know
> >> if that is wrong). It would probably be better to be fixing
> >> things up such that the amp in question sets system_name when
> >> registered through DT. Generally speaking the idea is the amp
> > I also consider setting system_name when registered by DT, but I don't
> > known setting what name to it. Card name or something else?
>
> It just has to be a unique string.
> The normal process is that Cirrus would release the firmware with the
> correct name for the platform, so the system-name matches the string in
> those release firmware files.
>
> Do you have an official firmware for your platform?
My device is Xiaomi Pad 5 Pro, vendor releases wmfw firmware with
default name, coeff firmware with prefix name(TL, TR and BL, BR....),
don't contain a unique string in firmware name.
>
> >>
> >> Thanks,
> >> Charles