[PATCH for-5.8] ASoC: amd: doesn't print error log if the return value is EPROBE_DEFER
The machine driver module and codec driver module don't have dependency, it is possible that the machine driver is loaded ahead of the codec driver, then the register_card() will fail and return EPROBE_DEFER, in this case the driver should not print error log since this is not a real failure.
For example, I saw this log from a machine with amd renoir audio: acp_pdm_mach acp_pdm_mach.0: snd_soc_register_card(acp) failed: -517
After applying this patch, there is no error log to confuse users and audio works after the codec driver is loaded.
Signed-off-by: Hui Wang hui.wang@canonical.com --- sound/soc/amd/acp-da7219-max98357a.c | 3 ++- sound/soc/amd/acp-rt5645.c | 3 ++- sound/soc/amd/acp3x-rt5682-max9836.c | 3 ++- sound/soc/amd/renoir/acp3x-rn.c | 7 ++++--- 4 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/sound/soc/amd/acp-da7219-max98357a.c b/sound/soc/amd/acp-da7219-max98357a.c index 9414d7269c4f..a7e755a563e8 100644 --- a/sound/soc/amd/acp-da7219-max98357a.c +++ b/sound/soc/amd/acp-da7219-max98357a.c @@ -440,7 +440,8 @@ static int cz_probe(struct platform_device *pdev) snd_soc_card_set_drvdata(card, machine); ret = devm_snd_soc_register_card(&pdev->dev, &cz_card); if (ret) { - dev_err(&pdev->dev, + if (ret != -EPROBE_DEFER) + dev_err(&pdev->dev, "devm_snd_soc_register_card(%s) failed: %d\n", cz_card.name, ret); return ret; diff --git a/sound/soc/amd/acp-rt5645.c b/sound/soc/amd/acp-rt5645.c index 73b31f88a6b5..cffd24eae3a3 100644 --- a/sound/soc/amd/acp-rt5645.c +++ b/sound/soc/amd/acp-rt5645.c @@ -174,7 +174,8 @@ static int cz_probe(struct platform_device *pdev) platform_set_drvdata(pdev, card); ret = devm_snd_soc_register_card(&pdev->dev, &cz_card); if (ret) { - dev_err(&pdev->dev, + if (ret != -EPROBE_DEFER) + dev_err(&pdev->dev, "devm_snd_soc_register_card(%s) failed: %d\n", cz_card.name, ret); return ret; diff --git a/sound/soc/amd/acp3x-rt5682-max9836.c b/sound/soc/amd/acp3x-rt5682-max9836.c index e499c00e0c66..16bcaad9ead2 100644 --- a/sound/soc/amd/acp3x-rt5682-max9836.c +++ b/sound/soc/amd/acp3x-rt5682-max9836.c @@ -346,7 +346,8 @@ static int acp3x_probe(struct platform_device *pdev)
ret = devm_snd_soc_register_card(&pdev->dev, &acp3x_card); if (ret) { - dev_err(&pdev->dev, + if (ret != -EPROBE_DEFER) + dev_err(&pdev->dev, "devm_snd_soc_register_card(%s) failed: %d\n", acp3x_card.name, ret); return ret; diff --git a/sound/soc/amd/renoir/acp3x-rn.c b/sound/soc/amd/renoir/acp3x-rn.c index 306134b89a82..95b616fcad30 100644 --- a/sound/soc/amd/renoir/acp3x-rn.c +++ b/sound/soc/amd/renoir/acp3x-rn.c @@ -54,9 +54,10 @@ static int acp_probe(struct platform_device *pdev) snd_soc_card_set_drvdata(card, machine); ret = devm_snd_soc_register_card(&pdev->dev, card); if (ret) { - dev_err(&pdev->dev, - "snd_soc_register_card(%s) failed: %d\n", - acp_card.name, ret); + if (ret != -EPROBE_DEFER) + dev_err(&pdev->dev, + "snd_soc_register_card(%s) failed: %d\n", + acp_card.name, ret); return ret; } return 0;
On Thu, May 21, 2020 at 10:44:34PM +0800, Hui Wang wrote:
The machine driver module and codec driver module don't have dependency, it is possible that the machine driver is loaded ahead of the codec driver, then the register_card() will fail and return EPROBE_DEFER, in this case the driver should not print error log since this is not a real failure.
This isn't helpful to people who are trying to figure out why the driver isn't loading - if we silently fail then the user will struggle to determine what the problem that causes their driver to fail to bind is.
On 2020/5/21 下午11:43, Mark Brown wrote:
On Thu, May 21, 2020 at 10:44:34PM +0800, Hui Wang wrote:
The machine driver module and codec driver module don't have dependency, it is possible that the machine driver is loaded ahead of the codec driver, then the register_card() will fail and return EPROBE_DEFER, in this case the driver should not print error log since this is not a real failure.
This isn't helpful to people who are trying to figure out why the driver isn't loading - if we silently fail then the user will struggle to determine what the problem that causes their driver to fail to bind is.
Yes, you are right. If the codec module is not loaded, the machine driver will fail silently.
There are many modules in the kernel, no other modules print the -517 error or warning, so if this driver prints it, it really confuses users (according to my test, the audio works but the kernel prints this error with 100% chance, and within ubuntu, the error message is read color, it is very easily caught by users).
How about we put off the registering the machine device, this can guarantee everything is ready when machine driver's probe is called. I will send a V2 according to this idea.
Thanks,
Hui.
On Fri, May 22, 2020 at 03:47:22PM +0800, Hui Wang wrote:
There are many modules in the kernel, no other modules print the -517 error
This is quite simply not true.
or warning, so if this driver prints it, it really confuses users (according to my test, the audio works but the kernel prints this error with 100% chance, and within ubuntu, the error message is read color, it is very easily caught by users).
How about we put off the registering the machine device, this can guarantee everything is ready when machine driver's probe is called. I will send a V2 according to this idea.
You could also lower the severity of the message when deferring.
participants (2)
-
Hui Wang
-
Mark Brown