All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
To: Yauhen Kharuzhy <jekhor@gmail.com>,
	linux-sound@vger.kernel.org,
	Cezary Rojewski <cezary.rojewski@intel.com>,
	Liam Girdwood <liam.r.girdwood@linux.intel.com>,
	Mark Brown <broonie@kernel.org>
Cc: linux-kernel@vger.kernel.org, Hans de Goede <hansg@kernel.org>
Subject: Re: [PATCH v1 2/2] ASoC: Intel: soc-acpi-cht: Add Lenovo Yoga Book entries
Date: Wed, 18 Feb 2026 11:35:12 +0100	[thread overview]
Message-ID: <3ff76f35-be88-4281-be92-ec8f1e160651@linux.dev> (raw)
In-Reply-To: <20260217231324.1319392-3-jekhor@gmail.com>

On 2/18/26 00:13, Yauhen Kharuzhy wrote:
> Lenovo Yoga Book YB1-X91 device uses a Cherry Trail SoC and has a valid
> ACPI DSDT entry for the RT5677 codec. This entry has some non-standard
> resource definitions, such as jack detection chip information, and
> hardware has some additional GPIO controls so use 'cht-yogabook'
> for the driver name instead of some default (like 'cht-bsw-rt5677').
> 
> Lenovo Yoga Book YB1-X90 device (Android version of the tablet) has the
> same hardware configuration but lacks a valid ACPI DSDT entry for the
> codec. To match this device, extend the existing quirk designated for the
> Lenovo Yoga Tab 3 Pro YT3-X90 and make it more generic: select a matched
> machine using the dmi_check_system() quirk mechanism.
> 
> Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com>

Looks ok to me, but since this is touching 10-yr old stuff maybe it's worth having a patch that only merged the existing quirks together.
Then you can add a new set of entries. Easier to review/test/bisect.

