Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp330037pxb; Wed, 6 Oct 2021 06:02:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyfSZwDTpltNrKH7uprGxWp2j4X6L1LW2dtfPVjHgK2/gRiR5xWp9zza/D2KuwSzPAO/1/M X-Received: by 2002:a62:31c5:0:b0:447:cd37:61f8 with SMTP id x188-20020a6231c5000000b00447cd3761f8mr36630858pfx.29.1633525323896; Wed, 06 Oct 2021 06:02:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633525323; cv=none; d=google.com; s=arc-20160816; b=pZkL+7htU2tXGhLp1m5h4dTm+6USQVYPiCWaDzDaaefrsYiYKfSQ6Pac1RMqA+4nqX fTBo03KGZ95p7nFEHld/JF9dHbT9FddR3m10nH+S+Q70PjNYaY9cZTPI5GIrz68noFFZ l9H25PYwCjy0OgPk715sdjaQYc74MaFUbg4BqTAkW4Hf0kQu4SlNQvFmT67pAK2dEVOZ 01ljNqzt9L6e8VGjFjBA9berRPgVFHBKnIEfdGSmwxDxH/z/kL4Lj+DNaDZhbGK60/sA gVLXf87WcKKJxZI0TDh8PM9w8lIMVA4lPvfNpPlLG/ePoe4NOMIMa0b/yqZxM4EHEoAS ZrdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=vTzpkjEvLEocZri9dhV5ozl1YxORKId+9lVo7B94bfk=; b=JDBwerLw3Qvuxg1qXBlvtfoJskF0setmXFuCVT6h5lGb09/mNQEv+HJJL5MwwbkJeO CUXhECX2F2yd1p9JpuZINvkGSA0Gpp7Q3AnVvKK7/7GYs5gV6NGJoL+RwHs3CvilxyNS 4naH02Ctr16+vXIm9iOmiJvMMrkPK/cNqTFRsCW2ucLlLI3Ge4gxC502kjOpAl9PF+Il 1Q7So1saVpShvoKl590kNRxt+z1NlVwQzS3wL1pOitUzhQg92rJrTIJWQYyTqXCGlIMi SBvpWpH5EzYdRIFdMALojGmOGQ9T5mPWnWui51cYGj9I11VVZ1yXqgtQObIfU9kuGmmu 7F8Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v63si26091557pfb.3.2021.10.06.06.01.43; Wed, 06 Oct 2021 06:02:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238087AbhJFNCO (ORCPT + 99 others); Wed, 6 Oct 2021 09:02:14 -0400 Received: from mga18.intel.com ([134.134.136.126]:42207 "EHLO mga18.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230008AbhJFNCN (ORCPT ); Wed, 6 Oct 2021 09:02:13 -0400 X-IronPort-AV: E=McAfee;i="6200,9189,10128"; a="212925146" X-IronPort-AV: E=Sophos;i="5.85,350,1624345200"; d="scan'208";a="212925146" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2021 06:00:21 -0700 X-IronPort-AV: E=Sophos;i="5.85,350,1624345200"; d="scan'208";a="439108427" Received: from nbasa-mobl2.amr.corp.intel.com (HELO [10.213.170.135]) ([10.213.170.135]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2021 06:00:20 -0700 Subject: Re: [PATCH] ASoC: soc-acpi: add alternative id field for machine driver matching To: Brent Lu , alsa-devel@alsa-project.org Cc: Liam Girdwood , linux-kernel@vger.kernel.org, Takashi Iwai , Mark Brown References: <20211006084351.438510-1-brent.lu@intel.com> From: Pierre-Louis Bossart Message-ID: Date: Wed, 6 Oct 2021 07:17:46 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: <20211006084351.438510-1-brent.lu@intel.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/6/21 3:43 AM, Brent Lu wrote: > Current design to support second headphone driver in the same machine > driver is to duplicate the entries in snd_soc_acpi_mach array and > board configs in machine driver. We can avoid this by adding an id_alt > field in snd_soc_acpi_mach structure to specify alternative ACPI HIDs > for machine driver enumeration and leave the codec type detection to > machine driver if necessary. I am not following your suggestion. The machine drivers for I2S/TDM platforms are typically based on specific headphone codecs, and they we add possible swaps for amplifiers. The key to find a machine is typically the headphone HID. Exhibit A for this in your own contribution in the recent weeks with the sof_cs42l42.c machine driver. Are you suggesting we unify e.g. sof_rt5682.c and sof_cs42l42.c? The other problem is that today we have one main HID along with 'quirk_data' for amplifiers. If we have alternate HIDs, what would be the rule for quirk_data? Can the quirks apply to all possible alternate HIDs? Only one of them? Without an example where this new alternate ID is used it's hard to see what the ask and directions might be. Care to elaborate? Thanks! > Signed-off-by: Brent Lu > --- > include/sound/soc-acpi.h | 2 ++ > sound/soc/soc-acpi.c | 21 ++++++++++++++++++++- > 2 files changed, 22 insertions(+), 1 deletion(-) > > diff --git a/include/sound/soc-acpi.h b/include/sound/soc-acpi.h > index 2f3fa385c092..fcf6bae9f9d7 100644 > --- a/include/sound/soc-acpi.h > +++ b/include/sound/soc-acpi.h > @@ -129,6 +129,7 @@ struct snd_soc_acpi_link_adr { > * all firmware/topology related fields. > * > * @id: ACPI ID (usually the codec's) used to find a matching machine driver. > + * @id_alt: array of ACPI IDs used as an alternative of id field. > * @link_mask: describes required board layout, e.g. for SoundWire. > * @links: array of link _ADR descriptors, null terminated. > * @drv_name: machine driver name > @@ -146,6 +147,7 @@ struct snd_soc_acpi_link_adr { > /* Descriptor for SST ASoC machine driver */ > struct snd_soc_acpi_mach { > const u8 id[ACPI_ID_LEN]; > + struct snd_soc_acpi_codecs *id_alt; > const u32 link_mask; > const struct snd_soc_acpi_link_adr *links; > const char *drv_name; > diff --git a/sound/soc/soc-acpi.c b/sound/soc/soc-acpi.c > index 395229bf5c51..ab67d640c20f 100644 > --- a/sound/soc/soc-acpi.c > +++ b/sound/soc/soc-acpi.c > @@ -8,6 +8,25 @@ > #include > #include > > +static bool snd_soc_acpi_id_present(struct snd_soc_acpi_mach *machine) > +{ > + struct snd_soc_acpi_codecs *id_alt = machine->id_alt; > + int i; > + > + if (acpi_dev_present(machine->id, NULL, -1)) > + return true; > + > + if (id_alt == NULL) > + return false; > + > + for (i = 0; i < id_alt->num_codecs; i++) { > + if (acpi_dev_present(id_alt->codecs[i], NULL, -1)) > + return true; > + } > + > + return false; > +} > + > struct snd_soc_acpi_mach * > snd_soc_acpi_find_machine(struct snd_soc_acpi_mach *machines) > { > @@ -15,7 +34,7 @@ snd_soc_acpi_find_machine(struct snd_soc_acpi_mach *machines) > struct snd_soc_acpi_mach *mach_alt; > > for (mach = machines; mach->id[0]; mach++) { > - if (acpi_dev_present(mach->id, NULL, -1)) { > + if (snd_soc_acpi_id_present(mach) != false) { > if (mach->machine_quirk) { > mach_alt = mach->machine_quirk(mach); > if (!mach_alt) >