RE: [EXTERNAL] Re: [PATCH v2 1/4] ASoc: PCM6240: Create PCM6240 Family driver code

From: Ding, Shenghao
Date: Mon Jan 29 2024 - 00:06:18 EST




> -----Original Message-----
> From: Mark Brown <broonie@xxxxxxxxxx>
> Sent: Friday, January 26, 2024 10:33 PM
> To: Ding, Shenghao <shenghao-ding@xxxxxx>
> Cc: conor+dt@xxxxxxxxxx; krzysztof.kozlowski@xxxxxxxxxx;
> robh+dt@xxxxxxxxxx; andriy.shevchenko@xxxxxxxxxxxxxxx; Lu, Kevin <kevin-
> lu@xxxxxx>; Xu, Baojun <baojun.xu@xxxxxx>; devicetree@xxxxxxxxxxxxxxx; P
> O, Vijeth <v-po@xxxxxx>; lgirdwood@xxxxxxxxx; perex@xxxxxxxx; pierre-
> louis.bossart@xxxxxxxxxxxxxxx; 13916275206@xxxxxxx; Chawla, Mohit
> <mohit.chawla@xxxxxx>; linux-sound@xxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx; liam.r.girdwood@xxxxxxxxx; soyer@xxxxxx; Huang,
> Jonathan <jkhuang3@xxxxxx>; tiwai@xxxxxxx; Djuandi, Peter
> <pdjuandi@xxxxxx>; McPherson, Jeff <j-mcpherson@xxxxxx>; Navada
> Kanyana, Mukund <navada@xxxxxx>
> Subject: [EXTERNAL] Re: [PATCH v2 1/4] ASoc: PCM6240: Create PCM6240
> Family driver code
>
> On Fri, Jan 26, 2024 at 11:58:51AM +0800, Shenghao Ding wrote:
>
> This looks mostly good - I've got a few comments that are mainly stylistic or
> otherwise very minor, there's one issue with validation of profile IDs that
> does look like it's important to fix though.
.............................
>
> > + val = (val >> shift) & mask;
> > + val = (val > max) ? max : val;
> > + val = mc->invert ? max - val : val;
> > + ucontrol->value.integer.value[0] = val;
>
> There's the FIELD_GET() macro (and FIELD_SET() for writing values) - the core
> predates them and hence doesn't use them, we might want to update some
> time.
Hi, Mark. FIELD_GET seemed not suitable in this, because mask in not the const.
it will cause compile error.
>
> > +static int pcmdevice_codec_probe(struct snd_soc_component *codec) {
>
> > + ret = request_firmware_nowait(THIS_MODULE,
> FW_ACTION_UEVENT,
> > + pcm_dev->regbin_name, pcm_dev->dev, GFP_KERNEL,
> pcm_dev,
> > + pcmdev_regbin_ready);
> > + if (ret) {
> > + dev_err(pcm_dev->dev, "load %s error = %d\n",
> > + pcm_dev->regbin_name, ret);
> > + goto out;
> > + }
>
> It might be better to request the firmware in the I2C probe rather than in the
> ASoC level probe, that way there's more time for the firmware to be loaded
> before we actually need it. That does mean you can't register the controls
> immediately though so it may be more trouble than it's worth.

I once put request_firmware_nowait in i2c_probe, but it sometimes returned
error in some platforms. So my customer suggest that it would be moved into
the codec_probe. It seemed filesystem is not completely ready in some
platform during calling the i2c_probe.
>
> Similarly for the reset, if we reset as early as possible that seems better.

As to reset, it is also from my customers' suggestion. they found the issue that
i2c access error in i2c_probe in some platform. So they put it into codec_probe.