alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Add support for CLSA0101
@ 2022-07-26 10:11 Lucas Tanure
  2022-07-26 10:11 ` [PATCH 1/2] ALSA: hda: cs35l41: Use the CS35L41 HDA internal define Lucas Tanure
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Lucas Tanure @ 2022-07-26 10:11 UTC (permalink / raw)
  To: Jaroslav Kysela, Takashi Iwai, Cameron Berkenpas
  Cc: patches, alsa-devel, linux-kernel, Lucas Tanure

Add Support for the CLSA0101 laptop, an Intel version of CLSA0100.
This patch has been tested using the CLSA0100, ensuring it
doesn't break the sound for it.
We appreciate it if someone with CLSA0101 could verify that this
the patch works for them.

Lucas Tanure (2):
  ALSA: hda: cs35l41: Use the CS35L41 HDA internal define
  ALSA: hda: cs35l41: Support CLSA0101

 sound/pci/hda/cs35l41_hda.c   | 67 +++++++++++++++++++++--------------
 sound/pci/hda/patch_realtek.c | 12 +++++++
 2 files changed, 53 insertions(+), 26 deletions(-)

-- 
2.37.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] ALSA: hda: cs35l41: Use the CS35L41 HDA internal define
  2022-07-26 10:11 [PATCH 0/2] Add support for CLSA0101 Lucas Tanure
@ 2022-07-26 10:11 ` Lucas Tanure
  2022-07-26 10:11 ` [PATCH 2/2] ALSA: hda: cs35l41: Support CLSA0101 Lucas Tanure
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Lucas Tanure @ 2022-07-26 10:11 UTC (permalink / raw)
  To: Jaroslav Kysela, Takashi Iwai, Cameron Berkenpas
  Cc: patches, alsa-devel, linux-kernel, Lucas Tanure

Follow GPIO1 pattern, use cs35l41 HDA internal define for
IRQ and then translate to ASoC cs35l41 define.

Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com>
---
 sound/pci/hda/cs35l41_hda.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c
index 28798d5c1cf1..48d94c683b75 100644
--- a/sound/pci/hda/cs35l41_hda.c
+++ b/sound/pci/hda/cs35l41_hda.c
@@ -1014,6 +1014,7 @@ static int cs35l41_hda_apply_properties(struct cs35l41_hda *cs35l41)
 			break;
 		case CS35L41_INTERRUPT:
 			using_irq = true;
+			hw_cfg->gpio2.func = CS35L41_GPIO2_INT_OPEN_DRAIN;
 			break;
 		default:
 			dev_err(cs35l41->dev, "Invalid GPIO2 function %d\n", hw_cfg->gpio2.func);
@@ -1273,7 +1274,7 @@ static int cs35l41_hda_read_acpi(struct cs35l41_hda *cs35l41, const char *hid, i
 	cs35l41->reset_gpio = gpiod_get_index(physdev, NULL, 0, GPIOD_OUT_HIGH);
 	cs35l41->hw_cfg.bst_type = CS35L41_EXT_BOOST_NO_VSPK_SWITCH;
 	cs35l41->speaker_id = cs35l41_get_speaker_id(physdev, 0, 0, 2);
-	hw_cfg->gpio2.func = CS35L41_GPIO2_INT_OPEN_DRAIN;
+	hw_cfg->gpio2.func = CS35L41_INTERRUPT;
 	hw_cfg->gpio2.valid = true;
 	cs35l41->hw_cfg.valid = true;
 	put_device(physdev);
-- 
2.37.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] ALSA: hda: cs35l41: Support CLSA0101
  2022-07-26 10:11 [PATCH 0/2] Add support for CLSA0101 Lucas Tanure
  2022-07-26 10:11 ` [PATCH 1/2] ALSA: hda: cs35l41: Use the CS35L41 HDA internal define Lucas Tanure
