diff mbox series

[v1,2/2] ALSA: hda/tas2781: Update tas2781 HDA driver

Message ID 20230903143759.92-2-shenghao-ding@ti.com (mailing list archive)
State Superseded
Headers show
Series [v1,1/2] ALSA: hda/tas2781: Update tas2781 HDA driver | expand

Commit Message

Shenghao Ding Sept. 3, 2023, 2:37 p.m. UTC
Support ACPI_ID both TXNW2781 and TIAS2781, update dsp/bypass mode
switching in tasdevice_program_put.

Signed-off-by: Shenghao Ding <shenghao-ding@ti.com>

---
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(-)

Comments

Takashi Iwai Sept. 3, 2023, 4:33 p.m. UTC | #1
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@ti.com>
> 
> ---
> 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
>
Takashi Iwai Sept. 3, 2023, 4:44 p.m. UTC | #2
On Sun, 03 Sep 2023 18:33:34 +0200,
Takashi Iwai wrote:
> 
> 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.

Also, the support of two IDs can be unified to a single patch for
changing both files.

A patch isn't necessarily split per file; instead, it's split per
logic.  If applying the changes to multiple files at the same time
makes more sense, those should be put in the same patch.


thanks,

Takashi


> 
> 
> thanks,
> 
> Takashi
> 
> 
> > 
> > Signed-off-by: Shenghao Ding <shenghao-ding@ti.com>
> > 
> > ---
> > 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
> >
diff mbox series

Patch

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);