Received: by 2002:ac0:e34a:0:0:0:0:0 with SMTP id g10csp716259imn; Tue, 26 Jul 2022 07:30:33 -0700 (PDT) X-Google-Smtp-Source: AGRyM1un+Z8IuUTQ9iLdkqxeJ2hwWJUu4IGXj1/QynRdXBBYKUG/jvuaVsaaXF2WYXK9OCWeV/ol X-Received: by 2002:a63:4c05:0:b0:419:78b2:d775 with SMTP id z5-20020a634c05000000b0041978b2d775mr15085335pga.62.1658845833275; Tue, 26 Jul 2022 07:30:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1658845833; cv=none; d=google.com; s=arc-20160816; b=H/GHWajXqOnLsfX3PQdJFxmmsscCJoPsgguNG6fZ3T4sTourircY1IT18ebHfSYoh2 INwr5tNt4o/3vZT7rB9Wp+tSNeVL9NsmldbIm1yFQEeZD4S2cjv12KQAhvEUqm4PwE9g noxZlDjW5Q/OcG1MVR7hk1VgDne+dAOQuo6cB8zLAuM8BW04/tmjVkdYvU/NqdI+JIIb tNOniDpFVYJrP0/gUlV+EWjar3GJuB5geMWmpbCwPUS83lUEzrZDgYCFdt0Vz4ud/7Eh sj8WHBH2UIxN2rS/8qAwfydcItpj9mCmqbvVV6qBU4A5nrHaueHXZCpEiEudJ9hlHvHX GcEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=4HZ77gT3UYugSEYibBUwTnGXjWmBzs6W8apWPc7c5Z0=; b=qDYr88HGAXrxg0xBc1bu79iE1HDB+hoAM/k2M9PunYWMfV+aQfJJ//6HISdx+ouMf3 ClurTsb8MhtZJnKDAMwqZRRJiFzMoEs8I3pSPudR7HjBrhgudGm1XKfZsSaCeiNWO7Xp dXoZPBUrHrSrOxo+T0v9ljxWna0wccn1V2JD7J87Rbz9Fk36ttjVMQu/9uWxKiYubnht aoqmdDy2y+ECC6LycGhgax5+L9YbGjpqZveEa5U0gmbtw4eGWrbCToEYoP/BldE/gH/Q KSCkeTLkkg1cNDhlacXrSrWUh7lMZHa3Qu0o8v526uyafturWOcwwiP71iHV78E8cylX WPRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cirrus.com header.s=PODMain02222019 header.b=YVMiMawT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=cirrus.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x26-20020a63b21a000000b004126d5fa836si19256570pge.182.2022.07.26.07.30.17; Tue, 26 Jul 2022 07:30:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@cirrus.com header.s=PODMain02222019 header.b=YVMiMawT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=cirrus.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233523AbiGZNrA (ORCPT + 99 others); Tue, 26 Jul 2022 09:47:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59772 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231395AbiGZNq7 (ORCPT ); Tue, 26 Jul 2022 09:46:59 -0400 Received: from mx0b-001ae601.pphosted.com (mx0b-001ae601.pphosted.com [67.231.152.168]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C6A6D1E3C8 for ; Tue, 26 Jul 2022 06:46:57 -0700 (PDT) Received: from pps.filterd (m0077474.ppops.net [127.0.0.1]) by mx0b-001ae601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26Q4TPHH032253; Tue, 26 Jul 2022 08:46:46 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cirrus.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding : content-type; s=PODMain02222019; bh=4HZ77gT3UYugSEYibBUwTnGXjWmBzs6W8apWPc7c5Z0=; b=YVMiMawTj9DjUVHXvy0UOqVxcotn4AD7IsTPhEs87H9uqPshujWfTaW/rmbZjthlQAlS LGLIoEgV/+Qvzh/lD6trnWBtEmLgYRxH4rt8NxShKRimSNXeLffeKdW1Nmazccl7+Z/N BFPCaNoYUqMCZnDnnMXfqJv57C9ibgtpWm/RLmiARLc2ufLN8TadvLeir0zzWHwFaijn md7YYhiyHC+1Y4SNE2aod+b7/uDT9VC1UB7cliR/GQMKiGcU6sqmLz9DLoDsI8HnA1BB WXgalP48EPhhNDsCK/4mIw/f84y+tFiHCh2BeElPpquSofYdai56dZncZvt6pNXocIRW MQ== Received: from ediex01.ad.cirrus.com ([84.19.233.68]) by mx0b-001ae601.pphosted.com (PPS) with ESMTPS id 3hgddp3hg6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 26 Jul 2022 08:46:45 -0500 Received: from ediex01.ad.cirrus.com (198.61.84.80) by ediex01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.9; Tue, 26 Jul 2022 08:46:44 -0500 Received: from ediswmail.ad.cirrus.com (198.61.86.93) by anon-ediex01.ad.cirrus.com (198.61.84.80) with Microsoft SMTP Server id 15.2.1118.9 via Frontend Transport; Tue, 26 Jul 2022 08:46:44 -0500 Received: from sbinding-cirrus-dsktp2.ad.cirrus.com (unknown [198.90.202.160]) by ediswmail.ad.cirrus.com (Postfix) with ESMTP id 05E4E2C5; Tue, 26 Jul 2022 13:46:44 +0000 (UTC) From: Stefan Binding To: Mark Brown , Liam Girdwood , Pierre-Louis Bossart , Brent Lu , xliu CC: , , , Stefan Binding , Vitaly Rodionov Subject: [PATCH v1] ASoC: Intel: cirrus-common: Use UID to map correct amp to prefix Date: Tue, 26 Jul 2022 14:46:34 +0100 Message-ID: <20220726134634.2842185-1-sbinding@opensource.cirrus.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-GUID: tray4QtAiO20RqjTC30X5rerLhFMTwQN X-Proofpoint-ORIG-GUID: tray4QtAiO20RqjTC30X5rerLhFMTwQN X-Proofpoint-Spam-Reason: safe X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since the order of the amps in the ACPI determines the device name, and the ACPI order may change depending on hardware configuration, use UID to dynamically compute the dai links, allowing dynamic assignment of the name_prefix. Signed-off-by: Stefan Binding Signed-off-by: Vitaly Rodionov --- sound/soc/intel/boards/sof_cirrus_common.c | 73 +++++++++------------- 1 file changed, 31 insertions(+), 42 deletions(-) diff --git a/sound/soc/intel/boards/sof_cirrus_common.c b/sound/soc/intel/boards/sof_cirrus_common.c index f4192df962d6..a96bc70a34d7 100644 --- a/sound/soc/intel/boards/sof_cirrus_common.c +++ b/sound/soc/intel/boards/sof_cirrus_common.c @@ -10,6 +10,9 @@ #include "../../codecs/cs35l41.h" #include "sof_cirrus_common.h" +#define CS35L41_HID "CSC3541" +#define CS35L41_MAX_AMPS 4 + /* * Cirrus Logic CS35L41/CS35L53 */ @@ -35,50 +38,12 @@ static const struct snd_soc_dapm_route cs35l41_dapm_routes[] = { {"TR Spk", NULL, "TR SPK"}, }; -static struct snd_soc_dai_link_component cs35l41_components[] = { - { - .name = CS35L41_DEV0_NAME, - .dai_name = CS35L41_CODEC_DAI, - }, - { - .name = CS35L41_DEV1_NAME, - .dai_name = CS35L41_CODEC_DAI, - }, - { - .name = CS35L41_DEV2_NAME, - .dai_name = CS35L41_CODEC_DAI, - }, - { - .name = CS35L41_DEV3_NAME, - .dai_name = CS35L41_CODEC_DAI, - }, -}; +static struct snd_soc_dai_link_component cs35l41_components[CS35L41_MAX_AMPS]; /* * Mapping between ACPI instance id and speaker position. - * - * Four speakers: - * 0: Tweeter left, 1: Woofer left - * 2: Tweeter right, 3: Woofer right */ -static struct snd_soc_codec_conf cs35l41_codec_conf[] = { - { - .dlc = COMP_CODEC_CONF(CS35L41_DEV0_NAME), - .name_prefix = "TL", - }, - { - .dlc = COMP_CODEC_CONF(CS35L41_DEV1_NAME), - .name_prefix = "WL", - }, - { - .dlc = COMP_CODEC_CONF(CS35L41_DEV2_NAME), - .name_prefix = "TR", - }, - { - .dlc = COMP_CODEC_CONF(CS35L41_DEV3_NAME), - .name_prefix = "WR", - }, -}; +static struct snd_soc_codec_conf cs35l41_codec_conf[CS35L41_MAX_AMPS]; static int cs35l41_init(struct snd_soc_pcm_runtime *rtd) { @@ -117,10 +82,10 @@ static int cs35l41_init(struct snd_soc_pcm_runtime *rtd) static const struct { unsigned int rx[2]; } cs35l41_channel_map[] = { - {.rx = {0, 1}}, /* TL */ {.rx = {0, 1}}, /* WL */ - {.rx = {1, 0}}, /* TR */ {.rx = {1, 0}}, /* WR */ + {.rx = {0, 1}}, /* TL */ + {.rx = {1, 0}}, /* TR */ }; static int cs35l41_hw_params(struct snd_pcm_substream *substream, @@ -175,8 +140,32 @@ static const struct snd_soc_ops cs35l41_ops = { .hw_params = cs35l41_hw_params, }; +static const char * const cs35l41_name_prefixes[] = { "WL", "WR", "TL", "TR" }; + +static const char * const cs35l41_uid_strings[] = { "0", "1", "2", "3" }; + +static void cs35l41_compute_codec_conf(void) +{ + int uid; + struct acpi_device *adev; + struct device *physdev; + + for (uid = 0; uid < CS35L41_MAX_AMPS; uid++) { + adev = acpi_dev_get_first_match_dev(CS35L41_HID, cs35l41_uid_strings[uid], -1); + if (!adev) + return; + physdev = get_device(acpi_get_first_physical_node(adev)); + cs35l41_components[uid].name = dev_name(physdev); + cs35l41_components[uid].dai_name = CS35L41_CODEC_DAI; + cs35l41_codec_conf[uid].dlc.name = dev_name(physdev); + cs35l41_codec_conf[uid].name_prefix = cs35l41_name_prefixes[uid]; + acpi_dev_put(adev); + } +} + void cs35l41_set_dai_link(struct snd_soc_dai_link *link) { + cs35l41_compute_codec_conf(); link->codecs = cs35l41_components; link->num_codecs = ARRAY_SIZE(cs35l41_components); link->init = cs35l41_init; -- 2.34.1