sound/hda/codecs/side-codecs/tas2781_hda_i2c.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
A bug reported by one of my customers that EFI name beginning with 0
instead of 1.
Fixes: 4fe238513407 ("ALSA: hda/tas2781: Move and unified the calibrated-data getting function for SPI and I2C into the tas2781_hda lib")
Signed-off-by: Shenghao Ding <shenghao-ding@ti.com>
---
v2:
- remove unrelated change
v1:
- Fix EFI name beginning with 1 instead of 0
- Add extra comments on EFI name for calibration
- Remove an extra space
---
sound/hda/codecs/side-codecs/tas2781_hda_i2c.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c
index ed7771ab9475..635cbd8820ac 100644
--- a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c
+++ b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c
@@ -340,7 +340,8 @@ static int tas2563_save_calibration(struct tas2781_hda *h)
data[offset] = i;
offset++;
for (j = 0; j < TASDEV_CALIB_N; ++j) {
- ret = snprintf(var8, sizeof(var8), vars[j], i);
+ /* EFI name for calibration started with 1, not 0 */
+ ret = snprintf(var8, sizeof(var8), vars[j], i + 1);
if (ret < 0 || ret >= sizeof(var8) - 1) {
dev_err(p->dev, "%s: Read %s failed\n",
@@ -349,7 +350,7 @@ static int tas2563_save_calibration(struct tas2781_hda *h)
}
/*
* Our variable names are ASCII by construction, but
- * EFI names are wide chars. Convert and zero-pad.
+ * EFI names are wide chars. Convert and zero-pad.
*/
memset(efi_name, 0, sizeof(efi_name));
for (k = 0; k < sizeof(var8) && var8[k]; k++)
--
2.43.0
Hi Shenghao, On Tue, 2025-08-26 at 17:41 +0800, Shenghao Ding wrote: > A bug reported by one of my customers that EFI name beginning with 0 > instead of 1. > > Fixes: 4fe238513407 ("ALSA: hda/tas2781: Move and unified the calibrated-data getting function for SPI and I2C into the tas2781_hda lib") > Signed-off-by: Shenghao Ding <shenghao-ding@ti.com> > > --- > v2: > - remove unrelated change > v1: > - Fix EFI name beginning with 1 instead of 0 > - Add extra comments on EFI name for calibration > - Remove an extra space > --- > sound/hda/codecs/side-codecs/tas2781_hda_i2c.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c > index ed7771ab9475..635cbd8820ac 100644 > --- a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c > +++ b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c > @@ -340,7 +340,8 @@ static int tas2563_save_calibration(struct tas2781_hda *h) > data[offset] = i; > offset++; > for (j = 0; j < TASDEV_CALIB_N; ++j) { > - ret = snprintf(var8, sizeof(var8), vars[j], i); > + /* EFI name for calibration started with 1, not 0 */ > + ret = snprintf(var8, sizeof(var8), vars[j], i + 1); > > if (ret < 0 || ret >= sizeof(var8) - 1) { > dev_err(p->dev, "%s: Read %s failed\n", > @@ -349,7 +350,7 @@ static int tas2563_save_calibration(struct tas2781_hda *h) > } > /* > * Our variable names are ASCII by construction, but > - * EFI names are wide chars. Convert and zero-pad. > + * EFI names are wide chars. Convert and zero-pad. > */ > memset(efi_name, 0, sizeof(efi_name)); > for (k = 0; k < sizeof(var8) && var8[k]; k++) In the tas2563_save_calibration() function the variables are read in the following order: R0, InvR0, R0_Low, Power, TLim. They are also included in cali_data in this order. But the tasdev_load_calibrated_data() function reads them from cali_data as R0, R0_Low, InvR0, Power, TLim. And this may be true for tas2781 as well. Could you check this also? Thanks, Gergo
Hi GK Long time no see. Thanks for pointing that out. I'm preparing a new patch to correct it. > -----Original Message----- > From: Gergo Koteles <soyer@irl.hu> > Sent: Wednesday, August 27, 2025 9:34 AM > To: Ding, Shenghao <shenghao-ding@ti.com>; tiwai@suse.de > Cc: broonie@kernel.org; andriy.shevchenko@linux.intel.com; > 13564923607@139.com; 13916275206@139.com; alsa-devel@alsa- > project.org; linux-kernel@vger.kernel.org; Xu, Baojun <baojun.xu@ti.com>; > Baojun.Xu@fpt.com; Ji, Jesse <jesse-ji@ti.com> > Subject: [EXTERNAL] Re: [PATCH v2] ALSA: hda/tas2781: Fix EFI name for > calibration beginning with 1 instead of 0 > > Hi Shenghao, On Tue, 2025-08-26 at 17: 41 +0800, Shenghao Ding wrote: > A > bug reported by one of my customers that EFI name beginning with 0 > instead > of 1. > > Fixes: 4fe238513407 ("ALSA: hda/tas2781: Move and unified the > calibrated-data ZjQcmQRYFpfptBannerStart This message was sent from > outside of Texas Instruments. > Do not click links or open attachments unless you recognize the source of this > email and know the content is safe. > <https://us-phishalarm- > ewt.proofpoint.com/EWT/v1/G3vK!uldrHTaPnO07KyzOfDOJHMHGipcjY2REMQ > tg2sq6EsrNqo3BvxwK7HK1Pa6IoEqp0AsXy_amOqGIF7xIufCxaZfP5b4W5MYIwV > xonydOKJA$> > Report Suspicious > > ZjQcmQRYFpfptBannerEnd > Hi Shenghao, > > On Tue, 2025-08-26 at 17:41 +0800, Shenghao Ding wrote: > > A bug reported by one of my customers that EFI name beginning with 0 > > instead of 1. > > > > Fixes: 4fe238513407 ("ALSA: hda/tas2781: Move and unified the > > calibrated-data getting function for SPI and I2C into the tas2781_hda > > lib") > > Signed-off-by: Shenghao Ding <shenghao-ding@ti.com> > > > > --- > > v2: > > - remove unrelated change > > v1: > > - Fix EFI name beginning with 1 instead of 0 > > - Add extra comments on EFI name for calibration > > - Remove an extra space > > --- > > sound/hda/codecs/side-codecs/tas2781_hda_i2c.c | 5 +++-- > > 1 file changed, 3 insertions(+), 2 deletions(-) > > > > diff --git a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c > > b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c > > index ed7771ab9475..635cbd8820ac 100644 > > --- a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c > > +++ b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c > > @@ -340,7 +340,8 @@ static int tas2563_save_calibration(struct > tas2781_hda *h) > > data[offset] = i; > > offset++; > > for (j = 0; j < TASDEV_CALIB_N; ++j) { > > - ret = snprintf(var8, sizeof(var8), vars[j], i); > > + /* EFI name for calibration started with 1, not 0 */ > > + ret = snprintf(var8, sizeof(var8), vars[j], i + 1); > > > > if (ret < 0 || ret >= sizeof(var8) - 1) { > > dev_err(p->dev, "%s: Read %s failed\n", @@ - > 349,7 +350,7 @@ > > static int tas2563_save_calibration(struct tas2781_hda *h) > > } > > /* > > * Our variable names are ASCII by construction, but > > - * EFI names are wide chars. Convert and zero-pad. > > + * EFI names are wide chars. Convert and zero-pad. > > */ > > memset(efi_name, 0, sizeof(efi_name)); > > for (k = 0; k < sizeof(var8) && var8[k]; k++) > > In the tas2563_save_calibration() function the variables are read in the > following order: R0, InvR0, R0_Low, Power, TLim. > They are also included in cali_data in this order. > > But the tasdev_load_calibrated_data() function reads them from cali_data as > R0, R0_Low, InvR0, Power, TLim. > > And this may be true for tas2781 as well. > > Could you check this also? > > Thanks, > Gergo
Hi Shenghao, On Wed, 2025-08-27 at 14:15 +0000, Ding, Shenghao wrote: > Long time no see. Thanks for pointing that out. > I'm preparing a new patch to correct it. > > Yeah, the amps worked well, so no need to write :) Rolling distros are moving to kernel 6.16 soon, so I'm worried about the speakers. Can the amplifier protect the speaker even with completely wrong calibration values? Thanks, Gergo
Hi Shenghao, On Tue, 2025-08-26 at 17:41 +0800, Shenghao Ding wrote: > A bug reported by one of my customers that EFI name beginning with 0 > instead of 1. > > Fixes: 4fe238513407 ("ALSA: hda/tas2781: Move and unified the calibrated-data getting function for SPI and I2C into the tas2781_hda lib") > Signed-off-by: Shenghao Ding <shenghao-ding@ti.com> > > --- > v2: > - remove unrelated change > v1: > - Fix EFI name beginning with 1 instead of 0 > - Add extra comments on EFI name for calibration > - Remove an extra space > --- > sound/hda/codecs/side-codecs/tas2781_hda_i2c.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c > index ed7771ab9475..635cbd8820ac 100644 > --- a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c > +++ b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c > @@ -340,7 +340,8 @@ static int tas2563_save_calibration(struct tas2781_hda *h) > data[offset] = i; > offset++; > for (j = 0; j < TASDEV_CALIB_N; ++j) { > - ret = snprintf(var8, sizeof(var8), vars[j], i); > + /* EFI name for calibration started with 1, not 0 */ > + ret = snprintf(var8, sizeof(var8), vars[j], i + 1); > > if (ret < 0 || ret >= sizeof(var8) - 1) { > dev_err(p->dev, "%s: Read %s failed\n", > @@ -349,7 +350,7 @@ static int tas2563_save_calibration(struct tas2781_hda *h) > } > /* > * Our variable names are ASCII by construction, but > - * EFI names are wide chars. Convert and zero-pad. > + * EFI names are wide chars. Convert and zero-pad. > */ > memset(efi_name, 0, sizeof(efi_name)); > for (k = 0; k < sizeof(var8) && var8[k]; k++) The previous tas2781_apply_calib() and tas2563_apply_calib() functions performed a big endian conversion on the data readed from the EFI variables. I couldn't find this in either fmwlib or this file. Could you please recheck if this happens somewhere? Thanks, Gergo
On Tue, 26 Aug 2025 11:41:05 +0200, Shenghao Ding wrote: > > A bug reported by one of my customers that EFI name beginning with 0 > instead of 1. > > Fixes: 4fe238513407 ("ALSA: hda/tas2781: Move and unified the calibrated-data getting function for SPI and I2C into the tas2781_hda lib") > Signed-off-by: Shenghao Ding <shenghao-ding@ti.com> > > --- > v2: > - remove unrelated change > v1: > - Fix EFI name beginning with 1 instead of 0 > - Add extra comments on EFI name for calibration > - Remove an extra space > --- > sound/hda/codecs/side-codecs/tas2781_hda_i2c.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c > index ed7771ab9475..635cbd8820ac 100644 > --- a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c > +++ b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c > @@ -340,7 +340,8 @@ static int tas2563_save_calibration(struct tas2781_hda *h) > data[offset] = i; > offset++; > for (j = 0; j < TASDEV_CALIB_N; ++j) { > - ret = snprintf(var8, sizeof(var8), vars[j], i); > + /* EFI name for calibration started with 1, not 0 */ > + ret = snprintf(var8, sizeof(var8), vars[j], i + 1); > > if (ret < 0 || ret >= sizeof(var8) - 1) { > dev_err(p->dev, "%s: Read %s failed\n", > @@ -349,7 +350,7 @@ static int tas2563_save_calibration(struct tas2781_hda *h) > } > /* > * Our variable names are ASCII by construction, but > - * EFI names are wide chars. Convert and zero-pad. > + * EFI names are wide chars. Convert and zero-pad. > */ > memset(efi_name, 0, sizeof(efi_name)); > for (k = 0; k < sizeof(var8) && var8[k]; k++) Please drop unrelated change and concentrate on the real issue. thanks, Takashi
© 2016 - 2025 Red Hat, Inc.