@ 2022-07-26 10:11 ` Lucas Tanure
  2022-07-26 12:47 ` [PATCH 0/2] Add support for CLSA0101 Takashi Iwai
  2022-07-26 15:35 ` Cameron Berkenpas
  3 siblings, 0 replies; 7+ messages in thread
From: Lucas Tanure @ 2022-07-26 10:11 UTC (permalink / raw)
  To: Jaroslav Kysela, Takashi Iwai, Cameron Berkenpas
  Cc: patches, alsa-devel, linux-kernel, Lucas Tanure

Add support for Intel version of Legion 7 laptop.

Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com>
---
 sound/pci/hda/cs35l41_hda.c   | 66 +++++++++++++++++++++--------------
 sound/pci/hda/patch_realtek.c | 12 +++++++
 2 files changed, 52 insertions(+), 26 deletions(-)

diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c
index 48d94c683b75..6edf95553745 100644
--- a/sound/pci/hda/cs35l41_hda.c
+++ b/sound/pci/hda/cs35l41_hda.c
@@ -1133,6 +1133,45 @@ static int cs35l41_get_speaker_id(struct device *dev, int amp_index,
 	return speaker_id;
 }
 
+/*
+ * Device CLSA010(0/1) doesn't have _DSD so a gpiod_get by the label reset won't work.
+ * And devices created by serial-multi-instantiate don't have their device struct
+ * pointing to the correct fwnode, so acpi_dev must be used here.
+ * And devm functions expect that the device requesting the resource has the correct
+ * fwnode.
+ */
+static int cs35l41_no_acpi_dsd(struct cs35l41_hda *cs35l41, struct device *physdev, int id,
+			       const char *hid)
+{
+	struct cs35l41_hw_cfg *hw_cfg = &cs35l41->hw_cfg;
+
+	/* check I2C address to assign the index */
+	cs35l41->index = id == 0x40 ? 0 : 1;
+	cs35l41->channel_index = 0;
+	cs35l41->reset_gpio = gpiod_get_index(physdev, NULL, 0, GPIOD_OUT_HIGH);
+	cs35l41->speaker_id = cs35l41_get_speaker_id(physdev, 0, 0, 2);
+	hw_cfg->spk_pos = cs35l41->index;
+	hw_cfg->gpio2.func = CS35L41_INTERRUPT;
+	hw_cfg->gpio2.valid = true;
+	hw_cfg->valid = true;
+	put_device(physdev);
+
+	if (strncmp(hid, "CLSA0100", 8) == 0) {
+		hw_cfg->bst_type = CS35L41_EXT_BOOST_NO_VSPK_SWITCH;
+	} else if (strncmp(hid, "CLSA0101", 8) == 0) {
+		hw_cfg->bst_type = CS35L41_EXT_BOOST;
+		hw_cfg->gpio1.func = CS35l41_VSPK_SWITCH;
+		hw_cfg->gpio1.valid = true;
+	} else {
+		hw_cfg->valid = false;
+		hw_cfg->gpio1.valid = false;
+		hw_cfg->gpio2.valid = false;
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 static int cs35l41_hda_read_acpi(struct cs35l41_hda *cs35l41, const char *hid, int id)
 {
 	struct cs35l41_hw_cfg *hw_cfg = &cs35l41->hw_cfg;
@@ -1161,7 +1200,7 @@ static int cs35l41_hda_read_acpi(struct cs35l41_hda *cs35l41, const char *hid, i
 	property = "cirrus,dev-index";
 	ret = device_property_count_u32(physdev, property);
 	if (ret <= 0)
-		goto no_acpi_dsd;
+		return cs35l41_no_acpi_dsd(cs35l41, physdev, id, hid);
 
 	if (ret > ARRAY_SIZE(values)) {
 		ret = -EINVAL;
@@ -1255,31 +1294,6 @@ static int cs35l41_hda_read_acpi(struct cs35l41_hda *cs35l41, const char *hid, i
 	dev_err(cs35l41->dev, "Failed property %s: %d\n", property, ret);
 
 	return ret;
-
-no_acpi_dsd:
-	/*
-	 * Device CLSA0100 doesn't have _DSD so a gpiod_get by the label reset won't work.
-	 * And devices created by serial-multi-instantiate don't have their device struct
-	 * pointing to the correct fwnode, so acpi_dev must be used here.
-	 * And devm functions expect that the device requesting the resource has the correct
-	 * fwnode.
-	 */
-	if (strncmp(hid, "CLSA0100", 8) != 0)
-		return -EINVAL;
-
-	/* check I2C address to assign the index */
-	cs35l41->index = id == 0x40 ? 0 : 1;
-	cs35l41->hw_cfg.spk_pos = cs35l41->index;
-	cs35l41->channel_index = 0;
-	cs35l41->reset_gpio = gpiod_get_index(physdev, NULL, 0, GPIOD_OUT_HIGH);
-	cs35l41->hw_cfg.bst_type = CS35L41_EXT_BOOST_NO_VSPK_SWITCH;
-	cs35l41->speaker_id = cs35l41_get_speaker_id(physdev, 0, 0, 2);
-	hw_cfg->gpio2.func = CS35L41_INTERRUPT;
-	hw_cfg->gpio2.valid = true;
-	cs35l41->hw_cfg.valid = true;
-	put_device(physdev);
-
-	return 0;
 }
 
 int cs35l41_hda_probe(struct device *dev, const char *device_name, int id, int irq,
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 0e340c0934db..65fd3e599a83 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -6710,6 +6710,12 @@ static void alc287_fixup_legion_16achg6_speakers(struct hda_codec *cdc, const st
 	cs35l41_generic_fixup(cdc, action, "i2c", "CLSA0100", 2);
 }
 
+static void alc287_fixup_legion_16ithg6_speakers(struct hda_codec *cdc, const struct hda_fixup *fix,
+						 int action)
+{
+	cs35l41_generic_fixup(cdc, action, "i2c", "CLSA0101", 2);
+}
+
 /* for alc295_fixup_hp_top_speakers */
 #include "hp_x360_helper.c"
 
@@ -7047,6 +7053,7 @@ enum {
 	ALC245_FIXUP_CS35L41_SPI_4_HP_GPIO_LED,
 	ALC285_FIXUP_HP_SPEAKERS_MICMUTE_LED,
 	ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE,
+	ALC287_FIXUP_LEGION_16ITHG6,
 };
 
 /* A special fixup for Lenovo C940 and Yoga Duet 7;
@@ -8889,6 +8896,10 @@ static const struct hda_fixup alc269_fixups[] = {
 		.chained = true,
 		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
 	},
+	[ALC287_FIXUP_LEGION_16ITHG6] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc287_fixup_legion_16ithg6_speakers,
+	},
 };
 
 static const struct snd_pci_quirk alc269_fixup_tbl[] = {
@@ -9353,6 +9364,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x17aa, 0x384a, "Lenovo Yoga 7 15ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
 	SND_PCI_QUIRK(0x17aa, 0x3852, "Lenovo Yoga 7 14ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
 	SND_PCI_QUIRK(0x17aa, 0x3853, "Lenovo Yoga 7 15ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
+	SND_PCI_QUIRK(0x17aa, 0x3855, "Legion 7 16ITHG6", ALC287_FIXUP_LEGION_16ITHG6),
 	SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
 	SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
 	SND_PCI_QUIRK(0x17aa, 0x3978, "Lenovo B50-70", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
-- 
2.37.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] Add support for CLSA0101
  2022-07-26 10:11 [PATCH 0/2] Add support for CLSA0101 Lucas Tanure
  2022-07-26 10:11 ` [PATCH 1/2] ALSA: hda: cs35l41: Use the CS35L41 HDA internal define Lucas Tanure
  2022-07-26 10:11 ` [PATCH 2/2] ALSA: hda: cs35l41: Support CLSA0101 Lucas Tanure
@ 2022-07-26 12:47 ` Takashi Iwai
  2022-07-26 15:35 ` Cameron Berkenpas
  3 siblings, 0 replies; 7+ messages in thread
From: Takashi Iwai @ 2022-07-26 12:47 UTC (permalink / raw)
  To: Lucas Tanure
  Cc: alsa-devel, patches, Takashi Iwai, linux-kernel, Cameron Berkenpas

On Tue, 26 Jul 2022 12:11:29 +0200,
Lucas Tanure wrote:
> 
> Add Support for the CLSA0101 laptop, an Intel version of CLSA0100.
> This patch has been tested using the CLSA0100, ensuring it
> doesn't break the sound for it.
> We appreciate it if someone with CLSA0101 could verify that this
> the patch works for them.
> 
> Lucas Tanure (2):
>   ALSA: hda: cs35l41: Use the CS35L41 HDA internal define
>   ALSA: hda: cs35l41: Support CLSA0101

Applied both patches.  Thanks.


Takashi

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] Add support for CLSA0101
  2022-07-26 10:11 [PATCH 0/2] Add support for CLSA0101 Lucas Tanure
                   ` (2 preceding siblings ...)
  2022-07-26 12:47 ` [PATCH 0/2] Add support for CLSA0101 Takashi Iwai
@ 2022-07-26 15:35 ` Cameron Berkenpas
  2022-07-26 15:46   ` Takashi Iwai
  2022-07-27  9:50   ` Lucas tanure
  3 siblings, 2 replies; 7+ messages in thread
