]> www.infradead.org Git - users/griffoul/linux.git/commitdiff
ALSA: hda: tas2781: fix tas2563 EFI data endianness
authorGergo Koteles <soyer@irl.hu>
Fri, 29 Aug 2025 16:04:49 +0000 (18:04 +0200)
committerTakashi Iwai <tiwai@suse.de>
Sat, 30 Aug 2025 07:41:17 +0000 (09:41 +0200)
Before conversion to unify the calibration data management, the
tas2563_apply_calib() function performed the big endian conversion and
wrote the calibration data to the device. The writing is now done by the
common tasdev_load_calibrated_data() function, but without conversion.

Put the values into the calibration data buffer with the expected
endianness.

Fixes: 4fe238513407 ("ALSA: hda/tas2781: Move and unified the calibrated-data getting function for SPI and I2C into the tas2781_hda lib")
Cc: <stable@vger.kernel.org>
Signed-off-by: Gergo Koteles <soyer@irl.hu>
Link: https://patch.msgid.link/20250829160450.66623-1-soyer@irl.hu
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/hda/codecs/side-codecs/tas2781_hda_i2c.c

index 7143926c2c30f35c0edc799444e0ab4019b3b608..46a43f0352aa1a8ea0cb59cc1794ea9aac33d147 100644 (file)
@@ -310,6 +310,7 @@ static int tas2563_save_calibration(struct tas2781_hda *h)
        struct cali_reg *r = &cd->cali_reg_array;
        unsigned int offset = 0;
        unsigned char *data;
+       __be32 bedata;
        efi_status_t status;
        unsigned int attr;
        int ret, i, j, k;
@@ -351,6 +352,8 @@ static int tas2563_save_calibration(struct tas2781_hda *h)
                                        i, j, status);
                                return -EINVAL;
                        }
+                       bedata = cpu_to_be32(*(uint32_t *)&data[offset]);
+                       memcpy(&data[offset], &bedata, sizeof(bedata));
                        offset += TAS2563_CAL_DATA_SIZE;
                }
        }