From: "Alexey Klimov" <alexey.klimov@linaro.org>
To: "Mark Brown" <broonie@kernel.org>
Cc: "Srinivas Kandagatla" <srini@kernel.org>,
"Liam Girdwood" <lgirdwood@gmail.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Stephen Boyd" <sboyd@kernel.org>, "Lee Jones" <lee@kernel.org>,
"Jaroslav Kysela" <perex@perex.cz>,
"Takashi Iwai" <tiwai@suse.com>, <linux-arm-msm@vger.kernel.org>,
<linux-sound@vger.kernel.org>, <devicetree@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
"Dmitry Baryshkov" <dmitry.baryshkov@oss.qualcomm.com>,
"Srinivas Kandagatla" <srinivas.kandagatla@oss.qualcomm.com>
Subject: Re: [PATCH 3/3] ASoC: codecs: add new pm4125 audio codec driver
Date: Tue, 01 Jul 2025 20:35:42 +0100 [thread overview]
Message-ID: <DB0YYV10UD2Q.M36VAZJOVE7V@linaro.org> (raw)
In-Reply-To: <aF01gRFjsKgy6j4V@finisterre.sirena.org.uk>
On Thu Jun 26, 2025 at 12:56 PM BST, Mark Brown wrote:
> On Thu, Jun 26, 2025 at 12:50:31AM +0100, Alexey Klimov wrote:
>
>> --- a/sound/soc/codecs/Kconfig
>> +++ b/sound/soc/codecs/Kconfig
>> @@ -297,6 +297,7 @@ config SND_SOC_ALL_CODECS
>> imply SND_SOC_WCD937X_SDW
>> imply SND_SOC_WCD938X_SDW
>> imply SND_SOC_WCD939X_SDW
>> + imply SND_SOC_PM4125_SDW
>> imply SND_SOC_LPASS_MACRO_COMMON
>> imply SND_SOC_LPASS_RX_MACRO
>> imply SND_SOC_LPASS_TX_MACRO
>
> Please keep this file sorted, there's obviously been some things missed
> but please don't make it worse.
>
>> +obj-$(CONFIG_SND_SOC_PM4125_SDW) += snd-soc-pm4125-sdw.o
>> +obj-$(CONFIG_SND_SOC_PM4125) += snd-soc-pm4125.o
>> +ifdef CONFIG_SND_SOC_PM4125_SDW
>> +# avoid link failure by forcing sdw code built-in when needed
>> +obj-$(CONFIG_SND_SOC_PM4125) += snd-soc-pm4125-sdw.o
>> +endif
>
> Other drivers sort this out in Kconfig, do as they do.
My bad, thanks for pointing it out. I'll change that.
>> +static int pm4125_micbias_control(struct snd_soc_component *component,
>> + int micb_num, int req, bool is_dapm)
>> +{
>> + return 0;
>> +}
>
> Why have this empty function which is only called from within the
> driver? At best it's making the callers look like they do something.
I tried to make a minimal working version that we're going to
update with more patches during next submission.
Right now there seems to be at least two approaches:
-- pull in everything and send it in one go. Srini said that it will
be much more difficult to review due to the volume of code;
-- provide few patches that iteratively update the initial one and
add more functionality. The similar way when wcd937x was posted.
I counted there 5 patches for wcd937x. We probably can do that with
this audio-codec. In that case I need to figure out the right way
to split it.
My main issue was MBHC part -- it is needed to avoid IRQ storm
from pdm watchdog interrupts but MBHC requires more things to be
added for its support, that's why there are some empty/placeholder
functions.
What do you think should be the right strategy here?
In theory I can remove MBHC and make much smaller driver but
it will suffer from IRQ storms with some kernel WARNINGs generated.
Or maybe I should remove watchdog interrupts from it as well.
>> +static irqreturn_t pm4125_wd_handle_irq(int irq, void *data)
>> +{
>> + return IRQ_HANDLED;
>> +}
>
> Why bother regisering for the interrupt at all if you're just going to
> ignore it?
This approach seems to be inherited from older wcd-family codec and
wcd939x.c (wcd939x_wd_handle_irq) provides this comment that I can copy
and adjust here like this:
/*
* HPHR/HPHL Watchdog interrupt threaded handler
*
* Watchdog interrupts are expected to be enabled when switching on the HPHL/R
* in order to make sure the interrupts are acked by the regmap_irq handler
* io allow PDM sync. We could leave those interrupts masked but we would
* not haveany valid way to enable/disable them without violating irq layers.
*
* The HPHR/HPHL Watchdog interrupts are handled by regmap_irq, so requesting
* a threaded handler is the safest way to be able to ack those interrupts
* without colliding with the regmap_irq setup.
*/
>> +#if defined(CONFIG_OF)
>> +static const struct of_device_id pm4125_of_match[] = {
>> + { .compatible = "qcom,pm4125-codec" },
>> + { }
>> +};
>> +MODULE_DEVICE_TABLE(of, pm4125_of_match);
>> +#endif
>
> Why does this compatible exist? If the driver is instantiated from a
> as a Linux software contruct it shouldn't appear in the DT.
Could you please elaborate a bit more? Should it be instantiated
as an MFD device or platform device?
As far as I understood we need references to soundwire child nodes
of the codec (which are in DT) hence this one is described in the DT.
>> +const u8 pm4125_reg_access_digital[
>> + PM4125_REG(PM4125_DIGITAL_REGISTERS_MAX_SIZE)] = {
>> + [PM4125_REG(PM4125_DIG_SWR_CHIP_ID0)] = RD_REG,
>> + [PM4125_REG(PM4125_DIG_SWR_CHIP_ID1)] = RD_REG,
>> + [PM4125_REG(PM4125_DIG_SWR_CHIP_ID2)] = RD_REG,
>
> Data tables like this shouldn't be in headers, they should be in C
> files. At worst you might end up with duplicate copies in the object
> code.
Thanks, I pull in a change/patch that fixes-reworks this.
Thank you,
Alexey Klimov
next prev parent reply other threads:[~2025-07-01 19:35 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-25 23:50 [PATCH 0/3] Add PM4125 audio codec driver Alexey Klimov
2025-06-25 23:50 ` [PATCH 1/3] dt-bindings: sound: add bindings for pm4125 audio codec Alexey Klimov
2025-06-26 1:30 ` Rob Herring (Arm)
2025-06-26 11:08 ` Alexey Klimov
2025-06-26 6:13 ` Krzysztof Kozlowski
2025-06-28 16:41 ` Alexey Klimov
2025-06-29 14:59 ` Dmitry Baryshkov
2025-06-30 8:21 ` Krzysztof Kozlowski
2025-07-01 23:30 ` Alexey Klimov
2025-07-02 6:22 ` Krzysztof Kozlowski
2025-06-25 23:50 ` [PATCH 2/3] dt-bindings: mfd: qcom,spmi-pmic: add " Alexey Klimov
2025-06-26 8:48 ` Krzysztof Kozlowski
2025-06-28 16:42 ` Alexey Klimov
2025-06-29 15:00 ` Dmitry Baryshkov
2025-06-30 8:18 ` Krzysztof Kozlowski
2025-06-25 23:50 ` [PATCH 3/3] ASoC: codecs: add new pm4125 audio codec driver Alexey Klimov
2025-06-26 6:19 ` Krzysztof Kozlowski
2025-07-10 15:37 ` Alexey Klimov
2025-06-26 11:56 ` Mark Brown
2025-07-01 19:35 ` Alexey Klimov [this message]
2025-07-01 21:04 ` Mark Brown
2025-07-10 14:45 ` Alexey Klimov
2025-06-28 20:24 ` Srinivas Kandagatla
2025-07-02 1:43 ` Alexey Klimov
2025-07-03 12:50 ` Srinivas Kandagatla
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=DB0YYV10UD2Q.M36VAZJOVE7V@linaro.org \
--to=alexey.klimov@linaro.org \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=krzk+dt@kernel.org \
--cc=lee@kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=robh@kernel.org \
--cc=sboyd@kernel.org \
--cc=srini@kernel.org \
--cc=srinivas.kandagatla@oss.qualcomm.com \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).