From: Cameron Berkenpas @ 2022-07-26 15:35 UTC (permalink / raw)
  To: Lucas Tanure, Jaroslav Kysela, Takashi Iwai
  Cc: patches, alsa-devel, linux-kernel

Hello,

I can confirm this does _not_ work.

More specifically, with these patches, the original behavior still occurs:
1. You get left channel audio from the right speaker only.
2. No sound at all after resuming from sleep.
3. You get sound after resuming from hibernate, but only as described in #1.

If you apply a patch like this: https://paste-bin.xyz/71355

You  get properly working audio until you put the laptop to sleep or 
hibernate. Upon resuming from either state, you get no audio at all.

On 7/26/22 03:11, Lucas Tanure wrote:
> Add Support for the CLSA0101 laptop, an Intel version of CLSA0100.
> This patch has been tested using the CLSA0100, ensuring it
> doesn't break the sound for it.
> We appreciate it if someone with CLSA0101 could verify that this
> the patch works for them.
>
> Lucas Tanure (2):
>    ALSA: hda: cs35l41: Use the CS35L41 HDA internal define
>    ALSA: hda: cs35l41: Support CLSA0101
>
>   sound/pci/hda/cs35l41_hda.c   | 67 +++++++++++++++++++++--------------
>   sound/pci/hda/patch_realtek.c | 12 +++++++
>   2 files changed, 53 insertions(+), 26 deletions(-)
>


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] Add support for CLSA0101
  2022-07-26 15:35 ` Cameron Berkenpas
@ 2022-07-26 15:46   ` Takashi Iwai
  2022-07-27  9:50   ` Lucas tanure
  1 sibling, 0 replies; 7+ messages in thread
From: Takashi Iwai @ 2022-07-26 15:46 UTC (permalink / raw)
  To: Cameron Berkenpas
  Cc: alsa-devel, Lucas Tanure, patches, linux-kernel, Takashi Iwai

On Tue, 26 Jul 2022 17:35:49 +0200,
Cameron Berkenpas wrote:
> 
> Hello,
> 
> I can confirm this does _not_ work.
> 
> More specifically, with these patches, the original behavior still occurs:
> 1. You get left channel audio from the right speaker only.
> 2. No sound at all after resuming from sleep.
> 3. You get sound after resuming from hibernate, but only as described in #1.
> 
> If you apply a patch like this: https://paste-bin.xyz/71355
> 
> You  get properly working audio until you put the laptop to sleep or
> hibernate. Upon resuming from either state, you get no audio at all.

OK, then let's drop them for now.
Thanks for quick heads up.


Takashi

> 
> On 7/26/22 03:11, Lucas Tanure wrote:
> > Add Support for the CLSA0101 laptop, an Intel version of CLSA0100.
> > This patch has been tested using the CLSA0100, ensuring it
> > doesn't break the sound for it.
> > We appreciate it if someone with CLSA0101 could verify that this
> > the patch works for them.
> > 
> > Lucas Tanure (2):
> >    ALSA: hda: cs35l41: Use the CS35L41 HDA internal define
> >    ALSA: hda: cs35l41: Support CLSA0101
> > 
> >   sound/pci/hda/cs35l41_hda.c   | 67 +++++++++++++++++++++--------------
> >   sound/pci/hda/patch_realtek.c | 12 +++++++
> >   2 files changed, 53 insertions(+), 26 deletions(-)
> > 
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] Add support for CLSA0101
  2022-07-26 15:35 ` Cameron Berkenpas
  2022-07-26 15:46   ` Takashi Iwai
@ 2022-07-27  9:50   ` Lucas tanure
  1 sibling, 0 replies; 7+ messages in thread
