On Sun, 03 Sep 2023 16:37:58 +0200, Shenghao Ding wrote: > > Support ACPI_ID both TXNW2781 and TIAS2781, update dsp/bypass mode > switching in tasdevice_program_put. Again, if you change multiple things, split to individual patches. thanks, Takashi > > Signed-off-by: Shenghao Ding <shenghao-ding@xxxxxx> > > --- > Changes in v1: > - Add comment on dsp/bypass mode in tasdevice_program_put and > tasdevice_info_programs > - TIAS2781 has been used by our customers, see following dstd.dsl. We > have discussed this with them, they requested TIAS2781 must be > supported for the laptops already released to market, their new laptop > can switch to TXNW2781 > Name (_HID, "TIAS2781") // _HID: Hardware ID > Name (_UID, Zero) // _UID: Unique ID > Method (_SUB, 0, NotSerialized) // _SUB: Subsystem ID > { > If ((SPID == Zero)) > { > Return ("17AA3886") > } > > If ((SPID == One)) > { > Return ("17AA3884") > } > } > --- > sound/pci/hda/tas2781_hda_i2c.c | 15 ++++++++++++--- > 1 file changed, 12 insertions(+), 3 deletions(-) > > diff --git a/sound/pci/hda/tas2781_hda_i2c.c b/sound/pci/hda/tas2781_hda_i2c.c > index fb80280293..5250d300a2 100644 > --- a/sound/pci/hda/tas2781_hda_i2c.c > +++ b/sound/pci/hda/tas2781_hda_i2c.c > @@ -199,8 +199,11 @@ static int tasdevice_info_programs(struct snd_kcontrol *kcontrol, > > uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; > uinfo->count = 1; > + /* 0: dsp mode > + * non-zero: bypass mode > + */ > uinfo->value.integer.min = 0; > - uinfo->value.integer.max = tas_fw->nr_programs - 1; > + uinfo->value.integer.max = tas_fw->nr_programs; > > return 0; > } > @@ -238,7 +241,10 @@ static int tasdevice_program_put(struct snd_kcontrol *kcontrol, > int max = tas_fw->nr_programs - 1; > int val, ret = 0; > > - val = clamp(nr_program, 0, max); > + /* 0: dsp mode > + * non-zero: bypass mode > + */ > + val = (nr_program) ? max : 0; > > if (tas_priv->cur_prog != val) { > tas_priv->cur_prog = val; > @@ -647,7 +653,9 @@ static int tas2781_hda_i2c_probe(struct i2c_client *clt) > const char *device_name; > int ret; > > - if (strstr(dev_name(&clt->dev), "TIAS2781")) > + if (strstr(dev_name(&clt->dev), "TXNW2781")) > + device_name = "TXNW2781"; > + else if (strstr(dev_name(&clt->dev), "TIAS2781")) > device_name = "TIAS2781"; > else > return -ENODEV; > @@ -824,6 +832,7 @@ static const struct i2c_device_id tas2781_hda_i2c_id[] = { > > static const struct acpi_device_id tas2781_acpi_hda_match[] = { > {"TIAS2781", 0 }, > + {"TXNW2781", 1 }, > {} > }; > MODULE_DEVICE_TABLE(acpi, tas2781_acpi_hda_match); > -- > 2.34.1 >