> ---
>  .../intel/common/soc-acpi-intel-cht-match.c   | 144 ++++++++++++------
>  1 file changed, 94 insertions(+), 50 deletions(-)
> 
> diff --git a/sound/soc/intel/common/soc-acpi-intel-cht-match.c b/sound/soc/intel/common/soc-acpi-intel-cht-match.c
> index e4c3492a0c28..cadb7790d86a 100644
> --- a/sound/soc/intel/common/soc-acpi-intel-cht-match.c
> +++ b/sound/soc/intel/common/soc-acpi-intel-cht-match.c
> @@ -9,13 +9,47 @@
>  #include <sound/soc-acpi.h>
>  #include <sound/soc-acpi-intel-match.h>
>  
> -static unsigned long cht_machine_id;
> +static struct snd_soc_acpi_mach *cht_quirk_mach;
>  
> -#define CHT_SURFACE_MACH 1
> +static struct snd_soc_acpi_mach cht_surface_mach = {
> +	.id = "10EC5640",
> +	.drv_name = "cht-bsw-rt5645",
> +	.fw_filename = "intel/fw_sst_22a8.bin",
> +	.board = "cht-bsw",
> +	.sof_tplg_filename = "sof-cht-rt5645.tplg",
> +};
> +
> +static struct snd_soc_acpi_mach cht_yogabook_mach = {
> +	.id = "10EC5677",
> +	.drv_name = "cht-yogabook",
> +	.fw_filename = "intel/fw_sst_22a8.bin",
> +	.board = "cht-yogabook",
> +	.sof_tplg_filename = "sof-cht-rt5677.tplg",
> +};
> +
> +static struct snd_soc_acpi_mach cht_lenovo_yoga_tab3_x90_mach = {
> +	.id = "10WM5102",
> +	.drv_name = "bytcr_wm5102",
> +	.fw_filename = "intel/fw_sst_22a8.bin",
> +	.board = "bytcr_wm5102",
> +	.sof_tplg_filename = "sof-cht-wm5102.tplg",
> +};
>  
>  static int cht_surface_quirk_cb(const struct dmi_system_id *id)
>  {
> -	cht_machine_id = CHT_SURFACE_MACH;
> +	cht_quirk_mach = &cht_surface_mach;
> +	return 1;
> +}
> +
> +static int cht_yogabook_quirk_cb(const struct dmi_system_id *id)
> +{
> +	cht_quirk_mach = &cht_yogabook_mach;
> +	return 1;
> +}
> +
> +static int cht_yt3_quirk_cb(const struct dmi_system_id *id)
> +{
> +	cht_quirk_mach = &cht_lenovo_yoga_tab3_x90_mach;
>  	return 1;
>  }
>  
> @@ -27,29 +61,57 @@ static const struct dmi_system_id cht_table[] = {
>  			DMI_MATCH(DMI_PRODUCT_NAME, "Surface 3"),
>  		},
>  	},
> +	{
> +		.callback = cht_yogabook_quirk_cb,
> +		.ident = "Lenovo Yoga Book YB1-X91",
> +		/* YB1-X91L/F */
> +		.matches = {
> +			DMI_MATCH(DMI_PRODUCT_NAME, "Lenovo YB1-X91"),
> +		}
> +	},
> +	{
> +		.callback = cht_yogabook_quirk_cb,
> +		.ident = "Lenovo Yoga Book YB1-X90",
> +		/* YB1-X90L/F, codec is not listed in DSDT */
> +		.matches = {
> +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
> +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"),
> +			DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "YETI-11"),
> +		}
> +	},
> +	{
> +		/*
> +		 * The Lenovo Yoga Tab 3 Pro YT3-X90, with Android factory OS
> +		 * has a buggy DSDT with the codec not being listed at all.
> +		 */
> +		.callback = cht_yt3_quirk_cb,
> +		.matches = {
> +			DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
> +			DMI_MATCH(DMI_PRODUCT_VERSION, "Blade3-10A-001"),
> +		},
> +	},
>  	{ }
>  };
>  
> -static struct snd_soc_acpi_mach cht_surface_mach = {
> -	.id = "10EC5640",
> -	.drv_name = "cht-bsw-rt5645",
> -	.fw_filename = "intel/fw_sst_22a8.bin",
> -	.board = "cht-bsw",
> -	.sof_tplg_filename = "sof-cht-rt5645.tplg",
> -};
> -
>  static struct snd_soc_acpi_mach *cht_quirk(void *arg)
>  {
>  	struct snd_soc_acpi_mach *mach = arg;
>  
>  	dmi_check_system(cht_table);
>  
> -	if (cht_machine_id == CHT_SURFACE_MACH)
> -		return &cht_surface_mach;
> +	if (cht_quirk_mach)
> +		return cht_quirk_mach;
>  	else
>  		return mach;
>  }
>  
> +static struct snd_soc_acpi_mach *cht_quirk_nocodec(void *arg)
> +{
> +	struct snd_soc_acpi_mach *mach = cht_quirk(arg);
> +
> +	return mach == arg ? NULL : mach;
> +}
> +
>  /*
>   * Some tablets with Android factory OS have buggy DSDTs with an ESSX8316 device
>   * in the ACPI tables. While they are not using an ESS8316 codec. These DSDTs
> @@ -75,38 +137,6 @@ static struct snd_soc_acpi_mach *cht_ess8316_quirk(void *arg)
>  	return arg;
>  }
>  
> -/*
> - * The Lenovo Yoga Tab 3 Pro YT3-X90, with Android factory OS has a buggy DSDT
> - * with the coded not being listed at all.
> - */
> -static const struct dmi_system_id lenovo_yoga_tab3_x90[] = {
> -	{
> -		/* Lenovo Yoga Tab 3 Pro YT3-X90, codec missing from DSDT */
> -		.matches = {
> -			DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
> -			DMI_MATCH(DMI_PRODUCT_VERSION, "Blade3-10A-001"),
> -		},
> -	},
> -	{ }
> -};
> -
> -static struct snd_soc_acpi_mach cht_lenovo_yoga_tab3_x90_mach = {
> -	.id = "10WM5102",
> -	.drv_name = "bytcr_wm5102",
> -	.fw_filename = "intel/fw_sst_22a8.bin",
> -	.board = "bytcr_wm5102",
> -	.sof_tplg_filename = "sof-cht-wm5102.tplg",
> -};
> -
> -static struct snd_soc_acpi_mach *lenovo_yt3_x90_quirk(void *arg)
> -{
> -	if (dmi_check_system(lenovo_yoga_tab3_x90))
> -		return &cht_lenovo_yoga_tab3_x90_mach;
> -
> -	/* Skip wildcard match snd_soc_acpi_intel_cherrytrail_machines[] entry */
> -	return NULL;
> -}
> -
>  static const struct snd_soc_acpi_codecs rt5640_comp_ids = {
>  	.num_codecs = 2,
>  	.codecs = { "10EC5640", "10EC3276" },
> @@ -137,6 +167,20 @@ struct snd_soc_acpi_mach  snd_soc_acpi_intel_cherrytrail_machines[] = {
>  		.board = "cht-bsw",
>  		.sof_tplg_filename = "sof-cht-rt5670.tplg",
>  	},
> +	/*
> +	 * The only known Cherry Trail device with RT5677 codec and 10EC677
> +	 * DSTD entry is the Lenovo Yoga Book YB1-X91. It has a device-specific
> +	 * driver, so check DMI and use a machine quirk to override the default
> +	 * (non-existent) machine driver.
> +	 */
> +	{
> +		.id = "10EC5677",
> +		.drv_name = "cht-bsw-rt5677",
> +		.fw_filename = "intel/fw_sst_22a8.bin",
> +		.board = "cht-bsw",
> +		.machine_quirk = cht_quirk,
> +		.sof_tplg_filename = "sof-cht-rt5677.tplg",
> +	},
>  	{
>  		.comp_ids = &rt5645_comp_ids,
>  		.drv_name = "cht-bsw-rt5645",
> @@ -208,14 +252,14 @@ struct snd_soc_acpi_mach  snd_soc_acpi_intel_cherrytrail_machines[] = {
>  		.sof_tplg_filename = "sof-cht-src-50khz-pcm512x.tplg",
>  	},
>  	/*
> -	 * Special case for the Lenovo Yoga Tab 3 Pro YT3-X90 where the DSDT
> -	 * misses the codec. Match on the SST id instead, lenovo_yt3_x90_quirk()
> -	 * will return a YT3 specific mach or NULL when called on other hw,
> -	 * skipping this entry.
> +	 * Special case for the Lenovo Yoga Tab 3 Pro YT3-X90 and Lenovo
> +	 * Yoga Book YB1-X90 where the DSDT misses the codec. Match on the
> +	 * SST id instead, cht_quirk_nocodec() will return a machine-specific
> +	 * mach or NULL when called on other hw, skipping this entry.
>  	 */
>  	{
>  		.id = "808622A8",
> -		.machine_quirk = lenovo_yt3_x90_quirk,
> +		.machine_quirk = cht_quirk_nocodec,
>  	},
>  
>  #if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH)


  reply	other threads:[~2026-02-18 10:51 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-17 23:13 [PATCH v1 0/2] Add ASoC machine driver for Lenovo YB1 tablets Yauhen Kharuzhy
2026-02-17 23:13 ` [PATCH v1 1/2] ASoC: Intel: cht_yogabook: Add driver for Lenovo Yoga Book tablets Yauhen Kharuzhy
2026-02-18 10:31   ` Pierre-Louis Bossart
2026-02-18 22:37     ` Yauhen Kharuzhy
2026-02-17 23:13 ` [PATCH v1 2/2] ASoC: Intel: soc-acpi-cht: Add Lenovo Yoga Book entries Yauhen Kharuzhy
2026-02-18 10:35   ` Pierre-Louis Bossart [this message]
2026-02-18 22:45     ` Yauhen Kharuzhy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3ff76f35-be88-4281-be92-ec8f1e160651@linux.dev \
    --to=pierre-louis.bossart@linux.dev \
    --cc=broonie@kernel.org \
    --cc=cezary.rojewski@intel.com \
    --cc=hansg@kernel.org \
    --cc=jekhor@gmail.com \
    --cc=liam.r.girdwood@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sound@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.