From: Lucas tanure @ 2022-07-27  9:50 UTC (permalink / raw)
  To: Cameron Berkenpas, Jaroslav Kysela, Takashi Iwai
  Cc: patches, alsa-devel, linux-kernel

On 7/26/22 16:35, Cameron Berkenpas wrote:
> Hello,
> 
> I can confirm this does _not_ work.
> 
> More specifically, with these patches, the original behavior still occurs:
> 1. You get left channel audio from the right speaker only.
Hi, yes, I did forgot the scan and multi instantiate part.
I will send V2 with the fix.

> 2. No sound at all after resuming from sleep.
> 3. You get sound after resuming from hibernate, but only as described in 
> #1.
This is a different issue, that will be fixed in the future.

> 
> If you apply a patch like this: https://paste-bin.xyz/71355
> 
> You  get properly working audio until you put the laptop to sleep or 
> hibernate. Upon resuming from either state, you get no audio at all.
> 
> On 7/26/22 03:11, Lucas Tanure wrote:
>> Add Support for the CLSA0101 laptop, an Intel version of CLSA0100.
>> This patch has been tested using the CLSA0100, ensuring it
>> doesn't break the sound for it.
>> We appreciate it if someone with CLSA0101 could verify that this
>> the patch works for them.
>>
>> Lucas Tanure (2):
>>    ALSA: hda: cs35l41: Use the CS35L41 HDA internal define
>>    ALSA: hda: cs35l41: Support CLSA0101
>>
>>   sound/pci/hda/cs35l41_hda.c   | 67 +++++++++++++++++++++--------------
>>   sound/pci/hda/patch_realtek.c | 12 +++++++
>>   2 files changed, 53 insertions(+), 26 deletions(-)
>>
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-07-27  9:51 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-26 10:11 [PATCH 0/2] Add support for CLSA0101 Lucas Tanure
2022-07-26 10:11 ` [PATCH 1/2] ALSA: hda: cs35l41: Use the CS35L41 HDA internal define Lucas Tanure
2022-07-26 10:11 ` [PATCH 2/2] ALSA: hda: cs35l41: Support CLSA0101 Lucas Tanure
2022-07-26 12:47 ` [PATCH 0/2] Add support for CLSA0101 Takashi Iwai
2022-07-26 15:35 ` Cameron Berkenpas
2022-07-26 15:46   ` Takashi Iwai
2022-07-27  9:50   ` Lucas tanure

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).