On 2/22/24 2:40 AM, Shenghao Ding wrote:
The tas2783 is a smart audio amplifier with integrated MIPI SoundWire
interface (Version 1.2.1 compliant), I2C, and I2S/TDM interfaces designed
for portable applications. An on-chip DSP supports Texas Instruments
SmartAmp speaker protection algorithm. The integrated speaker voltage and
current sense provides for real-time monitoring of lodspeakers.
loudspeakers.
+static void tas2783_apply_calib(struct tasdevice_priv *tas_dev,
+ unsigned int *cali_data)
+{
+ struct regmap *map = tas_dev->regmap;
+ u8 *cali_start;
+ u16 offset;
+ int ret;
+
+ if (!tas_dev->sdw_peripheral) {
+ dev_err(tas_dev->dev, "%s: peripheral doesn't exist.\n",
+ __func__);
+ return;
+ }
+
+ offset = tas_dev->sdw_peripheral->id.unique_id -
+ TAS2783_UNIQUE_ID_BASE;
+ if (offset >= TAS2783_MAX_DEV_NUM) {
+ dev_err(tas_dev->dev, "%s: offset(%u) is out of range.\n",
+ __func__, offset);
+ return;
+ }
I think we are at the 4th iteration where I have to repeat myself...
In the SoundWire spec, the unique_id is *LINK SPECIFIC*, and only used
at the bus level within the context of a link to help avoid enumeration
conflicts
If you are using the unique_id as a SYSTEM-UNIQUE value to lookup EFI
data, this is a TI-specific requirement that needs to be documented.
That also means you need to double-check for errors so make sure there
are no board configurations where the same unique_id is used in multiple
links, or by devices other than tas2783.