From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f25.google.com (mail-pj2-f25.google.com [74.125.227.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 909623438B9 for ; Sun, 20 Sep 2026 04:55:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.153 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880121; cv=none; b=MKOG4pI8fUghbUscvGDwZ2CdJus9795T8OrFXgqaCwfdiwoWaE5xL1dflI1DYd2ozGalMymvmHpn5dl1zwJWG266wNOuHYipVyJVmKsWYR3rPt+0/wLATrY3bx+5GjM0bKUvnTV39wWcElefhrLKZAzCX3wCEqncAoI/H45iWeI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880121; c=relaxed/simple; bh=uepsaU3slwYEfLHfsvhyLbAvmuRviSvpWKO9IAQavXE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NTDzXz9V/Nj3d14/SmkqcHVJtxBurEFY8fcvJxwyDqnUYBJtWyo3xlzIFwxR95fL2mZvLB7QHDObmiUn7HZrhxF5xh0E8+1rohSOd3fMjZ/R1k1msTwNnCIlepJr4FChlNCMs34Zykug38wNXbfzQtwJyjL0qj42zQqSQ452fVM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GeIwS8nD; arc=none smtp.client-ip=74.125.227.153 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GeIwS8nD" Received: by mail-pj2-f25.google.com with SMTP id d9443c01a7336-2dd4b43b20bso13298415ad.1 for ; Sat, 19 Sep 2026 21:55:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880119; x=1790484919; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=KogKCVIDydzzLBHYMHz25ygPrnoGlSNxk56qzP4OHdo=; b=GeIwS8nD5H5wy3+4GbbAdxxF/tb3jpO38tvqcfH39z2jTHFCspovb0bMvuhyMyqUro 33pv7GBulFBL5Ca/ii0fJs/LFaAn+0+eAY+kZ92qUBYQrnLL/wgA9er7ifM3FgJswl1C m5UJYoRaxc5sskaqwgIb1/kGHPsDfO4EfoifaaQetD+iSL+aKxK/RZvRUnuNJdfRl9Tf JxMARGH7UsFmvMQaQPmgC6XwdaLH/nwkBRFjubFEp1AERLIm3AkWc2g5KKPmMXM6YLHh gr5Ye7ljBeLBwCldI5PmTDTIpUiYjhms+pgBk0sh+GDhpuM6oIbwzjdiWGZW9VeRmQWh BWAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880119; x=1790484919; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=KogKCVIDydzzLBHYMHz25ygPrnoGlSNxk56qzP4OHdo=; b=q9O9toWIf1RiDZVxBJTO3y5PoEFuvWlQmWwc6wax9OsCNobvatkRM6MRqNhzJkCWZe TSQncB9rpOI+Qrhg1K7aH0JyxrwACHKDTeg1fHn4bkLjerV5Y12t+uuIER8yMPkex+W/ MKMeYBUHdlsaimMbXoBQXy39WUW26CKra8V7DnnPppNDudQ1llAEAmcMTtMYbNVSwYcs b9IFVa82wYwP+ccNQElfeyf9tpCdIWMSofsbPOCgD4RXZy8DXup6orzGNWN//S32SFjP l+AaWGaMJve1zjAosR/MMUdyxBUPqSabK0tZ1k69lRrDD9XVJTAHEHDlmM/NHZ/likgU aWSw== X-Forwarded-Encrypted: i=1; AKwUvBwcY/Gez4+OjScD9D02BTv6wGHnPQsITxP1E3FUaHp3LE2ZqpyaWybMNynIyynu5Aj4tfR2tgRQXvsh+dY=@vger.kernel.org X-Gm-Message-State: AFuF++lus14oyOWio2ze6RkAEWrcQMoKJgUmmK7SSz8jp7lEpxQ7FlnZ 5eXjPKygZ7i7hTP64WeZZNiUvQBbuJLPA5uHNi6Z9gz+69Ei1WEBh+1q X-Gm-Gg: AYBFou0Hpbj6up6jnxLlfoFF+9T/SVT/ZCOwE8w9thYhQSe6SZ8xzrdeMRiPmz3yu8N Fs46g6vQW1xD3nH7J8oZKWvKVd1Ds9k5IEcW2KFedLron9Iw8Na59pSiFQ/DETaNxUXClCW4wjl Nb15+axGp2IRT+JltE9rnHnWqyeAd7NHNebw/0BBoJQ9r6fdbxDdaDtkZEXT4eEptVAV0CN2ddq L6ZE/zGi74S8GvrrkhSo+9ji4yldGznMhSAlhjqZtv7ON4wikALz7cCCHZERU4LECPAOnHfh+As 8EOajYuIEMOf/Sg4ytoSBJQ+Yq6mdbjLuq+w6MkdFtwgE9jGempLMhQ/aFj5pm1uR1Sja+hOtUw GLA0+DUrZYl69Zkna4eosgZvlznkr0sbkfto88mUkZGPjOvItEN9NxrMMtJt8EekOcv4TVhAtfu zfofbpV8fkRcz3SZCC2VI85UJGUybX1ZpgzDvQldK04j5kH8w8PlSa44IuGvXxOKMiqcWPU+JMN oovLcwuIQCSap96kRiJPO27kHAULTN1cQwrc5Ft300o+DqMJgt6tpkJMD6gccqw3m5M7fz3b2G5 gi+7ZjGP4cKbSfhzsfXmG8c+96TTupKlvoBKROy0XCCIl2s= X-Received: by 2002:a17:903:28e:b0:2dd:c100:4253 with SMTP id d9443c01a7336-2ddc10044f8mr51621965ad.55.1789880118819; Sat, 19 Sep 2026 21:55:18 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.55.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:55:18 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:40 +1000 Subject: [PATCH 01/28] dt-bindings: sound: Add Apple Macs sound peripherals Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-1-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7900; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=RNoeFTf5GkP7c5biu82Rkx8kHDbaSest5BhJxhVEVws=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0+U3Vq8T/1Q9z8vgxF5Dn9eLdjy47Hzf1L30cT5Hx r6Dp1T2d0xkYRDjYrAUU2TZ0CTkMduI7Wa/SOVemDmsTCBDpEUaGICAhYEvNzGv1EjHSM9U21DP 0EjHWMeIgYtTAKb6MifDf8+NNp/2Ffd5+ByRn7I7r9qXl/1c7LNftzf3rmDi+JLWfI6R4e/qJI6 5rgt2Lei4/lPwf9xCnaqcer1lqVkiuu4m71y3MQAA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er Add binding for Apple Silicon Macs machine-level integration of sound peripherals. Signed-off-by: Martin Povi=C5=A1er Co-developed-by: James Calligeros Signed-off-by: James Calligeros --- .../bindings/sound/apple,macaudio.yaml | 235 +++++++++++++++++++++++++ 1 file changed, 235 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/apple,macaudio.yaml b/= Documentation/devicetree/bindings/sound/apple,macaudio.yaml new file mode 100644 index 000000000000..bd844c9928c9 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/apple,macaudio.yaml @@ -0,0 +1,235 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/sound/apple,macaudio.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Sound peripheral integration for Apple Silicon Macs + +description: + This binding represents the overall machine-level integration of sound + peripherals on Apple Silicon Macs, starting with the M1 series. + +maintainers: + - James Calligeros + +properties: + compatible: + oneOf: + - description: First-of-their-kind machines + items: + - enum: + - apple,j180-macaudio + - apple,j274-macaudio + - apple,j293-macaudio + - apple,j313-macaudio + - apple,j314-macaudio + - apple,j316-macaudio + - apple,j375-macaudio + - apple,j413-macaudio + - apple,j415-macaudio + - apple,j473-macaudio + - apple,j456-macaudio + - apple,j457-macaudio + - const: apple,macaudio + - description: Machines compatible with J293 + items: + - enum: + - apple,j493-macaudio + - const: apple,j293-macaudio + - const: apple,macaudio + - description: Machines compatible with J314 + items: + - enum: + - apple,j414-macaudio + - apple,j504-macaudio + - apple,j514-macaudio + - const: apple,j314-macaudio + - const: apple,macaudio + - description: Machines compatible with J316 + items: + - enum: + - apple,j416-macaudio + - apple,j516-macaudio + - const: apple,j316-macaudio + - const: apple,macaudio + - description: Machines compatible with J375 + items: + - enum: + - apple,j475-macaudio + - apple,j575-macaudio + - const: apple,j375-macaudio + - const: apple,macaudio + - description: Machines compatible with J413 + items: + - enum: + - apple,j613-macaudio + - const: apple,j413-macaudio + - const: apple,macaudio + - description: Machines compatible with J415 + items: + - enum: + - apple,j615-macaudio + - const: apple,j415-macaudio + - const: apple,macaudio + - description: Machines compatible with J473 + items: + - enum: + - apple,j474-macaudio + - const: apple,j473-macaudio + - const: apple,macaudio + + "#address-cells": + const: 1 + + "#size-cells": + const: 0 + + model: + description: + Model name for presentation to users + $ref: /schemas/types.yaml#/definitions/string + +patternProperties: + "^dai-link(@[0-9a-f]+)?$": + description: | + Node for each sound peripheral such as the speaker array, headphones= jack, + or microphone. + type: object + $ref: tdm-slot.yaml# + + additionalProperties: false + + properties: + reg: + maxItems: 1 + + link-name: + description: | + Name for the peripheral, expecting 'Speaker' or 'Speakers' if th= is is + the speaker array. + $ref: /schemas/types.yaml#/definitions/string + + cpu: + type: object + + properties: + sound-dai: + description: | + DAI list with CPU-side I2S ports involved in this peripheral. + minItems: 1 + maxItems: 2 + + required: + - sound-dai + + codec: + type: object + + properties: + sound-dai: + minItems: 1 + maxItems: 8 + description: | + DAI list with the CODEC-side DAIs connected to the above CPU= -side + DAIs and involved in this sound peripheral. + + The list is in left/right order if applicable. If there are = more + than one CPU-side DAIs (there can be two), the CODECs must be + listed first those connected to the first CPU, then those + connected to the second. + + In addition, on some machines with many speaker codecs, the = CODECs + are listed in this fixed order: + + Four speakers: Left Front, Left Rear, Right Front, Right Rear + Six speakers: Left Woofer 1, Left Tweeter, Left Woofer 2, + Right Woofer 1, Right Tweeter, Right Woofer 2 + + required: + - sound-dai + + patternProperties: + "^dai-tdm-idle-mode-[0-9]$": + $ref: tdm-slot.yaml#/properties/dai-tdm-idle-mode + + "^dai-tdm-slot-tx-idle-mask-[0-9]$": + $ref: /schemas/types.yaml#/definitions/uint32 + description: Idle slot mask. A bit being set to 1 indicates + that the corresponding TDM slot is inactive/idle. + + required: + - reg + - cpu + - codec + +required: + - compatible + - model + +additionalProperties: false + +examples: + - | + mca: mca@9b600000 { + compatible =3D "apple,t6000-mca", "apple,mca"; + reg =3D <0x9b600000 0x10000>, + <0x9b500000 0x20000>; + + clocks =3D <&nco 0>, <&nco 1>, <&nco 2>, <&nco 3>; + power-domains =3D <&ps_audio_p>, <&ps_mca0>, <&ps_mca1>, + <&ps_mca2>, <&ps_mca3>; + dmas =3D <&admac 0>, <&admac 1>, <&admac 2>, <&admac 3>, + <&admac 4>, <&admac 5>, <&admac 6>, <&admac 7>, + <&admac 8>, <&admac 9>, <&admac 10>, <&admac 11>, + <&admac 12>, <&admac 13>, <&admac 14>, <&admac 15>; + dma-names =3D "tx0a", "rx0a", "tx0b", "rx0b", + "tx1a", "rx1a", "tx1b", "rx1b", + "tx2a", "rx2a", "tx2b", "rx2b", + "tx3a", "rx3a", "tx3b", "rx3b"; + + #sound-dai-cells =3D <1>; + }; + + sound { + compatible =3D "apple,j416-macaudio", "apple,j316-macaudio", "apple,= macaudio"; + model =3D "MacBook Pro J416"; + + #address-cells =3D <1>; + #size-cells =3D <0>; + + dai-link@0 { + reg =3D <0>; + link-name =3D "Speakers"; + + dai-tdm-idle-mode-0 =3D "zero"; + dai-tdm-idle-mode-3 =3D "zero"; + dai-tdm-slot-tx-idle-mask-0 =3D <0xf0f0f0>; + dai-tdm-slot-tx-idle-mask-3 =3D <0x0f0f0f>; + + cpu { + sound-dai =3D <&mca 0>, <&mca 1>; + }; + + codec { + sound-dai =3D <&speaker_left_woof1>, + <&speaker_left_tweet>, + <&speaker_left_woof2>, + <&speaker_right_woof1>, + <&speaker_right_tweet>, + <&speaker_right_woof2>; + }; + }; + + dai-link@1 { + reg =3D <1>; + link-name =3D "Headphones Jack"; + + cpu { + sound-dai =3D <&mca 2>; + }; + codec { + sound-dai =3D <&jack_codec>; + }; + }; + }; --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f14.google.com (mail-pj2-f14.google.com [74.125.227.142]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 94C8A3803D7 for ; Sun, 20 Sep 2026 04:55:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.142 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880130; cv=none; b=tuaKee2/4jM2j29SOFnoGVb9ctJDDAI+XDQ+5CWDqoPy818HPAUpL5QoEqKPwdv7LUyyTYqBvrzhcllPiCLKzHs93XEWMnvdqpSThCyumorszPVgFqpr0PY1s3BZubtxlGWjcaZd3Tjsgui/2iiRaIjZLes2MzYsdJSyKGVqzHg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880130; c=relaxed/simple; bh=pv2gkAEIZ5zw2KW9xVGxwYIrZhPA6WLMHSM1zupGGAk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PyFVZeaZNqfuxFJWRIeqEdy3ywemzQg9kcKHPSFGR+DM/28fW/DoCG1gmN0ZxSKYtYo93H1Nw5gNmAj/tzWeoReVqopsXJiAaNs2ndFJgVvh8mSEv4tO8PIdLWVxRKDGcRMD1yjDg3jB/4+LnGnIeZD8PCJDnU5c+Xf/65IJH3M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KbTojVNN; arc=none smtp.client-ip=74.125.227.142 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KbTojVNN" Received: by mail-pj2-f14.google.com with SMTP id d9443c01a7336-2d747f0135fso19124835ad.0 for ; Sat, 19 Sep 2026 21:55:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880128; x=1790484928; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=6GkASic1hpzs9f+gvFBpKnk1ih+SNPRQduHprBjjh18=; b=KbTojVNNZE/32Iw95SaFTeRqi2OGv0TOdAZf1sqN3OcIPpz02uM2dskTokK7we47w+ F59m2gNBUuV3NwLvLAdViqFfuGYvtzOXcu01TQVIEmLbMi3aaKWObgUwPdFJd9/6aBb6 aoDRD5RMoyWf5q7pvWzIXQcKQbSeo86YzLWt9AWouRVkKg7D0T1L50znJVTLWSEw1rYm 1VX9xtU1m9bUffY/Y/aI26duSpa6jSEcJkT8MuzoDsXVz7Xo8C3M0extUuWA0DEQp3ON PdBj1wmV66wn/Rznx5mu3foeKQVhsYaAuam21vYr/OI21gR63mMSmt+NUiYdY+gOOIoQ RUNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880128; x=1790484928; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=6GkASic1hpzs9f+gvFBpKnk1ih+SNPRQduHprBjjh18=; b=FqT2bF8evCtWBLy3qqPJzEJIWCxHTHAAnU4GYSnwG6OX6lXdXyKjDw8qTrb0RTdmtX nUu4c/+wjw4ZbBEFf4AXk+pbX0apieuCYIzOL/8FhsVLpMqmZmb5yCiFGcA6nJDVBu1V gCKH2YF68sPBHL8sZj+Plv29OZvnCAKikqmpmy6y5MckMViakhWcaKQj6AsxppbBuglB +g1XlmH+1KaMaW8RNi6BtVWpw4HyY6k0UT83pELg3gE9xpB+4yaQd1URQi1c/YKlyCNa pE2EUdTCJ0CSdmJTKesRwAzUYZL2e3d2ZqZyTrAjW3GpJoV97/GGQ1N/zRahxcdzC+/7 hW5A== X-Forwarded-Encrypted: i=1; AKwUvBwVhu4e7mcGaIM5cSE+dCUzb3vR3l754+fDDP3hCko8/zdJftY+8kG4jxnfkfLsVhEZxRFwVGA+JjNnFuQ=@vger.kernel.org X-Gm-Message-State: AFuF++lUMjHybY62vQ5UfXKKFsLSQ7wU6PrGNah/H5o7bIDoyt8DL0zG tEbB6BHNpJQyg+hjjlxMFxbpLHsZTMPOMU5CUIbNu4xbgycI2iz5SdcC X-Gm-Gg: AYBFou1mBzs17aOdVC51AAh133E70ZXYWmchPOEgFmVSTa4Ra3kAxs1lK8A2iav7NFB rpFd1jKJJpl9rFsQlp+BbD1GEUdVCShF/W2yoGgcKIdjavUUo08H2XD7Tqi4m2aGfwfk6tG/DjP /Rcfgc5lbUdW23VxEnL4LBO9XTH/U0f9dyStoRyQf1Cw9ve9ph8q4v1h2TcG+5h8fZVqVW+WppB G+kqs/vtlIgglXC/fdazFV1j2KKRrw/eBIOjHwDC8nDeF3IkaWi18mXOwx7JteQf5lmY+O4eOIC 9HBaWAgNmJYpk3o0yTquP681A+UIJfaILRyKr+8+ViZfpESbghis7FaxXv2Gpo8IH99WWLyACXT REMAv/Tc2BNQeH97QwtSeVmtbtUs+Bw7ZU17amBekRkktLQr2OL+tvMTVmQJyxCynDuoyS2ALEv VyWnzVBPuzyeFico9QAhwtH7bWUiElGqr30jOsh73SYRWJZC2BG4t5+ZHSR+FWIo85JGXMRJi4q 9UFo95YtGxONsXBFJLD2RBvBYUy9WhIJdnUtwVepyIvVbihgCI7p7RHuNZ+j1bu1uFbrmI/MHdH QNGQOsIDxn98zUKv0bsAKXe/as+f6ZqHj27+CE9wsHqx+1183g3Dy0crSA== X-Received: by 2002:a17:903:1246:b0:2dd:ad74:ac81 with SMTP id d9443c01a7336-2ddb1bbfe2dmr111629155ad.28.1789880127792; Sat, 19 Sep 2026 21:55:27 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.55.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:55:27 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:41 +1000 Subject: [PATCH 02/28] ASoC: cs42l42: Fix typo Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-2-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org, =?utf-8?q?Martin_Povi=C5=A1er?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=847; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=RKZhvpz4A2rORIqdl27bjjryHeuUXe6kyHBpGORO8M0=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0+U3+zQnhu+zaJQKbtE55GvuMdeJjUP0Xn+D6iO1s kfcag4dE1kYxLgYLMUUWTY0CXnMNmK72S9SuRdmDisTyBBpkQYGIGBh4MtNzCs10jHSM9U21DM0 0jHWMWLg4hSAqRZxZvjv09Fj/vVMx40H1RefGF4ryvsty2485Ub2Gn7jwwt+e7WcZmR4oruqv/L X3j3Zqp6fA2dZMNX5TDt+qnrCrGgbgfol+he5AA== X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er Fixes: 2c394ca79604 ("ASoC: Add support for CS42L42 codec") Signed-off-by: Martin Povi=C5=A1er Signed-off-by: James Calligeros --- sound/soc/codecs/cs42l42.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c index 9e40c03ada4e..b5d69d5516a6 100644 --- a/sound/soc/codecs/cs42l42.c +++ b/sound/soc/codecs/cs42l42.c @@ -1682,7 +1682,7 @@ irqreturn_t cs42l42_irq_thread(int irq, void *data) if (cs42l42->suspended || !cs42l42->init_done) return IRQ_NONE; =20 - /* Read sticky registers to clear interurpt */ + /* Read sticky registers to clear interrupt */ for (i =3D 0; i < ARRAY_SIZE(stickies); i++) { regmap_read(cs42l42->regmap, irq_params_table[i].status_addr, &(stickies[i])); --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7A42B175A95 for ; Sun, 20 Sep 2026 04:55:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880138; cv=none; b=s9tX7u4blCcZx7EWpvp2jU8h4B2h0ejZ4j4rudelhAx+xPXGb2j1dxOl/5kPmu3tCBk6AikJfa2R+6sGY+l7sZgP2qjJu5D9KIHis8x2auNPBxPcR+BBBojwstfemfkoDPzBK4u3CWKeQkItf+KAJySk2OJx7dfLe1FB4CQ0hys= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880138; c=relaxed/simple; bh=vjc8kzENgz6iKNAy+aA+ET9iiFQ96+MVJmNToH4ibVY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=q4oH/irlK4nZs+OfbJD1p7ot0NLxKBeLGUu4cKzAQj4803tOiKdyGHnNSO2rEhLKtBU2IWwDWIvRAEsdprlyXLx8JZzcowk5U1FYWtpz6cxCFQXYbIQHgxguVSRAtlBRPQB3b7WUkZJ8yYBPfdlpz8Km6vD5JIHtiK1890z0by8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=YhNsfMsK; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YhNsfMsK" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2d747f066d8so6961885ad.1 for ; Sat, 19 Sep 2026 21:55:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880137; x=1790484937; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=guh9SUKBNUNAFe1CPJL5pC07OGZIVIcs9iIVSylPf+8=; b=YhNsfMsK0qk6onzsVi58+SzI9I3WoyBfqN4CqEjUIBImnWEhhFpsM0ryqMru1niaN/ TtBpZo/vEaOmhVFIp+tzkY4D9aJt6pwTlv0iEFtgCTEnXIX2aRPQuVph9lfLhLDf09Qh rEnips7XyrbCo8HIRrawhZBA2wkgrEohk1ILg0/RSsG2t5hky4HLwVJu4qCYTdis+XbL 9f88hWyjeJkiN7qJSPxDZcuigFbPnSUU9rWpHr6oKgKO2qZRXIT3lNY7ErKCWY+zKQo5 nHKEUpYaPbdBg26ozTzWt3LaHhDqJusFr0DtsSvAND35I0+Nhx/by8XPxbw32ppfI0KI 7E2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880137; x=1790484937; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=guh9SUKBNUNAFe1CPJL5pC07OGZIVIcs9iIVSylPf+8=; b=yHDwICutokNNnEmTth6ySSJzrCmP+jeHMtrWXeTgkCCA3vNRShqipECL0nLbT99Dxj TBjTDpRVpuZdLBKpJnn/NIVMz0baFbmYdng814OKWqvEMJrT+wrgQWgtB5sQ4XJ1Nccf jgoYHlYyCr+sdbC2Puk7PN42ksOot8QGXXOuhSXttZjEDA82S14IibzecNg6PC+WxAVj 5wn34hQC3I2HEHFvauyIT7ELvwiTOGOaATgD4AhEV/tYsRw7WWAbyiaE9+HZxoQ6CaSD iwR5xVcGuA7Y7bT23G+UjkZvS2y5RDYmR7YUe1ZjEv6si5kHxJOjickUKgFYO2UylL5E OpwA== X-Forwarded-Encrypted: i=1; AKwUvBzSezcv8SjxYNFnJ2cyMzCQTiHkKJUQTOzuNZUsdkLMVwD6fAB3e0rZTinUdSYeE/jj0ehdrEfggU0mwb0=@vger.kernel.org X-Gm-Message-State: AFuF++n2LQnIYEFu+y2qo0wSQnt7HO2fN1l+MnLlfCYDkvBk3gZMI0o1 xl5SUYEdAGmdgcQQBtmTE8LKctBkcNIBDlVHGkYC0yZVhl15HFM7jGO8 X-Gm-Gg: AYBFou2wtQywyIftEACLfdMyk+1ykiHMQQquff29A6EKP090yDhTFu5N8Q9pTdJbrT7 onco+zO2afLufJ1yA1RsOr/scm3rquLWYSFMWcRs5uc5ddb0GvRbOINn4YwcxBs31bHPI+d0a9S EHHizW5OcgAsvi8fnQ9S2fbesHH+jjqpE2YLdNje8qRZ0cFmrKlrdxqMm90ZPEyuZlVAssvGMj/ rG63svrYu2U4AWZjLky1FWOjdI7dNR1COExRJGNd9sw0YPExZVFFfOgrVozxi5z6I7mZcLGOn/u 3RMXOlgcfStMHnsvzBKGBMOhmqGirbTXGab8wVtbKGWOFV7CzY9l2ezVtNUfknHn2kTE5yX/aDr LSx5ek39YC5dfqapyJ8v1AiZ5pP1PUGPYPXaUryreFxShyLXfW9gE7l3HA8mHvyFxOS65BU6MEI +fkbhdxus4CPoHFwnT7CGhhELr3EFyOlhTAtH2regpEAt9LsO7w8J229sFPiu2hspLYlLxPw4Bo ZM41DMoVvZ4je5WT5kqMDpfWSpSDqm5KuVaHTRIGIqhQ3I9OIBFC4JuoaVRTLVtCcctcbJrT5Q8 VGRV6uETqfvuS9UuLvYWZh1+C1PhGMeKbicvHptjkNg0k9c= X-Received: by 2002:a17:903:3b90:b0:2dd:c100:251c with SMTP id d9443c01a7336-2ddc1002582mr42342795ad.37.1789880136783; Sat, 19 Sep 2026 21:55:36 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.55.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:55:36 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:42 +1000 Subject: [PATCH 03/28] ASoC: cs42l42: Set a faster digital ramp-up rate Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-3-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org, Hector Martin X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2168; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=OmSPjK7SUuOGMGgXmxuIo+R2IFqwguXc6h4eMDL7B9Y=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0+UPyfalrpv1r+xTfu2HLE4JBaWJnIbuCs4xLr/5f j7JPX+yYyILgxgXg6WYIsuGJiGP2UZsN/tFKvfCzGFlAhkiLdLAAAQsDHy5iXmlRjpGeqbahnqG RjrGOkYMXJwCMNU3NBj+6VWfZumKncEUeYQh9bx1/ZJCiWl7v/0OePDm0bym69Z1Oxn+F3iHLD6 yt/urYQ8zk7cEo0T99E9aWpIxG7Ysk69699SeDQA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin With the default ramp-up rate, there is a noticeable fade-in when streams start. This can be undesirable with aggressive muting for power saving, since the beginning of the stream is lost. Lower the digital output ramp-up time from 8 samples per period to 2 samples per period. This still leaves some fade-in to avoid pops, but it is a lot less noticeable and no longer feels like the stream is fading in. Fixes: 2c394ca79604 ("ASoC: Add support for CS42L42 codec") Signed-off-by: Hector Martin Signed-off-by: James Calligeros --- include/sound/cs42l42.h | 4 ++++ sound/soc/codecs/cs42l42.c | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/sound/cs42l42.h b/include/sound/cs42l42.h index 1bd8eee54f66..b3657965d491 100644 --- a/include/sound/cs42l42.h +++ b/include/sound/cs42l42.h @@ -62,6 +62,10 @@ #define CS42L42_INTERNAL_FS_MASK (1 << CS42L42_INTERNAL_FS_SHIFT) =20 #define CS42L42_SFTRAMP_RATE (CS42L42_PAGE_10 + 0x0A) +#define CS42L42_SFTRAMP_ASR_RATE_MASK GENMASK(7, 4) +#define CS42L42_SFTRAMP_ASR_RATE_SHIFT 4 +#define CS42L42_SFTRAMP_DSR_RATE_MASK GENMASK(3, 0) +#define CS42L42_SFTRAMP_DSR_RATE_SHIFT 0 #define CS42L42_SLOW_START_ENABLE (CS42L42_PAGE_10 + 0x0B) #define CS42L42_SLOW_START_EN_MASK GENMASK(6, 4) #define CS42L42_SLOW_START_EN_SHIFT 4 diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c index b5d69d5516a6..c40e8da8f6eb 100644 --- a/sound/soc/codecs/cs42l42.c +++ b/sound/soc/codecs/cs42l42.c @@ -2422,6 +2422,16 @@ int cs42l42_init(struct cs42l42_private *cs42l42) (1 << CS42L42_ADC_PDN_SHIFT) | (0 << CS42L42_PDN_ALL_SHIFT)); =20 + /* + * Configure a faster digital ramp time, to avoid an audible + * fade-in when streams start. + */ + regmap_update_bits(cs42l42->regmap, CS42L42_SFTRAMP_RATE, + CS42L42_SFTRAMP_ASR_RATE_MASK | + CS42L42_SFTRAMP_DSR_RATE_MASK, + (10 << CS42L42_SFTRAMP_ASR_RATE_SHIFT) | + (1 << CS42L42_SFTRAMP_DSR_RATE_SHIFT)); + ret =3D cs42l42_handle_device_data(cs42l42->dev, cs42l42); if (ret !=3D 0) goto err_shutdown; --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E0A9E3CDBB7 for ; Sun, 20 Sep 2026 04:55:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880148; cv=none; b=cVDywWtzhrDfjlf3SU1ZFg+uQ7QrMfBZLMYzqyQZRQIaPZ4fr+tkTJAKECIxGnTP/O3PmDCBoKOOhrNDw0sAroIn6uJem2opCoVluoGzKGwKLfmXuZBwnHaKpgCH9FIZ62RO7AkOSCM9FQkd6Xc4yEMZST1/o0Vj5r+G11G/8ps= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880148; c=relaxed/simple; bh=kMBkAaHfXaz58m08vArU+hc+2lbzFG3sRy/QCWibQdk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SgQbtFPwzFc43O5pb1WeSNJONd+JnjYZvMQWyO3ILin04/qOkI6Hwzg/DTYjOg8PAYSN7aRcRtWYj6/GhSc0+Fif4PjVGJ/UTXtVArzVWpKsD2VbVUP1/n27PNRs2+17fqF5PZTh6PBhKiPgWk/I0HqUUjLkojvtg8pghUwW1ok= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=FI+a3251; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FI+a3251" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2d8fbef5018so25454925ad.0 for ; Sat, 19 Sep 2026 21:55:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880146; x=1790484946; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=SAVOL9koiJ+YcQGa1QFT/np1LbpIAAvGvOBmeTVIdhA=; b=FI+a3251o47vrl9qhpBO9pRnUVmARw/dpGb6QXeAsUaxf8JWwC2U6py7UuzwTjKSpT 8DneJxtc4/U5OGFg4ylGhVdrfcJzdnl+4rsSlnBpKvShj4qVnwbFy+uLlCj1C42TcZgP bfJKtAtA8d0+q4Lj5Ibkx07j04BwtRe+NV8vvYcVUC9YHNtRk2IDAWoTBAv/BPnf4O6X uWRMw9qaS/u4sdkmDNvIFOxtGtfqBgfNKHeVGeg2MuIUGa7yhUMxaYuCwOd+klSbsSCn NaepW2dklmjRRaPGspYfMPaGbzLAqvx9NNPY39rfS25i6jBt0enUDuZpamBvPK3+hkaa N8eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880146; x=1790484946; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=SAVOL9koiJ+YcQGa1QFT/np1LbpIAAvGvOBmeTVIdhA=; b=zRX4ODsCU0Iva2vwVcmfz0MWzgYfnTALij4/Czr+b9Ouu6GovwpS8+RMpl1q0qxuVk JX1xoDrObfyAkQLxHnQnBBySs4Ja3fgUJ31Ey4gyY27b46JRgZlDcaip0VTJVf/1Zi0f 7oD39hpYr9/2HgXFjYF9YUPz+IKQO2Zg/5SmbrWtsKOPDz4ADf8Swgp8mO9psY26iW7U UCrEv8lKz/feHvL/DCsOFF999L/nYQrcQkymNcuUxK8fTH9nfrngg7nI8w/CR2mCaMh5 wuIbtGR9dQ73LqOVT7Xn815YpkoIY89vQPueYvW2qXThp4y1ZAoYnEeaH1KcXoZCH69a jB6g== X-Forwarded-Encrypted: i=1; AKwUvBxCDQ3nnEEg9oD4yFlQgiuEwu24GpP83b9s0aT+RospDrqoSXMYAj3NEhzRGQtZKrqxYWdp+JR2alazYTg=@vger.kernel.org X-Gm-Message-State: AFuF++kaCeuc4QWLrYikERvZpeFzO9JX/JRyjJfntqf6lQ8/5/eQ8xMA jZ2iGWp5aa8lj4bHw5G4y7A4RWbd7fNYuBf+7KOM2noNG7FSDhhWWzYBgTsa776J X-Gm-Gg: AYBFou2RTGlKokGF1tTZJcWifVK32LMyJF/mJDevtZ1TU1SwyUXjkl4UGXEMZsox9dh cOtU/r7QEg0jNj62JwDJSi4qp/LB/3kY86U8f4rN9ST0HgiHkX/esrBGQFUR3tzXsZwpnXjBkgH G+rY2xxEnPM4AL4SSQW6XGnlAfNGKYRPdt8QEERT3RtLHBytcZTgeldMrBXs1AWFk/cGph1xSkP JvJG4xC3UEhJA49db6Zmzcb6XveIXow9hFca+UX8DwJoCAMQhmJMcnhpFhJsL87Yi56OTB2A6aq 292giH1Mw4bTge+6RFZ1sOr0MWj+rSXmqTaEUW1b+5xdEvCzk5KNvAzzeDA+wGnGzkOvk3Ycqtq 7HCWWVsV6edbEEB/O4hQdGgP4kcn2AiHYRzoFP28Bp8HG6GqiO/fIc2BfoNUNR74WfOIePxIISx Z6h9HTDSnz0Ky8b1v2nJb6GiyRtq5kDxO3Sj/jKfbxGPVnMUl/dNxXlqd/6p766l0sphmkyd/eC LUjImv3+3Es8wwBTOC6wVIwKdoDQiBQTRMbSMdoMuBDdLc5SK1/W6owvFcrBBxjQSYd2e+VgKMZ l/k32pnpiNK6m35rr1Cky3CZWrGQPwjLJTLytbQAMPwyN+MzGOSRzPlI0Q== X-Received: by 2002:a17:902:d4c6:b0:2dd:c100:3130 with SMTP id d9443c01a7336-2ddc100319amr56593615ad.44.1789880146239; Sat, 19 Sep 2026 21:55:46 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.55.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:55:45 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:43 +1000 Subject: [PATCH 04/28] ASoC: apple: mca: Fix PD link double-frees Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-4-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org, Hector Martin X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2173; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=l6ILyllDJHogvaPe0jQmA0G3c3totE6rg0ScLhCeibc=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0+U5j3Q8K1d7n3zG7LTOxmmXz5Q2XzaeunGxT7HUc 45m1SaHjoksDGJcDJZiiiwbmoQ8Zhux3ewXqdwLM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GukY6xgxcHEKwFRPesTwT+HVJhMTvqn60VdsGRn0HgazSXQf/Jq76funXvH8tlWL1RgZWk4ftrd /oNc+ddnUN1O2mJZWhlTNltBy1Hz0+n246IQNHAA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin Add additional checks to ensure MCA PD links are not double freed. Fixes: 3df5d0d97289 ("ASoC: apple: mca: Start new platform driver") Signed-off-by: Hector Martin Signed-off-by: James Calligeros --- sound/soc/apple/mca.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c index be702b2942a5..66196c6a9273 100644 --- a/sound/soc/apple/mca.c +++ b/sound/soc/apple/mca.c @@ -303,6 +303,7 @@ static int mca_fe_enable_clocks(struct mca_cluster *cl) * the power state driver would error out on seeing the device * as clock-gated. */ + WARN_ON(cl->pd_link); cl->pd_link =3D device_link_add(mca->dev, cl->pd_dev, DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME | DL_FLAG_RPM_ACTIVE); @@ -326,7 +327,11 @@ static void mca_fe_disable_clocks(struct mca_cluster *= cl) mca_modify(cl, REG_SYNCGEN_STATUS, SYNCGEN_STATUS_EN, 0); mca_modify(cl, REG_STATUS, STATUS_MCLK_EN, 0); =20 - device_link_del(cl->pd_link); + if (cl->pd_link) { + device_link_del(cl->pd_link); + cl->pd_link =3D NULL; + } + clk_disable_unprepare(cl->clk_parent); } =20 @@ -392,6 +397,7 @@ static int mca_fe_prepare(struct snd_pcm_substream *sub= stream, if (!cl->syncgen_in_use) { int port =3D ffs(mca_fe_get_portmask(substream)); =20 + WARN_ON(cl->pd_link); cl->pd_link =3D device_link_add(mca->dev, cl->pd_dev, DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME | DL_FLAG_RPM_ACTIVE); @@ -423,8 +429,10 @@ static int mca_fe_hw_free(struct snd_pcm_substream *su= bstream, return 0; =20 mca_modify(cl, REG_SYNCGEN_STATUS, SYNCGEN_STATUS_EN, 0); - if (cl->pd_link) + if (cl->pd_link) { device_link_del(cl->pd_link); + cl->pd_link =3D NULL; + } =20 return 0; } @@ -1145,8 +1153,10 @@ static void apple_mca_release(struct mca_data *mca) dev_pm_domain_detach(cl->pd_dev, true); } =20 - if (mca->pd_link) + if (mca->pd_link) { device_link_del(mca->pd_link); + mca->pd_link =3D NULL; + } =20 if (!IS_ERR_OR_NULL(mca->pd_dev)) dev_pm_domain_detach(mca->pd_dev, true); --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f42.google.com (mail-pj2-f42.google.com [74.125.227.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3051A3CDBAA for ; Sun, 20 Sep 2026 04:55:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880157; cv=none; b=EQhZB5eNPKzxjq3HeKkDvzpqK08RFx6ptV2Yy9wQxX8W8/WUhYChTq3y7QWD/g2p7r074DO+dQko0I7DOiKY1o+YlSUS0JAStbX8bcnNHnFaG5nnRVviVvLd3aLROumb9lr5g1uBys3PN0eZsHt05KvE8hudQ4e+g/umXfWuk44= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880157; c=relaxed/simple; bh=kx5kKJMfW173nOCJWUzv3mwvx0YJN3LDcuLBMFQLo60=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sYLKghx8obZMkTU1O3wa6wpLjfxa4SbBbosPc2X2K4KUCdxyuz1F0Vx5LUKYKvAPZN0uNAE/b21n4PNvPVUmWW9BHnCxDzrtetE7SaWINIUpNOCIDtuDJldReBWrxvLf2K6yqwwGsJ2EGXXONXjf8THQm8Hd/UEhD0dN3ZPWhdE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZDx703Jw; arc=none smtp.client-ip=74.125.227.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZDx703Jw" Received: by mail-pj2-f42.google.com with SMTP id d9443c01a7336-2df38376150so1165735ad.0 for ; Sat, 19 Sep 2026 21:55:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880155; x=1790484955; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=xzyP2lP6mDo2Tguvti7VeQ501kHVG6IAx4yYOdJMaeY=; b=ZDx703Jw5n9A+cB5JIm1R79QkXxX1uF+Y4r8oUiS+Covuu6y7I9YfLAd9PlAGrcmGo os62ngVc8/IY2im4bMS9kfQi9khboUaKnznuwey31ryD7FzMj/wYZQ5yWBPfxSnSngip iQ5S7XqruYvCFAoLYo1ujnLn907PVIDG+n//Tsy5MhpeRSOCXFPAQjPh5tdcPB/n6GAo yLcm76phAkz1uxeBbjIwT4U96Bmq+4sGP6aTledyeZ2WBAU39LGDO7bee5y8wqXHqZTp fCTw3uq2OZXdUIILZnWNZ1WAT7DaZEClQpQf8aWYl5EBMEw/Z0MqRy3ePEN19MSWxrQi k1Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880155; x=1790484955; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=xzyP2lP6mDo2Tguvti7VeQ501kHVG6IAx4yYOdJMaeY=; b=ZL6X1AXkX2gOj7jDzabRTSePZjTlT8FXJyCyEwgDAqUeODTHaSKN6heVQ1hu2DFGqR 6lOQmeJl2jP8yrBxRZS0XpPErG1slm8rbN2wvHDqL2PaGpYTvBBzHiJIPG4B3YIj86me AMTr4xIbYaPDZFuDKPDK67ePlZOE3gh1pDlCV0iiru9CINFxNw5uG84gygtceePVLomF 5xQheMKuS6c0Ps539ZapkshintvYz1GmCAb3YQgcZk5s0/pa23JZBNmLR5ZJWEuohSsE W7MsRowBq+Br4IXC6sImFAGYsN4HD7AS+w/O2tW8EeUTn/zWsLfaX1rKhaaroFKBx6sP gFGw== X-Forwarded-Encrypted: i=1; AKwUvBwkXNcx6fTL7beU1RKZE9mhNS7DCw2/RgfwtciqNmUBUWVmdTl5aqJWtZXie33esEo4l1K6X/Rz5Anoq9Y=@vger.kernel.org X-Gm-Message-State: AFuF++l76trcty/TpITGFovsXt65zfDQgXGZZ3Ejun4PegThkptg1O6p 5UGShDzXEHUQRmaJB3wAjLFe5OBY4HYDx/taK0wWyNHXlq5lh99bJa5B X-Gm-Gg: AYBFou2oV1y88m9vDYD2VXdUzI0a7ZE81CJzWJdzkc92mA5qhknE9WpJj6bTZUIGqSc 4ZuwkTwnewLCafiXS47e0h7jcGLG+5S0yawq7k1kgPR8F3uXbKohGNTHqdxzjVzx38iZviwdL/9 z9juvQzxxuYlW+Mlqb54pJfyppcUrYAVye4AYPPbFv0PUC/YSTNFaZYwH7+4IdEPYeOlIin/9Ct /OxFvHLt5cojhY0EZF/R3j1P5cYj9Q/GC3Z1ewdwjYb8T6Zi5gST1CdEshl2nBKTmEQomIgOD+Q LrKOHy4/k+cOKWd6cnZ5R/0HXwU2bwUlEhMB4JP978owHSmEdwfFEDhOpT5OOVW7ALoUgTIysvU P2ubk7Y85MAhh56DNdo1CelxmJDU6r+qcSNzC3kxfCawFs3qFY+ZU3SQ160XLFSCI0GeHJxKw3H /796UeXxNC92YbeC6OuY15GhRBbIcTelFG5LvyY3NLJ/RerU/uanBIZCE9XNI70aPdlnB6qsuUm tw4JRXU8RIzg7MT/Tv93kkwnsV041T4/A0DCILADlpnRXXnPSEM8b9NuFTO80pFrXPlF1HtonD/ OAxNrpSrXpROfQiRsHbEN55Z96j8H7Hf3iii/QbNWI591/Y= X-Received: by 2002:a17:902:d2d2:b0:2dd:ad73:5b5a with SMTP id d9443c01a7336-2ddb224f33bmr80978895ad.21.1789880155541; Sat, 19 Sep 2026 21:55:55 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.55.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:55:55 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:44 +1000 Subject: [PATCH 05/28] alsa: pcm: Remove the qos request only if active Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-5-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org, Hector Martin X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1854; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=sB9amKGCujymCV5dzhnXLQgtXCZDFSeONKc8RiAMJk8=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0+UN5p3NCRDcX2rwtCeY+U1o1BqxOV9aeCT2Pg2+s cW76L9px0QWBjEuBksxRZYNTUIes43YbvaLVO6FmcPKBDJEWqSBAQhYGPhyE/NKjXSM9Ey1DfUM jXSMdYwYuDgFYKojPRn+adW6m8+Zu2WmcdojE37fL2mVgR13MvV2nf3JeWLWmeYpRxj+mShcjNp sw+Q7MyPW1PitzbHnSd8+notYbJv1bMt81fmGPAA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin Fixes warning: [ 8.502802] ------------[ cut here ]------------ [ 8.503445] cpu_latency_qos_remove_request called for unknown object [ 8.504269] WARNING: CPU: 5 PID: 2790 at kernel/power/qos.c:322 cpu_late= ncy_qos_remove_request+0x48/0x98 [ 8.505499] CPU: 5 PID: 2790 Comm: wireplumber Tainted: G W = 6.5.0-asahi-00708-gb9b88240f7ae #2291 [ 8.506777] Hardware name: Apple MacBook Air (13-inch, M2, 2022) (DT) [ 8.519099] Call trace: [ 8.519402] cpu_latency_qos_remove_request+0x48/0x98 [ 8.520027] snd_pcm_ioctl+0x86c/0x182c [ 8.520519] __arm64_sys_ioctl+0xf8/0xbd0 [ 8.521020] invoke_syscall.constprop.0+0x78/0xc8 [ 8.521604] do_el0_svc+0x58/0x154 [ 8.522026] el0_svc+0x34/0xe4 [ 8.522409] el0t_64_sync_handler+0x120/0x12c [ 8.522951] el0t_64_sync+0x190/0x194 [ 8.523408] ---[ end trace 0000000000000000 ]--- Fixes: 5371a79be97c ("sound: Call cpu_latency_qos_*() instead of pm_qos_*()= ") Signed-off-by: Hector Martin Signed-off-by: James Calligeros --- sound/core/pcm_native.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index 6d32c12fb79b..88c83e5fd6cf 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c @@ -971,8 +971,9 @@ static int snd_pcm_hw_free(struct snd_pcm_substream *su= bstream) goto unlock; result =3D do_hw_free(substream); snd_pcm_set_state(substream, SNDRV_PCM_STATE_OPEN); - cpu_latency_qos_remove_request(&substream->latency_pm_qos_req); - unlock: + if (cpu_latency_qos_request_active(&substream->latency_pm_qos_req)) + cpu_latency_qos_remove_request(&substream->latency_pm_qos_req); +unlock: snd_pcm_buffer_access_unlock(runtime); return result; } --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B4B363CDBB7 for ; Sun, 20 Sep 2026 04:56:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880167; cv=none; b=Y9K6Y5ViQXgABIAoTIo+rL68Ogd43ZCtTKQI+zP4yxvzHeMOuEBTuVpZHYZL7CSMnCmfVJ0oIyUkey/3q8J+atxr+rtkj7G4pY32xEqwtbRYA+st820ee2RlvBiNSAdo665ll+NYX57dDVARU552clY/3Ga/ILElfG5j7GV0MSI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880167; c=relaxed/simple; bh=o6Mmzyd7BRwU9H5C74qoe+G2Tq+aI/IRIDM1u7th/B4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PBpbvfLCu0WdoObof+h2+9L41F+36q6Y9reYXMuQZYga+XtuLyH3hP4uUDx6ndsoxKCnc6nhYqxYmZXoEbRkZsWw2G6glimPgC42bQ4e37Re4NkLYhZQP95fC8HabBTveFSDScJwymWGHhcjg9FjBDk4Q301VfcqrvWt35Yfzds= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Hpw+OhY/; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Hpw+OhY/" Received: by mail-pj2-f13.google.com with SMTP id d9443c01a7336-2d747eb79f7so13408645ad.1 for ; Sat, 19 Sep 2026 21:56:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880165; x=1790484965; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=2MoZTcxnKczPWM7o1mzqY2ipongGCpZ7IBnK4RjYvUM=; b=Hpw+OhY/r9qvfCb/v6ZNx2vv7z/yuQFjsE2BS4T1tHtgfPZvUs14GJb+sdbYRrSRnT RrlcgQBZNSYqMuVZvSZMin1wDbW1vS9Kg/WHL8SmBXbXPSbBKNuCN26cX3r7R0besBB9 +cSqmZ0XOswAcUPuyU889PYF/GGNi1//waRVmmxOBnHqEaAC89oCIvpsvn/UzYdInEJK Q8ZILiMZKRFgx1OeGeddk2RYiVoTVoJ4V6iZ7veXo9xISPii8pbyr0CACWhJ3RZL0T0P wwOI/tYJ7vR/jnT8E23DAvSQZ6+dyE0CMKwCjg/GVcJJOwxIKVpO4OgsMtmCtGbAOfAX +fcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880165; x=1790484965; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=2MoZTcxnKczPWM7o1mzqY2ipongGCpZ7IBnK4RjYvUM=; b=Ivc8wOl+PvbHYdrWr4TZkPkJZLnqifYK6NP64evnCmXY9HD3gMYNbH4r6KvD1+6DFj az5lXRqN4EFTUhg5IVsUAdfZM7JC6ht8Zglf2jl8v6QecsakcwzJpDNs40+qZ97+3bVg aSMiTtPgHKJSuYev7hmios3a5Ox86X+j4qG+S3/+MPFX3yB5Rjmxxj3tCkEk0RdqV4R5 MxtU7xjsNaxmapo6oOQ0Z90NrklC5kdd0b7/AcotUJXkhid7d8khI1Y5QBuqSmyvp09q 6QxCMhmRL0kV53GIWDk6jPjR+3TvDQNkoj8A3gOTJO2vOEO1GB2YtkzMStzEORKhAIjb OyEQ== X-Forwarded-Encrypted: i=1; AKwUvBywA2m9jIbIuP3VnqNJdsKAGyGntRK3BHiqmBHNlWzLehr18PF/0rc5jIc69CcsdrKdP0w+IXDr7sxYnfA=@vger.kernel.org X-Gm-Message-State: AFuF++mJaUSm9weHX20CDRd+tEpZhPLySD1Woppf5L1P+6i7Fr0K3Z27 mQHkWJqP3ke1H/WTcsRHSM+G5CJD55wsyA67+yQq0zc1TzI0q7DD/eSE X-Gm-Gg: AYBFou3hYHFvjEO6lHKlseNQVBTabQKNIcoHG9ovDbe0i9AKhKh9yR3LADvH39CyNcw CLzAKzrvT/B+SV8GZoA1/lGZcWrd0XPUX99YCJ/jVKGtv7oITdK29hDImNxAZI7Tm2/c7J5edxa lmGBCTsWJEduNYa6gTzR08n/hbSzGvFb2ciY1CXyDj2rvVEsCMc7edmpGdB71kvthq85Cs0pyeH ovQ+krEI60YCViIyB1LtYISyXIo7tJIkaObJgqq2sGSukOumdjHdafsDBFxajPI0B+euwUzYLJ2 PgcDr458XwIDNTkzJMxsO/rpvvI1T1GDoGaj0V3sDLvkIVMgcHQYQi3pjkRroJAGlJaOZ49CpZO m829xB0cMRO3+YieRVFr5/6uRRhU6L5Vu2dykrMpbha/hTMBYVJ7dECNMJPCM9PwUQz636FEVDH q9cX3ji6RcyqVwlx36UJ0sXZVzGmdtJ8lq8O5bFZgb3h0NPbRJsDqPa9cAN2p5ouF6jfZZWYxn1 H4bNVzgLaLxw1p8n7BmFOtF5CT1oXoFJaBXU8GmF4j6ParbLFF/ru7za4u6khLz1RgPoB2+SsNw 8gQeTL4DfeTkkgNpRyZ4vgJsTPD7CEJHh0nKVNI9kMfXUIQ= X-Received: by 2002:a17:903:fa5:b0:2dd:c053:82f1 with SMTP id d9443c01a7336-2ddc053841bmr56459515ad.40.1789880164957; Sat, 19 Sep 2026 21:56:04 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.55.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:56:04 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:45 +1000 Subject: [PATCH 06/28] ALSA: dmaengine: Always terminate DMA when a PCM is closed Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-6-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org, Hector Martin X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1367; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=zGb+++j8iUZe/cn0Z0nFJK8T6VZ7UceNkKMJL+0HzLM=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0+UNCs+tnF8jm/Fr9rnD+qaz/5/MlJvafvnEpdXpu SeWZM6J65jIwiDGxWAppsiyoUnIY7YR281+kcq9MHNYmUCGSIs0MAABCwNfbmJeqZGOkZ6ptqGe oZGOsY4RAxenAEz1kxJGhmuLz9eF5142Xp283+/t0Rc/gw80iqvZZe94zfXn23/Xh9UM/2yWb2j yPuE6S9JqBqt0gZDlkrU7xeS3e7Hc+lrDvndKKxsA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin When a PCM is suspended, we pause the DMA. If the PCM is then closed while in this state, it does not receive the STOP trigger (as it is not running). In this case, we fail to properly terminate the DMA, calling dmaengine_synchronize() nonetheless, which is undefined behavior. Make sure we always call dmaengine_terminate_async() on PCM close, regardless of whether it has been called previously or not in the trigger callbacks. Fixes: bc0e7345168c ("ALSA: pcm_dmaengine: Properly synchronize DMA on shut= down") Signed-off-by: Hector Martin Signed-off-by: James Calligeros --- sound/core/pcm_dmaengine.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sound/core/pcm_dmaengine.c b/sound/core/pcm_dmaengine.c index 1306b04be171..e59b561b849d 100644 --- a/sound/core/pcm_dmaengine.c +++ b/sound/core/pcm_dmaengine.c @@ -355,6 +355,11 @@ static void __snd_dmaengine_pcm_close(struct snd_pcm_s= ubstream *substream, if (status =3D=3D DMA_PAUSED) dmaengine_terminate_async(prtd->dma_chan); =20 + /* + * The PCM might have been closed while suspended, which would + * skip the STOP trigger. Make sure we terminate. + */ + dmaengine_terminate_async(prtd->dma_chan); dmaengine_synchronize(prtd->dma_chan); if (release_channel) dma_release_channel(prtd->dma_chan); --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f43.google.com (mail-pj2-f43.google.com [74.125.227.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 860143CDBB7 for ; Sun, 20 Sep 2026 04:56:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880176; cv=none; b=ddp2dAwqtzTrlJu+OqabG62wANTryk3IrIarjA1cpxkYTjI+rRBgImv50+Cr93B4R/vuPmUcctbI0JWQSHvbNt4iw5J+3dDlg6nut+Zo02JMO6Ko1Hq+uY3N1w/xOVQMN/ZPPbQgkdV/jefAlgA7fK/BW09QxqP56BGhnhrpiqo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880176; c=relaxed/simple; bh=N7Gm9GhSadDaVeGyGSMSt56iAjPKqX+nSRnxDMmatR8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=p47f7n80Sx6TvjRKB7hxzUT361ZkOjojsZQWne1uoWtkxyAhgVQklHkswib9WEh8Xf8RhjrTwyMGrjJehKkqL57fye2oJ6KtjSNQTN4MpHIcHEf7uIFtvBKAlgiHwNxGKm6Ux9RrTQw2uUYAqXoDrAuPUUjj7ApcncdAgYY6I7s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=d6aDLreB; arc=none smtp.client-ip=74.125.227.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="d6aDLreB" Received: by mail-pj2-f43.google.com with SMTP id d9443c01a7336-2d90ba1d807so24093395ad.3 for ; Sat, 19 Sep 2026 21:56:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880174; x=1790484974; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Z4y87oy6OKAiqnu/jIL3XduDUN3BGcMssQM5AWBSQLw=; b=d6aDLreBwnNoeagsPLbdIA6REqUcqrcDIcmOM8YkT91UwYk7tO85AV/rs5jpwlwqSU an/W2jjODuTXHnUfUgXBD7DTKaLVW4JDXwDgCWNCqy/nk25mrzkHMxcUb31WwLfQdnk4 usLVb0pu9EjuRAFDQKmZ263x13wb2u7cq96SHpfw5xTu+Wgll9BE2sfcKvzBIedr9HKD e2bJuXJux7BXjZqOFCVZps0qNiMrDeDQEHlvRHCplOBeHvJnsIzoNMXe6vaSuBBaIK+S UtJ7kkR9Poo0aTzOoJW0AXJATnL+WVLD74xCQsZ+loCd+E8S5UHOBM9PmSTkBoYgsP5+ SCag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880174; x=1790484974; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Z4y87oy6OKAiqnu/jIL3XduDUN3BGcMssQM5AWBSQLw=; b=fXUujqgxFjhnwHI8FuePkGXWRHJpx36Ycfc3r/HhmjuiqVB5L3rFySaWyPtH9+rd9k nBV7dY5QK6ROnfep6ZRLPw9t6yROyUGRIEgsLd5IyvdedV+g52GFVgOGPw4eOMv5P6pj O3rJ309uwNIzsqB5+vMWy74HNOFm15lzbprtm9mX1PUC6TVZbKVCLIN3CHq2eOoYVuzw QzIYu9OUzSqXrPhSktIjtxwSTDa9tbB0FcQDTwcqSfhpKzgj4k69i/CDogRXx8TyFMIH keyDFk420r3brrWQwEXfNUtVAmlxKzO9aTuFY52pks4YSmkvFCNvEwRss4WVBB9uWEjp l/Hg== X-Forwarded-Encrypted: i=1; AKwUvBzjmtmSowV71llxv+F0/rvwiscHgEujLXANXSM9dVvfilAt8WWF95pAfXWUc0Q0D/dVyknjiQt8V67oFBw=@vger.kernel.org X-Gm-Message-State: AFuF++lHFgPuKOZh9zevOx8zEB5AbZfKEF1885LOiPdirHtq/Us5gSHG 921dU7/+B9ReEH96icTVSZ0RupeoEqiM3VWLxbat3Kixc0tVtlS5aRUV X-Gm-Gg: AYBFou3UA3vYzz12Elg0HAP6Iy6XuALY01pEjvXaKScD0s1xqrSp3IURyUn8ELLBpIE Jzo2jsZ0ds4dm0L2H1eg14CU6TLUpkOyu43H1vPrzJ8HTkBIQwq3OWt7uz0OOOuBDs8wywd8ciY ygSALoFWdwBdMeYn/1WljJA3s0hYs6YjSBG856+A7nnbpKKoliOzqxCaIMIKB7ROQRM2nrhC2Dz P9/6l0jh7Ea1myKe9xBTRjKj8aIOUnMLqnUDedeH5j+qTM4cjId5d5lixyaW7dMrDgJlmhxsw98 dj4+JgDphSIHNPV9ZJY1qFE2kjUMGDKS2lu/2UZdXPCooB7BTbGWuPPPUV6MPU4YPnA6pulbUA0 daBPLzzARpei05FrkTv+G0f/PdIipeoR+mcX/QfpI2hGp0LRHp4yJs5c+MUyhRvgls5gxLuBlqj KwtH2eHPJiHMWPJs5qpUlgUdcPveBNZuRKCqORTFvRX9MjL+nRERCwO9vR3LJtMpQpzgP3mFQK5 pFxVZ3R59tawcUFNHI3q2MYc6VTfwWOn8hH9kAPqzOcXYhip8UIBsJElpBDy+FqxPKskgQeh6In uuE0542kmbN8OhxH0N0dCd9DPPZmyCeTiimFogru+DbuTPY= X-Received: by 2002:a17:903:b48:b0:2c9:bf82:dd11 with SMTP id d9443c01a7336-2ddb1adc353mr126021925ad.7.1789880173735; Sat, 19 Sep 2026 21:56:13 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.56.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:56:13 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:46 +1000 Subject: [PATCH 07/28] ALSA: Support nonatomic dmaengine PCMs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-7-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2677; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=KObS9Pt9I+T74LqcNTQHQ5cFB2c2q8qsj/Np1ljqwI0=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0xU2+4Xv/r+xROS6dVFDzcSiOyfWXf7+o3x2v8XN+ f7e1oJ/OyayMIhxMViKKbJsaBLymG3EdrNfpHIvzBxWJpAh0iINDEDAwsCXm5hXaqRjpGeqbahn aKRjrGPEwMUpAFP9+xXDX8GZ9xRU9+7bXXMt7eK5Zew5L14t2sB48Drv779sq+Sd1d8xMkxZv9d N4ur99eJhaqns17xjBA3fHwku4TzRxB7rpBbQwwsA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er Add support for nonatomic dmaengine PCMs. Signed-off-by: Martin Povi=C5=A1er Signed-off-by: James Calligeros --- sound/core/pcm_dmaengine.c | 32 ++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/sound/core/pcm_dmaengine.c b/sound/core/pcm_dmaengine.c index e59b561b849d..839ff2711f5e 100644 --- a/sound/core/pcm_dmaengine.c +++ b/sound/core/pcm_dmaengine.c @@ -22,6 +22,8 @@ struct dmaengine_pcm_runtime_data { struct dma_chan *dma_chan; dma_cookie_t cookie; + struct work_struct complete_wq; /* for nonatomic PCM */ + struct snd_pcm_substream *substream; =20 unsigned int pos; }; @@ -147,6 +149,24 @@ static void dmaengine_pcm_dma_complete(void *arg) snd_pcm_period_elapsed(substream); } =20 +static void dmaengine_pcm_dma_complete_nonatomic(struct work_struct *wq) +{ + struct dmaengine_pcm_runtime_data *prtd =3D container_of(wq, + struct dmaengine_pcm_runtime_data, + complete_wq); + struct snd_pcm_substream *substream =3D prtd->substream; + + dmaengine_pcm_dma_complete(substream); +} + +static void dmaengine_pcm_dma_complete_nonatomic_callback(void *arg) +{ + struct snd_pcm_substream *substream =3D arg; + struct dmaengine_pcm_runtime_data *prtd =3D substream_to_prtd(substream); + + schedule_work(&prtd->complete_wq); +} + static int dmaengine_pcm_prepare_and_submit(struct snd_pcm_substream *subs= tream) { struct dmaengine_pcm_runtime_data *prtd =3D substream_to_prtd(substream); @@ -169,7 +189,11 @@ static int dmaengine_pcm_prepare_and_submit(struct snd= _pcm_substream *substream) if (!desc) return -ENOMEM; =20 - desc->callback =3D dmaengine_pcm_dma_complete; + if (substream->pcm->nonatomic) + desc->callback =3D dmaengine_pcm_dma_complete_nonatomic_callback; + else + desc->callback =3D dmaengine_pcm_dma_complete; + desc->callback_param =3D substream; prtd->cookie =3D dmaengine_submit(desc); =20 @@ -322,6 +346,10 @@ int snd_dmaengine_pcm_open(struct snd_pcm_substream *s= ubstream, if (!prtd) return -ENOMEM; =20 + if (substream->pcm->nonatomic) + INIT_WORK(&prtd->complete_wq, dmaengine_pcm_dma_complete_nonatomic); + + prtd->substream =3D substream; prtd->dma_chan =3D chan; =20 substream->runtime->private_data =3D prtd; @@ -361,6 +389,8 @@ static void __snd_dmaengine_pcm_close(struct snd_pcm_su= bstream *substream, */ dmaengine_terminate_async(prtd->dma_chan); dmaengine_synchronize(prtd->dma_chan); + if (substream->pcm->nonatomic) + flush_work(&prtd->complete_wq); if (release_channel) dma_release_channel(prtd->dma_chan); kfree(prtd); --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B98993CFF6A for ; Sun, 20 Sep 2026 04:56:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880185; cv=none; b=oDEW/K9e09Fv/T5MFjT2oDY7Y3mK80o8L22dZpi6gEWwSDoTXflsAuVuPLEUhL0QFE+iWSUiY6lp97uRfkNZze8f6hyBFOOOfbL2Lwe+BUTIg08fVuoI/pP++WPD4nO4M6Wmdyu4wFwIOMzHpFommR06zLiCOP0qVUY/BCyugak= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880185; c=relaxed/simple; bh=k/sMsQBLL72+VD5uNnpfRbirgBYowP2uDqPQcAkhPn4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZRiFrLsa98lztqrlp8/WPf8AjsEnFIfwVpVzqFkfYRePeYmD0eSeS0oHiQqKyJV2TKLVVauwSWOXsz2yZHCNdbIMu62SGPHU6jSfB+AYl1YScVA90FQkWAVaFI6VNDl47mcZUNpymLDsYjxbFkpfCcj3eal0LyWVtqRpB+4MvEg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=cOs92+2A; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cOs92+2A" Received: by mail-pj2-f13.google.com with SMTP id d9443c01a7336-2dd53691be5so18290675ad.1 for ; Sat, 19 Sep 2026 21:56:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880183; x=1790484983; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ZqIw7LcK5jQdSK0s4Y8nxBRoBvyvqxkISqwhOeUOv4I=; b=cOs92+2A1JwH43V+etV10U9KcwfgLqRN3OOMKruYdxqkkAKo3QoQejdRXhKn/m+SBX GPa8PtwFkY20H2y0jzUSmg2S3EBijxtumawJRbqSN2ATjOrjbjKtku3LgEipvG0RJhJo Qn2kjeJw9JGh4mP7r+D2blG60WvJRF7ikzCYi55pXZSaao2P0ftzxWmOnk1co5EyV8sN B06rEXq2YlO8OB7dpw/TVKmUVO2/E2jSYLMi5ejmGTiYnktTSFXLh4tBUG6lgDPDUndL 15kvdoUKVgwPhLhAnLcSbGPXAJB07qqvvXNjv70v6XdEL7iL3hWff9CcCSw0SKthf6V8 ykfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880183; x=1790484983; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ZqIw7LcK5jQdSK0s4Y8nxBRoBvyvqxkISqwhOeUOv4I=; b=B1/M9lpaIAlwliRz/KMupLVP78vMBEOsbPFF1hrlmdjTQ/ruNIfFDmR97PukHg6zka aJQThvIbl6g4C/bRt2e52wni1XPGm0YISpfS6GHdK7hS/yvKfiA7a0UfpJ+O2NzmC5mn waWB9zd3EpeO9GE78iq2hGQZE1PPoVrqbqbsjt1s4pSIZPEe6Bzpmck17i6j5s4u1PSV 4ihSQz/bnimM31nOoLF2beHK5gsgi9o9qLZ4uDAvyCQEEGp9vuFG9h9w5PVvY6hI8157 wyabHXGyYT5oUnyDQmn86Q6splfqW+ydhcO9oMzE/jJrn8uD3Rf+8vAR4BRZlJ7endeQ nMAw== X-Forwarded-Encrypted: i=1; AKwUvBwQnjf+7Rh81KEpDUZuvvY7ghMoSXr6lpWgkZZJDv2rmbb8CF8dKixo0DYV8v5stkOg+kwLEAFX2xUyCkI=@vger.kernel.org X-Gm-Message-State: AFuF++kZf6uGEeVvWnKBi6jPVL9bvwmDOIsvq21WqeBArM57kBCmCqaH q3AhZED7NgJIlClL5a+aunV1bTowW0Ku551b0el3DhDukcTePnxNEeyf X-Gm-Gg: AYBFou0BmY837+v3cnrckpuA1cO3p0VIbVlmVUTTfYbyZxiZXb0d6PbR5oA0fzBlsHt +cy0txHJ1xZ/YtTsB1NQAa55CCNxLSvsKBoolxegrakK7AuXZpF5I08Ki1TpIqt6QWDrFfOCcf5 58skB2rQWBqFihkKWUm+rOlBHLJ3Tt8uhzQe4G+X7JjmzMtGJ5j5+KdGtlzrPxm2JJbS3lshoTl pjlQEoFkbNLA4PLpBTO+MtpS63EY3KA/yPnRdj6huKP3gbyiIMiDiJWZEvd9q57TjoKVUGarFA8 NbAR40LjZQH6sdvZJSvwYB1iA4CEnho6k+Z2/7hzupAvYqYm2Y0AbPnx8JAzI3ghwgJqxN/5MAF qplsvyYQXeRjdjGvyDqKW8JFt1QoPgNKAK8hq0GtsgYXEQ171tKh6W40gnuzA+5OwdN/JglRUhk 40dvkADvuqiim5TmDKbR49p2zpik0QR2c+gWvHlHaWOHZrlVlHRczYZL5NV8osf55K7UDt8FLOv BuUOlrK0Yyl34xZv2CbsKjF0F3V2TEiIk1zcVNMo5eYdLFEDm0+hNUanyNz1qsKfalVVzQW6hgq 7nlU+5csshpP4jWzHOSYPWSAGp4gUD72oNR3Z9fiFWs9g2I= X-Received: by 2002:a17:903:984:b0:2d9:599e:df95 with SMTP id d9443c01a7336-2ddb1ac7dc7mr124652565ad.3.1789880182788; Sat, 19 Sep 2026 21:56:22 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.56.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:56:22 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:47 +1000 Subject: [PATCH 08/28] ALSA: control: Add kcontrol callbacks for lock/unlock Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-8-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org, Hector Martin X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3895; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=hq0jHTZPh6rJ3zZLKaOltAD+GhyW13KMayUHUfC4/Ik=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0xWKi03e3C3nqtgRqz/pt8BfFxWmzIUJDzd0z1yyQ +xM8rSijoksDGJcDJZiiiwbmoQ8Zhux3ewXqdwLM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GukY6xgxcHEKwFXzMjJ8eL7wzf8MQd22z17z9l5xy770g6Hcr9EtrWTa9LDvL//pMzL8E/n2a9W Jk6+Nsj5e3Tn3Oldm8T57U3k+3hWvjp+ZGVTHDQA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin This allows drivers to implement policy around locking/unlocking controls, such as enforcing that a group of controls may only be locked by the same process/file, and taking actions when the controls lock/unlock (such as granting special access on lock and resetting values on unlock). This is, in particular, useful to implement volume safety controls, such that only a particular process (that locks controls and completes a handshake) may increase volumes above a given safe limit. It also allows the volume to be automatically lowered if that process dies (which will trigger an implicit unlock). Signed-off-by: Hector Martin Signed-off-by: James Calligeros --- include/sound/control.h | 7 +++++++ sound/core/control.c | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/include/sound/control.h b/include/sound/control.h index 909db0d0485d..6b3ef6be5100 100644 --- a/include/sound/control.h +++ b/include/sound/control.h @@ -15,9 +15,12 @@ #define snd_kcontrol_chip(kcontrol) ((kcontrol)->private_data) =20 struct snd_kcontrol; +struct snd_ctl_file; typedef int (snd_kcontrol_info_t) (struct snd_kcontrol * kcontrol, struct = snd_ctl_elem_info * uinfo); typedef int (snd_kcontrol_get_t) (struct snd_kcontrol * kcontrol, struct s= nd_ctl_elem_value * ucontrol); typedef int (snd_kcontrol_put_t) (struct snd_kcontrol * kcontrol, struct s= nd_ctl_elem_value * ucontrol); +typedef int (snd_kcontrol_lock_t) (struct snd_kcontrol * kcontrol, struct = snd_ctl_file *owner); +typedef void (snd_kcontrol_unlock_t) (struct snd_kcontrol * kcontrol); typedef int (snd_kcontrol_tlv_rw_t)(struct snd_kcontrol *kcontrol, int op_flag, /* SNDRV_CTL_TLV_OP_XXX */ unsigned int size, @@ -56,6 +59,8 @@ struct snd_kcontrol_new { snd_kcontrol_info_t *info; snd_kcontrol_get_t *get; snd_kcontrol_put_t *put; + snd_kcontrol_lock_t *lock; + snd_kcontrol_unlock_t *unlock; union { snd_kcontrol_tlv_rw_t *c; const unsigned int *p; @@ -75,6 +80,8 @@ struct snd_kcontrol { snd_kcontrol_info_t *info; snd_kcontrol_get_t *get; snd_kcontrol_put_t *put; + snd_kcontrol_lock_t *lock; + snd_kcontrol_unlock_t *unlock; union { snd_kcontrol_tlv_rw_t *c; const unsigned int *p; diff --git a/sound/core/control.c b/sound/core/control.c index 4199342d4ffe..c8aab9abd306 100644 --- a/sound/core/control.c +++ b/sound/core/control.c @@ -126,10 +126,12 @@ static int snd_ctl_release(struct inode *inode, struc= t file *file) scoped_guard(rwsem_write, &card->controls_rwsem) { list_for_each_entry(control, &card->controls, list) for (idx =3D 0; idx < control->count; idx++) - if (control->vd[idx].owner =3D=3D ctl) + if (control->vd[idx].owner =3D=3D ctl) { control->vd[idx].owner =3D NULL; + if (control->unlock) + control->unlock(control); + } } - snd_fasync_free(ctl->fasync); snd_ctl_empty_read_queue(ctl); put_pid(ctl->pid); @@ -306,6 +308,8 @@ struct snd_kcontrol *snd_ctl_new1(const struct snd_kcon= trol_new *ncontrol, kctl->info =3D ncontrol->info; kctl->get =3D ncontrol->get; kctl->put =3D ncontrol->put; + kctl->lock =3D ncontrol->lock; + kctl->unlock =3D ncontrol->unlock; kctl->tlv.p =3D ncontrol->tlv.p; =20 kctl->private_value =3D ncontrol->private_value; @@ -1487,6 +1491,12 @@ static int snd_ctl_elem_lock(struct snd_ctl_file *fi= le, vd =3D &kctl->vd[snd_ctl_get_ioff(kctl, &id)]; if (vd->owner) return -EBUSY; + + if (kctl->lock) { + int err =3D kctl->lock(kctl, file); + if (err < 0) + return err; + } vd->owner =3D file; return 0; } @@ -1511,6 +1521,8 @@ static int snd_ctl_elem_unlock(struct snd_ctl_file *f= ile, if (vd->owner !=3D file) return -EPERM; vd->owner =3D NULL; + if (kctl->unlock) + kctl->unlock(kctl); return 0; } =20 --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f43.google.com (mail-pj2-f43.google.com [74.125.227.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9B9613CEB8B for ; Sun, 20 Sep 2026 04:56:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880194; cv=none; b=qkvhGju4XArJ65S+tLhzn/6Ty/ooIcmT/DGq9nwDJQT82TG6oRizyKCoM7tXRqWqfe7ttfsMwQ4xiTizYJemULqTz4UQetW53IU9baBm6jhifan71UGBb2ZZIMImdcULBTYIa0SRyY+H/78OtdW05wWGbAIoNqei2xsr787b7C0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880194; c=relaxed/simple; bh=nXncydCs7zpGdBoUqUrhDp6s0gVfraf7oN9G3oqVXyk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Q7/Z63trxZa7twHW+GGvNT0l++Y6pG9TCbbfIsh+h6aYlrIxhdcqS/SqwLyZ7bqJumvqkwHN01ZzHN9WLTcuJ5nkyeZ3MSAqrI8ssXFHO/wwoW1f1/GeLOMuuo5I2kEhtUmSF8c3VIK3T/thpsQUHToF8lxcV6iAocsyP2cOWwI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=LyCVsPnM; arc=none smtp.client-ip=74.125.227.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LyCVsPnM" Received: by mail-pj2-f43.google.com with SMTP id d9443c01a7336-2dd88a115ebso16262705ad.2 for ; Sat, 19 Sep 2026 21:56:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880191; x=1790484991; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=vhyKqtsY06vLNdvd6vYAC+C0aLujryTRqdrSJjEz6bY=; b=LyCVsPnM1mpjyQMi2i0MjCvb0MFeyBQ3P/uerKAPh1wBuyW+4H91NLUjHalBBJ5lfq gJIPFBSyjZDAS17L/NZpmN7J8Klsi1JA3Tnncl+HfyYoGoCnIjotAPqZp6v3iL678uI/ +TgKR7hpZi6EWIimn439d1b/u91U3bDHBTrhLZ0PiMZGuZDlRiV/P4w+ijI8n2O192Mf w5qHxt326F23EddL3Yi/V89/zuPVW68K9t+WjZDV+Ih64hrENxOlZ3OZyaS+q9e9rt2R 1TChNep6ne14gHfT7zfjdcuMREbFY5QMCgKTiBWITIlQJytE+Zr6k2qPiqGwN6CDLDuD vztA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880191; x=1790484991; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=vhyKqtsY06vLNdvd6vYAC+C0aLujryTRqdrSJjEz6bY=; b=suMStKWme6NA5+znZP0IoymelcTbZMhRNXN+7MSzilE9i1Xd1xmbT1VfH3siFRk6J0 pnH2lM8eJn2Nx0OhSiDOsoTrL/XN3otI2BMwpRiynXcHAAniTuEtaPPDju9GmTZ4F5zE 4HKJpuH/HarO283n23QBMs8ksrI4YCLXerLHv0JfOwmD+wIkwJppox3KX9O8aTTwvD3s JDNOaehIBk2x6KthFpfVEONw151satAPMCzchTUqmAAMaY/N22/xP/WIJpaI7oxnIGu2 0pbd9H3cgHIPLapcPmifWyqra2iPqKcGWm+bfxzbQoothlJnCCmWeKqLn9VDaaPWH7AJ lqSQ== X-Forwarded-Encrypted: i=1; AKwUvBxyBwzTkDNC6h2pZ9N0F8wBYacyhMdXydvIOOtyPyBlkwVzCGHH/xB/48iFTEwQ/y3z+4ZHUJtyxQmI2u8=@vger.kernel.org X-Gm-Message-State: AFuF++me//ZarTedfiSdCzdlso479v8XCEQJ+LJqET4hqdX42pzjhdgl iZM7ivT4gPsC2gENybj4w7IXR6KWXutbkZEcgzAoukGzGE489dd6n1iF X-Gm-Gg: AYBFou3zYLK4PbhyIoWGVKcd5h1TUG3DkIhN5Q4QrdaXtJwMFWRSgP6wczHMMXsclg1 XHJg8Tz0v+qkLRgjDpdo2htaWYpS3DS2AzZLvZqvoIuqyrHrSMLQY81wc/5O25u/WkokXkBZC37 VJe6kLoSIs64F7yHQQb7YgoQj5a1kg5AZFO5Ap3fNr4IFzBTLEZEJahHODSLh4shOeODW+8P/gQ B+74PGb0W+D7MWoTvppd05CBer2M4CHZQKVT6UYJO9/d+0UfSy0pUDmPt1bP1oe9v3AXGA6ono4 98pjbLdFKUYIWtcr64TuhlcHLA4ePCWrsS5uGTpEtjnnzMi5m1z5M46nXMGCb9XbV2Dl0JwH3iX XCw+GaMP/dV/B6EmftYczan4OiMOvPaJ/RYw6XeZp6iQekk9SSLYWhk7iCMZgApmDvwFsFYkBn5 4XygciRs0OfhZu1BhZJiaYecw/umjOejKtHse9vaTI0mgl+sCF7N7rdxW8UdO56KyzRyn1lfT3j ymNU6FlN8UolddSPOlWithIhb87Vx78GikORjDP97500g3aPZSuCEi9L6J2IYQTOBX8t4355x9R +XbP0ofGcxL11N6jGR/U6c3lugtJFwBzkdv3HlsqXG+HA9Y= X-Received: by 2002:a17:903:1446:b0:2da:eb8f:b4e4 with SMTP id d9443c01a7336-2ddb1add397mr117214805ad.7.1789880191567; Sat, 19 Sep 2026 21:56:31 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.56.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:56:31 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:48 +1000 Subject: [PATCH 09/28] ASoC: ops: Move guts out of snd_soc_limit_volume Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-9-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1949; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=ofWNdRfEPmyBqzJBf/dI8RMLcLf8D6L0C2OlsVRutbo=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0xXaG63U53++zvmJ51PEZI2s0OpTh2NTF/oY6Ww2/ bGnqHRrx0QWBjEuBksxRZYNTUIes43YbvaLVO6FmcPKBDJEWqSBAQhYGPhyE/NKjXSM9Ey1DfUM jXSMdYwYuDgFYKqfhTH8z/nL9d9t399GmTaj31sO7E/klD6itHY9U2Sj2g7BxFc/MxkZ5q2a3aJ r5a1bdVfwxPWl+0T3vOXK2SNh4WS2vHdeF5scHwA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er In advance of other changes, move the modification of the control itself into function of its own. Signed-off-by: Martin Povi=C5=A1er Signed-off-by: James Calligeros --- sound/soc/soc-ops.c | 28 +++++++++++++------------ 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c index 142f407e3939..e572b05840b4 100644 --- a/sound/soc/soc-ops.c +++ b/sound/soc/soc-ops.c @@ -434,6 +434,16 @@ static int snd_soc_clip_to_platform_max(struct snd_kco= ntrol *kctl) return ret; } =20 +static int soc_limit_volume(struct snd_kcontrol *kctl, int max) +{ + struct soc_mixer_control *mc =3D (struct soc_mixer_control *)kctl->privat= e_value; + + if (max <=3D 0 || max > mc->max - mc->min) + return -EINVAL; + mc->platform_max =3D max; + return snd_soc_clip_to_platform_max(kctl); +} + /** * snd_soc_limit_volume - Set new limit to an existing volume control. * @@ -446,28 +456,20 @@ static int snd_soc_clip_to_platform_max(struct snd_kc= ontrol *kctl) int snd_soc_limit_volume(struct snd_soc_card *card, const char *name, int = max) { struct snd_kcontrol *kctl; - int ret =3D -EINVAL; =20 - /* Sanity check for name and max */ - if (unlikely(!name || max <=3D 0)) + /* Sanity check for name */ + if (unlikely(!name)) return -EINVAL; =20 kctl =3D snd_soc_card_get_kcontrol(card, name); - if (kctl) { - struct soc_mixer_control *mc =3D - (struct soc_mixer_control *)kctl->private_value; - - if (max <=3D mc->max - mc->min) { - mc->platform_max =3D max; - ret =3D snd_soc_clip_to_platform_max(kctl); - } - } else { + if (!kctl) { /* Some cards blindly add limits for multiple variants. */ dev_dbg(card->dev, "Volume limit for unknown control '%s'\n", name); + return -EINVAL; } =20 - return ret; + return soc_limit_volume(kctl, max); } EXPORT_SYMBOL_GPL(snd_soc_limit_volume); =20 --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D842C3CF69F for ; Sun, 20 Sep 2026 04:56:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880203; cv=none; b=GWUHa5fpm3r+g0Xof6U9X4gF/WbojhDkXEFvqdf1oUfEl8OJF2vFXyCM4JDL73X0UisHhtzh5AGFfuBVKMtd8Ya0mIE05I14hEhVZz1D8WS9MxlR0Z+XaOCq71VPr204xBn8NEtg6oiudtlLUfn8o9S+ZMqBhW8rLiESqC4zKzA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880203; c=relaxed/simple; bh=orkI4Wz6NvKsu2dnhAfmTqfm8jAF2sqyShpaRHJbfnA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WmgN8PBoqA1eUNJPzC4FgeibJHxzmUAMEEflJUtRLSmJgSauXQqjzK7iJaSlS4TPM+nXNXF1L1Uqe5ymsQTT/FUvtRn6AXWg5AUihulG5AQUrYOJkqgmm3JfyHLOzl3RU4CPLK/bYpb7TxVTCysjQBn1v/afFxjJnQERNxJaK40= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=I1O+5BtJ; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="I1O+5BtJ" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2d747ec6185so12088375ad.0 for ; Sat, 19 Sep 2026 21:56:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880201; x=1790485001; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=usgTFYno7+hAzGXo/yfuRjYlJhKU8fYfhaps2/4rD8k=; b=I1O+5BtJGUet+kpfZoO9fYMHVZ9EujvfTncIWpWdLuQL77w5slP+J/UZMNrtPjr0pM LtWPCg91+BwGyPPCQ/KqIUCZtDMK8JeKGPqtlvTBgHxKyR25ZHzu01ah/P+PcbuWInH5 qhxGAHDlRFe0IzAHiRAApKxv2tycfzqnI3gWcUGbTRztidLVeoMPAVx6n1ngYhhakiX7 4+PPkRM8z9DiA/oE6ynGKlL/2pnijbZOEGDh8ygvatMh1AirXclsol5jJ5U/y8/MQzVN RqfYb0pr86OZWux5nUTTpAhdnKfnVZU6dB7DpVYamJwIAlAv+fr4z4KRew0JSmwbP8Y+ koOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880201; x=1790485001; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=usgTFYno7+hAzGXo/yfuRjYlJhKU8fYfhaps2/4rD8k=; b=eBiDYzLWvLChu5OG3wQYd1KYr1bJw0xBmygvV4HbmMDdxFFO+fqFcye4NPhnYWW4c5 ymxiriE1nI9j8z8zqF50xk0GO85Jj1oBsDUtgCA8sU8BA7XXc5MzeXuAPWxiE1iVBv+J tO509OExvN/1EbeGnlibavgsSkX2bgHBI9J5Cyau6njy+WmGE0Bav+5uqy4P4xDyWOiq ciEcTKURQOmoIZaYMLXX/OrWmlsf6SjF2BzABbPfWzAfQsn1IiTUnrbv5vPjvnyViAUP HSCPfVK5Zo5A56mb0Fdpm7LxhZHpTMGpl1uHo6wpLAJzLJU0wS+WZy3OqwVZaNbPF78k vzGw== X-Forwarded-Encrypted: i=1; AKwUvBxTHMd1U4nxuGv8QJH5u2HHnPtLc8aucUAR/ZiQPQKTg5ih6r15dpyyg/b8xp/CPuurXyIxw31Y1WTFhiQ=@vger.kernel.org X-Gm-Message-State: AFuF++lm5+MXSZwRaGn/4Atx6zWs3z66X+8okXy4FUi6HQaHDCFwYztX AuMmf4s1Qpv/QNHCApemFf5L6+JPEDI57C5JHknakuMEPUxq1bMaF2G2 X-Gm-Gg: AYBFou3mzNVnNR120AQl6AalovON2H2m94oMVK0MrBJXbZRAf4JhWY71MCoBXKY8kzZ 8deUu+4PSOqsgG0cwvGKmJsuMAQ5Bqpyt4Ur3ZnKhV0tszdgAaljt01M0kuesjExy92OAk+p/sl mzEMOaiWT3+mlz7EhlCXUnQgPs5ADLdTy/RvMGrrFmNf3edkejO/TheIHmGdiDVqR5oOc22AHL7 E/SDWi0Z3W9tgonUzRgHvx3uQDULM8mGLljNGrAV0f//p7gpNbhbRNFh6M/bhl1O00czYN0P16T 59v7hXeEqBScihFwBKmu8JesWEa6vmoV2Oc3+B/f8cnLsSD2GXMMA/Ks+XosxOa0s6pqA1GszPx 4gRej6f5oH5J59CDllICfHjFE86yREr5SrPqTnqEcH7U6zkKLCt/bgzX/PbAEoMi4pIB5l6mSva 6OkRzLY6/lSMCkCNG1ktxFPPJjCcSNOL+GCo5bd/idHh6SG6hS6rpo03CHU25X85pR4TIVvb1+4 UyaJfpXpe1zBe8uSipQvGSyvuNaMvrPxIzs2B/OT4QaM2HCj5ePhVpq7pLP+fJCZ1MBHCramjd0 sg/A5VCmHp8nK8wpdsDrxrBdF08lfgmtNT8u8RhtXcBtme0= X-Received: by 2002:a17:902:e543:b0:2df:39bd:ace2 with SMTP id d9443c01a7336-2df39bdb0a4mr24798825ad.43.1789880201029; Sat, 19 Sep 2026 21:56:41 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.56.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:56:40 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:49 +1000 Subject: [PATCH 10/28] ASoC: ops: Accept patterns in snd_soc_limit_volume Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-10-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2816; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=giyxcaB7oPKDW7kHY6FxQFJhi2IQzFYLV+w/nh4sO8E=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0xV+HF2p1seUK7lhz+75Sy6XKnK6zLlreVYmbF3Bm QOajkLxHRNZGMS4GCzFFFk2NAl5zDZiu9kvUrkXZg4rE8gQaZEGBiBgYeDLTcwrNdIx0jPVNtQz NNIx1jFi4OIUgKleG8TI8CqdbbN2+S/VoCAT3nVMDvGZ86ZkRsz6OD1eZoq/ovrURYwMV95umc5 m67PbWbG0nuv1Qp6aIJtzX5z1bYVeT724eGMZPwA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er In snd_soc_limit_volume, instead of looking up a single control by name, also understand wildcard-starting patterns like '* Amp Gain Volume' to touch many controls at one. Signed-off-by: Martin Povi=C5=A1er Signed-off-by: James Calligeros --- sound/soc/soc-ops.c | 51 ++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c index e572b05840b4..2f91ee7946bb 100644 --- a/sound/soc/soc-ops.c +++ b/sound/soc/soc-ops.c @@ -403,6 +403,29 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol, } EXPORT_SYMBOL_GPL(snd_soc_put_volsw_sx); =20 +static bool soc_control_matches(struct snd_kcontrol *kctl, + const char *pattern) +{ + const char *name =3D kctl->id.name; + + if (pattern[0] =3D=3D '*') { + int namelen; + int patternlen; + + pattern++; + if (pattern[0] =3D=3D ' ') + pattern++; + + namelen =3D strlen(name); + patternlen =3D strlen(pattern); + + if (namelen > patternlen) + name +=3D namelen - patternlen; + } + + return !strcmp(name, pattern); +} + static int snd_soc_clip_to_platform_max(struct snd_kcontrol *kctl) { struct soc_mixer_control *mc =3D (struct soc_mixer_control *)kctl->privat= e_value; @@ -445,31 +468,47 @@ static int soc_limit_volume(struct snd_kcontrol *kctl= , int max) } =20 /** - * snd_soc_limit_volume - Set new limit to an existing volume control. + * snd_soc_limit_volume - Set new limit to existing volume controls. * * @card: where to look for the control - * @name: Name of the control + * @name: name pattern * @max: new maximum limit * - * Return 0 for success, else error. + * Finds controls matching the given name (which can be either a name + * verbatim, or a pattern starting with the wildcard '*') and sets + * a platform volume limit on them. + * + * Return number of matching controls on success, else error. At least + * one control needs to match the pattern. */ int snd_soc_limit_volume(struct snd_soc_card *card, const char *name, int = max) { struct snd_kcontrol *kctl; + int hits =3D 0; + int ret; =20 /* Sanity check for name */ if (unlikely(!name)) return -EINVAL; =20 - kctl =3D snd_soc_card_get_kcontrol(card, name); - if (!kctl) { + list_for_each_entry(kctl, &card->snd_card->controls, list) { + if (!soc_control_matches(kctl, name)) + continue; + + ret =3D soc_limit_volume(kctl, max); + if (ret < 0) + return ret; + hits++; + } + + if (!hits) { /* Some cards blindly add limits for multiple variants. */ dev_dbg(card->dev, "Volume limit for unknown control '%s'\n", name); return -EINVAL; } =20 - return soc_limit_volume(kctl, max); + return hits; } EXPORT_SYMBOL_GPL(snd_soc_limit_volume); =20 --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F9803CE4B9 for ; Sun, 20 Sep 2026 04:56:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880211; cv=none; b=nDe0qJAx0b01mfpaII0tH/GjQMSIMRAP/FTk52tylv+27cd4PkEmO9/9qf8fOU/96WRvoaYf0vHbAj87F/hr5mdXU6UU294NBSpyN/Nf/gtMLBcDx48ipVSOlBYKclePRXxWy5q7DeCiIF32oTy6c6SpKMQ3rfFR9QRv5W1mkg8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880211; c=relaxed/simple; bh=T6mbgeWv9jzF1B9kGkNBo77HMeI/WqXPSrUa9mCj9Mc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=c1hlWfMydIoE39yEHwjoY0X17T44AhOaPX9e0wVyuqB1b6zb3y4wLRuKCgpJV7zvF5Ga3zyRgzDngHogBWzhfCXByM58RrCFCJRBlKCor9h45JehszW81ia96a9Oe1WqkNTDbkTFjtRlWkIgpp2co+ZVP5lf+8QtbbrTeuAJUWU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=BsOlAGs7; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BsOlAGs7" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2db1ca069c8so20272345ad.3 for ; Sat, 19 Sep 2026 21:56:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880210; x=1790485010; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3dXNK/OowzWM58hnD1jde+T7w0Zoo6WExVjNMgQVHK8=; b=BsOlAGs7v5xLNbovIUT9SWMZ/4MIIbWOoxViRs4ace2dj9NNe1K+TSWTgjJQ+3H0Mj TLe4gL5gA0K+GJAawNgQhObYoC06qSgQX1BIK/xwHzDVFI7E4osq9s5xzI+nFUduRg2C hSH7RUI1qHFyFKn/E9pgQtsvdlziS1hs9jdppPMlGOI/QlaZAVAnHsuyShLsvMCjYoQg BCboTv3TQKtIBv37Dja6BgSDhyh1VTT7bo6arOQHtZezOgEnh0GnaCa4w84PuSWWfBGD GdVkhI+NmJuEZmufzmPZHYNe6VnN+htRw5G7J7n34mF/7Q+pw11fgHrwIoikiW96Xatl IMxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880210; x=1790485010; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3dXNK/OowzWM58hnD1jde+T7w0Zoo6WExVjNMgQVHK8=; b=mKe/dG+7DoQSNHDAz2SzHgPDanLDkE7Jdu8j60188aa/GoloatpRGYkAi+r4BQwbIG fY0eZ7g+lwgzeDL7IXayihelLs9uTrUUnYY5JuLm/0Yx9y/o8KSxNhT08kT947n7xwEJ 4dX/ohzptJ+dFZGOxChi9Q/GmST9KCloQeLL6nu/GggUhIz2AjrqPjpXcHnFqB5FgZUk KPwev2LLVREV0cuPB4RvGbSd0B2FliX+ISYMLfzfTtkCfUTtUsKzLKtuwjQ7R+cOAjhO DZiD8MbwrWD1UJ9Kjnn4vZi7qSkCLhlQoYZk014Ibsl2v7NlSDym/VjuAcP5kylTspjJ y8AA== X-Forwarded-Encrypted: i=1; AKwUvByIIq0erXAshn5iStmN++2DHQaQlNU4a095kCqgVoSYXMUScUjAzE4D6iSZD13mWePizJhhJFTBhEVN2AQ=@vger.kernel.org X-Gm-Message-State: AFuF++nx1gQLEMLST/Kvz9HIjA6CCw7ldukpTQA/fuYH6bFN08bQu37a nHUX0k6CbNavNCgohWOywJQz3JxdHxhT+VU9NQaH3zgT4jlV6DRDcEaf X-Gm-Gg: AYBFou2ZaV58VKvgQZ/77zvllvSf4UM5bs3MskVkTpHHeq4C8cNoYn5AWZ64DqGNoFt EufxTm/Fy7eP1l9oBGcWp4QdNjFyePgOFw8BOp7DnEkPQTKbtlpMMGkf7gOcVqGf/jmzmL2QeXk 9wGXz1fEGj7xoG1BW37Os+eyV5D7tjelEMqdGJS3MSmx0nT5CLqRt8AGXGLk2UHXKOnRV/Hj4M7 rLfVBcls1xmSn3SYBtFosSppL/P1tdkzJP+10hg70oD4uubWr3J3eNNO4j9puKITzaFCDlwv6kI 4alWKT+EAJvJ/L+RPWckteVgc/qAcZGbuc15+y5ogA2lvKZtyldXwXnf9G8SLGqgTOITYUhKdAw cRc1pLfV9678OAenVMqKXt0B9uXIKg1xklQjbi+cIzPGtbdCiUPjS62+yamsMuV5TCpgpO1gRa4 I9cKGtANylT2ft83q1dhZ6DOYh9LXo8ftfIOPk9ZWTmuFJgHgshut/2XkQ4HUZlNqlngNmXwj0H iiFwFZS+1kgvsol+5UQho9t1SDIji96LnjJf+xmcmORh6mssq//U9qVxmNhEcK1v39sFjia6HHe IZubCM8CR7/sju5qPSmFHwAbxCBatsdQn/vynbVeNyRvYcM= X-Received: by 2002:a17:902:f645:b0:2d8:d4d0:792b with SMTP id d9443c01a7336-2ddb1b79d84mr118058735ad.15.1789880209811; Sat, 19 Sep 2026 21:56:49 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.56.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:56:49 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:50 +1000 Subject: [PATCH 11/28] ASoC: ops: Introduce 'snd_soc_deactivate_kctl' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-11-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2331; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=4cm5zIm3FR1CXBqv5TeTAc7DTM6jYX/PUwYOK0HZ2oU=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0xVeP9V2u/i9uIX1ytYqxZ/snN8836Rv+51+YvqOp vWx0vd8OyayMIhxMViKKbJsaBLymG3EdrNfpHIvzBxWJpAh0iINDEDAwsCXm5hXaqRjpGeqbahn aKRjrGPEwMUpAFMtt5rhf3hUQtvsyg7bl9YHX3CIpm9Wea/cHlYhG3Jxoc2m8Led0owMv//eL7J x5Duk6RhwIVNQ43zMTevZAQlyynuN2G49FnzPDQA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er The new function can be used to deactivate controls -- either a single one or in bulk by pattern. It is something a machine driver may call in fixup_controls. Signed-off-by: Martin Povi=C5=A1er Signed-off-by: James Calligeros --- include/sound/soc.h | 2 ++ sound/soc/soc-ops.c | 38 +++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/include/sound/soc.h b/include/sound/soc.h index 553bb7e2be98..973ffaf6f060 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -578,6 +578,8 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); int snd_soc_limit_volume(struct snd_soc_card *card, const char *name, int max); +int snd_soc_deactivate_kctl(struct snd_soc_card *card, + const char *name, int active); int snd_soc_bytes_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo); int snd_soc_bytes_get(struct snd_kcontrol *kcontrol, diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c index 2f91ee7946bb..d35e24df891b 100644 --- a/sound/soc/soc-ops.c +++ b/sound/soc/soc-ops.c @@ -512,6 +512,44 @@ int snd_soc_limit_volume(struct snd_soc_card *card, co= nst char *name, int max) } EXPORT_SYMBOL_GPL(snd_soc_limit_volume); =20 +/** + * snd_soc_deactivate_kctl - Activate/deactivate controls matching a patte= rn + * + * @card: where to look for the controls + * @name: name pattern + * @active: non-zero to activate, zero to deactivate + * + * Return number of matching controls on success, else error. + * No controls need to match. + */ +int snd_soc_deactivate_kctl(struct snd_soc_card *card, + const char *name, int active) +{ + struct snd_kcontrol *kctl; + int hits =3D 0; + int ret; + + /* Sanity check for name */ + if (unlikely(!name)) + return -EINVAL; + + list_for_each_entry(kctl, &card->snd_card->controls, list) { + if (!soc_control_matches(kctl, name)) + continue; + + ret =3D snd_ctl_activate_id(card->snd_card, &kctl->id, active); + if (ret < 0) + return ret; + hits++; + } + + if (!hits) + return -EINVAL; + + return hits; +} +EXPORT_SYMBOL_GPL(snd_soc_deactivate_kctl); + int snd_soc_bytes_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) { --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f42.google.com (mail-pj2-f42.google.com [74.125.227.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 866E83D0BE5 for ; Sun, 20 Sep 2026 04:56:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880220; cv=none; b=oAN8P7niqRpAYqv8FGtnQyvnaealAt2nYr6qhHe/1ePMTicxNEx2FQv5foTQ2Xbd4OtqlVHkB1g/QQ2CPX3LwBCeBqFQu06sBuXZ+eY7nN9MQoWFESo2nfpO+2SOlUv4VqEVIyYIGFIvLYN1dWRQZjJXWPHT6pIrjeI9dQ2A76E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880220; c=relaxed/simple; bh=dKaT5/AJvuu/ovhkji/q4clDn7hNGscBb7o5Poe/oV8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=g6f2YYBdZfeYIeLfbVUqItwM/c6xu8s+YGn2xw1CzgoX0gBKdjHGfuR1Kue1Wsi2fAq9hB7zDcyo2tIMjaicbHFqeVLC8qwyKgnIF9UL27/snOpZRbw8FCuj8plaeCQj7Y3seikgtdMMw5c9xDWbQcJBNoJSOKq+wYjvfR48Gk8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JbzkajnO; arc=none smtp.client-ip=74.125.227.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JbzkajnO" Received: by mail-pj2-f42.google.com with SMTP id d9443c01a7336-2ddaa08c890so18056835ad.0 for ; Sat, 19 Sep 2026 21:56:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880219; x=1790485019; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YuKu80M7pHMVvwxhK5F4M5xUsUReDWNtyKOTcL7spBk=; b=JbzkajnOeytAcqGOEJ7BM/U44QtJidYiPmgt4sfzbuF5E0J1O2l7GUeaUaT7VgQRol kvN3IFOtHXizagSySZQVgpCCThfqn0xELpSXzRj8RhX+bvX0ABqDl97N33LMM/ZpPfLr nIrLDot5ba1BNLZuh3KogUhhDuhypp6Dt/afemk+bG7/bRMDJJM8+cS9uTnYH4vCGkbv qDND6lXcGPWsEeQ69DuaNtHV6+fFfwlUCrEqwG1Mn1ZYRDC+A9+RDjUxrTRSkVtBsQjX zsl13EpnXNawX1u9qUzdYNcfb8PNGM/VAFeAeHxGzGu0kX1fKT34z++1zmhh5VqmA5qe sWGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880219; x=1790485019; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=YuKu80M7pHMVvwxhK5F4M5xUsUReDWNtyKOTcL7spBk=; b=E6+cgZxQesLy2YM1qZ1CtmXhHKK2aTjfNpyGyGAXkK5dQADSp5p+JU1pt2bpoowSDs r2v+uIWeaOWxk8ZSBSizL4L7bvSiVMaSr4SduPCDHdaSW5pIT4a4IH77nwfwOhgiMqfe GJQe3hzzWv1Mtt5wiaEMnx9jeYnJJVilpB1Izp/s3CoyWEGxPAiyZZMzseMjvSxVxYE+ LJQtcvoJPEYVCXBXvvZM/FlAR6z8nHiCbjpMaXCe67kzzWkTWfhnnKRmo2y8ZDQAktlP Mfvzq+/gZNGuDSUvP2pE4EB1xZ8aeMWE5tESSjttthIMcxGXE0DDFVgSW5jPbhECDoJl Pj7w== X-Forwarded-Encrypted: i=1; AKwUvBz/zrswiA1IK1SAtQhPIVxB+BYKOye6s24xyteRvL4kZg0yY39A1MxAFhANCXo327Oz8RrG8xvqepQbLMU=@vger.kernel.org X-Gm-Message-State: AFuF++myEz+w81UuzmH02LM25hZyPD/vwgQnhupUSYZMlnJ5B2ORpUk5 6NpIO7BWf5QS+TJpe2SBoOqtnDr7GnDIl78SeTAjDhuYUivmr/48mOmd X-Gm-Gg: AYBFou1x2DvRjTDrj9TF3k7JcEsLE1AkLSb44WjQQmcErzKixxXDm+I55LGBVIf3JhM ATa4QH0xdHeDWyfVqiXMe6YM/+8CyN72Ow0poOxtg8K5Fro6SNN3Vc4z30p+3Iam4WElLjD1ghl bTerIMx0f6H2WHbD61LZarUrBHWeuSRwLJBsQESHug2sZiYxCd8WWs2gKHhv7mbcnMl4GfEin9I XjWTYqUu3RsgdritYTvsIwDrLRdbg9L6qlqqDXB+t6nexThG3hE2SjcN4MOao/F/7lPRsly6J4f 4QKUurOY8LYviK5vFfv5/NfbMYckSkYoX3H0KJYhHwxy0iAvx+h3hetFAles5oK+hEbX318jZ9M +bFC8p7AdU9c2Qdr6GBWCt4pHDnDnuHbvaAeIVCuzb7RqFMsh946RRL8N8geYYkW+7YGEI5zPFb omBddLSyAG37Jgavs96mB+5Ofd2N+Cwx11J+b1Kw/4TjtKoO+zo1hzMcQxo8EouN0+SfCHIouL8 ehW6J8sIakVTLCreuMrkBKd4+PEsyFqvu+1bWOsJF5GVX3++w1B948rR0V0LqYquCklcXzeEHvc 44HqiEDhpwyJg+LIi4PK3zBRBO/wG0qu7hN854SDhIz9bMU= X-Received: by 2002:a17:903:32d2:b0:2dd:7ab0:7313 with SMTP id d9443c01a7336-2ddb1c17059mr113999215ad.18.1789880218740; Sat, 19 Sep 2026 21:56:58 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.56.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:56:58 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:51 +1000 Subject: [PATCH 12/28] ASoC: ops: Introduce 'soc_set_enum_kctl' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-12-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3075; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=ALw7GM6BAIc0MHLkA2EcsPFMi9t4wRSGpPulB3kFXSk=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0xWYKk3fyLwPOWP4bnLrx6JZ3MlXbuismZzzpHTX6 3LxGCfTjoksDGJcDJZiiiwbmoQ8Zhux3ewXqdwLM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GukY6xgxcHEKwFTf7GBk2PQ34GexV8erhzy3oqqqFix1cXzjEnblC8NqE4dtJQfP9TH891WtZX0 Tk7ag3Txt7df9e//ssZq+ujZri9HMeyxeITUFvAA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er The new function is to be used to set enumerated controls to desired values -- either a single control or many controls in bulk by pattern. It is something a machine driver may call in fixup_controls. Signed-off-by: Martin Povi=C5=A1er Signed-off-by: James Calligeros --- include/sound/soc.h | 2 + sound/soc/soc-ops.c | 70 +++++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/include/sound/soc.h b/include/sound/soc.h index 973ffaf6f060..f356b553227d 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -580,6 +580,8 @@ int snd_soc_limit_volume(struct snd_soc_card *card, const char *name, int max); int snd_soc_deactivate_kctl(struct snd_soc_card *card, const char *name, int active); +int snd_soc_set_enum_kctl(struct snd_soc_card *card, + const char *name, const char *strval); int snd_soc_bytes_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo); int snd_soc_bytes_get(struct snd_kcontrol *kcontrol, diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c index d35e24df891b..dc27d1c409ab 100644 --- a/sound/soc/soc-ops.c +++ b/sound/soc/soc-ops.c @@ -550,6 +550,76 @@ int snd_soc_deactivate_kctl(struct snd_soc_card *card, } EXPORT_SYMBOL_GPL(snd_soc_deactivate_kctl); =20 +static int soc_set_enum_kctl(struct snd_kcontrol *kctl, const char *strval) +{ + struct snd_ctl_elem_value value; + struct snd_ctl_elem_info info; + int sel, i, ret; + + ret =3D kctl->info(kctl, &info); + if (ret < 0) + return ret; + + if (info.type !=3D SNDRV_CTL_ELEM_TYPE_ENUMERATED) + return -EINVAL; + + for (sel =3D 0; sel < info.value.enumerated.items; sel++) { + info.value.enumerated.item =3D sel; + ret =3D kctl->info(kctl, &info); + if (ret < 0) + return ret; + + if (!strcmp(strval, info.value.enumerated.name)) + break; + } + + if (sel =3D=3D info.value.enumerated.items) + return -EINVAL; + + for (i =3D 0; i < info.count; i++) + value.value.enumerated.item[i] =3D sel; + + return kctl->put(kctl, &value); +} + +/** + * snd_soc_set_enum_kctl - Set enumerated controls matching a pattern + * + * @card: where to look for the controls + * @name: name pattern + * @value: string value to set the controls to + * + * Return number of matching and set controls on success, else error. + * No controls need to match. + */ +int snd_soc_set_enum_kctl(struct snd_soc_card *card, + const char *name, const char *value) +{ + struct snd_kcontrol *kctl; + int hits =3D 0; + int ret; + + /* Sanity check for name */ + if (unlikely(!name)) + return -EINVAL; + + list_for_each_entry(kctl, &card->snd_card->controls, list) { + if (!soc_control_matches(kctl, name)) + continue; + + ret =3D soc_set_enum_kctl(kctl, value); + if (ret < 0) + return ret; + hits++; + } + + if (!hits) + return -EINVAL; + + return hits; +} +EXPORT_SYMBOL_GPL(snd_soc_set_enum_kctl); + int snd_soc_bytes_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) { --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 84F543D0914 for ; Sun, 20 Sep 2026 04:57:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880230; cv=none; b=RQzKkJaKoErOyAfY/FHwZQnBrMiC/2beeHsFt1tpLagHJRA1W78XjM25ibdmq6OOuZNhN9z0G9vAiXgbxzaenZx0D3o5baxlHsoVBiAvb0ZfWqEe5YSDAUM5nJJTm3e9OG2NQr3IhxazaG0ZVuXi5Idd1OPGfoLJPTqaMDxEQR8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880230; c=relaxed/simple; bh=zDu5vJd6sfeXYn8zauBK//VBQImq8vA1wPLHgVDUDsA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f8mhgZpu+kNNlB9IBPaAHNtj33LPnbLg0CnJflT/ueMSRjoNpknlLysLw+p8QW9SHApIgJLFFucTmp1AcfFckH/NvICE99zTnEO827o8XcNxQDUchsWSwNBC8FZfhb+2yWuSs8Qovu5HA7c9/C5f86+1bkxOf48NlwgRWaqjKXI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MU6ysIVy; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MU6ysIVy" Received: by mail-pj2-f13.google.com with SMTP id d9443c01a7336-2d747f066d8so6963915ad.1 for ; Sat, 19 Sep 2026 21:57:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880228; x=1790485028; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=0Em5RHq8kurLglT2Y/3vN8YPxgrqKKepZuisLHT8U5Q=; b=MU6ysIVyzkpcx83zVOelibKJ9YkpZfJk1Lc3//btlSzrhnH267nrs1W6N3tbRHznrW 1br5IJVL/iTxyB3f5l3g0WEhQ7BrzcDCnjAcOO5Y4JjOMTk2S2dXCKkrX4EiFgf1X8uD z8zkqhKi4bWyQkaLKc0qpjslOjkKjzyYpktBdHQcX55a9h00YteB5GjdMrdQWeDiuG88 tUL2OFdirSbQJEvLlNIZmpSm2MA9kfc/NFpSrdpeWHaXp+oQyZYAUk1wbfi/b1R2ntqD Xr/xuflN99QCynIrXIIbNrQjBQNul7FFX9UsIRD9RUZFz11RaAaylEsxpOovwJ/g1dO3 vDZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880228; x=1790485028; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=0Em5RHq8kurLglT2Y/3vN8YPxgrqKKepZuisLHT8U5Q=; b=df2EDhDMZoENdd07hBFErailkyAgS11dMIDPPpFykZI5cCpfcC9UxxRYdvwBTjnRWl J6J33mmOR49qFPKn83F5N3Dj7P4WsDYLW6MKOeF9QtlRpkMnOM9KVP3x5AgVMr5NcgD9 5/l+h8H2Nv7ZaqhldcsdOBgVCyJslDBUzHgfPKCfKct5kv5YHFZ57P4LMCgXAGNS0Mo5 yVVQ/USsp13IQvvkYVNcrGmVs0molFcWOITApVqcFOF+GDPcufgvRhMPPgNB5IN1a+gq 6uv/ztp6eNOoS2GTCw0oL4Jxw11FFIytZO8kr8anZKPV8Qm0zhBYLE+6iMCN/H2XYRsB aaJw== X-Forwarded-Encrypted: i=1; AKwUvBy9zwgxUjCurfPZMUQjtSdtEtDuk5cSMo5MVjOLFTGtkpymZL9dXNPzkgMxcuqcJz6z7Qafq2N7a0Xnuxk=@vger.kernel.org X-Gm-Message-State: AFuF++leB2ftBnK2dP0kZZCmSquLiZ5sE5iF2XdzhQYryuQ1ojNcUtgZ WEWmKys2b/3mzAXCLoT3ap5iOq/l4QVEU0nRbwid1HHA9+63DG8xhjW7 X-Gm-Gg: AYBFou01Y5ZcNIXgxbMHETuWzVGYDUil0bY2ZrdamseM5nVoryxkE2vUY+pA5cVORBj iZYv4DcogYl5aUV4EGqyutIZou8hNLckhRw4TQLMVFGSRWh545gHDTxk7g6VlmLCVcUC9AeGW3e s+fc4qttylfCCSh5Lk04aXYHznxElUsTB4xMFUUifOiGfZ8miev4mvge3fyv0AGi05Zl6JZNEaN 8z41aw1eLlR7ePV0BKIHAvjw/nk8HF0AD7Uibmx4zLPJhyXzX1P75Y0SN0JEwF/p34xv2+afzyw B9jbRBcAaqVaHnB/llM1XAPHm+UvhKsr9BRSeqmDGH3NJ315hI48gHCwnT7/PCBtZleukEOKTH5 oQuOScLaXt6vBmcQufriU+l0hCLUk7XT1w5aIpvMZbKiQMXPTxFzrTpqnnSN55DEqLdYDlhjS4z A4fdR+gsFr2cEjF8i1vtOpNxqYGpAm922ix0reHzO02vYgusNQyKwF+T2Avufqe9YyzcWQdOBGs gTfUsH1NGxXD32bFcLAPYlruCHWU2EcIjEsZ8/cSb7H5t6paZODfZ6GXDL6hLeA5ziLpozGvhE2 8WdkFPkezks6Ue9HxcNFDmZrp5vIiMh7IauxdwHSBM9YyZo= X-Received: by 2002:a17:903:1786:b0:2dd:c053:b9c6 with SMTP id d9443c01a7336-2ddc053ba3amr47265835ad.23.1789880227909; Sat, 19 Sep 2026 21:57:07 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.56.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:57:07 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:52 +1000 Subject: [PATCH 13/28] ASoC: card: Let 'fixup_controls' return errors Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-13-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3700; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=2WG4d/8EDKjA/Ac+P1A9R66HR3H99W3M7nFvRZ5lYJI=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0xXbV/kqyabeldw5w2j/zMmctyr9Nt7e4LXyl2qa2 mN+iVsSHRNZGMS4GCzFFFk2NAl5zDZiu9kvUrkXZg4rE8gQaZEGBiBgYeDLTcwrNdIx0jPVNtQz NNIx1jFi4OIUgKnWTGb4H9DXG5xQ1eBqtVFoYY2L8Brh1RZyjQeO3XsbkSDNPeXYd4Z/iu2mXVX qp19ZtQiuXdPgxaSWP+vVtKRV37rcbndO7dvPBAA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er Let the 'fixup_controls' card method return error values which will roll back the half-done binding of the card. Signed-off-by: Martin Povi=C5=A1er Signed-off-by: James Calligeros --- include/sound/soc-card.h | 2 +- include/sound/soc.h | 2 +- .../soc/mediatek/mt8188/mt8188-mt6359.c | 4 +++- sound/soc/soc-card.c | 12 +++++++++--- sound/soc/soc-core.c | 5 ++++- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/include/sound/soc-card.h b/include/sound/soc-card.h index 1f1e7d45f553..c392e6c4844b 100644 --- a/include/sound/soc-card.h +++ b/include/sound/soc-card.h @@ -44,7 +44,7 @@ int snd_soc_card_resume_post(struct snd_soc_card *card); =20 int snd_soc_card_probe(struct snd_soc_card *card); int snd_soc_card_late_probe(struct snd_soc_card *card); -void snd_soc_card_fixup_controls(struct snd_soc_card *card); +int snd_soc_card_fixup_controls(struct snd_soc_card *card); int snd_soc_card_remove(struct snd_soc_card *card); =20 void snd_soc_card_set_topology_name(struct snd_soc_card *card, const char = *preifx); diff --git a/include/sound/soc.h b/include/sound/soc.h index f356b553227d..d638fc69925c 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -1005,7 +1005,7 @@ struct snd_soc_card { =20 int (*probe)(struct snd_soc_card *card); int (*late_probe)(struct snd_soc_card *card); - void (*fixup_controls)(struct snd_soc_card *card); + int (*fixup_controls)(struct snd_soc_card *card); int (*remove)(struct snd_soc_card *card); =20 /* the pre and post PM functions are used to do any PM work before and diff --git a/sound/soc/mediatek/mt8188/mt8188-mt6359.c b/sound/soc/mediatek= /mt8188/mt8188-mt6359.c index 75c90d1d165f..14890af97706 100644 --- a/sound/soc/mediatek/mt8188/mt8188-mt6359.c +++ b/sound/soc/mediatek/mt8188/mt8188-mt6359.c @@ -1280,7 +1280,7 @@ static struct snd_soc_dai_link mt8188_mt6359_dai_link= s[] =3D { }, }; =20 -static void mt8188_fixup_controls(struct snd_soc_card *card) +static int mt8188_fixup_controls(struct snd_soc_card *card) { struct mtk_soc_card_data *soc_card_data =3D snd_soc_card_get_drvdata(card= ); struct mtk_platform_card_data *card_data =3D soc_card_data->card_data; @@ -1302,6 +1302,8 @@ static void mt8188_fixup_controls(struct snd_soc_card= *card) else dev_warn(card->dev, "Cannot find ctl : Headphone Switch\n"); } + + return 0; } =20 static struct snd_soc_card mt8188_mt6359_soc_card =3D { diff --git a/sound/soc/soc-card.c b/sound/soc/soc-card.c index 282d666dae9e..e4d81329cde3 100644 --- a/sound/soc/soc-card.c +++ b/sound/soc/soc-card.c @@ -184,10 +184,16 @@ int snd_soc_card_late_probe(struct snd_soc_card *card) return 0; } =20 -void snd_soc_card_fixup_controls(struct snd_soc_card *card) +int snd_soc_card_fixup_controls(struct snd_soc_card *card) { - if (card->fixup_controls) - card->fixup_controls(card); + if (card->fixup_controls) { + int ret =3D card->fixup_controls(card); + + if (ret < 0) + return soc_card_ret(card, ret); + } + + return 0; } =20 int snd_soc_card_remove(struct snd_soc_card *card) diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 06167a198591..2092373698db 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -2109,7 +2109,10 @@ static int snd_soc_bind_card(struct snd_soc_card *ca= rd) if (ret < 0) goto probe_end; } - snd_soc_card_fixup_controls(card); + + ret =3D snd_soc_card_fixup_controls(card); + if (ret < 0) + goto probe_end; =20 ret =3D snd_card_register(card->snd_card); if (ret < 0) { --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0F05D3D0934 for ; Sun, 20 Sep 2026 04:57:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880239; cv=none; b=TN8C9RixjwTkftZNcnvBl0mySmN9Z/0UIA5AqlGz9QHkO1v58EzXI2ljstY9U8fvMeko2U2Er0S+wJoYDObLLvYFE1VOAVIBmMMprUpc2qCLlPlc2rA4qDHKpk+z/RINh6Y6hcV3g6Iv4qDhE3kpK2nq76Mq6DMJDy6wilmihVA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880239; c=relaxed/simple; bh=qRwfoN5qNNqVQr8Wt/TWmwL741AZzzHX5UMTWlL06v0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tJoVk1hWFCZHTyo5U1eE2phjyeL32J3VxtLGrduYwsgsDq08MecJ4nWV5Oy95GHYPx2Z/gJNzo4IDOO3cEQxOPkkGtaIL5brkyeK+SQhw2tNnK+yqzH3aqdaC2iJtUsBQI4FYa8YcVg30rGs2rLbfwy7KpogyEAWnurw/E1JlkI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hIp0EVLu; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hIp0EVLu" Received: by mail-pj2-f13.google.com with SMTP id d9443c01a7336-2d747ed1368so24899875ad.1 for ; Sat, 19 Sep 2026 21:57:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880237; x=1790485037; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=gWumTWBsv9GByVmif5mlGmCyRKrpCmaiWOQWTcHmLkY=; b=hIp0EVLuJ97tGVt5wly2XwmCN6Ot4IHrTn7hqm+HuuW280vwhLo6w22bS4J/1Opky4 sgkxofP1aInvEbkqvjyIOaIkzdUnxx6b0efovHfD306H+73HYfRl26ZkLjw0jE2k7ZVD wfmlAzeGQaN4NBVU5r4dP2ICbYHynZMa1mSYFLB6UG+S4oUWTYPuoQMuf0kaK3bjfIeP NwYu4TvazeDrzdyQU+SnpmUJfkWl9tbsTc4pvXo1qKqTcCsSSNGWA+k/9vXge9AUd9jv /gAGnxO7atNOv/jFOaE3Mj/ejGNaBbnW7Xgq9FV70dnbz/+LSbzhnvQWtBYpXLFM0KoD 6kdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880237; x=1790485037; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=gWumTWBsv9GByVmif5mlGmCyRKrpCmaiWOQWTcHmLkY=; b=c4NWz4k3kwL3WSZs8RG055RW+4QE7lXBAD59WZZzdrD4+od0o6q7TTfdkzuMB43joT nPlTtPTGXoFxVclFMoJOFNyoHAHDCLh0/s9GlBgC2cRUbEtfaJ2CrKKzcu1MUlzhqkLA c6UId/Rj3r8jbHuihxI9zWe5Mso9aLsuLwDXfns3zUmcik9iTrzvnGnwiV9vvlLB8UFb 3gg/sDrQrrRz8jdwJ7Sge6F1GCAOEg5Ciafl1iz3va24c+roq3MbDe+oB8xov0CQFOqc zTrlZcLi6uMn+IOsDnrwDDyX9iiDK2qz+yR76/LOajU4zTBAA/U0Fri6PdD/JzTFjzXX aFcA== X-Forwarded-Encrypted: i=1; AKwUvBzfN8+irq3ob6u5TaDU8VR9s9IjBooPAvZFP9ETcx5cBJ9p9RnUVrR8zXtWMKfEM25i2CqyvFg59fJB1KU=@vger.kernel.org X-Gm-Message-State: AFuF++nfaV1CggJnOHJTmjpIQnA0NckSukqzxR7a93dFhhQnPonpysLQ 5DWCB/LFZyQYsPiGir+pmygNDxpSRwOAD9Czl8j5uBnL8uYOoF22+iVl X-Gm-Gg: AYBFou1iZZUNW7tHjg2lzasTYJTmU8OVFQp9H4APAUr3E40D+EOCLzm4DQj33NaXrQy 8pjF65i1zyEm6JMRL4WAI+hABxpBr4aVsHccqSanK9R01ZuOKG0lD2Rehp2TmWVpuB+Sjvw/qxE kUI5ER95cByFOC6Han4/HVb+bYha/rrrAzXYL3ySCncN07OKvIXHIPWu6cShway0zWfD3jEyck6 9V2yqVIWxTEmx1PFE1g1Jtf6AC5TDhQy/2228B8YqtG0AXHZ0brK/qbSrPsn5NKKA5ZP82kzOuu BeYSvm+VhfB6z50ohWCXShw5BP3742IY+LRntq7OerTkFr15BYM9e33zuhWkuJ6R5Kehyy7v3I7 UI4QKE9VDK7ymgWjTt15H05KYSTtoRJwdVAebrnnT8N692RjeWjiIGzq27cRAbHYBotzjy8lyQj L5TdahcNZXguRJN4dBS6/OLrnRqVpzA5b1+HXy54J62Qy+tgX6416nHQMP9GCF4nLZzDqwdzNX+ 9ALxbFcwIYlWHn83Yepmw5zSENSwnogFXr9peQD/etpDPkdSuL7kr+/tjpKoZSmbAGNevIynIbg 1sHppSHFlfnKPLAaDuRrvO9LtNkgji6QFjYJuYLdtmTzlnw= X-Received: by 2002:a17:903:2350:b0:2d8:d4d0:7932 with SMTP id d9443c01a7336-2ddb1b99472mr110221825ad.22.1789880237323; Sat, 19 Sep 2026 21:57:17 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.57.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:57:17 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:53 +1000 Subject: [PATCH 14/28] ASoC: ops: Export snd_soc_control_matches() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-14-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org, Hector Martin X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2678; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=uxLGzSeW/mzW8E6v3Cg7Wd+ZjxhCKdm9ELh/X2EAU88=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0xWLO9eyfbBor06vLstcdaLicvofUeZTBl/eBvFfe rmvsK22YyILgxgXg6WYIsuGJiGP2UZsN/tFKvfCzGFlAhkiLdLAAAQsDHy5iXmlRjpGeqbahnqG RjrGOkYMXJwCMNX9PAz/s8qDIsvmh53P8D5Tz/lWc7XhN7NFpw+lskz3vNL/72d9IMP/oKod8dP Mjuve2bEroJZ3o1lo9uWXh9+oOpofqjxhlufLDQA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin This helper is useful for drivers that want to do their own control lookups and matching as part of more complex logic than the existing operations. Signed-off-by: Hector Martin Signed-off-by: James Calligeros --- include/sound/soc.h | 2 ++ sound/soc/soc-ops.c | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/include/sound/soc.h b/include/sound/soc.h index d638fc69925c..6c4689ef8973 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -576,6 +576,8 @@ int snd_soc_get_volsw_sx(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol); +bool snd_soc_control_matches(struct snd_kcontrol *kcontrol, + const char *pattern); int snd_soc_limit_volume(struct snd_soc_card *card, const char *name, int max); int snd_soc_deactivate_kctl(struct snd_soc_card *card, diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c index dc27d1c409ab..94d0514be66d 100644 --- a/sound/soc/soc-ops.c +++ b/sound/soc/soc-ops.c @@ -403,7 +403,7 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol, } EXPORT_SYMBOL_GPL(snd_soc_put_volsw_sx); =20 -static bool soc_control_matches(struct snd_kcontrol *kctl, +bool snd_soc_control_matches(struct snd_kcontrol *kctl, const char *pattern) { const char *name =3D kctl->id.name; @@ -425,6 +425,7 @@ static bool soc_control_matches(struct snd_kcontrol *kc= tl, =20 return !strcmp(name, pattern); } +EXPORT_SYMBOL_GPL(snd_soc_control_matches); =20 static int snd_soc_clip_to_platform_max(struct snd_kcontrol *kctl) { @@ -492,7 +493,7 @@ int snd_soc_limit_volume(struct snd_soc_card *card, con= st char *name, int max) return -EINVAL; =20 list_for_each_entry(kctl, &card->snd_card->controls, list) { - if (!soc_control_matches(kctl, name)) + if (!snd_soc_control_matches(kctl, name)) continue; =20 ret =3D soc_limit_volume(kctl, max); @@ -534,7 +535,7 @@ int snd_soc_deactivate_kctl(struct snd_soc_card *card, return -EINVAL; =20 list_for_each_entry(kctl, &card->snd_card->controls, list) { - if (!soc_control_matches(kctl, name)) + if (!snd_soc_control_matches(kctl, name)) continue; =20 ret =3D snd_ctl_activate_id(card->snd_card, &kctl->id, active); @@ -604,7 +605,7 @@ int snd_soc_set_enum_kctl(struct snd_soc_card *card, return -EINVAL; =20 list_for_each_entry(kctl, &card->snd_card->controls, list) { - if (!soc_control_matches(kctl, name)) + if (!snd_soc_control_matches(kctl, name)) continue; =20 ret =3D soc_set_enum_kctl(kctl, value); --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f38.google.com (mail-pj2-f38.google.com [74.125.227.166]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C86DD3D16FD for ; Sun, 20 Sep 2026 04:57:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.166 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880248; cv=none; b=Os4QvQFxrggkXsRWgvCVQXY0xEogsFxrI5CAOsXBaBRRewcntjPGC9D1qeL0pRGDlW5CtTBFu6nbRLMulglFiulnH9miPDHDP9zwwHy6cEOavyN/yLH62yMIPu0GXbBmHGw0PS3bINcYCwu18F5FCDJ2vrP2l3U85swpvHw0osI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880248; c=relaxed/simple; bh=fow1KNfeFBOwUBq/AuCok83xrJa9sG69vnUGOaB1hgI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Yt7aAx7l8B2DbuPxC0B8JYT5+sjQyS+uHs2y8i2J4ertRPIuWVE6Zow6HLAXp5mfKZ1K+YQjzTQXn6OyIksXO9m9k4UjD7Gx2MS98yjRU4NjYuFOVNdFdq6n7v85ilAorWDDJp4k/9GkKv02/zlnjzQO/A6xz02dsHxkgtoSfA8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=J/Oo2mKt; arc=none smtp.client-ip=74.125.227.166 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="J/Oo2mKt" Received: by mail-pj2-f38.google.com with SMTP id d9443c01a7336-2d747ec6185so12089605ad.0 for ; Sat, 19 Sep 2026 21:57:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880246; x=1790485046; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=UhSaVgPZF5rm02UijUctP+1GziT6CoSBtc+R2AKZdGQ=; b=J/Oo2mKtTIQoq5cyjzqWlKGA4Bd6OtR+BLMia4d40c/CjS8qq7cjHiBtL5c0l67RZb 2k7NLOYSg047iSUWJ8hPndh8gfI6pcTmRL8iTkkGclI62fYFheEOgYZXe5EtwQFClW1o 5KY8cTnWml2xQic+ZB03oaeTbsT5t/2a/TWjEW/3q79Zyzx52UYFtj6noEpbB9aPCPF0 ZGuZ1IcLm0poRJaEZ0U8jDIzaX6MxS/+a1dK72t2m7wJyJRI28J9W3Nsp4MZmO3CdKze ui91u6OgoyLpYvahsHlzqqojIU+tEuHeoEnziPtdyYN5tY8IrpOXJzsICLITRajvq87E z+Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880246; x=1790485046; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=UhSaVgPZF5rm02UijUctP+1GziT6CoSBtc+R2AKZdGQ=; b=qcywW0aW6jRqkHHgah9RhF8ARZnod0psYMfPOvG8+U+/sEj5EZk79cpqPPRgMY9GSz zJT2w33gAV62jPKfzMj7sRRM3a7Bo5xdxACJWdKfP3ukoRl/x86E92kpB3s9DjtMlpUZ lQFmdlEOjjlQismLKU7sHLBZcIRvC84HkwFhs5FnICn9cKCUoeTspUevtkZ5uMAkV5da 82RwOFzhWHZ+pjeNV+rRhdNsQQboAPuAJ95VypLOflc91NtS41fuFah/fosMYYd46xY1 mBLfVCqF46vvGZH4PuSaLqgM+KfvQMGQLn4KGoE9fIiteiJ0Pt4hRYMaCJOGj7ntA8K2 Z/gw== X-Forwarded-Encrypted: i=1; AKwUvByf9Xr2bdhvHVQsJMpiaEHtPfJvyRuAJjjiYSNlTyZG0RK5DxkcYRnyyQOWGrsLeWF8Qz87w37JrBTHAkQ=@vger.kernel.org X-Gm-Message-State: AFuF++kCeSBXxQbPrisqAwsJXdYbxjT3IG/gX6iWk73Krkon0Oj8meTs bNff5ani/nGv0o3BSLCXrFFZ8IRCTnMBxMgz+XSzu5qfR5ndXlKXtBtw X-Gm-Gg: AYBFou1a3j7XgitP7T4eTBnDrNo7zD+va+HHlUJ5b7p/7kwgXASIkFJQ8vSzu9SMSC0 3dULo/hfp08CYvUC4Jnb/Pya7KPlcvHEreR/QR2nrMXcV/asnnywv5au+jexe2ezyMLxNjL0z41 pq1fHNzqvC4qXmGnLp4zMku7J5M+lGJO0bSuNzTbOMQmuN0QxQuwBz7e43OMAEaoITrl2GbuAfx zIdyAT8Lszs0v/t57j5yLvfKHLBEhNwmJeB24dA4XGSc2IBwNX1O6lpwL2O1S84lzja9EKECC/W cykLPrDAab0FLBQgEkZahUKrK4Jhj6g2YLAdyU1G2zAVCPHXkAaKwFJt2olH0AwzjTjfPsh82t5 hdH9iEnWxafDDIcQu88L9lLAFPeyio4NMBQ8ypb8YDVDyP9ZZ4dXEHwLMXFvxpsESN0x+f4CPIl 39awXkBS+2vH0uPTG3lEyH33dFb1hyBOCVf6zuJhCcHJHGnI7YWV1gsGu3qqow1olGT2gpBi1hQ yS1c7Qpj1Wln6PYnXn1RLnd3o4vzKPAUbzXEZyVdu6FFDt366rcaxrLiezlhmPvGxmHbqd/nIZ1 z16124MXMN7ASWCB3IqvGlSsIgfF645W1bPRQD19xJ7CtSA= X-Received: by 2002:a17:903:3205:b0:2d8:f965:7e48 with SMTP id d9443c01a7336-2ddb1ab3990mr125558885ad.1.1789880246135; Sat, 19 Sep 2026 21:57:26 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.57.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:57:25 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:54 +1000 Subject: [PATCH 15/28] ASoC: tas2764: Set up V/ISENSE on codec probe Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-15-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3680; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=fow1KNfeFBOwUBq/AuCok83xrJa9sG69vnUGOaB1hgI=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0xVrK2bPvZvHF6X2dCXrwu1KRTPjZ9y5ViY06av2h xdHm9cVdUxkYRDjYrAUU2TZ0CTkMduI7Wa/SOVemDmsTCBDpEUaGICAhYEvNzGv1EjHSM9U21DP 0EjHWMeIgYtTAKZ6+UyG/6nut++9+/rpg8y69fskunk8ZVavXr+WVdSMRfcYq+WiK0sY/qmdUP2 7/MWbypxjaSUxbA7lme6/Pk5q07ZaOU/qrPlOZ3YA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Setup V/ISENSE on codec probe rather than doing so on every hw_params or TDM slot call so that it is configured at the same time as the rest of the codec. Signed-off-by: James Calligeros --- sound/soc/codecs/tas2764.c | 61 ++++++++----------------- 1 file changed, 20 insertions(+), 41 deletions(-) diff --git a/sound/soc/codecs/tas2764.c b/sound/soc/codecs/tas2764.c index 6654100ac91d..39372d0446d0 100644 --- a/sound/soc/codecs/tas2764.c +++ b/sound/soc/codecs/tas2764.c @@ -266,8 +266,6 @@ static int tas2764_mute(struct snd_soc_dai *dai, int mu= te, int direction) static int tas2764_set_bitwidth(struct tas2764_priv *tas2764, int bitwidth) { struct snd_soc_component *component =3D tas2764->component; - int sense_en; - int val; int ret; =20 switch (bitwidth) { @@ -297,32 +295,6 @@ static int tas2764_set_bitwidth(struct tas2764_priv *t= as2764, int bitwidth) if (ret < 0) return ret; =20 - val =3D snd_soc_component_read(tas2764->component, TAS2764_PWR_CTRL); - if (val < 0) - return val; - - if (val & (1 << TAS2764_VSENSE_POWER_EN)) - sense_en =3D 0; - else - sense_en =3D TAS2764_TDM_CFG5_VSNS_ENABLE; - - ret =3D snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG= 5, - TAS2764_TDM_CFG5_VSNS_ENABLE, - sense_en); - if (ret < 0) - return ret; - - if (val & (1 << TAS2764_ISENSE_POWER_EN)) - sense_en =3D 0; - else - sense_en =3D TAS2764_TDM_CFG6_ISNS_ENABLE; - - ret =3D snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG= 6, - TAS2764_TDM_CFG6_ISNS_ENABLE, - sense_en); - if (ret < 0) - return ret; - return 0; } =20 @@ -452,7 +424,6 @@ static int tas2764_set_dai_tdm_slot(struct snd_soc_dai = *dai, int slots, int slot_width) { struct snd_soc_component *component =3D dai->component; - struct tas2764_priv *tas2764 =3D snd_soc_component_get_drvdata(component); int left_slot, right_slot; int slots_cfg; int slot_size; @@ -499,15 +470,26 @@ static int tas2764_set_dai_tdm_slot(struct snd_soc_da= i *dai, if (ret < 0) return ret; =20 - ret =3D snd_soc_component_update_bits(component, TAS2764_TDM_CFG5, + return 0; +} + +static int tas2764_set_visense(struct tas2764_priv *tas2764, int vslot, in= t islot) +{ + int ret; + + ret =3D snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG= 5, + TAS2764_TDM_CFG5_VSNS_ENABLE | TAS2764_TDM_CFG5_50_MASK, - tas2764->v_sense_slot); + TAS2764_TDM_CFG5_VSNS_ENABLE | + vslot); if (ret < 0) return ret; =20 - ret =3D snd_soc_component_update_bits(component, TAS2764_TDM_CFG6, + ret =3D snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG= 6, + TAS2764_TDM_CFG6_ISNS_ENABLE | TAS2764_TDM_CFG6_50_MASK, - tas2764->i_sense_slot); + TAS2764_TDM_CFG6_ISNS_ENABLE | + islot); if (ret < 0) return ret; =20 @@ -821,15 +803,12 @@ static int tas2764_codec_probe(struct snd_soc_compone= nt *component) dev_warn(tas2764->dev, "failed to request IRQ: %d\n", ret); } =20 - ret =3D snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG= 5, - TAS2764_TDM_CFG5_VSNS_ENABLE, 0); - if (ret < 0) - return ret; + if (tas2764->v_sense_slot !=3D -1 || tas2764->i_sense_slot !=3D -1) { + ret =3D tas2764_set_visense(tas2764, tas2764->v_sense_slot, tas2764->i_s= ense_slot); + if (ret < 0) + return ret; + } =20 - ret =3D snd_soc_component_update_bits(tas2764->component, TAS2764_TDM_CFG= 6, - TAS2764_TDM_CFG6_ISNS_ENABLE, 0); - if (ret < 0) - return ret; =20 switch (tas2764->devid) { case DEVID_SN012776: --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6BE933D170C for ; Sun, 20 Sep 2026 04:57:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880262; cv=none; b=oNHDWac15mS/tGEMWQBu/c3LeMeCW5sj9icdWT1/yZj/w3SkOzdD2H/wvq48tatZtZI42JiSLhD9IiDvhYS6DOAgwbF5sN7ceTWSczowJVlq53HqtibWZpDDeuB2BPTgFayksoss3x3kFt199pJvt1NZ8KE9JeLuhfLlXsj6QOA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880262; c=relaxed/simple; bh=FvZ2nBnP/gJAiFxsNZ2r06A8P1gOfNe8ESag/rGSdzM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TC9pFKrt/IFx96fuTxBj1NiUJnKVpV2qwahFCnsORQPTwlVkDST5GcjusedJ6rBdaSovHvkx8ngg193Pw+mfnU5zagXHgEOw16+1btvVZMXFM7uY0jQBsVBZ+jP3xgjtAFsWJ/hNynlbVmOyY2EDWIgUdcl2tf6g7f6UAsY9kH8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=A7hFttFq; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="A7hFttFq" Received: by mail-pj2-f13.google.com with SMTP id 98e67ed59e1d1-396ccafb751so1637706a91.2 for ; Sat, 19 Sep 2026 21:57:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880257; x=1790485057; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=G4zUf7Eo4ZZIf+xriqF3As+PctHcpAQ19O4SCdIR+Zw=; b=A7hFttFqyfGvo2z1PZX9NOU5o7He8YZ0DEhZfFliQ87Z++JXG6F1ohFBIrqRkxGeJ4 GxSKAThD6yInYsesEI9t0J1kM5wkwgcEsnL5ia/p2oWR+/8MdevRkof1IyhiuPFcg9pO mR0xx3rCIVPOYK4ME0kIZJV85UebjzgIirPBMfeDKFmWFmWB9/IR+5Y1RuWEiJB28CCy ooyrBvAE1hNueRonjWoQ9JegUW4QrdeU2VmWZ6yqhCQaWCcOzNP1aaFqDoDL6xgKDof4 nz9R81IHoHTAdfumPH0FBaC8nOWI+ynm7Z/E7csQF2otITQAkgbB13bOjgqd60fcDh9n +hyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880257; x=1790485057; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=G4zUf7Eo4ZZIf+xriqF3As+PctHcpAQ19O4SCdIR+Zw=; b=2tYqLhnUH02cUG5L5JuqRqlb6KLRGEELC95KyRLXlfDg6diWE+bWAgpB0eUtR2GmPZ jFLaGbvLYn9qqwQyjxSKb2ShoSwJXzCa7CueJr6N1A9TdjcAQPOXbyYzRdlYOm7/80MP ENAXhGzDAcbZBeYukhudTV2NjoqE5M2g9vPRyPMcs+B1LD+K/FaXRV8ajsxtD4OcV8nE s2p3zhofeaytyJpwiWVPVL4YDGF2b2Yew6BlCSJHoaKuXyX1eD75xPzlEzuLhjRaXs13 gD4oQX8WeLhwF117aRL/0zwAcnbVhExHMmujwD7onbg0qKH3igJbNObYIWD9KO+iPJXM d1wg== X-Forwarded-Encrypted: i=1; AKwUvBwzW4cjyc7Xfrs/CsjvQPMLfZFopJ9yL1mB6saSf02leXfCtPRmYmsYeXQrf8RAX3LF48bREw7zIY9CENQ=@vger.kernel.org X-Gm-Message-State: AFuF++nRMPZmPbDlMZVuGIoDH/TUqE/9brt8QccesDfkEvmXA9sQ01aC RTVFaJbugF/UpdVxxb79DbPg6uMBQDSwG432ey4vUvrX29NM+jphjZ94 X-Gm-Gg: AYBFou0juVoXizY6HKUx7GZd7znuwMk+T0b9a6HMGBLc+KYb1/8Wv5hm2yZlNfRe34C 7ELOGi/KleW0ngiSfRK4vOLbBqlZlIedDiv6mZni7e8AQmQg++aWDq4TppFify80Twf1sZlnUQw OVNPtvUqt3UYbUF+QvUIIGszrQRmTfRlqeM7WR0ZNOZmHgFnkufIfynslQstcnB7fyIMtolXB0j c4cF+xVkBKCYj0X/IAHlbPC1kQiQ88eL1gLTiXz7u8VdUghIdDFIm7qK1GpLft04ejc3+zjBfKW VShP30tYnJzh22lA/c279J3ftxhdrSp/rJm3OeDUg6xmMbjPfa+Njci6lGDqjjsD8F6u5LeDZ7I EGU/0rm+2OZzxDmOz1ZFLmVQU9kpmW/F2yYA/xTtLHYc4FoCWcx3+uU05n8usqnyuNru+rF4bXw FzBD07pcaz7X/SWmvu70cyv+mX+B00XDucrJq0Se/6SW+FY3j6D+aXYjM/cAxQUrSBEUrIthSsk vEBpT1qMHSSH74Q6EtaarD9crM8h3DBCnCIFmdQtQAGfhKe4sZP5hejOccUZ5VCUE+ztFHXXgLo Jgw9u0Uev/L9ukIY1O1iAQ8JrXB1vykg7874JA65p0TXbso= X-Received: by 2002:a17:902:d592:b0:2dd:c100:7cb6 with SMTP id d9443c01a7336-2ddc1007d6amr51538025ad.50.1789880256501; Sat, 19 Sep 2026 21:57:36 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.57.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:57:35 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:55 +1000 Subject: [PATCH 16/28] ASoC: apple: Add macaudio machine driver Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-16-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org, Hector Martin , Sasha Finkelstein X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=55563; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=kg8CcpWYwz/3QrsSAAgbsN18R/39QfkHQtXSDzB5RTU=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0xUjzac9OJJytVUwZ9Ihx2n5Mi1C+9OWGX/5eJAzh 3vqvqbkjoksDGJcDJZiiiwbmoQ8Zhux3ewXqdwLM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GukY6xgxcHEKwFQfuczIcO7Pxglan+PPvTxcfuVOmQCXcUC/3JnVXdm5pWfszKdv+8/wV2739B5 70dsm9+w/J3Lwnttf9cXw6+TzPj0PjE8rpQQUsQMA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povi=C5=A1er Apple Silicon Macs have a complex audio subsystem consisting of an I2S peripheral (MCA) and multiple codecs of various models and capabilities. Some machines have a basic mono speaker with hardware downmix, while others have a very intricate stereo system consisting of multiple codecs and drivers per L/R channel. Some machines report voice coil voltage and current information back to the SoC, and others do not. All machines have a headset jack. Add an ASoC machine driver for this platform. To express all of this sanely, we initialise the correct combinations of codecs/I2S ports as DAI backends and link them to a synthetic frontend. Each frontend is linked to a PCM, one for the headset codec and one for the speaker system on the target machine. Signed-off-by: Martin Povi=C5=A1er Co-developed-by: Hector Martin Signed-off-by: Hector Martin Co-developed-by: Janne Grunau Signed-off-by: Janne Grunau Co-developed-by: Sasha Finkelstein Signed-off-by: Sasha Finkelstein Co-developed-by: James Calligeros Signed-off-by: James Calligeros --- sound/soc/apple/Kconfig | 19 + sound/soc/apple/Makefile | 4 + sound/soc/apple/macaudio.c | 1729 +++++++++++++++++++++++++ 3 files changed, 1752 insertions(+) diff --git a/sound/soc/apple/Kconfig b/sound/soc/apple/Kconfig index f1d071a99fbf..8cca86dfd8c0 100644 --- a/sound/soc/apple/Kconfig +++ b/sound/soc/apple/Kconfig @@ -9,4 +9,23 @@ config SND_SOC_APPLE_MCA This option enables an ASoC platform driver for MCA peripherals found on Apple Silicon SoCs. =20 +config SND_SOC_APPLE_MACAUDIO + tristate "Sound support for Apple Silicon Macs" + depends on ARCH_APPLE || COMPILE_TEST + select SND_SOC_APPLE_MCA + select SND_SIMPLE_CARD_UTILS + select APPLE_ADMAC if DMADEVICES + select COMMON_CLK_APPLE_NCO if COMMON_CLK + select SND_SOC_TAS2764 if I2C + select SND_SOC_TAS2770 if I2C + select SND_SOC_CS42L83 if I2C + select SND_SOC_CS42L84 if I2C + help + This option enables an ASoC machine-level driver for Apple Silicon Macs + and it also enables the required SoC and codec drivers for overall + sound support on these machines. Say Y here if you have an Apple Silicon + Mac. + + This driver can also be compiled as a module. If so, it will be called + snd-soc-macaudio. endmenu diff --git a/sound/soc/apple/Makefile b/sound/soc/apple/Makefile index 252ba5fc18cb..f1621c03b8ee 100644 --- a/sound/soc/apple/Makefile +++ b/sound/soc/apple/Makefile @@ -2,3 +2,7 @@ snd-soc-apple-mca-y :=3D mca.o =20 obj-$(CONFIG_SND_SOC_APPLE_MCA) +=3D snd-soc-apple-mca.o + +snd-soc-macaudio-objs :=3D macaudio.o + +obj-$(CONFIG_SND_SOC_APPLE_MACAUDIO) +=3D snd-soc-macaudio.o diff --git a/sound/soc/apple/macaudio.c b/sound/soc/apple/macaudio.c new file mode 100644 index 000000000000..5528a64b2b44 --- /dev/null +++ b/sound/soc/apple/macaudio.c @@ -0,0 +1,1729 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * ASoC machine driver for Apple Silicon Macs + * + * Copyright (C) The Asahi Linux Contributors + * + * Based on sound/soc/qcom/{sc7180.c|common.c} + * Copyright (c) 2018, Linaro Limited. + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + * + * The platform driver has independent frontend and backend DAIs with the + * option of routing backends to any of the frontends. The platform + * driver configures the routing based on DPCM couplings in ASoC runtime + * structures, which in turn are determined from DAPM paths by ASoC. But t= he + * platform driver doesn't supply relevant DAPM paths and leaves that up f= or + * the machine driver to fill in. The filled-in virtual topology can be + * anything as long as any backend isn't connected to more than one fronte= nd + * at any given time. (The limitation is due to the unsupported case of + * reparenting of live BEs.) + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DRIVER_NAME "snd-soc-macaudio" + +/* + * CPU side is bit and frame clock provider + * I2S has both clocks inverted + */ +#define MACAUDIO_DAI_FMT (SND_SOC_DAIFMT_I2S | \ + SND_SOC_DAIFMT_CBC_CFC | \ + SND_SOC_DAIFMT_GATED | \ + SND_SOC_DAIFMT_IB_IF) +#define MACAUDIO_JACK_MASK (SND_JACK_HEADSET | SND_JACK_HEADPHONE) +#define MACAUDIO_SLOTWIDTH 32 +/* + * Maximum BCLK frequency + * + * Codec maximums: + * CS42L42 26.0 MHz + * TAS2770 27.1 MHz + * TAS2764 24.576 MHz + */ +#define MACAUDIO_MAX_BCLK_FREQ 24576000 + +#define SPEAKER_MAGIC_VALUE ((s32)0xdec1be15) +/* milliseconds */ +#define SPEAKER_LOCK_TIMEOUT 250 + +enum macaudio_amp_type { + AMP_NONE, + AMP_TAS5770, + AMP_SN012776, + AMP_SSM3515, +}; + +enum macaudio_spkr_config { + SPKR_NONE, /* No speakers */ + SPKR_1W, /* 1 woofer / ch */ + SPKR_2W, /* 2 woofers / ch */ + SPKR_1W1T, /* 1 woofer + 1 tweeter / ch */ + SPKR_2W1T, /* 2 woofers + 1 tweeter / ch */ +}; + +struct macaudio_platform_cfg { + bool enable_speakers; + enum macaudio_amp_type amp; + enum macaudio_spkr_config speakers; + bool stereo; + int amp_gain; + int safe_vol; +}; + +static const char * const volume_control_names[] =3D { + [AMP_TAS5770] =3D "* Speaker Playback Volume", + [AMP_SN012776] =3D "* Speaker Volume", + [AMP_SSM3515] =3D "* DAC Playback Volume", +}; + +#define SN012776_0DB 201 +#define SN012776_DB(x) (SN012776_0DB + 2 * (x)) +/* Same as SN012776 */ +#define TAS5770_0DB SN012776_0DB +#define TAS5770_DB(x) SN012776_DB(x) + +#define SSM3515_0DB (255 - 64) /* +24dB max, steps of 3/8 dB */ +#define SSM3515_DB(x) (SSM3515_0DB + (8 * (x) / 3)) + +struct ma_codec_idle { + int idle_mode; + u32 idle_mask; +}; + +struct macaudio_snd_data { + struct snd_soc_card card; + struct snd_soc_jack jack; + int jack_plugin_state; + + const struct macaudio_platform_cfg *cfg; + bool has_speakers; + bool has_sense; + bool has_safety; + unsigned int max_channels; + + struct macaudio_link_props { + /* frontend props */ + unsigned int bclk_ratio; + bool is_sense; + + /* backend props */ + bool is_speakers; + bool is_headphones; + unsigned int tdm_mask; + struct ma_codec_idle *codecs; + } *link_props; + + int speaker_sample_rate; + struct snd_kcontrol *speaker_sample_rate_kctl; + + struct mutex volume_lock_mutex; + bool speaker_volume_unlocked; + bool speaker_volume_was_locked; + struct snd_kcontrol *speaker_lock_kctl; + struct snd_ctl_file *speaker_lock_owner; + u64 bes_active; + bool speaker_lock_timeout_enabled; + ktime_t speaker_lock_timeout; + ktime_t speaker_lock_remain; + struct delayed_work lock_timeout_work; + struct work_struct lock_update_work; + +}; + +static int please_blow_up_my_speakers; +module_param(please_blow_up_my_speakers, int, 0644); +MODULE_PARM_DESC(please_blow_up_my_speakers, "Allow unsafe or untested ope= rating configurations"); + +SND_SOC_DAILINK_DEFS(primary, + DAILINK_COMP_ARRAY(COMP_CPU("mca-pcm-0")), // CPU + DAILINK_COMP_ARRAY(COMP_DUMMY()), // CODEC + DAILINK_COMP_ARRAY(COMP_EMPTY())); // platform (filled at runtime) + +SND_SOC_DAILINK_DEFS(secondary, + DAILINK_COMP_ARRAY(COMP_CPU("mca-pcm-1")), // CPU + DAILINK_COMP_ARRAY(COMP_DUMMY()), // CODEC + DAILINK_COMP_ARRAY(COMP_EMPTY())); + +SND_SOC_DAILINK_DEFS(sense, + DAILINK_COMP_ARRAY(COMP_CPU("mca-pcm-2")), // CPU + DAILINK_COMP_ARRAY(COMP_DUMMY()), // CODEC + DAILINK_COMP_ARRAY(COMP_EMPTY())); + +static struct snd_soc_dai_link macaudio_fe_links[] =3D { + { + .name =3D "Primary", + .stream_name =3D "Primary", + .dynamic =3D 1, + .dpcm_merged_rate =3D 1, + .dpcm_merged_chan =3D 1, + .dpcm_merged_format =3D 1, + .dai_fmt =3D MACAUDIO_DAI_FMT, + SND_SOC_DAILINK_REG(primary), + }, + { + .name =3D "Secondary", + .stream_name =3D "Secondary", + .dynamic =3D 1, + .dpcm_merged_rate =3D 1, + .dpcm_merged_chan =3D 1, + .dpcm_merged_format =3D 1, + .dai_fmt =3D MACAUDIO_DAI_FMT, + .playback_only =3D 1, + SND_SOC_DAILINK_REG(secondary), + }, + { + .name =3D "Speaker Sense", + .stream_name =3D "Speaker Sense", + .capture_only =3D 1, + .dynamic =3D 1, + .dai_fmt =3D (SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_CBP_CFP | + SND_SOC_DAIFMT_GATED | + SND_SOC_DAIFMT_IB_IF), + SND_SOC_DAILINK_REG(sense), + }, +}; + +static struct macaudio_link_props macaudio_fe_link_props[] =3D { + { + /* + * Primary FE + * + * The bclk ratio at 64 for the primary frontend is important + * to ensure that the headphones codec's idea of left and right + * in a stereo stream over I2S fits in nicely with everyone else's. + * (This is until the headphones codec's driver supports + * set_tdm_slot.) + * + * The low bclk ratio precludes transmitting more than two + * channels over I2S, but that's okay since there is the secondary + * FE for speaker arrays anyway. + */ + .bclk_ratio =3D 64, + }, + { + /* + * Secondary FE + * + * Here we want frames plenty long to be able to drive all + * those fancy speaker arrays. + */ + .bclk_ratio =3D 256, + }, + { + .is_sense =3D 1, + } +}; + +static void macaudio_vlimit_unlock(struct macaudio_snd_data *ma, bool unlo= ck) +{ + int ret, max; + const char *name =3D volume_control_names[ma->cfg->amp]; + + if (!name) { + WARN_ON_ONCE(1); + return; + } + + switch (ma->cfg->amp) { + case AMP_NONE: + WARN_ON_ONCE(1); + return; + case AMP_TAS5770: + if (unlock) + max =3D TAS5770_0DB; + else + max =3D 1; //TAS5770_DB(ma->cfg->safe_vol); + break; + case AMP_SN012776: + if (unlock) + max =3D SN012776_0DB; + else + max =3D 1; //SN012776_DB(ma->cfg->safe_vol); + break; + case AMP_SSM3515: + if (unlock) + max =3D SSM3515_0DB; + else + max =3D SSM3515_DB(ma->cfg->safe_vol); + break; + } + + ret =3D snd_soc_limit_volume(&ma->card, name, max); + if (ret < 0) + dev_err(ma->card.dev, "Failed to %slock volume %s: %d\n", + unlock ? "un" : "", name, ret); +} + +static void macaudio_vlimit_update(struct macaudio_snd_data *ma) +{ + int i; + bool unlock =3D true; + struct snd_kcontrol *kctl; + const char *reason; + + /* Do nothing if there is no safety configured */ + if (!ma->has_safety) + return; + + /* Check that someone is holding the main lock */ + if (!ma->speaker_lock_owner) { + reason =3D "Main control not locked"; + unlock =3D false; + } + + /* Check that the control has been pinged within the timeout */ + if (ma->speaker_lock_remain <=3D 0) { + reason =3D "Lock timeout"; + unlock =3D false; + } + + /* Check that *every* limited control is locked by the same owner */ + list_for_each_entry(kctl, &ma->card.snd_card->controls, list) { + if (!snd_soc_control_matches(kctl, volume_control_names[ma->cfg->amp])) + continue; + + for (i =3D 0; i < kctl->count; i++) { + if (kctl->vd[i].owner !=3D ma->speaker_lock_owner) { + reason =3D "Not all child controls locked by the same process"; + unlock =3D false; + } + } + } + + + if (unlock !=3D ma->speaker_volume_unlocked) { + if (unlock) { + dev_info(ma->card.dev, "Speaker volumes unlocked\n"); + } else { + dev_info(ma->card.dev, "Speaker volumes locked: %s\n", reason); + ma->speaker_volume_was_locked =3D true; + } + + macaudio_vlimit_unlock(ma, unlock); + ma->speaker_volume_unlocked =3D unlock; + snd_ctl_notify(ma->card.snd_card, SNDRV_CTL_EVENT_MASK_VALUE, + &ma->speaker_lock_kctl->id); + } +} + +static void macaudio_vlimit_enable_timeout(struct macaudio_snd_data *ma) +{ + mutex_lock(&ma->volume_lock_mutex); + + if (ma->speaker_lock_timeout_enabled) { + mutex_unlock(&ma->volume_lock_mutex); + return; + } + + if (ma->speaker_lock_remain > 0) { + ma->speaker_lock_timeout =3D ktime_add(ktime_get(), ma->speaker_lock_rem= ain); + schedule_delayed_work(&ma->lock_timeout_work, + usecs_to_jiffies(ktime_to_us(ma->speaker_lock_remain))); + dev_dbg(ma->card.dev, "Enabling volume limit timeout: %ld us left\n", + (long)ktime_to_us(ma->speaker_lock_remain)); + } + + macaudio_vlimit_update(ma); + + ma->speaker_lock_timeout_enabled =3D true; + mutex_unlock(&ma->volume_lock_mutex); +} + +static void macaudio_vlimit_disable_timeout(struct macaudio_snd_data *ma) +{ + ktime_t now; + + mutex_lock(&ma->volume_lock_mutex); + + if (!ma->speaker_lock_timeout_enabled) { + mutex_unlock(&ma->volume_lock_mutex); + return; + } + + now =3D ktime_get(); + + cancel_delayed_work(&ma->lock_timeout_work); + + if (ktime_after(now, ma->speaker_lock_timeout)) + ma->speaker_lock_remain =3D 0; + else if (ma->speaker_lock_remain > 0) + ma->speaker_lock_remain =3D ktime_sub(ma->speaker_lock_timeout, now); + + dev_dbg(ma->card.dev, "Disabling volume limit timeout: %ld us left\n", + (long)ktime_to_us(ma->speaker_lock_remain)); + + macaudio_vlimit_update(ma); + + ma->speaker_lock_timeout_enabled =3D false; + + mutex_unlock(&ma->volume_lock_mutex); +} + +static void macaudio_vlimit_timeout_work(struct work_struct *wrk) +{ + struct macaudio_snd_data *ma =3D container_of(to_delayed_work(wrk), + struct macaudio_snd_data, lock_timeout_work); + + mutex_lock(&ma->volume_lock_mutex); + + ma->speaker_lock_remain =3D 0; + macaudio_vlimit_update(ma); + + mutex_unlock(&ma->volume_lock_mutex); +} + +static void macaudio_vlimit_update_work(struct work_struct *wrk) +{ + struct macaudio_snd_data *ma =3D container_of(wrk, + struct macaudio_snd_data, lock_update_work); + + if (ma->bes_active) + macaudio_vlimit_enable_timeout(ma); + else + macaudio_vlimit_disable_timeout(ma); +} + +static int macaudio_copy_link(struct device *dev, struct snd_soc_dai_link = *target, + struct snd_soc_dai_link *source) +{ + memcpy(target, source, sizeof(struct snd_soc_dai_link)); + + target->cpus =3D devm_kmemdup(dev, target->cpus, + sizeof(*target->cpus) * target->num_cpus, + GFP_KERNEL); + target->codecs =3D devm_kmemdup(dev, target->codecs, + sizeof(*target->codecs) * target->num_codecs, + GFP_KERNEL); + target->platforms =3D devm_kmemdup(dev, target->platforms, + sizeof(*target->platforms) * target->num_platforms, + GFP_KERNEL); + + if (!target->cpus || !target->codecs || !target->platforms) + return -ENOMEM; + + return 0; +} + +static int macaudio_parse_of_component(struct device_node *node, int index, + struct snd_soc_dai_link_component *comp) +{ + struct of_phandle_args args; + int ret; + + ret =3D of_parse_phandle_with_args(node, "sound-dai", "#sound-dai-cells", + index, &args); + if (ret) + return ret; + comp->of_node =3D args.np; + return snd_soc_get_dai_name(&args, &comp->dai_name); +} + +/* + * Parse one DPCM backend from the devicetree. This means taking one + * of the CPU DAIs and combining it with one or more CODEC DAIs. + */ +static int macaudio_parse_of_be_dai_link(struct macaudio_snd_data *ma, + struct snd_soc_dai_link *link, + int be_index, int ncodecs_per_be, + struct device_node *cpu, + struct device_node *codec) +{ + struct snd_soc_dai_link_component *comp; + struct device *dev =3D ma->card.dev; + int codec_base =3D be_index * ncodecs_per_be; + int ret, i; + + link->no_pcm =3D 1; + + link->dai_fmt =3D MACAUDIO_DAI_FMT; + + link->num_codecs =3D ncodecs_per_be; + link->codecs =3D devm_kcalloc(dev, ncodecs_per_be, + sizeof(*comp), GFP_KERNEL); + link->num_cpus =3D 1; + link->cpus =3D devm_kzalloc(dev, sizeof(*comp), GFP_KERNEL); + + if (!link->codecs || !link->cpus) + return -ENOMEM; + + link->num_platforms =3D 0; + + for_each_link_codecs(link, i, comp) { + ret =3D macaudio_parse_of_component(codec, codec_base + i, comp); + if (ret) + return dev_err_probe(ma->card.dev, ret, + "parsing CODEC DAI of link '%s' at %pOF\n", + link->name, codec); + } + + ret =3D macaudio_parse_of_component(cpu, be_index, link->cpus); + if (ret) + return dev_err_probe(ma->card.dev, ret, "parsing CPU DAI of link '%s' at= %pOF\n", + link->name, codec); + + link->name =3D link->cpus[0].dai_name; + + return 0; +} + +static int macaudio_get_codec_idle_props(struct device_node *np, + struct ma_codec_idle *idle, int i, + int be_index, int ncodecs_per_cpu) +{ + char propname[32]; + int ret, sys_codec; + + /* + * Depending on the BE index on the DAI, we need to offset our i + */ + sys_codec =3D i + (be_index * ncodecs_per_cpu); + + snprintf(propname, 32, "dai-tdm-idle-mode-%d", sys_codec); + ret =3D of_property_match_string(np, propname, "zero"); + if (!ret) { + idle->idle_mode =3D SND_SOC_DAI_TDM_IDLE_ZERO; + } else { + ret =3D of_property_match_string(np, propname, "pulldown"); + if (!ret) + idle->idle_mode =3D SND_SOC_DAI_TDM_IDLE_PULLDOWN; + else + return ret; + } + + snprintf(propname, 32, "dai-tdm-slot-tx-idle-mask-%d", sys_codec); + of_property_read_u32(np, propname, &idle->idle_mask); + + return 0; +} + +static int macaudio_parse_of(struct macaudio_snd_data *ma) +{ + struct device_node *codec =3D NULL; + struct device_node *cpu =3D NULL; + struct device_node *np =3D NULL; + struct device_node *platform =3D NULL; + struct snd_soc_dai_link *link =3D NULL; + struct snd_soc_card *card =3D &ma->card; + struct device *dev =3D card->dev; + struct macaudio_link_props *link_props; + int ret, num_links, i; + + ret =3D snd_soc_of_parse_card_name(card, "model"); + if (ret) { + dev_err_probe(dev, ret, "parsing card name\n"); + return ret; + } + /* + * Set long_name to prevent snd_soc_set_dmi_name() from setting one from + * make believe data u-boot provides in its SMBIOS emulation. + */ + card->long_name =3D card->name; + + /* Populate links, start with the fixed number of FE links */ + num_links =3D ARRAY_SIZE(macaudio_fe_links); + + /* Now add together the (dynamic) number of BE links */ + for_each_available_child_of_node(dev->of_node, np) { + int num_cpus; + + cpu =3D of_get_child_by_name(np, "cpu"); + if (!cpu) { + ret =3D dev_err_probe(dev, -EINVAL, + "missing CPU DAI node at %pOF\n", np); + goto err_free; + } + + num_cpus =3D of_count_phandle_with_args(cpu, "sound-dai", + "#sound-dai-cells"); + + if (num_cpus <=3D 0) { + ret =3D dev_err_probe(card->dev, -EINVAL, + "missing sound-dai property at %pOF\n", cpu); + goto err_free; + } + of_node_put(cpu); + cpu =3D NULL; + + /* Each CPU specified counts as one BE link */ + num_links +=3D num_cpus; + } + + /* Allocate the DAI link array */ + card->dai_link =3D devm_kcalloc(dev, num_links, sizeof(*link), GFP_KERNEL= ); + ma->link_props =3D devm_kcalloc(dev, num_links, sizeof(*ma->link_props), = GFP_KERNEL); + if (!card->dai_link || !ma->link_props) + return -ENOMEM; + + link =3D card->dai_link; + link_props =3D ma->link_props; + + for (i =3D 0; i < ARRAY_SIZE(macaudio_fe_links); i++) { + ret =3D macaudio_copy_link(dev, link, &macaudio_fe_links[i]); + if (ret) + goto err_free; + + memcpy(link_props, &macaudio_fe_link_props[i], sizeof(struct macaudio_li= nk_props)); + link++; link_props++; + } + + for (i =3D 0; i < num_links; i++) + card->dai_link[i].id =3D i; + + /* We might disable the speakers, so count again */ + num_links =3D ARRAY_SIZE(macaudio_fe_links); + + /* Fill in the BEs */ + for_each_available_child_of_node(dev->of_node, np) { + const char *link_name; + bool speakers; + int be_index, num_codecs, num_bes, ncodecs_per_cpu, nchannels; + unsigned int left_mask, right_mask; + + ret =3D of_property_read_string(np, "link-name", &link_name); + if (ret) { + dev_err_probe(card->dev, ret, "missing link name\n"); + goto err_free; + } + + dev_dbg(ma->card.dev, "parsing link '%s'\n", link_name); + + speakers =3D !strcmp(link_name, "Speaker") + || !strcmp(link_name, "Speakers"); + if (speakers) { + if (!ma->cfg->enable_speakers && !please_blow_up_my_speakers) { + dev_err(card->dev, "driver can't assure safety on this model, disablin= g speakers\n"); + continue; + } + ma->has_speakers =3D 1; + if (ma->cfg->amp !=3D AMP_SSM3515 && ma->cfg->safe_vol !=3D 0) + ma->has_sense =3D 1; + } + + cpu =3D of_get_child_by_name(np, "cpu"); + codec =3D of_get_child_by_name(np, "codec"); + + if (!codec || !cpu) { + ret =3D dev_err_probe(dev, -EINVAL, + "missing DAI specifications for '%s'\n", link_name); + goto err_free; + } + + num_bes =3D of_count_phandle_with_args(cpu, "sound-dai", + "#sound-dai-cells"); + if (num_bes <=3D 0) { + ret =3D dev_err_probe(card->dev, -EINVAL, + "missing sound-dai property at %pOF\n", cpu); + goto err_free; + } + + num_codecs =3D of_count_phandle_with_args(codec, "sound-dai", + "#sound-dai-cells"); + if (num_codecs <=3D 0) { + ret =3D dev_err_probe(card->dev, -EINVAL, + "missing sound-dai property at %pOF\n", codec); + goto err_free; + } + + dev_dbg(ma->card.dev, "link '%s': %d CPUs %d CODECs\n", + link_name, num_bes, num_codecs); + + if (num_codecs % num_bes !=3D 0) { + ret =3D dev_err_probe(card->dev, -EINVAL, + "bad combination of CODEC (%d) and CPU (%d) number at %pOF\n", + num_codecs, num_bes, np); + goto err_free; + } + + /* + * Now parse the cpu/codec lists into a number of DPCM backend links. + * In each link there will be one DAI from the cpu list paired with + * an evenly distributed number of DAIs from the codec list. (As is + * the binding semantics.) + */ + ncodecs_per_cpu =3D num_codecs / num_bes; + nchannels =3D num_codecs * (speakers ? 1 : 2); + + /* Save the max number of channels on the platform */ + if (nchannels > ma->max_channels) + ma->max_channels =3D nchannels; + + /* + * If there is a single speaker, assign two channels to it, because + * it can do downmix. + */ + if (nchannels < 2) + nchannels =3D 2; + + left_mask =3D 0; + for (i =3D 0; i < nchannels; i +=3D 2) + left_mask =3D left_mask << 2 | 1; + right_mask =3D left_mask << 1; + + for (be_index =3D 0; be_index < num_bes; be_index++) { + /* + * Set initial link name to be overwritten by a BE-specific + * name later so that we can use at least use the provisional + * name in error messages. + */ + link->name =3D link_name; + + ret =3D macaudio_parse_of_be_dai_link(ma, link, be_index, + ncodecs_per_cpu, cpu, codec); + if (ret) + goto err_free; + + link_props->is_speakers =3D speakers; + link_props->is_headphones =3D !speakers; + + link_props->codecs =3D devm_kcalloc(dev, ncodecs_per_cpu, + sizeof(struct ma_codec_idle), GFP_KERNEL); + if (!link_props->codecs) + return -ENOMEM; + for (i =3D 0; i < ncodecs_per_cpu; i++) { + ret =3D macaudio_get_codec_idle_props(np, &link_props->codecs[i], + i, be_index, ncodecs_per_cpu); + + /* Not every codec's bus keeper will be configured */ + if (ret) + dev_dbg(card->dev, "Codec %d has no idle props\n", i); + } + + if (num_bes =3D=3D 2) + /* This sound peripheral is split between left and right BE */ + link_props->tdm_mask =3D be_index ? right_mask : left_mask; + else + /* One BE covers all of the peripheral */ + link_props->tdm_mask =3D left_mask | right_mask; + + /* Steal platform OF reference for use in FE links later */ + platform =3D link->cpus->of_node; + + link++; link_props++; + } + + of_node_put(codec); + of_node_put(cpu); + cpu =3D codec =3D NULL; + + num_links +=3D num_bes; + } + + for (i =3D 0; i < ARRAY_SIZE(macaudio_fe_links); i++) + card->dai_link[i].platforms->of_node =3D platform; + + /* Skip the speaker sense PCM link if this amp has no sense (or no speake= rs) */ + if (!ma->has_sense) { + for (i =3D 0; i < ARRAY_SIZE(macaudio_fe_links); i++) { + if (ma->link_props[i].is_sense) { + memmove(&card->dai_link[i], &card->dai_link[i + 1], + (num_links - i - 1) * sizeof(struct snd_soc_dai_link)); + num_links--; + break; + } + } + } + + card->num_links =3D num_links; + + return 0; + +err_free: + of_node_put(codec); + of_node_put(cpu); + of_node_put(np); + + if (!card->dai_link) + return ret; + + for (i =3D 0; i < num_links; i++) { + /* + * TODO: If we don't go through this path are the references + * freed inside ASoC? + */ + snd_soc_of_put_dai_link_codecs(&card->dai_link[i]); + snd_soc_of_put_dai_link_cpus(&card->dai_link[i]); + } + + return ret; +} + +static int macaudio_get_runtime_bclk_ratio(struct snd_pcm_substream *subst= ream) +{ + struct snd_soc_pcm_runtime *rtd =3D snd_soc_substream_to_rtd(substream); + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(rtd->card); + struct snd_soc_dpcm *dpcm; + + /* + * If this is a FE, look it up in link_props directly. + * If this is a BE, look it up in the respective FE. + */ + if (!rtd->dai_link->no_pcm) + return ma->link_props[rtd->dai_link->id].bclk_ratio; + + for_each_dpcm_fe(rtd, substream->stream, dpcm) { + int fe_id =3D dpcm->fe->dai_link->id; + + return ma->link_props[fe_id].bclk_ratio; + } + + return 0; +} + +static int macaudio_dpcm_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params) +{ + struct snd_soc_pcm_runtime *rtd =3D snd_soc_substream_to_rtd(substream); + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(rtd->card); + struct macaudio_link_props *props =3D &ma->link_props[rtd->dai_link->id]; + struct snd_soc_dai *cpu_dai =3D snd_soc_rtd_to_cpu(rtd, 0); + struct snd_interval *rate =3D hw_param_interval(params, + SNDRV_PCM_HW_PARAM_RATE); + int bclk_ratio =3D macaudio_get_runtime_bclk_ratio(substream); + int i; + + if (props->is_sense) { + rate->min =3D rate->max =3D cpu_dai->symmetric_rate; + return 0; + } + + /* Speakers BE */ + if (props->is_speakers) { + if (substream->stream =3D=3D SNDRV_PCM_STREAM_CAPTURE) { + /* Sense PCM: keep the existing BE rate (0 if not already running) */ + rate->min =3D rate->max =3D cpu_dai->symmetric_rate; + + return 0; + } + + /* + * Set the sense PCM rate control to inform userspace of the + * new sample rate. + */ + ma->speaker_sample_rate =3D params_rate(params); + snd_ctl_notify(ma->card.snd_card, SNDRV_CTL_EVENT_MASK_VALUE, + &ma->speaker_sample_rate_kctl->id); + } + + if (bclk_ratio) { + struct snd_soc_dai *dai; + int mclk =3D params_rate(params) * bclk_ratio; + + for_each_rtd_codec_dais(rtd, i, dai) { + snd_soc_dai_set_sysclk(dai, 0, mclk, SND_SOC_CLOCK_IN); + snd_soc_dai_set_bclk_ratio(dai, bclk_ratio); + } + + snd_soc_dai_set_sysclk(cpu_dai, 0, mclk, SND_SOC_CLOCK_OUT); + snd_soc_dai_set_bclk_ratio(cpu_dai, bclk_ratio); + } + + return 0; +} + +static int macaudio_fe_startup(struct snd_pcm_substream *substream) +{ + + struct snd_soc_pcm_runtime *rtd =3D snd_soc_substream_to_rtd(substream); + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(rtd->card); + struct macaudio_link_props *props =3D &ma->link_props[rtd->dai_link->id]; + int max_rate, ret; + + if (props->is_sense) { + /* + * Sense stream will not return data while playback is inactive, + * so do not time out. + */ + substream->wait_time =3D MAX_SCHEDULE_TIMEOUT; + return 0; + } + + ret =3D snd_pcm_hw_constraint_minmax(substream->runtime, + SNDRV_PCM_HW_PARAM_CHANNELS, + 0, ma->max_channels); + if (ret < 0) + return ret; + + max_rate =3D MACAUDIO_MAX_BCLK_FREQ / props->bclk_ratio; + ret =3D snd_pcm_hw_constraint_minmax(substream->runtime, + SNDRV_PCM_HW_PARAM_RATE, + 0, max_rate); + if (ret < 0) + return ret; + + return 0; +} + +static int macaudio_fe_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params) +{ + struct snd_soc_pcm_runtime *rtd =3D snd_soc_substream_to_rtd(substream); + struct snd_soc_pcm_runtime *be; + struct snd_soc_dpcm *dpcm; + + be =3D NULL; + for_each_dpcm_be(rtd, substream->stream, dpcm) { + be =3D dpcm->be; + break; + } + + if (!be) { + dev_err(rtd->dev, "opening PCM device '%s' with no audio route configure= d by the user\n", + rtd->dai_link->name); + return -EINVAL; + } + + return macaudio_dpcm_hw_params(substream, params); +} + + +static void macaudio_dpcm_shutdown(struct snd_pcm_substream *substream) +{ + struct snd_soc_pcm_runtime *rtd =3D snd_soc_substream_to_rtd(substream); + struct snd_soc_dai *cpu_dai =3D snd_soc_rtd_to_cpu(rtd, 0); + struct snd_soc_dai *dai; + int bclk_ratio =3D macaudio_get_runtime_bclk_ratio(substream); + int i; + + if (bclk_ratio) { + for_each_rtd_codec_dais(rtd, i, dai) + snd_soc_dai_set_sysclk(dai, 0, 0, SND_SOC_CLOCK_IN); + + snd_soc_dai_set_sysclk(cpu_dai, 0, 0, SND_SOC_CLOCK_OUT); + } +} + +static int macaudio_be_hw_free(struct snd_pcm_substream *substream) +{ + struct snd_soc_pcm_runtime *rtd =3D snd_soc_substream_to_rtd(substream); + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(rtd->card); + struct macaudio_link_props *props =3D &ma->link_props[rtd->dai_link->id]; + struct snd_soc_dai *dai; + int i; + + if (props->is_speakers && substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYB= ACK) { + /* + * Clear the DAI rates, so the next open can change the sample rate. + * This won't happen automatically if the sense PCM is open. + */ + for_each_rtd_dais(rtd, i, dai) { + dai->symmetric_rate =3D 0; + } + + /* Notify userspace that the speakers are closed */ + ma->speaker_sample_rate =3D 0; + snd_ctl_notify(ma->card.snd_card, SNDRV_CTL_EVENT_MASK_VALUE, + &ma->speaker_sample_rate_kctl->id); + } + + return 0; +} + +static int macaudio_be_trigger(struct snd_pcm_substream *substream, int cm= d) +{ + struct snd_soc_pcm_runtime *rtd =3D snd_soc_substream_to_rtd(substream); + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(rtd->card); + struct macaudio_link_props *props =3D &ma->link_props[rtd->dai_link->id]; + + if (props->is_speakers && substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYB= ACK) { + switch (cmd) { + case SNDRV_PCM_TRIGGER_START: + case SNDRV_PCM_TRIGGER_RESUME: + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: + ma->bes_active |=3D BIT(rtd->dai_link->id); + break; + case SNDRV_PCM_TRIGGER_SUSPEND: + case SNDRV_PCM_TRIGGER_PAUSE_PUSH: + case SNDRV_PCM_TRIGGER_STOP: + ma->bes_active &=3D ~BIT(rtd->dai_link->id); + break; + default: + return -EINVAL; + } + + schedule_work(&ma->lock_update_work); + } + + return 0; +} + +static const struct snd_soc_ops macaudio_fe_ops =3D { + .startup =3D macaudio_fe_startup, + .shutdown =3D macaudio_dpcm_shutdown, + .hw_params =3D macaudio_fe_hw_params, +}; + +static const struct snd_soc_ops macaudio_be_ops =3D { + .hw_free =3D macaudio_be_hw_free, + .shutdown =3D macaudio_dpcm_shutdown, + .hw_params =3D macaudio_dpcm_hw_params, + .trigger =3D macaudio_be_trigger, +}; + +static int macaudio_be_assign_tdm(struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_card *card =3D rtd->card; + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(card); + struct macaudio_link_props *props =3D &ma->link_props[rtd->dai_link->id]; + struct snd_soc_dai *dai; + unsigned int mask; + int nslots, ret, i; + + if (!props->tdm_mask) + return 0; + + mask =3D props->tdm_mask; + nslots =3D __fls(mask) + 1; + + if (rtd->dai_link->num_codecs =3D=3D 1) { + ret =3D snd_soc_dai_set_tdm_slot(snd_soc_rtd_to_codec(rtd, 0), mask, + 0, nslots, MACAUDIO_SLOTWIDTH); + + /* + * Headphones get a pass on -ENOTSUPP (see the comment + * around bclk_ratio value for primary FE). + */ + if (ret =3D=3D -ENOTSUPP && props->is_headphones) + return 0; + + return ret; + } + + for_each_rtd_codec_dais(rtd, i, dai) { + int slot =3D __ffs(mask); + + mask &=3D ~(1 << slot); + ret =3D snd_soc_dai_set_tdm_slot(dai, 1 << slot, 0, nslots, + MACAUDIO_SLOTWIDTH); + if (ret) + return ret; + + if (props->codecs[i].idle_mode) { + ret =3D snd_soc_dai_set_tdm_idle(dai, props->codecs[i].idle_mask, + 0, props->codecs[i].idle_mode, 0); + } + } + + return 0; +} + +static int macaudio_be_init(struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_card *card =3D rtd->card; + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(card); + struct macaudio_link_props *props =3D &ma->link_props[rtd->dai_link->id]; + struct snd_soc_dai *dai; + int i, ret; + + ret =3D macaudio_be_assign_tdm(rtd); + if (ret < 0) + return ret; + + if (props->is_headphones) { + for_each_rtd_codec_dais(rtd, i, dai) + snd_soc_component_set_jack(dai->component, &ma->jack, NULL); + } + + return 0; +} + +static void macaudio_be_exit(struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_card *card =3D rtd->card; + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(card); + struct macaudio_link_props *props =3D &ma->link_props[rtd->dai_link->id]; + struct snd_soc_dai *dai; + int i; + + if (props->is_headphones) { + for_each_rtd_codec_dais(rtd, i, dai) + snd_soc_component_set_jack(dai->component, NULL, NULL); + } +} + +static int macaudio_fe_init(struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_card *card =3D rtd->card; + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(card); + struct macaudio_link_props *props =3D &ma->link_props[rtd->dai_link->id]; + int nslots =3D props->bclk_ratio / MACAUDIO_SLOTWIDTH; + + if (props->is_sense) + return snd_soc_dai_set_tdm_slot(snd_soc_rtd_to_cpu(rtd, 0), 0, 0xffff, 1= 6, 16); + + return snd_soc_dai_set_tdm_slot(snd_soc_rtd_to_cpu(rtd, 0), (1 << nslots)= - 1, + (1 << nslots) - 1, nslots, MACAUDIO_SLOTWIDTH); +} + +static struct snd_soc_jack_pin macaudio_jack_pins[] =3D { + { + .pin =3D "Headphone", + .mask =3D SND_JACK_HEADPHONE, + }, + { + .pin =3D "Headset Mic", + .mask =3D SND_JACK_MICROPHONE, + }, +}; + +static int macaudio_probe(struct snd_soc_card *card) +{ + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(card); + int ret; + + ret =3D snd_soc_card_jack_new_pins(card, "Headphone Jack", + SND_JACK_HEADSET | SND_JACK_HEADPHONE, + &ma->jack, macaudio_jack_pins, + ARRAY_SIZE(macaudio_jack_pins)); + if (ret < 0) { + dev_err(card->dev, "jack creation failed: %d\n", ret); + return ret; + } + + return ret; +} + +static int macaudio_add_backend_dai_route(struct snd_soc_card *card, struc= t snd_soc_dai *dai, + bool is_speakers) +{ + struct snd_soc_dapm_route routes[2]; + struct snd_soc_dapm_route *r; + int nroutes =3D 0; + int ret; + + memset(routes, 0, sizeof(routes)); + + dev_dbg(card->dev, "adding routes for '%s'\n", dai->name); + + r =3D &routes[nroutes++]; + if (is_speakers) + r->source =3D "Speaker Playback"; + else + r->source =3D "Headphone Playback"; + r->sink =3D dai->stream[SNDRV_PCM_STREAM_PLAYBACK].widget->name; + + /* If headphone jack, add capture path */ + if (!is_speakers) { + r =3D &routes[nroutes++]; + r->source =3D dai->stream[SNDRV_PCM_STREAM_CAPTURE].widget->name; + r->sink =3D "Headset Capture"; + } + + /* If speakers, add sense capture path */ + if (is_speakers) { + r =3D &routes[nroutes++]; + r->source =3D dai->stream[SNDRV_PCM_STREAM_CAPTURE].widget->name; + r->sink =3D "Speaker Sense Capture"; + } + + ret =3D snd_soc_dapm_add_routes(card->dapm, routes, nroutes); + if (ret) + dev_err(card->dev, "failed adding dynamic DAPM routes for %s\n", + dai->name); + return ret; +} + +static int macaudio_add_pin_routes(struct snd_soc_card *card, struct snd_s= oc_component *component, + bool is_speakers) +{ + struct snd_soc_dapm_route routes[2]; + struct snd_soc_dapm_route *r; + int nroutes =3D 0; + char buf[32]; + int ret; + + memset(routes, 0, sizeof(routes)); + + /* Connect the far ends of CODECs to pins */ + if (is_speakers) { + r =3D &routes[nroutes++]; + r->source =3D "OUT"; + if (component->name_prefix) { + snprintf(buf, sizeof(buf) - 1, "%s OUT", component->name_prefix); + r->source =3D buf; + } + r->sink =3D "Speaker"; + } else { + r =3D &routes[nroutes++]; + r->source =3D "Jack HP"; + r->sink =3D "Headphone"; + r =3D &routes[nroutes++]; + r->source =3D "Headset Mic"; + r->sink =3D "Jack HS"; + } + + ret =3D snd_soc_dapm_add_routes(card->dapm, routes, nroutes); + if (ret) + dev_err(card->dev, "failed adding dynamic DAPM routes for %s\n", + component->name); + return ret; +} + +static int macaudio_late_probe(struct snd_soc_card *card) +{ + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(card); + struct snd_soc_pcm_runtime *rtd; + struct snd_soc_dai *dai; + int ret, i; + + /* Add the dynamic DAPM routes */ + for_each_card_rtds(card, rtd) { + struct macaudio_link_props *props =3D &ma->link_props[rtd->dai_link->id]; + + if (!rtd->dai_link->no_pcm) + continue; + + for_each_rtd_cpu_dais(rtd, i, dai) { + ret =3D macaudio_add_backend_dai_route(card, dai, props->is_speakers); + + if (ret) + return ret; + } + + for_each_rtd_codec_dais(rtd, i, dai) { + ret =3D macaudio_add_pin_routes(card, dai->component, + props->is_speakers); + + if (ret) + return ret; + } + } + + if (ma->has_speakers) + ma->speaker_sample_rate_kctl =3D snd_soc_card_get_kcontrol(card, + "Speaker Sample Rate"); + if (ma->has_safety) { + ma->speaker_lock_kctl =3D snd_soc_card_get_kcontrol(card, + "Speaker Volume Unlock"); + + mutex_lock(&ma->volume_lock_mutex); + macaudio_vlimit_unlock(ma, false); + mutex_unlock(&ma->volume_lock_mutex); + } + + return 0; +} + +#define CHECK(call, pattern, value, min) = \ + { \ + int ret =3D call(card, pattern, value); \ + int err =3D (ret >=3D 0 && ret < min) ? -ERANGE : ret; \ + if (err < 0) { \ + dev_err(card->dev, "%s on '%s': %d\n", #call, pattern, \ + ret); \ + if (please_blow_up_my_speakers < 2) \ + return err; \ + } else { \ + dev_dbg(card->dev, "%s on '%s': %d hits\n", #call, \ + pattern, ret); \ + } \ + } + +#define CHECK_CONCAT(call, suffix, value) \ + { \ + snprintf(buf, sizeof(buf), "%s%s", prefix, suffix); \ + CHECK(call, buf, value, 1); \ + } + +static int macaudio_set_speaker(struct snd_soc_card *card, const char *pre= fix, bool tweeter) +{ + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(card); + char buf[256]; + + if (!ma->has_speakers) + return 0; + + switch (ma->cfg->amp) { + case AMP_TAS5770: + if (ma->cfg->stereo) { + CHECK_CONCAT(snd_soc_set_enum_kctl, "ASI1 Sel", "Left"); + CHECK_CONCAT(snd_soc_deactivate_kctl, "ASI1 Sel", 0); + } + + CHECK_CONCAT(snd_soc_limit_volume, "Amp Gain Volume", ma->cfg->amp_gain); + break; + case AMP_SN012776: + if (ma->cfg->stereo) { + CHECK_CONCAT(snd_soc_set_enum_kctl, "ASI1 Sel", "Left"); + CHECK_CONCAT(snd_soc_deactivate_kctl, "ASI1 Sel", 0); + } + + CHECK_CONCAT(snd_soc_limit_volume, "Amp Gain Volume", ma->cfg->amp_gain); + CHECK_CONCAT(snd_soc_set_enum_kctl, "HPF Corner Frequency", + tweeter ? "800 Hz" : "2 Hz"); + + if (please_blow_up_my_speakers < 2) + CHECK_CONCAT(snd_soc_deactivate_kctl, "HPF Corner Frequency", 0); + + CHECK_CONCAT(snd_soc_set_enum_kctl, "OCE Handling", "Retry"); + CHECK_CONCAT(snd_soc_deactivate_kctl, "OCE Handling", 0); + break; + case AMP_SSM3515: + /* TODO: check */ + CHECK_CONCAT(snd_soc_set_enum_kctl, "DAC Analog Gain Select", "8.4 V Spa= n"); + + if (please_blow_up_my_speakers < 2) + CHECK_CONCAT(snd_soc_deactivate_kctl, "DAC Analog Gain Select", 0); + + /* TODO: HPF, needs new call to set */ + break; + default: + return -EINVAL; + } + + return 0; +} + +static int macaudio_fixup_controls(struct snd_soc_card *card) +{ + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(card); + const char *p; + + /* Set the card ID early to avoid races with udev */ + p =3D strrchr(card->name, ' '); + if (p) { + snprintf(card->snd_card->id, sizeof(card->snd_card->id), + "Apple%s", p + 1); + } + + if (!ma->has_speakers) + return 0; + + /* + * This needs some care to avoid matches against cs42l84's + * "Jack HPF Corner Frequency". + */ + switch (ma->cfg->speakers) { + case SPKR_NONE: + WARN_ON(please_blow_up_my_speakers < 2); + return please_blow_up_my_speakers >=3D 2 ? 0 : -EINVAL; + case SPKR_1W: + /* only 1W stereo system (J313) is uses cs42l83 */ + if (ma->cfg->stereo) { + CHECK(macaudio_set_speaker, "* ", false, 0); + } else { + CHECK(macaudio_set_speaker, "", false, 0); + } + break; + case SPKR_2W: + CHECK(macaudio_set_speaker, "* Front ", false, 0); + CHECK(macaudio_set_speaker, "* Rear ", false, 0); + break; + case SPKR_1W1T: + CHECK(macaudio_set_speaker, "* Tweeter ", true, 0); + CHECK(macaudio_set_speaker, "* Woofer ", false, 0); + break; + case SPKR_2W1T: + CHECK(macaudio_set_speaker, "* Tweeter ", true, 0); + CHECK(macaudio_set_speaker, "* Woofer 1 ", false, 0); + CHECK(macaudio_set_speaker, "* Woofer 2 ", false, 0); + break; + } + + return 0; +} + +static const char * const macaudio_spk_mux_texts[] =3D { + "Primary", + "Secondary" +}; + +SOC_ENUM_SINGLE_VIRT_DECL(macaudio_spk_mux_enum, macaudio_spk_mux_texts); + +static const struct snd_kcontrol_new macaudio_spk_mux =3D + SOC_DAPM_ENUM("Speaker Playback Mux", macaudio_spk_mux_enum); + +static const char * const macaudio_hp_mux_texts[] =3D { + "Primary", + "Secondary" +}; + +SOC_ENUM_SINGLE_VIRT_DECL(macaudio_hp_mux_enum, macaudio_hp_mux_texts); + +static const struct snd_kcontrol_new macaudio_hp_mux =3D + SOC_DAPM_ENUM("Headphones Playback Mux", macaudio_hp_mux_enum); + +static const struct snd_soc_dapm_widget macaudio_snd_widgets[] =3D { + SND_SOC_DAPM_SPK("Speaker", NULL), + SND_SOC_DAPM_SPK("Speaker (Static)", NULL), + SND_SOC_DAPM_HP("Headphone", NULL), + SND_SOC_DAPM_MIC("Headset Mic", NULL), + + SND_SOC_DAPM_MUX("Speaker Playback Mux", SND_SOC_NOPM, 0, 0, &macaudio_sp= k_mux), + SND_SOC_DAPM_MUX("Headphone Playback Mux", SND_SOC_NOPM, 0, 0, &macaudio_= hp_mux), + + SND_SOC_DAPM_AIF_OUT("Speaker Playback", NULL, 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_OUT("Headphone Playback", NULL, 0, SND_SOC_NOPM, 0, 0), + + SND_SOC_DAPM_AIF_IN("Headset Capture", NULL, 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_IN("Speaker Sense Capture", NULL, 0, SND_SOC_NOPM, 0, 0), +}; + +static int macaudio_sss_info(struct snd_kcontrol *kcontrol, struct snd_ctl= _elem_info *uinfo) +{ + uinfo->type =3D SNDRV_CTL_ELEM_TYPE_INTEGER; + uinfo->count =3D 1; + uinfo->value.integer.min =3D 0; + uinfo->value.integer.max =3D 192000; + + return 0; +} + +static int macaudio_sss_get(struct snd_kcontrol *kcontrol, struct snd_ctl_= elem_value *uvalue) +{ + struct snd_soc_card *card =3D snd_kcontrol_chip(kcontrol); + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(card); + + /* + * TODO: Check if any locking is in order here. I would + * assume there is some ALSA-level lock, but DAPM implementations + * of kcontrol ops do explicit locking, so look into it. + */ + uvalue->value.integer.value[0] =3D ma->speaker_sample_rate; + + return 0; +} + +static int macaudio_slk_info(struct snd_kcontrol *kcontrol, struct snd_ctl= _elem_info *uinfo) +{ + uinfo->type =3D SNDRV_CTL_ELEM_TYPE_INTEGER; + uinfo->count =3D 1; + uinfo->value.integer.min =3D INT_MIN; + uinfo->value.integer.max =3D INT_MAX; + + return 0; +} + +static int macaudio_slk_put(struct snd_kcontrol *kcontrol, struct snd_ctl_= elem_value *uvalue) +{ + struct snd_soc_card *card =3D snd_kcontrol_chip(kcontrol); + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(card); + + if (!ma->speaker_lock_owner) + return -EPERM; + + if (uvalue->value.integer.value[0] !=3D SPEAKER_MAGIC_VALUE) + return -EINVAL; + + /* Serves as a notification that the lock was lost at some point */ + if (ma->speaker_volume_was_locked) { + ma->speaker_volume_was_locked =3D false; + return -ETIMEDOUT; + } + + mutex_lock(&ma->volume_lock_mutex); + + cancel_delayed_work(&ma->lock_timeout_work); + + ma->speaker_lock_remain =3D ms_to_ktime(SPEAKER_LOCK_TIMEOUT); + ma->speaker_lock_timeout =3D ktime_add(ktime_get(), ma->speaker_lock_rema= in); + macaudio_vlimit_update(ma); + + if (ma->speaker_lock_timeout_enabled) { + dev_dbg(ma->card.dev, "Volume limit timeout ping: %ld us left\n", + (long)ktime_to_us(ma->speaker_lock_remain)); + schedule_delayed_work(&ma->lock_timeout_work, + usecs_to_jiffies(ktime_to_us(ma->speaker_lock_remain))); + } + + mutex_unlock(&ma->volume_lock_mutex); + + return 0; +} + +static int macaudio_slk_get(struct snd_kcontrol *kcontrol, struct snd_ctl_= elem_value *uvalue) +{ + struct snd_soc_card *card =3D snd_kcontrol_chip(kcontrol); + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(card); + + uvalue->value.integer.value[0] =3D ma->speaker_volume_unlocked ? 1 : 0; + + return 0; +} + +static int macaudio_slk_lock(struct snd_kcontrol *kcontrol, struct snd_ctl= _file *owner) +{ + struct snd_soc_card *card =3D snd_kcontrol_chip(kcontrol); + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(card); + + mutex_lock(&ma->volume_lock_mutex); + ma->speaker_lock_owner =3D owner; + macaudio_vlimit_update(ma); + + /* + * Reset the unintended lock flag when the control is first locked. + * At this point the state is locked and cannot be unlocked until + * userspace writes to this control, so this cannot spuriously become + * true again until that point. + */ + ma->speaker_volume_was_locked =3D false; + + mutex_unlock(&ma->volume_lock_mutex); + + return 0; +} + +static void macaudio_slk_unlock(struct snd_kcontrol *kcontrol) +{ + struct snd_soc_card *card =3D snd_kcontrol_chip(kcontrol); + struct macaudio_snd_data *ma =3D snd_soc_card_get_drvdata(card); + + ma->speaker_lock_owner =3D NULL; + ma->speaker_lock_timeout =3D 0; + macaudio_vlimit_update(ma); +} + +/* + * Speaker limit controls go last. We only drop the unlock control, + * leaving sample rate, since that can be useful for safety + * bring-up before the kernel-side caps are ready. + */ +#define MACAUDIO_NUM_SPEAKER_LIMIT_CONTROLS 1 +/* + * If there are no speakers configured at all, we can drop both + * controls. + */ +#define MACAUDIO_NUM_SPEAKER_CONTROLS 2 + +static const struct snd_kcontrol_new macaudio_controls[] =3D { + SOC_DAPM_PIN_SWITCH("Speaker"), + SOC_DAPM_PIN_SWITCH("Headphone"), + SOC_DAPM_PIN_SWITCH("Headset Mic"), + { + .iface =3D SNDRV_CTL_ELEM_IFACE_MIXER, + .access =3D SNDRV_CTL_ELEM_ACCESS_READ | + SNDRV_CTL_ELEM_ACCESS_VOLATILE, + .name =3D "Speaker Sample Rate", + .info =3D macaudio_sss_info, .get =3D macaudio_sss_get, + }, + { + .iface =3D SNDRV_CTL_ELEM_IFACE_MIXER, + .access =3D SNDRV_CTL_ELEM_ACCESS_READ | + SNDRV_CTL_ELEM_ACCESS_WRITE | + SNDRV_CTL_ELEM_ACCESS_VOLATILE, + .name =3D "Speaker Volume Unlock", + .info =3D macaudio_slk_info, + .put =3D macaudio_slk_put, .get =3D macaudio_slk_get, + .lock =3D macaudio_slk_lock, .unlock =3D macaudio_slk_unlock, + }, +}; + +static const struct snd_soc_dapm_route macaudio_dapm_routes[] =3D { + /* Playback paths */ + { "Speaker Playback Mux", "Primary", "PCM0 TX" }, + { "Speaker Playback Mux", "Secondary", "PCM1 TX" }, + { "Speaker Playback", NULL, "Speaker Playback Mux"}, + + { "Headphone Playback Mux", "Primary", "PCM0 TX" }, + { "Headphone Playback Mux", "Secondary", "PCM1 TX" }, + { "Headphone Playback", NULL, "Headphone Playback Mux"}, + /* + * Additional paths (to specific I2S ports) are added dynamically. + */ + + /* Capture paths */ + { "PCM0 RX", NULL, "Headset Capture" }, + + /* Sense paths */ + { "PCM2 RX", NULL, "Speaker Sense Capture" }, +}; + +/* enable amp speakers stereo gain safe_vol */ +struct macaudio_platform_cfg macaudio_j180_cfg =3D { + false, AMP_SN012776, SPKR_1W1T, false, 10, -20, +}; +struct macaudio_platform_cfg macaudio_j274_cfg =3D { + true, AMP_TAS5770, SPKR_1W, false, 20, -20, +}; + +struct macaudio_platform_cfg macaudio_j293_cfg =3D { + true, AMP_TAS5770, SPKR_2W, true, 15, -20, +}; + +struct macaudio_platform_cfg macaudio_j313_cfg =3D { + true, AMP_TAS5770, SPKR_1W, true, 10, -20, +}; + +struct macaudio_platform_cfg macaudio_j314_cfg =3D { + true, AMP_SN012776, SPKR_2W1T, true, 15, -20, +}; + +struct macaudio_platform_cfg macaudio_j37x_j47x_cfg =3D { + true, AMP_SN012776, SPKR_1W, false, 20, -20, +}; + +struct macaudio_platform_cfg macaudio_j413_cfg =3D { + true, AMP_SN012776, SPKR_1W1T, true, 15, -20, +}; + +struct macaudio_platform_cfg macaudio_j45x_cfg =3D { + false, AMP_SSM3515, SPKR_1W1T, true, 9, -20, /* TODO: gain?? */ +}; + +struct macaudio_platform_cfg macaudio_j493_cfg =3D { + true, AMP_SN012776, SPKR_2W, true, 15, -20, +}; + +struct macaudio_platform_cfg macaudio_fallback_cfg =3D { + false, AMP_NONE, SPKR_NONE, false, 0, 0, +}; + +/* + * DT compatible/ID table rules: + * + * 1. Machines with **identical** speaker configurations (amps, models, ch= assis) + * are allowed to declare compatibility with the first model (chronolog= ically), + * and are not enumerated in this array. + * + * 2. Machines with identical amps and speakers (=3Didentical speaker prot= ection + * rules) but a different chassis must use different compatibles, but m= ay share + * the private data structure here. They are explicitly enumerated. + * + * 3. Machines with different amps or speaker layouts must use separate + * data structures. + * + * 4. Machines with identical speaker layouts and amps (but possibly diffe= rent + * speaker models/chassis) may share the data structure, since only use= rspace + * cares about that (assuming our general -20dB safe level standard hol= ds). + */ +static const struct of_device_id macaudio_snd_device_id[] =3D { + /* Model ID Amp Gain Speakers */ + /* j180 AID19 sn012776 10 1=C3=97 1W+1T */ + { .compatible =3D "apple,j180-macaudio", .data =3D &macaudio_j180_cfg }, + /* j274 AID6 tas5770 20 1=C3=97 1W */ + { .compatible =3D "apple,j274-macaudio", .data =3D &macaudio_j274_cfg }, + /* j293 AID3 tas5770 15 2=C3=97 2W */ + { .compatible =3D "apple,j293-macaudio", .data =3D &macaudio_j293_cfg }, + /* j313 AID4 tas5770 10 2=C3=97 1W */ + { .compatible =3D "apple,j313-macaudio", .data =3D &macaudio_j313_cfg }, + /* j314 AID8 sn012776 15 2=C3=97 2W+1T */ + { .compatible =3D "apple,j314-macaudio", .data =3D &macaudio_j314_cfg }, + /* j316 AID9 sn012776 15 2=C3=97 2W+1T */ + { .compatible =3D "apple,j316-macaudio", .data =3D &macaudio_j314_cfg }, + /* j375 AID10 sn012776 15 1=C3=97 1W */ + { .compatible =3D "apple,j375-macaudio", .data =3D &macaudio_j37x_j47x_cf= g }, + /* j413 AID13 sn012776 15 2=C3=97 1W+1T */ + { .compatible =3D "apple,j413-macaudio", .data =3D &macaudio_j413_cfg }, + /* j414 AID14 sn012776 15 2=C3=97 2W+1T Compat: apple,j314-m= acaudio */ + /* j415 AID27 sn012776 15 2=C3=97 2W+1T */ + { .compatible =3D "apple,j415-macaudio", .data =3D &macaudio_j314_cfg }, + /* j416 AID15 sn012776 15 2=C3=97 2W+1T Compat: apple,j316-m= acaudio */ + /* j456 AID5 ssm3515 15 2=C3=97 1W+1T */ + { .compatible =3D "apple,j456-macaudio", .data =3D &macaudio_j45x_cfg }, + /* j457 AID7 ssm3515 15 2=C3=97 1W+1T Compat: apple,j456-m= acaudio */ + /* j473 AID12 sn012776 20 1=C3=97 1W */ + { .compatible =3D "apple,j473-macaudio", .data =3D &macaudio_j37x_j47x_cf= g }, + /* j474 AID26 sn012776 20 1=C3=97 1W Compat: apple,j473-m= acaudio */ + /* j475 AID25 sn012776 20 1=C3=97 1W Compat: apple,j375-m= acaudio */ + /* j493 AID18 sn012776 15 2=C3=97 2W */ + { .compatible =3D "apple,j493-macaudio", .data =3D &macaudio_j493_cfg }, + /* Fallback, jack only */ + { .compatible =3D "apple,macaudio"}, + { } +}; +MODULE_DEVICE_TABLE(of, macaudio_snd_device_id); + +static int macaudio_snd_platform_probe(struct platform_device *pdev) +{ + struct snd_soc_card *card; + struct macaudio_snd_data *data; + struct device *dev =3D &pdev->dev; + struct snd_soc_dai_link *link; + const struct of_device_id *of_id; + int ret; + int i; + + of_id =3D of_match_device(macaudio_snd_device_id, dev); + if (!of_id) + return -EINVAL; + + data =3D devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); + if (!data) + return -ENOMEM; + card =3D &data->card; + snd_soc_card_set_drvdata(card, data); + dev_set_drvdata(&pdev->dev, data); + mutex_init(&data->volume_lock_mutex); + + card->owner =3D THIS_MODULE; + card->driver_name =3D "macaudio"; + card->dev =3D dev; + card->dapm_widgets =3D macaudio_snd_widgets; + card->num_dapm_widgets =3D ARRAY_SIZE(macaudio_snd_widgets); + card->dapm_routes =3D macaudio_dapm_routes; + card->num_dapm_routes =3D ARRAY_SIZE(macaudio_dapm_routes); + card->controls =3D macaudio_controls; + card->num_controls =3D ARRAY_SIZE(macaudio_controls); + card->probe =3D macaudio_probe; + card->late_probe =3D macaudio_late_probe; + card->component_chaining =3D true; + card->fully_routed =3D true; + + if (of_id->data) + data->cfg =3D of_id->data; + else + data->cfg =3D &macaudio_fallback_cfg; + + card->fixup_controls =3D macaudio_fixup_controls; + + ret =3D macaudio_parse_of(data); + if (ret) + return ret; + + /* Remove useless controls */ + if (!data->has_speakers) /* No speakers, remove both */ + card->num_controls -=3D MACAUDIO_NUM_SPEAKER_CONTROLS; + else if (!data->cfg->safe_vol) /* No safety, remove unlock */ + card->num_controls -=3D MACAUDIO_NUM_SPEAKER_LIMIT_CONTROLS; + else /* Speakers with safety, mark us as such */ + data->has_safety =3D true; + + for_each_card_prelinks(card, i, link) { + if (link->no_pcm) { + link->ops =3D &macaudio_be_ops; + link->init =3D macaudio_be_init; + link->exit =3D macaudio_be_exit; + } else { + link->ops =3D &macaudio_fe_ops; + link->init =3D macaudio_fe_init; + } + } + + INIT_WORK(&data->lock_update_work, macaudio_vlimit_update_work); + INIT_DELAYED_WORK(&data->lock_timeout_work, macaudio_vlimit_timeout_work); + + return devm_snd_soc_register_card(dev, card); +} + +static void macaudio_snd_platform_remove(struct platform_device *pdev) +{ + struct macaudio_snd_data *ma =3D dev_get_drvdata(&pdev->dev); + + cancel_delayed_work_sync(&ma->lock_timeout_work); +} + +static struct platform_driver macaudio_snd_driver =3D { + .probe =3D macaudio_snd_platform_probe, + .remove =3D macaudio_snd_platform_remove, + .driver =3D { + .name =3D DRIVER_NAME, + .of_match_table =3D macaudio_snd_device_id, + .pm =3D &snd_soc_pm_ops, + }, +}; +module_platform_driver(macaudio_snd_driver); + +MODULE_AUTHOR("Martin Povi=C5=A1er "); +MODULE_DESCRIPTION("Apple Silicon Macs machine-level sound driver"); +MODULE_LICENSE("GPL"); --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5BC373D1AA4 for ; Sun, 20 Sep 2026 04:57:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880267; cv=none; b=nQgNLkqxdCl2hfWHDcQvqjntOmWbnDc0hCeoYnihixlIv5uVPx6oRj3wkCG1NdMqAtl+xkImg+bLqSaft6hVTUyMF0tBP5PAmn0ApVWmbd0/Q15fvmV/NCxiHHeIeDw5P/NsSnUgFoAQN7cD8zNMEW4GKRcdzS/eGUvTdRNI86c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880267; c=relaxed/simple; bh=8zNWdtKPfrMTot/trMqvbPPvlUGNanqtL8uZSqGwRp0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XyIEwYBsNi1BPlaoYqOoxmRU9iIRUAkq6023FzVn+sO2yvrxu6Tz1BVDWoCY272AY1K4STg88lmFz/VB+tPZewqcfHOfh5gMvjqF8ymlOnIft0Zk9TVOH37gX4b7UXb2hM5u3A2oXOBL4NQOnVJvACHxJeanZu7n7FdaJgdcDys= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=e0YP0012; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="e0YP0012" Received: by mail-pj2-f13.google.com with SMTP id d9443c01a7336-2d747f066d8so6965185ad.1 for ; Sat, 19 Sep 2026 21:57:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880266; x=1790485066; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=nUzG28jusU/5HuPttslpkNc6ZhPjJK6W+gnFlb09Y7A=; b=e0YP0012Tx79B5P6JkQ/XHH6aE/DsZSulwx9pOeBiNCDqK4LCd1dkMhtv9kC+P35cR ac79czZAuYFz1HsLP38UJP8emc7t1ys9ndH+nj/Z0vStj63I2/J0Dap0YD1CoP26vnNM I+SrQDHDNx7FRXYnybhxYpv/n/m4vDBY07IlGjzyWJ6UfRemcfOki3KJlAMQdLT1isvi o53R/zbxQDl7vtGi97QjwR46uOire7k+IyVz1T5Yd7R70ihJOjbnc9Dx8mqDPMND89bH XPrc8quynuXdVMWKQr+qQ4JR2JNJDt4b3yEwGrYIRQMTf2Zsh9ObKOi4RjN30d6dSWMy RbtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880266; x=1790485066; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=nUzG28jusU/5HuPttslpkNc6ZhPjJK6W+gnFlb09Y7A=; b=zipRtyo1OblNzeutSlgHXiXE0jXPPEWXcIfEj+xjfmf1CvtxhgR5Kl7oaaTU6iJWcp OLTCtq+svLVAA+ViXJ+P7ngmaZLGNJPpsAJ7cCpM+Erz9dpFT0vTK7cb9nI9fNv+QZ1c k8yKNa4EOlbayDt3GPmBvRoM2/y/uC3qUNCUAOJwucJ237XGrgr8TqRdV1efRqJxHant RALHDv9+YrPtongSopngpdxdETDZL2x59jka2EgknxH2oRHKSHLybiFJUBb9yQPEJv/t iqyGySJPLpDUhUCmx7Jhksueh2NhIviYkQBp+dYaV2QjKX7LrHdUlBIQayjKkmbeCh9g ZQ7A== X-Forwarded-Encrypted: i=1; AKwUvBzIHZrZD90+3xFHsnUwPnAp/sqBExV68yKNwWxhdB87XA2+YOPt2YvhbVX5lN2LYWZHecL2NVR9Xqn5DlQ=@vger.kernel.org X-Gm-Message-State: AFuF++kUdWTDaFXqL5eSuFe7VUiDka94YBb/iP9HZ8mntnai0ihIBQcn /iio9DgvgAjanP+vwWXxzb3BM+xvBePTaQnKAqxqfnfqirwPoMjCoUOc X-Gm-Gg: AYBFou0kxf0yotlo3masa188cLNlE4YMFsrgTHivz4cZ43EN5qtAAU/H/HdwjkYbREm WPs2xYDDBpEvKRr6MO+t2wD69xEh0rIMJ0JlQcH6xM0/IzP3qwHxzMZRJl7oGaxLxD1UdZ2vi0K 5hSq3cP8p8urNUuFL4xwJl1ddUYsYPBUH0fWQsOqRDyqdah1fjmPem3xH9MpwVZG5hiXl/UAdAS fUmnDN2Crl7NfIERsZCtSsHmQ36WplkS8ZzVlKYlVOjGQ735e9/2ywXwidpeS2vbVhtS4U5txEt sQFxFp++ujULqQvXimZigIAt7SpgAOKHyWix0uP8OR+wfycYXWQ0aYwO+RHFjmxCDHwJEIJU2Us LZOyGQAzFttYrFiKqDfN9Tu2VvEYKGrwlYMkR1cNpwZ8iGe3f/i6HgNwQKX96aPVHeqIxmdaBGB p259UnSNAH30C1/4mTxgFyfqfGJ5bABnY5EMzFhD6lt3fZ5WSIPs/50GYDGF/mD0g4xKPk+xxlJ /xxAdK9g5eWsJzki2KvAufqVfvGJWeEa3Suihv6R0t37gSpdfHULtEt4DyOeJI3z4RBcRCvFzrc 2srDZfAEJ60Sajc1SV0KYiYW3Uryk4NJNiRg4jZ6hDTGzNwh X-Received: by 2002:a17:902:968d:b0:2dd:c100:2522 with SMTP id d9443c01a7336-2ddc10025c8mr27195935ad.43.1789880265641; Sat, 19 Sep 2026 21:57:45 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.57.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:57:44 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:56 +1000 Subject: [PATCH 17/28] arm64: dts: apple: t8103-j274: Add speaker/headset jack nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-17-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1821; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=8zNWdtKPfrMTot/trMqvbPPvlUGNanqtL8uZSqGwRp0=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0xXdco7N+HGOUWzOheZGiRfnWExFhb/cm2C20dHE7 VzbsU+rOiayMIhxMViKKbJsaBLymG3EdrNfpHIvzBxWJpAh0iINDEDAwsCXm5hXaqRjpGeqbahn aKRjrGPEwMUpAFNtvpqRYf6XsGtTFtTf6XP59EMmqiisXvPxPqbFIjOKGw6XVD75d52R4bZnwxJ Fn0PT4412Hr2i9FaFwzzHdc0UvkJne44aZ/lbnAA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The M1 Mac mini integrates Apple-specific variants of the TI TAS2770 and Cirrus CS42L42. Add these nodes and advertise them to the machine driver via the sound node. Signed-off-by: James Calligeros --- arch/arm64/boot/dts/apple/t8103-j274.dts | 60 +++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8103-j274.dts b/arch/arm64/boot/dts= /apple/t8103-j274.dts index 1212852251e0..4b30f08eaac0 100644 --- a/arch/arm64/boot/dts/apple/t8103-j274.dts +++ b/arch/arm64/boot/dts/apple/t8103-j274.dts @@ -75,4 +75,64 @@ &i2c2 { status =3D "okay"; }; =20 +/* Audio codecs */ +&i2c1 { + status =3D "okay"; + + speaker: codec@31 { + compatible =3D "ti,tas5770l", "ti,tas2770"; + reg =3D <0x31>; + interrupts-extended =3D <&pinctrl_ap 182 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 181 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + ti,imon-slot-no =3D <0>; + ti,vmon-slot-no =3D <2>; + }; +}; + +&i2c2 { + status =3D "okay"; + + jack_codec: codec@48 { + compatible =3D "cirrus,cs42l83"; + reg =3D <0x48>; + interrupts-extended =3D <&pinctrl_ap 183 IRQ_TYPE_LEVEL_LOW>; + reset-gpios =3D <&pinctrl_nub 11 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Jack"; + cirrus,ts-inv =3D <1>; + }; +}; + +/ { + sound: sound { + compatible =3D "apple,j274-macaudio", "apple,macaudio"; + model =3D "Mac mini J274"; + + dai-link@0 { + link-name =3D "Speaker"; + + codec { + sound-dai =3D <&speaker>; + }; + + cpu { + sound-dai =3D <&mca 0>; + }; + }; + + dai-link@1 { + link-name =3D "Headphone Jack"; + + codec { + sound-dai =3D <&jack_codec>; + }; + + cpu { + sound-dai =3D <&mca 2>; + }; + }; + }; +}; + #include "hwmon-mini.dtsi" --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f42.google.com (mail-pj2-f42.google.com [74.125.227.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E04E13D091D for ; Sun, 20 Sep 2026 04:57:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880276; cv=none; b=iDrmcl4K4AmPAnWdpSvNGQS62+8TDULWeboOGzAO3qSuV/Uh0pw0UxflP9dXuBSa1QmAAZlP1K8K+EAyHWZXdWGaEKItjBtkTDrpshsArjM32JhWu63W/xVU44ncEn1h/EOHM+otznTLFCpcd2dJ4Lc+uWoHeA7pVymbCKjANYQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880276; c=relaxed/simple; bh=R5y0xujUvUXkSP7Xsswza01bR/jBq8AIplidrHgUeyE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pYWJUe1Wpv71HiRptDcoqzqsHuhGfZquGg1w0IwcfIk4dxaPhPyxk2TxIQ1QZ2EEGOfXm2oc3Kva7gokyuHiOUnCFrhKBYUrOWnnOj9fl0xf7kjzTX7b+AgoTd1dY/i0c3swmjzk4Qk5QRjqLtVEJ9gLAVF9RvtjnsGf0VCYql8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=FT47P8Zd; arc=none smtp.client-ip=74.125.227.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FT47P8Zd" Received: by mail-pj2-f42.google.com with SMTP id d9443c01a7336-2df36461d63so4081635ad.3 for ; Sat, 19 Sep 2026 21:57:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880274; x=1790485074; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=kVS+rZcPiwNSGlOkstoIB1+WRDSe9XgudDvzIak9RwI=; b=FT47P8ZdXqNLrA1/YaDL7kkmG7C6kBgTfcwFi561e98X7/F8ENMY1CZBbiqWMILDkL eKL2X3Zbd3vCcFAFN3+sVpj/cthPDj1hF9jRZo6q2z4HpeLF0sir7IxoWE1KbdYCSV2L hoiyUWt+nxijYVqTtTHjLQ/PHVcYPN2Q0XkzhQnDUHvyj+KV0EW6nu/tQZ1Y2fV+o8pM WmKM++7kEEZndFj29XYQv84xFHVmzFbb85cWhMVUFapcUn8u4Of10xeg6sPjteSnuH5g TLBt89vwCBinyTTmxRge5C5/FibdKFJNhU67CeID44AkhT2o3Ga46imaBXPf/yFp+wRr LPKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880274; x=1790485074; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=kVS+rZcPiwNSGlOkstoIB1+WRDSe9XgudDvzIak9RwI=; b=cwZzKSNxDzB3Arj4QtXM6XAlk2BWMovq+xoJbgp1CGxt17GXiwBurwy36gVs2ErM31 HL5QD6Aw3QshzG0fSS53CIXaCod7K+5uFrEGzZ7myJR3Q35x45fXCm2PtwnwLRIWE5Ba JIZpVyjvlpjGX+88Mw9a/cDU+NVJsiluJ6F1guvslvfGxlSZgcUzAecBWTb7yACkM7gT F/wjyGjg4mLLmG2bc32ZsclLJh22eot6pQD7m5Kp3F9qkA4YACVaZfgqAeVV6X96wWGX hu7SehmemNmx/ds5z576+ExzltlYgE+BCwt65VTdah2i5w+X6C3/83WknJdmkVqKlGjQ JXDg== X-Forwarded-Encrypted: i=1; AKwUvBw469Jos0uuj0uxRxZNwOJhbxfBdE641C5lGXNzgsg900GNqU2APwCzRBYG3z9mo2LU9erU0P3Xu0Zh+FA=@vger.kernel.org X-Gm-Message-State: AFuF++nZOYaj6fYzYDn/T/xtBOq4hP3ekmUTmtkSYTZQsjbFQnszjJz+ JY07Ex6gIW5WmzOsj9udWp0stnTZh1a4QEIjPrJPA95UHDIPHPe/8UgW X-Gm-Gg: AYBFou0CDCKiEfgP/1Y3b7nzlWWTBVcDp9AUHKNMDBkB+0XC823EYBjozn/ltSZr8AK mGqwAnQsL204PLy/EEhNwn08OZipRzErC9azOZ+GoDkVkqih6akgbIqazMx0m70PisfHlZtx3MS GczyillOQc51JdoLnNonzLPqUGXPjtIRGsI+2Ssa54NHdva8WfTvTbGm3DuaWoA/kJqlsnlFRu4 yjaP1x1NXMqyn7dmZmAAsv8EyYp8QYS2+U9AOfdJuu160OJwXoXQ8HEdMwL2Z0NBYZhjZNh7tXV xYFUQIYZWRb4dEtlVINTR5FlQShamI6MyZi/czPnAr//1u6bEJ84x40l2LvAMu7RhXmGo8vRRmL Yci/K2e3y7w2VBxWHo9LxPGS/gIwPF9Ko2KD55Y92yVQ2QBPqv/TE3oeyT6kz5NptQjWm1NzJiC c1QUKbL24Zaw68CnCNR+mVMLX/YQvHTWTL6Zu7hevlLYVMug5/M+4bc9750QRx7aDBgJxHQ54fJ 4sPoa+qzGFdhlF56UKa9t4kEyuwyII1IYOpiklMCePkEIReoh+MmdMfqqSGmxdywwrHCSs3+wEi Kpc6FUG09chbgqRP1ARz7O2hMiDSNvy7URt46SbLq+YGocI= X-Received: by 2002:a17:903:1a0f:b0:2dd:c053:82ef with SMTP id d9443c01a7336-2ddc0538401mr56050135ad.38.1789880274403; Sat, 19 Sep 2026 21:57:54 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.57.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:57:54 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:57 +1000 Subject: [PATCH 18/28] arm64: dts: apple: t8103-j313: Add speaker/headset jack nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-18-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2324; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=R5y0xujUvUXkSP7Xsswza01bR/jBq8AIplidrHgUeyE=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0xWb21c66G3M4JvHv35y8tKklc9PTDVZ/u9cp9Se1 TM7LBnEOiayMIhxMViKKbJsaBLymG3EdrNfpHIvzBxWJpAh0iINDEDAwsCXm5hXaqRjpGeqbahn aKRjrGPEwMUpAFPNLMTIMOnKCZnG5Qc/2M6KzS1409PptySZccGOP+mzG6/GRCytbmVk2J6X9P9 4R3Mos7D4tdcO8pv3FzRPULvT+sC76gqvaqwXEwA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The M1 MacBook Air integrates Apple-specific variants of the TI TAS2770 and Cirrus CS42L42. Add these nodes and advertise them to the machine driver via the sound node. Signed-off-by: James Calligeros --- arch/arm64/boot/dts/apple/t8103-j313.dts | 75 +++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8103-j313.dts b/arch/arm64/boot/dts= /apple/t8103-j313.dts index f8b2b1637b9d..514dd56bc9f0 100644 --- a/arch/arm64/boot/dts/apple/t8103-j313.dts +++ b/arch/arm64/boot/dts/apple/t8103-j313.dts @@ -55,4 +55,79 @@ &typec1 { label =3D "USB-C Left-front"; }; =20 +/* Audio codecs */ +&i2c1 { + status =3D "okay"; + + speaker_left: codec@31 { + compatible =3D "ti,tas5770l", "ti,tas2770"; + reg =3D <0x31>; + interrupts-extended =3D <&pinctrl_ap 182 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 181 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left"; + ti,imon-slot-no =3D <0>; + ti,vmon-slot-no =3D <2>; + }; +}; + +&i2c3 { + status =3D "okay"; + + speaker_right: codec@34 { + compatible =3D "ti,tas5770l", "ti,tas2770"; + reg =3D <0x34>; + interrupts-extended =3D <&pinctrl_ap 182 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 181 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right"; + ti,imon-slot-no =3D <4>; + ti,vmon-slot-no =3D <6>; + }; + + jack_codec: codec@48 { + compatible =3D "cirrus,cs42l83"; + reg =3D <0x48>; + interrupts-extended =3D <&pinctrl_ap 183 IRQ_TYPE_LEVEL_LOW>; + reset-gpios =3D <&pinctrl_nub 11 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Jack"; + cirrus,ts-inv =3D <1>; + }; +}; + +/ { + sound: sound { + compatible =3D "apple,j313-macaudio", "apple,macaudio"; + model =3D "MacBook Air J313"; + + dai-link@0 { + dai-tdm-idle-mode-0 =3D "zero"; + dai-tdm-idle-mode-1 =3D "zero"; + + link-name =3D "Speakers"; + + codec { + sound-dai =3D <&speaker_left>, <&speaker_right>; + }; + + cpu { + sound-dai =3D <&mca 0>, <&mca 1>; + }; + }; + + dai-link@1 { + link-name =3D "Headphone Jack"; + + codec { + sound-dai =3D <&jack_codec>; + }; + + cpu { + sound-dai =3D <&mca 2>; + }; + }; + }; +}; + #include "hwmon-laptop.dtsi" --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C00173CDBB7 for ; Sun, 20 Sep 2026 04:58:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880285; cv=none; b=Rqr7fk8ZeJYcQYE3tdWJlioIZFH2Mb3FDVCYt5p+3Xz4QV44jXPxikaY/vs1IH8k1udmMUbUF/q7/JOsOEB4lsFSko7cfyEcmBCpnXUBGSrhhTVK23iJHRENNbR66oqQB/+cRDk5q6XhJ5Ur/zLNRUuwBeyU0I7HPp2QxWf2Xu8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880285; c=relaxed/simple; bh=+B+jPv7EkmgtOQeTinSPKUZXk0Lm8pE7GSzX4ECkQug=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=r5j3oUocVD6k+q0NSBwaw9pq6A2j5nLAK3scX/Uc5xnQQcDiahTXKMARO39zv9D5AiGDbynZ7E3UeDrZB5MhI81rD7WgNb/hqspAk2PKHZlhxJNhb3lMAEILpZlfBWjwJTk+NEbD0KNveSIY0RL06LgoPtj2h57maQiN4yMBymU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VvzERpDo; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VvzERpDo" Received: by mail-pj2-f13.google.com with SMTP id d9443c01a7336-2d747f01363so16735675ad.2 for ; Sat, 19 Sep 2026 21:58:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880283; x=1790485083; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=JpYqy9sPpPsDPZvvN4y29k8KbffQ5LKsND+nwCRIinE=; b=VvzERpDowPqll675WXvr0HQrESTi89CV/S+aw3aZzT5kqlgAKEuysmRGm4W3lgjypn +D/5htbPsZIn5i21+YfycrYScSlRb/GrtzsyorcCEjY6us0OtSYXPwCuMubtQar7wNfx BHC4csOYsrezQcJexKUiihaG9lONgNwKNKKoMWHX1DCfHApFknw/uYXqRz3baZsJhjuO TGbptJNpmCpnpYvCYvhfs1ExKpvhExwh93jBSqs39fHwC6huf1NNT7ZfHzCSbSp5IMXZ JJI6F/GMaATHqZZmlyzDe6gArw+dlTLnnTrSSoowokSTNxsLN5RVEOKWUb/DdT+CkG7r xRdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880283; x=1790485083; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=JpYqy9sPpPsDPZvvN4y29k8KbffQ5LKsND+nwCRIinE=; b=YkOwvU2pqoh8JOOkPlv0lgqk21Ezd1Z1C1bbnjSV+7Celym25XElotFukgK4hLZXy2 mvP+kOq4rGMjLKALIH4AvKIoqPMae1OJYPy3wHIGNEBZyojSvLHoMjoq8/gbqnXoU5KD q9W7ST1eJ8YIo6fYNHULfpAkTUkFYqOTSbFm2rAlRUbWbbpf/Gsbz/zf69vp6ngN+iy0 ufFK1tKhJnUT50HMO85f9TOt2/3SlTRYNzkPkXdDm7o+AqSPyeIZ4yJ5ZEL+uBTJmrWz p8/eHhHMfjYEg5rxU35PO6CJ3HswrAwuLcYsg9vuCa445YQsEA9oyDZ9KWeog1ESWbJA G9Uw== X-Forwarded-Encrypted: i=1; AKwUvBwsiV/Ld+/e1pKmQw7gnVEwDu/kWmBpttkTaNmPj7/zfRhupvAXiw1dv+z6Mf7RKm5BwjxqBJQ0dbWsR50=@vger.kernel.org X-Gm-Message-State: AFuF++l5wGyUVbRUjalTMkpy0vdwkojRAOpaVtQTzHc002GFfzsSOKOO ZwLCHcVzAdjIHzZmr2/RacuwvF2AkIejhY8AA9Mrx908vaqWRO3SZwCZ X-Gm-Gg: AYBFou25/X2xWIjNfhaiuex1rIZJTvF4IEA5gffW1f0kKQchoj5mU1Bf5tj7Qq1OSvQ Mclmo0M2znKxyMTF47Kivg6Ib1hKplHvmQjodazOiPrzq3f5LZPYvyBrZQZEEEnAAxakmivhSRt bBC9nCetXa1gHSzUGrL65LxHw1kOaYh1//OJp0iNfihUzbFLd3b32KD9giv6wSZAaOeeILVOCqP tq8CNseme16TNVJ6fwPf1Ypw0aYNzG24HfFE8ZqwOF0/D1mJNwma/6pCUQyFUZHV92Iv/oVqlyt TNp8VVfznYamJr41Ys2e7J33oMy8G+Dz+tcg7ZF1bzqvhYl4Qq2YaYh+9ZOG7J8Br7283SS3KXQ d2YDhh3l912fF4Kbuq/g6s+HC2regmAlPQeMaQrjD/ztlVyF9OI5OXZImQSuerSCY9fXKvdHRVe kVw+tZL9sqPRaw7nnG7kxjt9nXZ/wFvqMxFPMHnrT5BImb74aVnrL7qoWaiVbB2+qYJw0kTfEhX cPs8mkYksf8DqiNgIYSgDhNrtte/hw4+tBmjKO9SUKMg/8+72cjfqThBNAUdxEOm1n+KRO2cOF5 i0gHPGDUl5idAb+USBqgNjKRaC7BURZvAJCRymNo5DdqPcHm X-Received: by 2002:a17:902:e746:b0:2d9:54:fc69 with SMTP id d9443c01a7336-2ddb1af4f8emr115717635ad.7.1789880283230; Sat, 19 Sep 2026 21:58:03 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.57.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:58:02 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:58 +1000 Subject: [PATCH 19/28] arm64: dts: apple: t8103-j293: Add speaker/headset jack nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-19-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3212; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=+B+jPv7EkmgtOQeTinSPKUZXk0Lm8pE7GSzX4ECkQug=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr0xXbFkxPfyYrYbfLomRP9IdrIjNM0s6zFdY/2R7Ku 91jud3DjoksDGJcDJZiiiwbmoQ8Zhux3ewXqdwLM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GukY6xgxcHEKwFSndjD84RTiVi2ZW7NbRnPp9WfFuqxsqkuO5j7i7t8hoHrx6ry2SQz/veWyws5 f/XDwe6ZMEef9l/O/VSwW2V4xdZbzxF3FHRy3eQE= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The M1 MacBook Pro integrates Apple-specific variants of the TI TAS2770 and Cirrus CS42L42. Add these nodes and advertise them to the machine driver via the sound node. Signed-off-by: James Calligeros --- arch/arm64/boot/dts/apple/t8103-j293.dts | 104 +++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8103-j293.dts b/arch/arm64/boot/dts= /apple/t8103-j293.dts index 1d074b9e6018..24d0b512fac4 100644 --- a/arch/arm64/boot/dts/apple/t8103-j293.dts +++ b/arch/arm64/boot/dts/apple/t8103-j293.dts @@ -133,5 +133,109 @@ &displaydfr_dart { status =3D "okay"; }; =20 +/* Audio codecs */ +&i2c1 { + status =3D "okay"; + + speaker_left_rear: codec@31 { + compatible =3D "ti,tas5770l", "ti,tas2770"; + reg =3D <0x31>; + interrupts-extended =3D <&pinctrl_ap 182 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 181 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left Rear"; + ti,imon-slot-no =3D <8>; + ti,vmon-slot-no =3D <10>; + }; + + speaker_left_front: codec@32 { + compatible =3D "ti,tas5770l", "ti,tas2770"; + reg =3D <0x32>; + interrupts-extended =3D <&pinctrl_ap 182 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 181 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left Front"; + ti,imon-slot-no =3D <0>; + ti,vmon-slot-no =3D <2>; + }; +}; + +&i2c2 { + status =3D "okay"; + + jack_codec: codec@48 { + compatible =3D "cirrus,cs42l83"; + reg =3D <0x48>; + interrupts-extended =3D <&pinctrl_ap 183 IRQ_TYPE_LEVEL_LOW>; + reset-gpios =3D <&pinctrl_nub 11 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Jack"; + cirrus,ts-inv =3D <1>; + }; +}; + +&i2c3 { + status =3D "okay"; + + speaker_right_rear: codec@34 { + compatible =3D "ti,tas5770l", "ti,tas2770"; + reg =3D <0x34>; + interrupts-extended =3D <&pinctrl_ap 182 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 181 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right Rear"; + ti,imon-slot-no =3D <12>; + ti,vmon-slot-no =3D <14>; + }; + + speaker_right_front: codec@35 { + compatible =3D "ti,tas5770l", "ti,tas2770"; + reg =3D <0x35>; + interrupts-extended =3D <&pinctrl_ap 182 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 181 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right Front"; + ti,imon-slot-no =3D <4>; + ti,vmon-slot-no =3D <6>; + }; +}; + +/ { + sound: sound { + compatible =3D "apple,j293-macaudio", "apple,macaudio"; + model =3D "MacBook Pro J293"; + + dai-link@0 { + dai-tdm-idle-mode-0 =3D "pulldown"; + dai-tdm-idle-mode-2 =3D "pulldown"; + + link-name =3D "Speakers"; + + codec { + sound-dai =3D <&speaker_left_front>, + <&speaker_left_rear>, + <&speaker_right_front>, + <&speaker_right_rear>; + }; + + cpu { + sound-dai =3D <&mca 0>, <&mca 1>; + }; + }; + + dai-link@1 { + link-name =3D "Headphone Jack"; + + codec { + sound-dai =3D <&jack_codec>; + }; + + cpu { + sound-dai =3D <&mca 2>; + }; + }; + }; +}; + #include "hwmon-laptop.dtsi" #include "hwmon-fan.dtsi" --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 886FE3D1A97 for ; Sun, 20 Sep 2026 04:58:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880294; cv=none; b=iYi/UDZ0937ik88I4COutAOnPPHafZZqCL5qaPljaKcGhn4JEikbCwQe89FHpXx1zsrtcv/9Y6iL0yBoeWoK1Ga+H9sOUKhmYbaY972xHtX/NZlEPfittEziJ8bkKS9XE0G0j32rHdoQvZEvK6q3Q6c+Rs0vKI3Iix2KU5ROXqg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880294; c=relaxed/simple; bh=smG/fh+zvKf45VDf3t0AAqeGFxv2Guj0oJz9KpBdYKk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DgEWzc/5GqzSWVHJrbAk4g010+6Umujw18/XOvoSAYIdxFJKz0kMjY3ceeQIsgnrlvEcPIIglL0Elf1Gtxm/USEFtD29q4zUH4DLSB8x4hTO0dcLKLkmpYBIK9ysVzqGEUh6QcP1uzVtZIxaME3NW4LfkqrmK2x8LhYRo+pUG80= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=i9aJbK8X; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="i9aJbK8X" Received: by mail-pj2-f13.google.com with SMTP id d9443c01a7336-2d747f066d8so6966085ad.1 for ; Sat, 19 Sep 2026 21:58:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880292; x=1790485092; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=N0g4srKdHMimAxZHAyfKwZ3cY0lFOq9OA24YFEe5Fn4=; b=i9aJbK8X7QYSNvIYnLeyEaVGBTyPwWWTNVQBWN1Y92vsXRRUGVF4Q3wAWekK/8hZjt dw0hnarz+miBRfFt7wIOh0R65ilMbf57nXYflCdoOk2d/OMESzOyWr7eLviyHSE+AqPa b/JF8HPRIcg06dcPJYPIXXMlFyr59aB04fERdkclGXUFS7mNFt4ywFDS+e/f7km9LjAr jeGkqiVoIeywmkSOabud2Gf1pOB0yXeTkqQg0tBZe7V77oh1psLyNsG4PEmgz4CnBZkp UtAu4yIHhO+zkDML35K8FExVGlX9knV0WWlIQKmuZVWsiqMGoy1PUCIIECuKnhV13p32 ebaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880292; x=1790485092; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=N0g4srKdHMimAxZHAyfKwZ3cY0lFOq9OA24YFEe5Fn4=; b=AmCJ+uat8o0AXA6UC+VNjO8vJ0GUVdLob+PywZBjpzwK8++GF+Ec5D7k7gx6K56QTQ Viy/+upID2Jg6YpZtWjiU4d+9Hr9dYZGUVnCBcWFM5u38R0pCXoaqZLZPpNavTF4iovc 8G7y2adwBvu70c/VUyTmlzhDs9qTeRzmul1Ahb2DTx8clrxZ+0ohGmSBHTArEEtdKxxy 2xm2sm1cpUGLF4TqKKGffLUGirZ5CH6/oeYjb+9J+0J+w3fznfoM6iP4oUBXjpHVPg7p z20JX1be69kdOSwmcRDv2J4viI/uxyGcyyFehYj7Fqs35PgwncJgJUZX1J14R4iuNnkW hIdg== X-Forwarded-Encrypted: i=1; AKwUvBzT8/wtaYkzGn1wIQNXRfhB1SC3Z3aWRDbJtV1ql0zVmhf/qBRE/gw7CaVba4yH57v+5dErb/OXFpgC3NU=@vger.kernel.org X-Gm-Message-State: AFuF++lK8bEoKpXl6vyTN08T1qkwg0AHx4gT7Z/mJKcwwLBSlyTEx0fh ubehUGvLRQ6NCtt5b+t5/DvWxGxvon2rMkTOseFT8R/4jFQLPFUTpRiu X-Gm-Gg: AYBFou3nhc0l2aOtIfzi2AJN3q0Un3DIoUrTDAna5h+u3GXiAgWBdqzXW4vhMF5skwQ foe2pVMdb2lv6E2CBhyR52Upj9lcgpxl2gjO1dgz01YjGbIsNy48125eXTrj9l/9Z5hOGnvPj2p GblZimyNGcmuD3prZufvX04HE7hwkekr28XDp80GzCNtI/bT55MR0nOiBQRNDYfChhfcljLQsV+ NFCxrS0JJ/z1e/cOAESJZEhOA0kL+3T2KXIFnGol1SKa1CQxluHtAehM3MQwjf4xSmcbQMeIepK 7faO/eLz1+xgBMJ+t5XhPkMK71Mu73Uxkz7074yOc24mvKYnCRdbQ4huelT1g3vYs8R0/IUQy27 4r+JFwb5bVdH6SedKyfV1Nkfdlms48fXrt6yUBWCiWKRhj3eVew5FXlyaT9AcP89o2UxzHtb++8 ElayMdHL5e6ceWXpAf2CEzuXrBrL+xKdMgF33gGGeYd26uVjrIO3GqYarEvW7g99oy52ok1KL7N ciYmPL+DtszlI4GxfgLBEPJtD5R2nJuc9i07Jx8qXqA3Q5qjkKnfeRusIZCKZjjtMlLZsHPLrFC zBa+Ac5DrWGtfzqAd353klWxMOmPIaL9j+jVar5Kkxm9epd6PViocdMakQ== X-Received: by 2002:a17:903:38c7:b0:2dd:c100:2517 with SMTP id d9443c01a7336-2ddc10025aemr41443735ad.32.1789880292039; Sat, 19 Sep 2026 21:58:12 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.58.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:58:11 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:53:59 +1000 Subject: [PATCH 20/28] arm64: dts: apple: t8103-j45x: Add headset jack nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-20-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2387; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=smG/fh+zvKf45VDf3t0AAqeGFxv2Guj0oJz9KpBdYKk=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr05VuyhvMW7Ds9h3dXNYauaI1fvENjrYLNloXfE7/+ /9FwcL2joksDGJcDJZiiiwbmoQ8Zhux3ewXqdwLM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GukY6xgxcHEKwFT/msPIsGD6SeetzNUyV32e1hbMDmx9b/3btb5snUCd1rEgJq2buYwMVwW3aDW dXZGUEtGZUOsgVbG4d47hzTtOzj7lP3bJzRLjAQA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The M1 iMacs integrate Apple-specific variants of the TI TAS2770 and Cirrus CS42L42. Since it is not yet safe to expose the speakers on these machines, add the headset jack nodes and advertise them to the machine driver via the sound node. Signed-off-by: James Calligeros --- arch/arm64/boot/dts/apple/t8103-j456.dts | 33 +++++++++++++++++++++++++ arch/arm64/boot/dts/apple/t8103-j457.dts | 33 +++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8103-j456.dts b/arch/arm64/boot/dts= /apple/t8103-j456.dts index 090c97bb781b..41ec1398f981 100644 --- a/arch/arm64/boot/dts/apple/t8103-j456.dts +++ b/arch/arm64/boot/dts/apple/t8103-j456.dts @@ -88,3 +88,36 @@ &pcie0_dart_1 { &pcie0_dart_2 { status =3D "okay"; }; + +&i2c1 { + status =3D "okay"; + + jack_codec: codec@48 { + compatible =3D "cirrus,cs42l83"; + reg =3D <0x48>; + interrupts-extended =3D <&pinctrl_ap 183 IRQ_TYPE_LEVEL_LOW>; + reset-gpios =3D <&pinctrl_nub 11 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Jack"; + cirrus,ts-inv =3D <1>; + }; +}; + +/ { + sound: sound { + compatible =3D "apple,j456-macaudio", "apple,macaudio"; + model =3D "iMac J456"; + + dai-link@1 { + link-name =3D "Headphone Jack"; + + codec { + sound-dai =3D <&jack_codec>; + }; + + cpu { + sound-dai =3D <&mca 2>; + }; + }; + }; +}; diff --git a/arch/arm64/boot/dts/apple/t8103-j457.dts b/arch/arm64/boot/dts= /apple/t8103-j457.dts index ebddde75455c..aa2a08cb22cb 100644 --- a/arch/arm64/boot/dts/apple/t8103-j457.dts +++ b/arch/arm64/boot/dts/apple/t8103-j457.dts @@ -69,3 +69,36 @@ ethernet0: ethernet@0,0 { &pcie0_dart_2 { status =3D "okay"; }; + +&i2c1 { + status =3D "okay"; + + jack_codec: codec@48 { + compatible =3D "cirrus,cs42l83"; + reg =3D <0x48>; + interrupts-extended =3D <&pinctrl_ap 183 IRQ_TYPE_LEVEL_LOW>; + reset-gpios =3D <&pinctrl_nub 11 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Jack"; + cirrus,ts-inv =3D <1>; + }; +}; + +/ { + sound: sound { + compatible =3D "apple,j457-macaudio", "apple,macaudio"; + model =3D "iMac J457"; + + dai-link@1 { + link-name =3D "Headphone Jack"; + + codec { + sound-dai =3D <&jack_codec>; + }; + + cpu { + sound-dai =3D <&mca 2>; + }; + }; + }; +}; --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C71D3D1A98 for ; Sun, 20 Sep 2026 04:58:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880302; cv=none; b=CVklzHz7mIfj6l7kKMTjZJ0NUZUr2WDLCXwfHsEF5WKxLpd8HFw2yzUIT93ewi/+0alULU03rV4eewx29lGKEwqcwFc8KXgt+MoI2Sv9dVVXWMsGOpJNrHbErtBcUHfy8CqKAvjhP1GnlTJiwMHXGsVTMOReU95IELjPMKIATdI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880302; c=relaxed/simple; bh=cMTjWQ2NYQrAfPSCsxwJy6m7qzo21To+mIsntW6H2OY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=m7aFOd7lhbFf2O+MlvD/r3cCb1pc5EvEYx4irQdUA/+qP8e/DUAAncpLzjM2py4yCZ0sk82aYqZSO14FhlwPKCnDVJuonTew3oKzGYpNO8SH/DBOtnEnDVIVvsH2TFL1M5xD/M8cKlofvXzlXR/A53GS7YnT7Oj0UEvwkTZdlKw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=BS9aduNT; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BS9aduNT" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2d8fbef5018so25464755ad.0 for ; Sat, 19 Sep 2026 21:58:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880301; x=1790485101; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3ZxE7qtOQPvQOMl18UomFCfaDsFGa2ddpzMEh9Wx8L8=; b=BS9aduNT8mnNBwO+VBmk3Iy159bBaECMKf0RuEqxPGYzvvGIzbFBW5xEbKe6MtAFzZ qqIcqS3psc3Lg69MBSYhH5xoW1Udo3DyS59sHgu/DBwkbxzI8hC9LXNF1QIBC4FWs6Uc lcwFl8Uf1dYiyhyZ4BCgPxxWYjJrwjoEN2J5SMpWRo6DLaTuqfVxWCcgrmXp5O2UJ4H6 iZUvkRUu2R3BBmWgs2MvETkRYGieRPrkiDP3AWj8eFzoivF+/fO/pdt7fJGJmx12iXbg I3PXn+e57FE0VYrsNdFiwhhxO5EARxQQguWZvq5oqgKHWC6lCkzUgdLIORu8237O8pN1 h1Lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880301; x=1790485101; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3ZxE7qtOQPvQOMl18UomFCfaDsFGa2ddpzMEh9Wx8L8=; b=q5HHT3/bRgqLuhnOiZgReQfEn3IfpBXJL8LEqxin0XVqyW4pzfPltIl9BefZPcKg7s +D17w3ldFCMxWytVTp0RYv2uxJ/1ZZszC/1OKKQuoPLmgRCcfYFx8FGAO/ZrksXtv8qg Dk041DPdf86sY4zsYX2P9HHtDF4Vps/9s+jZ1i3fx6A5tqg1tVB/pmzVuwM9fu96x5xX Yr8+kCxo27ubdId3KWoGAxqrOg8KNRuuu0daoZmrCkUwpqLtvVbGRsbxe76mjamCeF3I iRgfAJiAVdsdLRwuJx/s7QuwPumGcos02AftSaoIoj2P2W8xhZQv6RBhxa3qflUKtk2s QAxw== X-Forwarded-Encrypted: i=1; AKwUvBxS7AFJj/VS9yDtYMyIr9GlQOvrTwNbv4+hUw7783Fl84B2ztQt147Yk364HSnHRZG7wkVx6iii5PaAFBk=@vger.kernel.org X-Gm-Message-State: AFuF++kuIMt1xkehdi3ZabTJ+IYiXX517tYo7YwKcRHjYFuP0wqooMzU g8sNroNOYQT43wDfZcjFp4hdFts8Us0YFQgaUYn0dSfHKcvvLIxyOreD X-Gm-Gg: AYBFou2zl9g08vS0Ta/vjw0l+yiNfvTudS9IRqu6aVOoEIMjW1KxG8PkCcuL6Iyz0p+ Cxug3lr61MxGhimFhhJ4UlcJkPNPx9tBldNEL6ktKFFqfXzcqNCvISoE/NBsfAGpdW9HIv6wxuL Qu6SoiOAZil6HZPDOlYJU8fYGFOpE4RZugOELr46YdaI87lGli7o6zbFUNQAM04ApkusOuhgQb0 qMqLSoFmOkYbARC35DUzwSp8kUrx+CtCuMZ/new4l03G/pbHPixFpPEkK5zzeAYu1PfsOOxp8sb bLqneQ5fYH2l8LD8UPb0I9tdsCLQKx/O9SJg9Fb5U1rjQLIuw3f6z0J7AwmPkYqW+qqyWZZ6EL1 4CXDpG4ZXYATWJNPZ0JCYhyuTdjir/B3Y/ePeCRqF5SPqqjC2l8sDIRlMYyYx+cffMyP2lzO6MJ QTqJAtuI9uOn2dGl4W5qZEKjAnBoBNye7r9I3g3oBsSt4K1Y5qbaQwTx9cjeaGniGsP/9CeqOtP G6517eCZ++2A+kyUuT13lTlj+o+MzGzbaZpuzvQN1VUh0K+EMiHZlCy9pM5USi08xvjBBGefyio fdJhjCMtv1pAqSsDSeZ7Xv3rbbgXsbgHsEnXpEvSAgTegtU= X-Received: by 2002:a17:902:eccf:b0:2db:210f:c111 with SMTP id d9443c01a7336-2ddb1ab4ef6mr125516895ad.2.1789880301114; Sat, 19 Sep 2026 21:58:21 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.58.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:58:20 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:54:00 +1000 Subject: [PATCH 21/28] arm64: dts: apple: t8112-j413: Add speaker/headset jack nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-21-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3189; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=cMTjWQ2NYQrAfPSCsxwJy6m7qzo21To+mIsntW6H2OY=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr05VuP+DMftLnqRZtuGTlf3b/ValBqobdPzubNFVFO RcEp1/pmMjCIMbFYCmmyLKhSchjthHbzX6Ryr0wc1iZQIZIizQwAAELA19uYl6pkY6Rnqm2oZ6h kY6xjhEDF6cATPXWbYwMk/+Z3n3DFRUan37nVNuMtc4q8mc2s7MsW5H9P3H+FbdnWgx/xdtnmzw vucN5cprA1im5nl5GBpIXljl2/tp07eZyTZdgHgA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The M2 MacBook Air integrates Apple-specific variants of the TI TAS2764 and Cirrus CS42L42. Add these nodes and advertise them to the machine driver via the sound node. Signed-off-by: James Calligeros --- arch/arm64/boot/dts/apple/t8112-j413.dts | 101 +++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8112-j413.dts b/arch/arm64/boot/dts= /apple/t8112-j413.dts index 7ccfceb08093..38d0e33c701c 100644 --- a/arch/arm64/boot/dts/apple/t8112-j413.dts +++ b/arch/arm64/boot/dts/apple/t8112-j413.dts @@ -92,4 +92,105 @@ &fpwm1 { status =3D "okay"; }; =20 +/* Audio codecs */ +&i2c1 { + status =3D "okay"; + + speaker_left_woof: codec@38 { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x38>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left Woofer"; + ti,imon-slot-no =3D <0>; + ti,vmon-slot-no =3D <2>; + }; + + speaker_left_tweet: codec@39 { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x39>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left Tweeter"; + ti,imon-slot-no =3D <8>; + ti,vmon-slot-no =3D <10>; + }; +}; + +&i2c3 { + status =3D "okay"; + + speaker_right_woof: codec@3b { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x3b>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right Woofer"; + ti,imon-slot-no =3D <4>; + ti,vmon-slot-no =3D <6>; + }; + + speaker_right_tweet: codec@3c { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x3c>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right Tweet"; + ti,imon-slot-no =3D <12>; + ti,vmon-slot-no =3D <14>; + }; + + jack_codec: codec@4b { + compatible =3D "cirrus,cs42l84"; + reg =3D <0x4b>; + interrupts-extended =3D <&pinctrl_ap 149 IRQ_TYPE_LEVEL_LOW>; + reset-gpios =3D <&pinctrl_nub 12 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Jack"; + }; +}; + +/ { + sound: sound { + compatible =3D "apple,j413-macaudio", "apple,macaudio"; + model =3D "MacBook Air J413"; + + dai-link@0 { + dai-tdm-idle-mode-0 =3D "zero"; + dai-tdm-idle-mode-2 =3D "zero"; + dai-tdm-slot-tx-idle-mask-0 =3D <0xf0f0>; + dai-tdm-slot-tx-idle-mask-2 =3D <0x0f0f>; + + link-name =3D "Speakers"; + + codec { + sound-dai =3D <&speaker_left_woof>, + <&speaker_left_tweet>, + <&speaker_right_woof>, + <&speaker_right_tweet>; + }; + + cpu { + sound-dai =3D <&mca 0>, <&mca 1>; + }; + }; + + dai-link@1 { + link-name =3D "Headphone Jack"; + + codec { + sound-dai =3D <&jack_codec>; + }; + + cpu { + sound-dai =3D <&mca 2>; + }; + }; + }; +}; + #include "hwmon-laptop.dtsi" --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8694F3D1A98 for ; Sun, 20 Sep 2026 04:58:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880312; cv=none; b=L458cTvxUafGcD2Uh0Rb33u5h36lXWZxNxqhUltGCqO/aaQZfzg+4bkeYLvH0xUg31dI2SN17lsaHBcwELFHEXkGyC6IZnzEmVvMs4Nb4BgtEXXJX9Gee4f5ipTXPgwIR1WV5rnT5fpNAPxFAAa24TaTwMG1dDW9+aB+ZDiuq8E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880312; c=relaxed/simple; bh=35yLsTXZt5swGMfuhMDygKEChMzE5kiCXJnWEUcydSA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Vo+KKCkXh8T9xTPZhvx6Xp5HlD8WVjdlTgNCQFbLqvsMduYhgGW7pQd4+hzha1Y2C7N0GFkPNXfV3n/5cdneCGeCWGKyX+YSLIOHOs8NzRhNznvlDMgNx8dwLS3ixNNZ9uzn0Y63AJAMYgtgHAwPZl7ztZ2mq4Endf+yDJCt0VM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hRrRB/k1; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hRrRB/k1" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2d747ee1f38so19500255ad.2 for ; Sat, 19 Sep 2026 21:58:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880311; x=1790485111; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=a5y7b70ubJ7k4DhRxto7zdYhLdV7QsCa9C8GET+K0OY=; b=hRrRB/k1asjdt7lorcQPYKFw/uSEVSwZk/+VlA3vkfNmjh+E7w5USkUGDjs7H7wgJD trCu0YFI8Cn6YZ3/zuaqEt5CEEhA1AUP8vT6MGhDF7pExG+YUgFwiVLATp5Va91Ppz83 mp6B6eckw4MCHJAx2Mfvm2RuQDdGRS3HBbyEtaZRTJ2n26HwYdj3LeGb7WMg3ciUZXSH W4v4qphAlYxt5d8EJZuU6IHaVu/7vZEGIgkiCyV7QcSP+AKY5++SQxc9/YXa7850oLeK Hqj63loJg+FkREweHtHdzvW3ySv7IzmmlMq1bRARbSUnxJheiiN0Qwe5CZmfPNUeujUB k31A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880311; x=1790485111; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=a5y7b70ubJ7k4DhRxto7zdYhLdV7QsCa9C8GET+K0OY=; b=aSBLHF0iIajNFg+Mu0LQ3B1BQIaBXYcpaEakjrGQrrFzbHqFuBAH0OrTLwIT9qdBRb ATqqfSqDSyq/n8MsndJrbWQ0OFBSehu3f9stRIeuHMEkLM0+YTgI8jiBpgP0YinBgWYN 4/ny7381R3QU+qZm/Oon5DJS4B4WCkw6eBJbhuODt7kDwGRpe/VfHeK6/PuY9QFWgEAB Q3ITEgwkHSCKXum31+R/v2YfbKPwKJ/ctyV9OmUVjppfl3759F6PzLU6a6wRJK4WokY4 X3yfL8g4QD583x+zREQ1vjQBkIaJyCZGcgPVlxby/U3HtnNkNfIAmd5rL5WgF3JvL7Qo MFsg== X-Forwarded-Encrypted: i=1; AKwUvBy886loqhVBv2L/SztWHEyVYKT7tqzC7ppndCkf6sGYMjQQJN71mPkoR1sUbbuArLnsG2ySBaMQ3NLEhOg=@vger.kernel.org X-Gm-Message-State: AFuF++lFpav+th4uTW/B9L2M4N1RY2JmyVAEk2c4VSpnt2MaKf58QHUY bgHUuhqM/WH+Yjm/jXUShhfeTpPWQGt2tHrfSyHCRDPQM81KOVqFWjoE X-Gm-Gg: AYBFou3oZDov5WpLtEHub6+kKZlp25gIoHl0HYlzO4iOzmH5BpIyqJ5fBJfh9JpxjtM mQYFrZm+zrsrFuRQKyztvaanI5yko+xmiUbzxZzoyG+z12Zm/J/SS5FGFCcJCt+tGs+1Pvgq/7A wxs7/qSW7yb8Zvtc5VWadMM5MZ+i0KmfNUpH5grJkTVKlbby4okJcKIPOyDwst1h0ZojlT8rGws s5HJJDYJRIfzbTiygPFWybKJ0m6UuJvBTClgFjSaYMyzYY6ZXi6wahhpOb3qYzV3ht+eTGEVNkj Rt1U5h5lGaORgjabxzUGB1V27HXZQV4gSTqzuxFt5+oukLfjB+NuJ4mwjmFIsLi/aEAFep3Hcxg TNehgyOtTYbwK6lGSd2qMNe6ll8JiQDLwCx5Sng1AgeCGrTKIgIwuc/OaX+i7A5Y4ttlY4BhtzR IU3MtJp2xP9SdzQokFpgo5+MLXtuJ5D+Rzk4+TUw5v6hNkWYK1L/AgEABDpdHDfEHltQFU4ZTQw dgqa0Bv7m2cHlYl6bOnas9SUEj24SzgBJ9cr16/3IH05L4xagMs2hBOeaVLTBUTJmA5Wf4M4G/y q5tQQ9OI/7SrOvcYIItHpjBTCYGAesLOeDSHMjuU89qgUs0= X-Received: by 2002:a17:902:ce0c:b0:2df:336b:9c2a with SMTP id d9443c01a7336-2df336b9c5bmr36073685ad.70.1789880311051; Sat, 19 Sep 2026 21:58:31 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.58.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:58:29 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:54:01 +1000 Subject: [PATCH 22/28] arm64: dts: apple: t8112-j415: Add speaker/headset jack nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-22-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3974; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=35yLsTXZt5swGMfuhMDygKEChMzE5kiCXJnWEUcydSA=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr05WquSsFpwoUim+YWmBgy24j0P72fv6G5Q/nVsbZJ W/wZ17UMZGFQYyLwVJMkWVDk5DHbCO2m/0ilXth5rAygQyRFmlgAAIWBr7cxLxSIx0jPVNtQz1D Ix1jHSMGLk4BmOquNoafjJvYzyr9844pFNAM/iGur//4e1/lxXUnnHVSzdstmrwjGRmalJomLJf fYxJ7j81F7eX3p3b7nxjnnzqf2szswb5m5R5mAA== X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The M2 MacBook Air integrates Apple-specific variants of the TI TAS2764 and Cirrus CS42L42. Add these nodes and advertise them to the machine driver via the sound node. Signed-off-by: James Calligeros --- arch/arm64/boot/dts/apple/t8112-j415.dts | 125 +++++++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8112-j415.dts b/arch/arm64/boot/dts= /apple/t8112-j415.dts index fdc3409d2e07..5f245ef1c4bf 100644 --- a/arch/arm64/boot/dts/apple/t8112-j415.dts +++ b/arch/arm64/boot/dts/apple/t8112-j415.dts @@ -92,4 +92,129 @@ &fpwm1 { status =3D "okay"; }; =20 +/* Audio codecs */ +&i2c1 { + status =3D "okay"; + + speaker_left_woof1: codec@38 { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x38>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left Woofer 1"; + ti,imon-slot-no =3D <0>; + ti,vmon-slot-no =3D <2>; + }; + + speaker_left_tweet: codec@39 { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x39>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left Tweeter"; + ti,imon-slot-no =3D <8>; + ti,vmon-slot-no =3D <10>; + }; + + speaker_left_woof2: codec@3a { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x3a>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left Woofer 2"; + ti,imon-slot-no =3D <16>; + ti,vmon-slot-no =3D <18>; + }; +}; + +&i2c3 { + status =3D "okay"; + + speaker_right_woof1: codec@3b { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x3b>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right Woofer 1"; + ti,imon-slot-no =3D <4>; + ti,vmon-slot-no =3D <6>; + }; + + speaker_right_tweet: codec@3c { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x3c>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right Tweet"; + ti,imon-slot-no =3D <12>; + ti,vmon-slot-no =3D <14>; + }; + + speaker_right_woof2: codec@3d { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x3d>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right Woofer 2"; + ti,imon-slot-no =3D <20>; + ti,vmon-slot-no =3D <22>; + }; + + jack_codec: codec@4b { + compatible =3D "cirrus,cs42l84"; + reg =3D <0x4b>; + interrupts-extended =3D <&pinctrl_ap 149 IRQ_TYPE_LEVEL_LOW>; + reset-gpios =3D <&pinctrl_nub 12 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Jack"; + }; +}; + +/ { + sound: sound { + compatible =3D "apple,j415-macaudio", "apple,macaudio"; + model =3D "MacBook Air J415"; + + dai-link@0 { + dai-tdm-idle-mode-0 =3D "zero"; + dai-tdm-idle-mode-3 =3D "zero"; + dai-tdm-slot-tx-idle-mask-0 =3D <0xf0f0f0>; + dai-tdm-slot-tx-idle-mask-3 =3D <0x0f0f0f>; + + link-name =3D "Speakers"; + + codec { + sound-dai =3D <&speaker_left_woof1>, + <&speaker_left_tweet>, + <&speaker_left_woof2>, + <&speaker_right_woof1>, + <&speaker_right_tweet>, + <&speaker_right_woof2>; + }; + + cpu { + sound-dai =3D <&mca 0>, <&mca 1>; + }; + }; + + dai-link@1 { + link-name =3D "Headphone Jack"; + + codec { + sound-dai =3D <&jack_codec>; + }; + + cpu { + sound-dai =3D <&mca 2>; + }; + }; + }; +}; + #include "hwmon-laptop.dtsi" --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B6AB53D331A for ; Sun, 20 Sep 2026 04:58:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880322; cv=none; b=qW6YU+PQbqisxw8Lnkcq8iazEYcJC2r3X5tzk/hkEotvkx1buGUjDchXy/TrZkUbaEedl0oxmkIKZAJ9xIoauuYsRs7QwkEVSrbTvfgEyqeI6dBPrKp8ZMVMQ27uDKb9SLAODkom+i7rQ4E9RkCdiEMY4LIeFTsLbc8QKq2iWxA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880322; c=relaxed/simple; bh=CU9srHz2GgdK9c8dFe4loM4R0cHA8ZEmrmM8hXKxyBM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gOjCfndnT5CK5SklzmG0PBLA/497pKrss+Q7BONk6lMC74tn49E+AnvMVH5P8XtU3apoWi9DILsEAPlvQZR4QXtttY/1BtfTbvOhlxSEHFYUnbi3k+3U3uf5VNXSmvigHfMB7rKPl1/79cKBZSLMmuonGhGZu/a4b42Wyi5Kbxg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=i9nfcVp2; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="i9nfcVp2" Received: by mail-pj2-f13.google.com with SMTP id d9443c01a7336-2d93ff61046so19907835ad.3 for ; Sat, 19 Sep 2026 21:58:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880320; x=1790485120; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9ojaG0e/MC0OxeKJgMYBSONXy+QRcCdaW5zg7jxOvgg=; b=i9nfcVp2Dry3qKRflYmMIdXL6MjoEVFxvL2T7tgECLVqB8PX8p2VLC2wlMFhEdv2EQ zBxHlQVRAjgGQ+xmUg9yKpDgg1Sf5LonBpgvbvC9BMhOfM3rKuenvECpxiWS0/NAuoci QutVICTSOo9pMgUt9kZpZqJL2SOh8DWdYC5VS5sgJwtEAgWGRG2Eep9eGMXdIk7yZizx hlBe4knhiLaFEx8mtTceQ88RRJLoxmxJWKMkDhO3ZlqQV2QgLT7m3LLUtZOXHcIQnKmz 0GB/3KFq/OzJSixTB5GVnWFeM+Crisz66sI/8WFUJpPJ+i0r/ua7HTZ257BTMyLZw9qf +pYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880320; x=1790485120; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=9ojaG0e/MC0OxeKJgMYBSONXy+QRcCdaW5zg7jxOvgg=; b=hwhzu5Icn2d2bU3n7/w0mKXTYMX3uYQMUdF6qnfnpvI+EYrhyyCygk8LPnQMWLCyZb QiImlNSyen6XSrLAmrGFrJ+hbmjPeT8kGD8NHZ8xq9DWhnx2vxi/8SOAZL9wZ7WK/IwG C89/OujvbO10fJGvTLvu133TSCxgqDB99K3FNG0MyKh8O4yscGvIYeh9h95+RWGyGZ1v rPig2qjOPVvqKFQWRdnqZSilU+ya9XLbrTQUlk5rkm1Giid3Va5KU6lHzH1UtCHw/PkA zAk6rQgJR0id9ge2UcpKQmZfUn/Vf4Cokf5eJ8XbzUBZPH8oIrLHAQsGwulOjAaKFRZ5 jizA== X-Forwarded-Encrypted: i=1; AKwUvBxq0t0Yb0fx3fgi474GtFcuKxPJ2PGMD+XHjLX49L33t84tx357dZw993u91Ydwz1TYx2/gn46sOGBMA3M=@vger.kernel.org X-Gm-Message-State: AFuF++koicd6oAgE1KybarlA9TJtedtLICYScHoU9rcX1nH+VzPSTGAY BJaNBAqIWLt5xOpZPXpaDz/EAfKhf7tWaVzsPHRyA/628ws2/ROvw9q2 X-Gm-Gg: AYBFou2TdkICPyFVMiUooGlwYRtS+2hUo3fDz3qWGP/pD4WjvDvEk3v5NAH8tdKMKh2 yzTN8gx4fg0Aeqwrmta6EP8okRsDCVnY1VswEdH8+u/fBKZqJgbytrGBhyZPl2jqaDTQIMcUYkm 4pU1Hup0h+jusASM60Ylx8Jch915Hde1t1zZ9bmrQ0wflwQHowDC4kzDfaPjyhBQr3HUePtXzOS y3RFxvSGzxDnR/HXAZNI4223rKNjGrfHHN75P+q2KF5hQJiytsRrZ2uY6dQowRiStqlQe0moNdw Osa0/QKLhiK8KOFUTzZnn/gBfRHbqA+c7RLHBduYFvwrBKwLDjv8ELMR+21QkM/sl/HnFLTiEf0 PETf6SgLybHxr9iB63Sqg85D9UMCWJn8goWVnxe1ov+d5n7eevTIsRIekbtDFFM5vW21fsJUk/T 7/WRS8wUJ4pdll3CZZ4GK4a3qXNOrl4mcomRg84FfhGiWUp3yNW8XJbeZZ128iRs5rCCKk4BSqc ohbRdIzzyGBUFbXUYTXriM/EPadQM3aEpbXlXpiZtDTjIdIf9LbXY5ckncoemPbZeMFWdaH/ecx pRiz3nnloJOoeVARJf6XwL796XkFhHhhUbC2b2KkchdlESU= X-Received: by 2002:a17:902:728c:b0:2dd:ad74:ac1f with SMTP id d9443c01a7336-2ddb1bb26e7mr76373875ad.26.1789880319821; Sat, 19 Sep 2026 21:58:39 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.58.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:58:39 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:54:02 +1000 Subject: [PATCH 23/28] arm64: dts: apple: t8112-j473: Add speaker/headset jack nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-23-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1770; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=CU9srHz2GgdK9c8dFe4loM4R0cHA8ZEmrmM8hXKxyBM=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr05VcxLh0uAQ6FiSlzpQTeSvnrh373E/mvGIyzzXm2 3z983M7JrIwiHExWIopsmxoEvKYbcR2s1+kci/MHFYmkCHSIg0MQMDCwJebmFdqpGOkZ6ptqGdo pGOsY8TAxSkAUz3rDsM/ZaXESME8nayVqaKSDUuiH7OXfN39fW9z/Qe1+UohogezGBmOzPm6p4P dwPaF7e1y78Xaonw8ektLpG0KnYNSTkqcXcYEAA== X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The M2 Mac mini integrates Apple-specific variants of the TI TAS2764 and Cirrus CS42L42. Add these nodes and advertise them to the machine driver via the sound node. Signed-off-by: James Calligeros --- arch/arm64/boot/dts/apple/t8112-j473.dts | 55 +++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8112-j473.dts b/arch/arm64/boot/dts= /apple/t8112-j473.dts index 105a9d118980..50088283f2e8 100644 --- a/arch/arm64/boot/dts/apple/t8112-j473.dts +++ b/arch/arm64/boot/dts/apple/t8112-j473.dts @@ -85,4 +85,59 @@ &typec1 { label =3D "USB-C Back-right"; }; =20 +/* Audio codecs */ +&i2c1 { + status =3D "okay"; + + speaker: codec@38 { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x38>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + ti,imon-slot-no =3D <0>; + ti,vmon-slot-no =3D <2>; + }; + + jack_codec: codec@4b { + compatible =3D "cirrus,cs42l84"; + reg =3D <0x4b>; + interrupts-extended =3D <&pinctrl_ap 149 IRQ_TYPE_LEVEL_LOW>; + reset-gpios =3D <&pinctrl_nub 12 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Jack"; + }; +}; + +/ { + sound: sound { + compatible =3D "apple,j473-macaudio", "apple,macaudio"; + model =3D "Mac mini J473"; + + dai-link@0 { + link-name =3D "Speakers"; + + codec { + sound-dai =3D <&speaker>; + }; + + cpu { + sound-dai =3D <&mca 0>; + }; + }; + + dai-link@1 { + link-name =3D "Headphone Jack"; + + codec { + sound-dai =3D <&jack_codec>; + }; + + cpu { + sound-dai =3D <&mca 2>; + }; + }; + }; +}; + #include "hwmon-mini.dtsi" --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f38.google.com (mail-pj2-f38.google.com [74.125.227.166]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B97723D3302 for ; Sun, 20 Sep 2026 04:58:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.166 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880332; cv=none; b=ZX/ZwmPO9/Gx7HnerDfPws3Ac2d2Q0x4GbWCYVI3obmfLomDKZ63vdd8Dl8ljqYJuLqhLSwafT8eu4TmKnhrwVTOodS4AU9yH3lCwBX3/5JL/hCfzX9KEBlXdbgES2hH8ULm9iJzN7HqZlDQwMq43AUCzTT5K78tVJ3jz+Stizc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880332; c=relaxed/simple; bh=StMdE/41Quj7yIXSIiTM/Hm7dUYYyFp2jqXhWfbLNVs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JBTaCXEDyafKIT8gRHAIOszRgfYCcA3YU8P4HSxRZdvMXWt3g0cKrp+NXQ2HkGZHuYWfB5KrueozFRc94r4OHuvgPn6Ehe+5ylZaeiIaUSOKX/Lr7yX5vt52eXDO2owGP5aq+1HiVsbXXF7nJGASo1prkFOWhT/kjNOZUMdRWE4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ghjdKYCV; arc=none smtp.client-ip=74.125.227.166 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ghjdKYCV" Received: by mail-pj2-f38.google.com with SMTP id d9443c01a7336-2d747ec6185so12091345ad.0 for ; Sat, 19 Sep 2026 21:58:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880329; x=1790485129; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=OwMS+SCTdXpEwJqRYlXmGmIQiKyrThQd9kYVEal5MRA=; b=ghjdKYCVj/yz9ywflMGDlW25UnFrO9/mCkS4OZmdWvo2DvYbDEwYvXI2KvdBWp4qnb UtH7T0NJZy8YpiG/vWcfT1WsNas4BdRkuC6p5QS/QmY+FUXvT9l/E/OwfaWvaAKsBPOE Bq/kRDbF8O/IYH3utejFiEk8iPlcCRlcuVneRubmpeDM9UZkFRvtZu/aM6sOl2AYtQ9N ujZLuS8Y30gS+Y6AviGANLDn8qgayZYSSt9YXrPjH+uc2mnK28xPikZr3K6isJXeQBQm lqq78ejAQa2kyKi4Ve7hW004aADVCeiuwPUNh7sAPlkxNaWtJ+TXfm4/1wPX5C4hcwlB RKmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880329; x=1790485129; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=OwMS+SCTdXpEwJqRYlXmGmIQiKyrThQd9kYVEal5MRA=; b=yTJRBwnIYozb4nPlCpMPpxiysLmA9q6WN9b7fq1fg1t87l73o2cJhLgp5Z2cIn/rX4 O9eogHH8lW4xDTolufWjooKm8fAFPISLCpULjkjpbG5o/HU52YQ32ob/Q7vn9rHp7IjI DjUdJ6W8eEGHDZYKKdCimyJ9DFPfspWSVgA6bA2c+Lm5xQUVzXZSMjnGxqp/pMY1BFmM 9K3TYsxoW2T5Un/LOqbpyFYdlfKx8F7pMvjNNnBkNoHZHvTfJyg8ALud/SGfXw7RJJk0 bPbE2qaH44Ol123An+/3W2Lrtbnauk1KrtzBfWye11alV2Pwy01oL8n9OnOoJlEwC2v3 DHHA== X-Forwarded-Encrypted: i=1; AKwUvBx2b3QZYbsRcvUaTnslyzLiC84kNjEFHC+xoJa8yCUn/isNMv6GXDmIc6iTuFNoLZKnb5V0NGietSGzoOs=@vger.kernel.org X-Gm-Message-State: AFuF++k6bwO+VwnTRApCpZ7UbYZdHcD8K44rRF3O5j783+yh0ed3j3MP UrYgS+CtspdFx3v6gmZlR2A4s2fR6kk0Dba4s1kU/vesFk9pNMXKRg5o X-Gm-Gg: AYBFou2oPTGKufDQeRugQcSx7YSZx5cXXVnqzqx4pIzCd36qIeo47t82MLA+KyoAsxF EXij3BA1w8ENZs+IrpXDpcmUNKGubxy4WPoa6ZqpuXqvV9hTSVKOGgFwr1w22/9NCBCjwfrfZJ3 oBOdr/ix6FaNGmtHXOL0k3esm3pq/W7Gw6/bWIhIl/GwhHMSJHAg1BKbGR0EEIT6KRQgY4LjrSv 98FbFw+I4IfdN/P6zQYse8lJ4IZPyQsr8E4v6P+3pWOgIn8ErchjeisS/JXFIxlb7B/XXu7AVSf 8IjLbNgiVQqWgJ+BtLS+MPd1G16LZAGTxeOn+21N6eYfRSzvigQ21wjJcPXHvachoZwC4WVYNgF D8gPjatZCZLWviagivbNpuBEOVKxG3QcVEc4bQsnCKQU1H/iRjsfkeoIPcMUn5r2AHOgxcCVBUg lNhlkBq5qmxnIu2doL3fI06RjzKD2aNZRGXjKrkIp7AUs9tsnq7M4je7MFHecsrGn3mbs0NEI1K Unm3c7/rmPwJfb+TAXErVWgp2xW2cXbAkuSEHzOjY7zaqNksdOaSW09z/JSMFnHC929bcquawHN phwa/9hzYvsLuevGu8OG4LCs9wuWwInbnisjXIlER79E/xQ= X-Received: by 2002:a17:903:28e:b0:2dd:c100:4253 with SMTP id d9443c01a7336-2ddc10044f8mr51674075ad.55.1789880329399; Sat, 19 Sep 2026 21:58:49 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.58.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:58:49 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:54:03 +1000 Subject: [PATCH 24/28] arm64: dts: apple: t8112-j493: Add speaker/headset jack nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-24-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3214; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=StMdE/41Quj7yIXSIiTM/Hm7dUYYyFp2jqXhWfbLNVs=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr05UuHtmzzNTy5hyeCe56m3uqbz8rKFxy4t6Kd/9Ug gV1Vj0X6pjIwiDGxWAppsiyoUnIY7YR281+kcq9MHNYmUCGSIs0MAABCwNfbmJeqZGOkZ6ptqGe oZGOsY4RAxenAEz1VD1GhqtHy95unr6tZnfMpnu71vU79bx5xat/K1qC4eaHrgUpGusYGbZctnv 2QkFJ57zSUeMVVvO2Tj2/2eDbYy7OQxbb7C1PLWMGAA== X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The M2 MacBook Pro integrates Apple-specific variants of the TI TAS2764 and Cirrus CS42L42. Add these nodes and advertise them to the machine driver via the sound node. Signed-off-by: James Calligeros --- arch/arm64/boot/dts/apple/t8112-j493.dts | 101 +++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8112-j493.dts b/arch/arm64/boot/dts= /apple/t8112-j493.dts index 7cea5c594810..eb401ae8773e 100644 --- a/arch/arm64/boot/dts/apple/t8112-j493.dts +++ b/arch/arm64/boot/dts/apple/t8112-j493.dts @@ -147,5 +147,106 @@ touchbar0: touchbar@0 { }; }; =20 +/* Audio codecs */ +&i2c1 { + status =3D "okay"; + + speaker_left_rear: codec@38 { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x38>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left Rear"; + ti,imon-slot-no =3D <8>; + ti,vmon-slot-no =3D <10>; + }; + + speaker_left_front: codec@39 { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x39>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left Front"; + ti,imon-slot-no =3D <0>; + ti,vmon-slot-no =3D <2>; + }; +}; + +&i2c3 { + status =3D "okay"; + + speaker_right_rear: codec@3b { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x3b>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right Rear"; + ti,imon-slot-no =3D <12>; + ti,vmon-slot-no =3D <14>; + }; + + speaker_right_front: codec@3c { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x3c>; + interrupts-extended =3D <&pinctrl_ap 11 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 88 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right Front"; + ti,imon-slot-no =3D <4>; + ti,vmon-slot-no =3D <6>; + }; + + jack_codec: codec@4b { + compatible =3D "cirrus,cs42l84"; + reg =3D <0x4b>; + interrupts-extended =3D <&pinctrl_ap 149 IRQ_TYPE_LEVEL_LOW>; + reset-gpios =3D <&pinctrl_nub 12 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Jack"; + }; +}; + +/ { + sound: sound { + compatible =3D "apple,j493-macaudio", "apple,macaudio"; + model =3D "MacBook Pro J493"; + + dai-link@0 { + dai-tdm-idle-mode-0 =3D "zero"; + dai-tdm-idle-mode-2 =3D "zero"; + dai-tdm-slot-tx-idle-mask-0 =3D <0xf0f0>; + dai-tdm-slot-tx-idle-mask-2 =3D <0x0f0f>; + + link-name =3D "Speakers"; + + codec { + sound-dai =3D <&speaker_left_front>, + <&speaker_left_rear>, + <&speaker_right_front>, + <&speaker_right_rear>; + }; + + cpu { + sound-dai =3D <&mca 0>, <&mca 1>; + }; + }; + + dai-link@1 { + link-name =3D "Headphone Jack"; + + codec { + sound-dai =3D <&jack_codec>; + }; + + cpu { + sound-dai =3D <&mca 2>; + }; + }; + }; +}; + #include "hwmon-laptop.dtsi" #include "hwmon-fan.dtsi" --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D2B683CFF6A for ; Sun, 20 Sep 2026 04:58:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880340; cv=none; b=lEKIWvnoCXcFnwQ1sy5RVdN98DVpTZxNe7J+7tziyQsUqUSYGdCLA0hk1Iz+T/++uWyEpSNigW//UV4dpHKUAR+5NmRsPDYzQiJJDI+uMXi8vanrm0yq0izEmyJty92tcrDvR/2RZq1+J0dkOryYJ2Faw6Kdv64wOyP+ERyy88Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880340; c=relaxed/simple; bh=5Lv7LzgxsLDDIrEyhpz1IqbTrdKtgpeQE+Q25XVomZU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N0zEoDOLoYyLlPlsDHnjnoP5Uquqn0nzfcMGVYgqkgAxdrldo4Qvm1ctSob9xGjfPMcqjC5Sjrwo666DjRoZdEhPbZPLPw2PEsVEhixEkFIjZn/X2eCbR6JOu8P6WeLI6Fvmg601ihJ5sgknfj9M2EAQGaMjTnl01nyhKepa4Jw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=m0MC5Fhb; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="m0MC5Fhb" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2d8fbef5018so25467325ad.0 for ; Sat, 19 Sep 2026 21:58:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880338; x=1790485138; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=BzkwdUu5IxbjyIkUJ7r1XGcuucPGN3hdyJMixCjr1T4=; b=m0MC5FhbWvGUM74BKYUt2wnBkkzh/03L9D2p1Y9L8jZa1FmL4F+0cgPLKrQZ5pnWjV xdxahQkWIOL3eAyju82P+s+lHsUsVuXk9KFt6VhVYfFBYeVEoI9V/Dn5Q0lOHEeveI7X I8NrlbIgnx25pFvWDFCmwtcP9SAhTReyt9mjCbgxEHQZocUBueqiiEowsqdyDFRpcD3N EybNLmbXvs6mCL2SvX0vHDKJo1AoTKQKSLU5w6XlSASjK54F0+Zem3OPaC3PL8PCU9Vt 6SEqEOoNtL9DH78YQYCrycEEDTIsFL6Jit27xRWqs3atmxZqzCR7XGu9OY3V47czBUt8 y4fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880338; x=1790485138; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=BzkwdUu5IxbjyIkUJ7r1XGcuucPGN3hdyJMixCjr1T4=; b=dmF/vjzCsdMFXbmGR8gxCpecVm1PA+tiXWzMgs7GoxmWv9rzYJY1khzS62HpwqrsAB wTP8xhFXbOZPDAexKbZ6yZZlRC4Ww435Ew6Q9refWMtNux00oChXckHz8KKNVevw97UM 9/aVl7ulaQIAFY+C7R4eiJLydq7XoGsvW1v6YiRbcZJrKYmMIw1sLnjnOz2a6Zp5j2Z7 w4lCKEOh9waJeMG8AK3TdlmtyoWkFV/eiJL5EoTZIggRzhR1mvgtzkVkjOE7DxwPCU9f 4Yi1Vx9WuO6RPHjc70HQXlxpJvqJIpqUq6acYhhSeS40qqGaJkZ1mXKp2tjgw64bprfS ZRDg== X-Forwarded-Encrypted: i=1; AKwUvByUeBl9UWf8NmbakGKSaRrio834t12Dv6ORW5QmNkqQU5wSh9h5Z2A0289uVJYvDuKmF//DdEYHzvrJx8s=@vger.kernel.org X-Gm-Message-State: AFuF++ndbw50ze5K6vq2R+sZ9Wz1qQRWgUpwgMRRmZUihqC7OHJHGPi7 8NEkwKrhod2sHXYTa6W7jbcD9i6IyUYe5X1t2uks55kmD6lZ1jNJWOsg X-Gm-Gg: AYBFou3p/gEjfg3BG2r48HsPxjM0LjPNublRPTdnkswjTO5C21NU3eYDa2y61AXIBqs WqXbjy93UT4zAExiGxGTkfUIe802s3ddpYzM79hKlPxBaOeGzNXvFmWj8stSp+jR+DbvGgELltt Na6nRQcHq0FyeM4ZjiM1JKxt+wlkX1ZiJkNphDSMgsh12IadNydE2r+b/9oGDXYOAxCRkgNw+p4 xcwWFfJ3qUQOeVww2KEEo091EgXavyMES5k67yVzIPeoM+5REga7pPOps8tEYE0Nj1Edn2tyhLb b14FpAPjFwKjZT88MlWpyCIXdFzuUkQ+TjPmSmEWWwwdF6R6YkYdFz7aT4iVKEbdqb1vznkDBxs R43V9lMlnT0IzzF3bQTR8Jp+jpGKq4orb1WaDS7ScNNXZvzU2hOzVrnWhr+upFNNCry5yqEK0v/ XhSHnxfjx1aJMBJ15o4smYLvlUIoQ5Dhmsrt3yJLWQGOsqWHEc5MlgxBWPrRyzBHqIccVohTIHg qvDRqG2qYmzp7yZRQw6kNgJu7fpqGYutFxDcd1DaDhstnz1f+4GnXof5W+G1GDfGfGPp5CX/Y0k uGAc7m84EX8KoWN7dbYWmbGrLJgTo4pUWwTvOeMRrgVhtTO/yOemTaH5FJs= X-Received: by 2002:a17:903:2349:b0:2dd:c100:3136 with SMTP id d9443c01a7336-2ddc100317fmr55120815ad.50.1789880338289; Sat, 19 Sep 2026 21:58:58 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.58.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:58:57 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:54:04 +1000 Subject: [PATCH 25/28] arm64: dts: apple: t600x-j31x: Add speaker/headset jack nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-25-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6132; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=5Lv7LzgxsLDDIrEyhpz1IqbTrdKtgpeQE+Q25XVomZU=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr05UedJzvjLnaydTZH/toSs9SlgNxTF8Oa15zWfRVS jzyAI9Qx0QWBjEuBksxRZYNTUIes43YbvaLVO6FmcPKBDJEWqSBAQhYGPhyE/NKjXSM9Ey1DfUM jXSMdYwYuDgFYKoFaxn+e9gtnb2XpXqbovDFtn/1S67zcoXafjukxDLpcN6Kas3V3Ax/ZZ/N+PU mqGH74/nKOzVXZb9vnZ3b63P8x0v9DobOwnl9jAA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The M1 Pro/Max MacBooks integrate Apple-specific variants of the TI TAS2764 and Cirrus CS42L42. Add these nodes and advertise them to the machine driver via the sound node. Signed-off-by: James Calligeros --- .../arm64/boot/dts/apple/t6000-j314s.dts | 5 + .../arm64/boot/dts/apple/t6000-j316s.dts | 5 + .../arm64/boot/dts/apple/t6001-j314c.dts | 5 + .../arm64/boot/dts/apple/t6001-j316c.dts | 5 + .../boot/dts/apple/t600x-j314-j316.dtsi | 128 +++++++++++++++++++++++++ 5 files changed, 148 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t6000-j314s.dts b/arch/arm64/boot/dt= s/apple/t6000-j314s.dts index 1430b91ff1b1..dab8e99fa324 100644 --- a/arch/arm64/boot/dts/apple/t6000-j314s.dts +++ b/arch/arm64/boot/dts/apple/t6000-j314s.dts @@ -24,3 +24,8 @@ &wifi0 { &bluetooth0 { brcm,board-type =3D "apple,maldives"; }; + +&sound { + compatible =3D "apple,j314-macaudio", "apple,macaudio"; + model =3D "MacBook Pro J314"; +}; diff --git a/arch/arm64/boot/dts/apple/t6000-j316s.dts b/arch/arm64/boot/dt= s/apple/t6000-j316s.dts index da0cbe7d9673..2cdfac3c40c8 100644 --- a/arch/arm64/boot/dts/apple/t6000-j316s.dts +++ b/arch/arm64/boot/dts/apple/t6000-j316s.dts @@ -24,3 +24,8 @@ &wifi0 { &bluetooth0 { brcm,board-type =3D "apple,madagascar"; }; + +&sound { + compatible =3D "apple,j316-macaudio", "apple,macaudio"; + model =3D "MacBook Pro J316"; +}; diff --git a/arch/arm64/boot/dts/apple/t6001-j314c.dts b/arch/arm64/boot/dt= s/apple/t6001-j314c.dts index c37097dcfdb3..7495698beb02 100644 --- a/arch/arm64/boot/dts/apple/t6001-j314c.dts +++ b/arch/arm64/boot/dts/apple/t6001-j314c.dts @@ -24,3 +24,8 @@ &wifi0 { &bluetooth0 { brcm,board-type =3D "apple,maldives"; }; + +&sound { + compatible =3D "apple,j314-macaudio", "apple,macaudio"; + model =3D "MacBook Pro J314"; +}; diff --git a/arch/arm64/boot/dts/apple/t6001-j316c.dts b/arch/arm64/boot/dt= s/apple/t6001-j316c.dts index 3bc6e0c3294c..6622b6e225a6 100644 --- a/arch/arm64/boot/dts/apple/t6001-j316c.dts +++ b/arch/arm64/boot/dts/apple/t6001-j316c.dts @@ -24,3 +24,8 @@ &wifi0 { &bluetooth0 { brcm,board-type =3D "apple,madagascar"; }; + +&sound { + compatible =3D "apple,j316-macaudio", "apple,macaudio"; + model =3D "MacBook Pro J316"; +}; diff --git a/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi b/arch/arm64/bo= ot/dts/apple/t600x-j314-j316.dtsi index caded1636f3d..7afd385ce57d 100644 --- a/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi +++ b/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi @@ -169,6 +169,94 @@ hpm5: usb-pd@3a { }; }; =20 +/* Audio codecs */ +&i2c1 { + status =3D "okay"; + + speaker_left_woof1: codec@38 { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x38>; + interrupts-extended =3D <&pinctrl_ap 179 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left Woofer 1"; + ti,imon-slot-no =3D <0>; + ti,vmon-slot-no =3D <2>; + }; + + speaker_left_woof2: codec@39 { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x39>; + interrupts-extended =3D <&pinctrl_ap 179 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left Woofer 2"; + ti,imon-slot-no =3D <16>; + ti,vmon-slot-no =3D <18>; + }; + + speaker_left_tweet: codec@3a { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x3a>; + interrupts-extended =3D <&pinctrl_ap 179 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Left Tweeter"; + ti,imon-slot-no =3D <8>; + ti,vmon-slot-no =3D <10>; + }; +}; + +&i2c2 { + status =3D "okay"; + + jack_codec: codec@4b { + compatible =3D "cirrus,cs42l84"; + reg =3D <0x4b>; + interrupts-extended =3D <&pinctrl_ap 180 IRQ_TYPE_LEVEL_LOW>; + reset-gpios =3D <&pinctrl_nub 4 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Jack"; + }; +}; + +&i2c3 { + status =3D "okay"; + + speaker_right_woof1: codec@3b { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x3b>; + interrupts-extended =3D <&pinctrl_ap 179 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right Woofer 1"; + ti,imon-slot-no =3D <4>; + ti,vmon-slot-no =3D <6>; + }; + + speaker_right_woof2: codec@3c { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x3c>; + interrupts-extended =3D <&pinctrl_ap 179 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right Woofer 2"; + ti,imon-slot-no =3D <20>; + ti,vmon-slot-no =3D <22>; + }; + + speaker_right_tweet: codec@3d { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x3d>; + interrupts-extended =3D <&pinctrl_ap 179 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Right Tweeter"; + ti,imon-slot-no =3D <12>; + ti,vmon-slot-no =3D <14>; + }; +}; + &nco_clkref { clock-frequency =3D <1068000000>; }; @@ -366,6 +454,46 @@ &atcphy3 { status =3D "disabled"; }; =20 +/ { + sound: sound { + /* Compatible is set for each machine */ + + dai-link@0 { + dai-tdm-idle-mode-0 =3D "zero"; + dai-tdm-idle-mode-3 =3D "zero"; + dai-tdm-slot-tx-idle-mode-0 =3D <0xf0f0f0>; + dai-tdm-slot-tx-idle-mode-3 =3D <0x0f0f0f>; + + link-name =3D "Speakers"; + + codec { + sound-dai =3D <&speaker_left_woof1>, + <&speaker_left_tweet>, + <&speaker_left_woof2>, + <&speaker_right_woof1>, + <&speaker_right_tweet>, + <&speaker_right_woof2>; + }; + + cpu { + sound-dai =3D <&mca 0>, <&mca 1>; + }; + }; + + dai-link@1 { + link-name =3D "Headphone Jack"; + + codec { + sound-dai =3D <&jack_codec>; + }; + + cpu { + sound-dai =3D <&mca 2>; + }; + }; + }; +}; + #include "spi1-nvram.dtsi" #include "hwmon-laptop.dtsi" #include "hwmon-fan-dual.dtsi" --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CF2733D0914 for ; Sun, 20 Sep 2026 04:59:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880349; cv=none; b=CdNdBW5SnZ/cPseCBOF3Rp4ht2eFxibGd1SK59cX83QqxrCcobT2dcrWMJCNSg0ZzCr1qKaQ6o3zMN8q4TTtaokJfA057/dtA0bs9DV2gpZOp3UxIyE2O4ytzH6leZBfgqBG1pLuFHj5ZeODFRDZynjiiOWgLfMyNK8NhayZLbg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880349; c=relaxed/simple; bh=exZLW1orbjDOjAe+qhZ0AJwTOY6a9pj0Hwu8KuUxZmI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hA1ffLUwFQP89QZ4R4xFwHgx08qd5Wef1v+6qy+Uu4Jhet6jvsH7iilrH6F2vc99fdxXSyj6rYs8Zc8ztbraaDGvJXPoxrIV3ZgwKmY5x40rB3pyHmQIGmmJ0SjfjyB2iRGCuXJmIQoigQMtlnd9vBGiqpPUSW7MelJDryN+xnw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OpK83dQ6; arc=none smtp.client-ip=74.125.227.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OpK83dQ6" Received: by mail-pj2-f13.google.com with SMTP id d9443c01a7336-2dd88a115ebso16268665ad.2 for ; Sat, 19 Sep 2026 21:59:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880347; x=1790485147; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=nxSmsJzbIneEXZndIf7W1mbqPxGSYMwHTFZOXNa27kw=; b=OpK83dQ6LmKheFZv5yFeWMsFMDZ7NpoEhWMXKG6MhvNkLljFOEz5wdi416D/6861hd tzmm809ZXb0j86La8UPLhCIItHdMOnYwFLSmXBW33MUi1tebnhNDh+JyRqHpt2lrcOwm +Ire0iI1M+OHIy79COr+mACiVDqnrpH3/25NAcAZpJDRS3gkdX/Zz6d8ypk5bp7ULFEh npAJdMcwP8DtzLWruavFQZfZJonGzAYOvEFQbo8GdXbe43HTlUIui7i8Yr+U3mNy1olT 1e6CX7fCO/wM0YSJD6KbrdfgZqP0rsy2Ht2e3+U5pivnZonaVbJ8bREr4iZj4Wu6wNyZ tc4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880347; x=1790485147; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=nxSmsJzbIneEXZndIf7W1mbqPxGSYMwHTFZOXNa27kw=; b=tpf68qun42VvwWh1zkajGkfVbN5Lg+cGwIKTXHmSVG6M6IJeDRefR572ASnPClybO+ Cy9JXVwHpTEyWsoRah0LopED20PtXQStY7TS2f4JeZnynRxR/UEZwNV1oe6TljPoMXSM LPt+Egq42BHZnP/Zrapm5Wg3Mwz8FonuUdMgzdfWwZSfbKllhiRrF0MLHy9r8/U2elQW 63V3/tJQI6VsgPf23mhz1Vmfb+NSP/VRS/4N2Hxw/o6P9HpD9zPnTETycx4d6/iSjLIp Ivg1gmBa8IqfBoWrdv9e1Bk9NTOtu0IlbvoWlLoZiARUt6gD4Aj3cjha/KGENz1rOGrU M+GQ== X-Forwarded-Encrypted: i=1; AKwUvBy5u4FmxD6c7svif0hGxRbt92dZ57a0mlkV3C8xP28rhxCgxNO7uVTIXP94pQPhCrJMpqDC1CkW4XH9wjU=@vger.kernel.org X-Gm-Message-State: AFuF++nMg91F1sSoOAuGTYXqcNBP6tDubn3P1mII6w6EC/KnDppKPn8y 6n+CGQhBhbu5wNO5/ReU62dMplFWAYQxu/mdEY5PB/Ar8HOZkcdo9P1I X-Gm-Gg: AYBFou0qyjCBML6zTC5DNoMSfkg+7h2OGVbzAoARHpAfZLZhTVQl895IoRwyXIBh1eN tHPYVa145mpjiTLEhC2vp+gQyhgGl0R9+c5tUvawhtfgh4etoS9CTU2Hj74kvAHSTfiGpDMxDEe 2+nKquQ0gfN2GAsxobQwi4cK3WsH5dmci2fi5gJeNZ+QZeBJEmvKB4uGATTDbaSH/C83c+8fdgo y0UunIciqKXuf6ob3bOuHe0HCSd9uI5i9WVfSeA/lIQSD003G9zg9Rr+5NlXJqzjvF1yeh+OELZ TQpx6q8j4z5aXOSmu/xE97gg983TDV9u3Xt6GuyLhAnDmmGJjKV9KqXsCZyzDzrYnPjmlku6YOX zelOw/vtCxjI7/JjUl6QvKLJsObsbLk2cfUHXJCG/I4l7E/s+qRKX/b8XcO6nTkUVJQEaB3lgmj lnBHjXOkLDGi2LPBMMcRr4Fr2f+BT7JKA57SenK9ZqBpBoDfgU+BWjDOM+0Kox6gQOyjN+3efit YfYJKz9G7Zberj0IAd9ASqNJ6S1MwqNciFX89zzY6ZzMDLrKkWEAiM0azTMaTJptbdWNdoT7GKO arj3QzrdS5pKH9OtU0MCITEfs4hYKfCG7RrpncfrkSVyBDQ= X-Received: by 2002:a17:903:3e2c:b0:2dd:c053:ec72 with SMTP id d9443c01a7336-2ddc054095cmr43098755ad.37.1789880347267; Sat, 19 Sep 2026 21:59:07 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.58.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:59:06 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:54:05 +1000 Subject: [PATCH 26/28] arm64: dts: apple: t600x-j375: Add speaker/headset jack nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-26-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2939; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=exZLW1orbjDOjAe+qhZ0AJwTOY6a9pj0Hwu8KuUxZmI=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr05U5024/rGw+4x47c0Wpg89398uRqpM0UgS0mNaHP 9p+/rBQx0QWBjEuBksxRZYNTUIes43YbvaLVO6FmcPKBDJEWqSBAQhYGPhyE/NKjXSM9Ey1DfUM jXSMdYwYuDgFYKpTBBn+CurZBnuuFVRcb2G+qCRkWnS0haEb70yxdzeuti+XFjSuY/grvDPw3QH pAqdzXnd5RB8xKt4rsBd1iJAN7/PsFHsXqM8DAA== X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The M1 Max/Ultra Mac Studio integrates Apple-specific variants of the TI TAS2764 and Cirrus CS42L42. Add these nodes and advertise them to the machine driver via the sound node. Signed-off-by: James Calligeros --- .../arm64/boot/dts/apple/t6001-j375c.dts | 5 +++ .../arm64/boot/dts/apple/t6002-j375d.dts | 5 +++ .../arm64/boot/dts/apple/t600x-j375.dtsi | 58 +++++++++++++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t6001-j375c.dts b/arch/arm64/boot/dt= s/apple/t6001-j375c.dts index 08276114c1d8..bfaafad6f60b 100644 --- a/arch/arm64/boot/dts/apple/t6001-j375c.dts +++ b/arch/arm64/boot/dts/apple/t6001-j375c.dts @@ -25,4 +25,9 @@ &bluetooth0 { brcm,board-type =3D "apple,okinawa"; }; =20 +&sound { + compatible =3D "apple,j375-macaudio", "apple,macaudio"; + model =3D "Mac Studio J375"; +}; + #include "hwmon-fan-dual.dtsi" diff --git a/arch/arm64/boot/dts/apple/t6002-j375d.dts b/arch/arm64/boot/dt= s/apple/t6002-j375d.dts index e6eb6b6c386d..2f37784357a8 100644 --- a/arch/arm64/boot/dts/apple/t6002-j375d.dts +++ b/arch/arm64/boot/dts/apple/t6002-j375d.dts @@ -184,6 +184,11 @@ atcphy5_usb3: endpoint { }; }; =20 +&sound { + compatible =3D "apple,j375-macaudio", "apple,macaudio"; + model =3D "Mac Studio J375"; +}; + #include "hwmon-fan-dual.dtsi" =20 /* delete unused USB nodes on die 1 */ diff --git a/arch/arm64/boot/dts/apple/t600x-j375.dtsi b/arch/arm64/boot/dt= s/apple/t600x-j375.dtsi index 8a1494949e4c..60aa9a870bd9 100644 --- a/arch/arm64/boot/dts/apple/t600x-j375.dtsi +++ b/arch/arm64/boot/dts/apple/t600x-j375.dtsi @@ -179,6 +179,34 @@ typec3_connector_ss: endpoint { }; }; =20 +/* Audio codecs */ +&i2c1 { + status =3D "okay"; + + speaker: codec@38 { + compatible =3D "ti,sn012776", "ti,tas2764"; + reg =3D <0x38>; + interrupts-extended =3D <&pinctrl_ap 179 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 178 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + ti,imon-slot-no =3D <0>; + ti,vmon-slot-no =3D <2>; + }; +}; + +&i2c2 { + status =3D "okay"; + + jack_codec: codec@4b { + compatible =3D "cirrus,cs42l84"; + reg =3D <0x4b>; + interrupts-extended =3D <&pinctrl_ap 180 IRQ_TYPE_LEVEL_LOW>; + reset-gpios =3D <&pinctrl_nub 4 GPIO_ACTIVE_HIGH>; + #sound-dai-cells =3D <0>; + sound-name-prefix =3D "Jack"; + }; +}; + /* USB controllers */ &dwc3_0 { ports { @@ -410,4 +438,34 @@ &pcie0_dart_3 { status =3D "okay"; }; =20 +/ { + sound: sound { + /* Compatible is set for each machine */ + + dai-link@0 { + link-name =3D "Speaker"; + + codec { + sound-dai =3D <&speaker>; + }; + + cpu { + sound-dai =3D <&mca 0>; + }; + }; + + dai-link@1 { + link-name =3D "Headphone Jack"; + + codec { + sound-dai =3D <&jack_codec>; + }; + + cpu { + sound-dai =3D <&mca 2>; + }; + }; + }; +}; + #include "spi1-nvram.dtsi" --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E48BD3D2FE6 for ; Sun, 20 Sep 2026 04:59:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880358; cv=none; b=mbo+SZ26VTzUvnNbioz+Cw7RrlFbBxkPJSF3OqyfJSzwEENXyGHJ2sPmRLDxInRvGDjejtVVaNMiDJNNUYuFhvQkj7u62ECH9t0t4zLArGWBZvTuCgZpvGXACPllokoaHBaMYcUrYBFF2f5adR4r2pIDVMCTSxzZWisXqp0jgDQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880358; c=relaxed/simple; bh=QYtiLlOA1qm5LKu0Z+66im/X8d3VR2WwNILFXW4q0n8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lKDJxm7C3r2RRg1kb1qAMn1ghY9euBFxQBH1z1qVCjGPgjASvfPUvwxQIMSitaH0RcipdeKStYm4hdj4WkN6b5jXQlw8Rc4gXO6RoBocjMa9xXPhdedMom1znLN14ODi7ZCXMgU/vd4dQaLFPSceBc8dUFKozZ62qCPjY0bJWWQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ePG3VLdo; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ePG3VLdo" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2db1ca06a25so13335465ad.2 for ; Sat, 19 Sep 2026 21:59:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880356; x=1790485156; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9wNW58H2E9LvctZSyWkCkKi9IlEj3updz7FkHJDkZcU=; b=ePG3VLdoMQSeCS0qhxsVSfk7Ut45gF6ccq6aw8rxh6Hx7cFTovv4to44k1lGdjwF5+ Z/ZL+O9J2SiOKCOLGpb+wKjbVByzXCDCpVx7U/XeHLteiwvAvjM15PPFlexqSag6VcBg PfaZdHVXF97NQNROVxZuHZwOA3Wo8OJ/YG9A4HpTZoS9BuacJXL3TEfETB61ZnIomcYH 9j6DDejHcW4jZ1vKVHO8080MNI2f/NmKTDvYd/uJib+jK/5ic+lDnFfcODUaM9+U+H7n 66zyR55dU3SdWqNCUpfhUJo5kueGdalFwowi0rw1yaC8CNbQAQ+nSLCprXUgLv7wE+ef G6ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880356; x=1790485156; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=9wNW58H2E9LvctZSyWkCkKi9IlEj3updz7FkHJDkZcU=; b=IHgayCfQHW/zmsiGP1CCfJoAxgR+NvQIEyjLnNYfwgjtCwMI5uMU7g55YB6+ZjwtgS tnQ/xuA0Ua1WvUB0MYm1l4QXHedUEmQdj2apk7nrSOi9XCN6HZ6HJL4IAP5tECbieERD ZFO0kw2QzjkBXYV1q8elShsdrlztlmLaCYWU8UWsW1ADjKJMlo7SWZpngZs0fsLqIkLX reeO0lICPXuyq9E2oThD74p9GIQohcqbckdVlDcCicp9WfzjSuicYfepMyGhb1EDcgCI 4USNonSb6F3TxbAplY5XLhkDN5QPNe4zJTeyaXCCMDrfG+vtoTVaIogw52f9THcBlUYG AMGQ== X-Forwarded-Encrypted: i=1; AKwUvByiRxFobom9KxIS+J/hi+T+kC6DH3yW3da8oayMM13eQrZGlfTvHYzCr6OL4ChpP6XLYJogvDx97j09UuE=@vger.kernel.org X-Gm-Message-State: AFuF++n4WwrufYEfEjabM8BjIZ0p+pkb0Xwlb17S8kOrKBKTL8JZJIZU omZz5MOzq82LLj29+LQEKmn+6mZpdlnc6oSbL1+gxnJ8SJXmLt0NzEqw X-Gm-Gg: AYBFou0HbvdGu1+X3ZmOI9MTauEdh9XWg8N7NOoXYNrXmd6zXthdu+N78wGnp358c+d OvMWnrtrjIQfZ1APDI6c10K2RvAk0Y858dbfGBB80N+WeS7hQnUmE1xgfksBIgAIpLDxTUYxd8V F0L1ZIBnxXOJ+SksLgAMrvijn8m8pl5ALNJrpDLn0GKSa32zAUXHoAEi3gs5OWyCTZjKJ7SZr2R otr5M6HLtc43Bv0bRsRUIyM9O36Kjg30buS8NVCrJFfF4E3Ar76uooSzq6PPUC+vQqZlNseqmoX m36fLuZkE/UI+eR9T7726VTbEEvUrZY8ipK92kAgE+srXDyPiNRsk4Dn0HjeZc+wd0FT8k1OM0c dG2sgxa0iI7DYUVVDRg99IVKbeQ9i5Mrc1sCK73Zs2t+s8fhz6s+n4tp6pyHgP1tK/tkwI9XyWZ iHJnS+HENsI3yEvlO9nIp9kMaN3ytmQFfCf/kshOUT1gecCcKVd3mzmQUX1cHjk94VIG5bAUWwf oyde1ZiRjKFp93f3PIQBx09osAD2pYwhyN45EPKgn3FgViOwTglIMDOTWsLP2V7mp+BlR3W+/1H IIn6g8rm5KJ7ZreAow6IBu58Iozf7PMsO3MT1zxdiERkpC0= X-Received: by 2002:a17:902:e549:b0:2dd:c1a0:c7e0 with SMTP id d9443c01a7336-2ddc1a0c90emr52143865ad.15.1789880356108; Sat, 19 Sep 2026 21:59:16 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.59.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:59:15 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:54:06 +1000 Subject: [PATCH 27/28] arm64: dts: apple: t602x-j41x: Add speaker/headset jack nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-27-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3776; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=QYtiLlOA1qm5LKu0Z+66im/X8d3VR2WwNILFXW4q0n8=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr05XPTGNt3/WoMq6/4MYqMYPpp/m36vq7eT2aWFHVs GL60dczOiayMIhxMViKKbJsaBLymG3EdrNfpHIvzBxWJpAh0iINDEDAwsCXm5hXaqRjpGeqbahn aKRjrGPEwMUpAFOt58/IsD4s4cR7/Wj2Vz4BV5SmBH5fkXHibatD78cr9h5NuU+l+Rj+ytw/sUX 9/FmD7bVn4sSZ/P5WvdeS5Pp+0+dSuOPprgnvOQA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The M2 Pro/Max MacBooks integrate Apple-specific variants of the TI TAS2764 and Cirrus CS42L42. Add these nodes and advertise them to the machine driver via the sound node. Signed-off-by: James Calligeros --- .../arm64/boot/dts/apple/t6020-j414s.dts | 5 ++++ .../arm64/boot/dts/apple/t6020-j416s.dts | 5 ++++ .../arm64/boot/dts/apple/t6021-j414c.dts | 5 ++++ .../arm64/boot/dts/apple/t6021-j416c.dts | 5 ++++ .../boot/dts/apple/t602x-j414-j416.dtsi | 35 +++++++++++++++++++++++++ 5 files changed, 55 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t6020-j414s.dts b/arch/arm64/boot/dt= s/apple/t6020-j414s.dts index 631c54c5f03d..b42750fc9404 100644 --- a/arch/arm64/boot/dts/apple/t6020-j414s.dts +++ b/arch/arm64/boot/dts/apple/t6020-j414s.dts @@ -24,3 +24,8 @@ &wifi0 { &bluetooth0 { brcm,board-type =3D "apple,tokara"; }; + +&sound { + compatible =3D "apple,j414-macaudio", "apple,j314-macaudio", "apple,macau= dio"; + model =3D "MacBook Pro J414"; +}; diff --git a/arch/arm64/boot/dts/apple/t6020-j416s.dts b/arch/arm64/boot/dt= s/apple/t6020-j416s.dts index c277ed5889a2..98caa29e3bdd 100644 --- a/arch/arm64/boot/dts/apple/t6020-j416s.dts +++ b/arch/arm64/boot/dts/apple/t6020-j416s.dts @@ -24,3 +24,8 @@ &wifi0 { &bluetooth0 { brcm,board-type =3D "apple,amami"; }; + +&sound { + compatible =3D "apple,j416-macaudio", "apple,j316-macaudio", "apple,macau= dio"; + model =3D "MacBook Pro J416"; +}; diff --git a/arch/arm64/boot/dts/apple/t6021-j414c.dts b/arch/arm64/boot/dt= s/apple/t6021-j414c.dts index cdcf0740714d..b945b75e518c 100644 --- a/arch/arm64/boot/dts/apple/t6021-j414c.dts +++ b/arch/arm64/boot/dts/apple/t6021-j414c.dts @@ -24,3 +24,8 @@ &wifi0 { &bluetooth0 { brcm,board-type =3D "apple,tokara"; }; + +&sound { + compatible =3D "apple,j414-macaudio", "apple,j314-macaudio", "apple,macau= dio"; + model =3D "MacBook Pro J414"; +}; diff --git a/arch/arm64/boot/dts/apple/t6021-j416c.dts b/arch/arm64/boot/dt= s/apple/t6021-j416c.dts index 6d8146b94170..0d4a7ef7dcac 100644 --- a/arch/arm64/boot/dts/apple/t6021-j416c.dts +++ b/arch/arm64/boot/dts/apple/t6021-j416c.dts @@ -24,3 +24,8 @@ &wifi0 { &bluetooth0 { brcm,board-type =3D "apple,amami"; }; + +&sound { + compatible =3D "apple,j416-macaudio", "apple,j316-macaudio", "apple,macau= dio"; + model =3D "MacBook Pro J416"; +}; diff --git a/arch/arm64/boot/dts/apple/t602x-j414-j416.dtsi b/arch/arm64/bo= ot/dts/apple/t602x-j414-j416.dtsi index 0e806d8ddf81..852fbcd6277a 100644 --- a/arch/arm64/boot/dts/apple/t602x-j414-j416.dtsi +++ b/arch/arm64/boot/dts/apple/t602x-j414-j416.dtsi @@ -43,3 +43,38 @@ &wifi0 { &bluetooth0 { compatible =3D "pci14e4,5f72"; }; + +&speaker_left_tweet { + interrupts-extended =3D <&pinctrl_ap 58 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 57 GPIO_ACTIVE_HIGH>; +}; + +&speaker_left_woof1 { + interrupts-extended =3D <&pinctrl_ap 58 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 57 GPIO_ACTIVE_HIGH>; +}; + +&speaker_left_woof2 { + interrupts-extended =3D <&pinctrl_ap 58 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 57 GPIO_ACTIVE_HIGH>; +}; + +&speaker_right_tweet { + interrupts-extended =3D <&pinctrl_ap 58 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 57 GPIO_ACTIVE_HIGH>; +}; + +&speaker_right_woof1 { + interrupts-extended =3D <&pinctrl_ap 58 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 57 GPIO_ACTIVE_HIGH>; +}; + +&speaker_right_woof2 { + interrupts-extended =3D <&pinctrl_ap 58 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 57 GPIO_ACTIVE_HIGH>; +}; + +&jack_codec { + interrupts-extended =3D <&pinctrl_ap 59 IRQ_TYPE_LEVEL_LOW>; + reset-gpios =3D <&pinctrl_nub 8 GPIO_ACTIVE_HIGH>; +}; --=20 2.55.0 From nobody Thu Sep 24 21:47:06 2026 Received: from mail-pj2-f12.google.com (mail-pj2-f12.google.com [74.125.227.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C51D3D2FE6 for ; Sun, 20 Sep 2026 04:59:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880366; cv=none; b=Uteg5omB6DeuBxohEZjM/j7EJqpfTGfrlbZSXkgzhdf930vCnnQg9MCWz/yNBy2BnnDWD10VUfbNPh85FpgR6mGXX8GxqhMbiFPjrAEmtEMTu7D4x3zsGzhdX9CWN8sZbMSmsbXMEwDM3+rAZcoEUf7/bQO2TzTnZbG0YHeGjps= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789880366; c=relaxed/simple; bh=wZ33HmVJ/5Act5G23FfyEoldMO69+O+FCZBZLHA6YUE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=B72prYraeYQxl3MadxFktlSglutf1/bBMoRg9p+/7oALax45tAzCJaiHMkLzfQTYsxhnNJU0T48LXUi7rwHzZmPAvfangPTl1eFMTLrK1uzV7Yuyzi0WPH7/myiye1cWQ8v+m14HzJJoHVzDW8Cnm+3U/aLqv6j/KP8P+XDaw40= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=g7nND1Pj; arc=none smtp.client-ip=74.125.227.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="g7nND1Pj" Received: by mail-pj2-f12.google.com with SMTP id d9443c01a7336-2d9004a1ac0so12574635ad.3 for ; Sat, 19 Sep 2026 21:59:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789880365; x=1790485165; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=OYHqvApWBxaD4bUAOaE882+EY9mUZ0r309+FWLunq88=; b=g7nND1PjQ9wD9XeWJspCo3QVuJmVc5fe2c7Npa0as0MJt3vkRwy9C4VwnmpHXsgI47 nWfNSIz4XhQdCvOlX2FddeU0HDd5543UtxwRqn8yiwRrovNCK+tkHw377HBkFpP3j/Xa PDztO78pU7GjPN3xFZ7S666QbnBtKR3lAyXKsSlqrorEQ9C6nhcirJ4+1dGxTtyudJVf JZVQz7DCZXx9Rjs9aF9PJCOwxgKzTLpzdjLZD3K1TxSysAD9R8+gXRPpWZDDB5+8jYub ppbe7rtAfNd0Z0TqZvmKArYOOMgOIIiW1rFVe/FHaA1fkz3Po9zKWkSRNIDS4Gmeyo9v me4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789880365; x=1790485165; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=OYHqvApWBxaD4bUAOaE882+EY9mUZ0r309+FWLunq88=; b=1oc8yJMun7nZacnK7MazRPs29+Yhtwzptzd3KYvZn3Nnx9bOGu4pOaY+WDRdftukjD XLUIDBI16syP74LInw72NOTnIMWX2530f/UnRt5GIuprU9h/HenmtTe42d0UEbtIDZT4 1LCw5krWavj/oExQ6FlxEfy6pnJTp8y+9B5a97fRIXGkztrmFWC8ZVga7jM1aiInTS7/ qPzbebGNvEKV3Wwpxden4Hneb7EiTo1M7cFP5TkGhVwwfr2xY1oXpA3Bjig9Nhc9nYMu MHapCaAZ99lG3rWUEBxnFGlJUOuglWFY/t04Mwc7Xzch/Wjzog87jQ552jrnlWv5XNUi tV6Q== X-Forwarded-Encrypted: i=1; AKwUvBy+lfLHa6xKZnBKYBI5dEp0hyPw2/b5j36P9hG/TloBW82U+D7/7sMdjJYZpMRgJgDpec3C1KMBqe0B+A0=@vger.kernel.org X-Gm-Message-State: AFuF++kdOMYxJP6bCHOXlid0theW6T3F8Pbibgej9d5N4//7ojqVMdoC /a715NH2IFJX4QlgFBqflD6RVREL0ucZVWdgeSvomNa4h7sC4OU3F58a X-Gm-Gg: AYBFou23xibcqZiOy+wvBE9r5bfTxKcw/0pKm6kkxFSHVqRQQgIbPvhdz4l1BXaj1k/ Xev7VwbTKWPLdQoLdIQOoKaSFdgd3jia4S8VPOaBt8ZhvrtE4xFpUSdl+93NL8X6R8UtfAveKpP ezPZmq2zw6FenAeLfgdBvefgA+IV/ZKIp818z6KfKxIpWvT4C+eHhyOr4LWyrgmvS07usIANa7o JcMS/dG5eLG5rjQe/5490AFRNPbWavR3V2xJxJAFq1fBMB1MvUpPGIpcx5dFZOHJV9h6x9xA9dJ YQPJ+SPEI+C2dr9Lzrp1V6JxPQiY7BxFBVZkyRdHQiSrhoU89GzmsZ0bFpFzIDFVpflCmhP9v7S fhmrtX01jZ6VuXr91eshawU3xC4935XU7yUFQNIypW9BgR9mP7tNbJmiK2kOZW8dVA31RLdLxLI t03itDn55KEtl91+wiWBX+ZedKbfGFi5lUoHGPh5lGd98VyWxJYk+gjvh1IfY1KP7QJyrGsqx5V qL9S7GKSzJaiqfUenMIsrHIFEqeOnWQ3ds83HE2Hw9dJ2Rc9RE5rxC9gqRKQqd3UHjMUKafHG86 9N4e2LOFwwIjI1y3IMdYksB7sRwFCEWpWiM4yHWmKkonic4= X-Received: by 2002:a17:902:d4cb:b0:2dd:c053:e0f7 with SMTP id d9443c01a7336-2ddc053e14amr57727015ad.38.1789880364897; Sat, 19 Sep 2026 21:59:24 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ddc17d712dsm16026765ad.64.2026.09.19.21.59.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 21:59:24 -0700 (PDT) From: James Calligeros Date: Sun, 20 Sep 2026 14:54:07 +1000 Subject: [PATCH 28/28] arm64: dts: apple: t602x-j47x: Add speaker/headset jack nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260920-macaudio-v1-28-741cc20a74e5@gmail.com> References: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> In-Reply-To: <20260920-macaudio-v1-0-741cc20a74e5@gmail.com> To: =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sven Peter , Janne Grunau , Neal Gompa , David Rhodes , Richard Fitzgerald , Jaroslav Kysela , Takashi Iwai , Ulf Hansson , Amit Kucheria , "Rafael J. Wysocki" , Lars-Peter Clausen , Vinod Koul , Matthias Brugger , AngeloGioacchino Del Regno , Shenghao Ding , Kevin Lu , Baojun Xu , Sen Wang , James Calligeros , James Schulman Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, patches@opensource.cirrus.com, Takashi Iwai , linux-mediatek@lists.infradead.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2560; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=wZ33HmVJ/5Act5G23FfyEoldMO69+O+FCZBZLHA6YUE=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDFnr05VFbxtZ2sxO6rz5yvjZ5FtlffdnP/XfybTQ3vFf9 vQgWa01HRNZGMS4GCzFFFk2NAl5zDZiu9kvUrkXZg4rE8gQaZEGBiBgYeDLTcwrNdIx0jPVNtQz NNIx1jFi4OIUgKlebcbIsNF/880JArN/VbEXGrKU3y9d/+feZy3e5XYinUf3PvpbEcvwv3o111H 9zCXse1hj/pyY9fsPb83NyDkbHzH1O+07w70vhgkA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The M2 Pro/Max/Ultra Mac mini and Mac Studio integrate Apple-specific variants of the TI TAS2764 and Cirrus CS42L42. Add these nodes and advertise them to the machine driver via the sound node. Signed-off-by: James Calligeros --- .../arm64/boot/dts/apple/t6020-j474s.dts | 5 +++++ .../arm64/boot/dts/apple/t6021-j475c.dts | 5 +++++ .../arm64/boot/dts/apple/t6022-j475d.dts | 5 +++++ .../boot/dts/apple/t602x-j474-j475.dtsi | 10 ++++++++++ 4 files changed, 25 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t6020-j474s.dts b/arch/arm64/boot/dt= s/apple/t6020-j474s.dts index e3c2635d84fa..e79315b15f11 100644 --- a/arch/arm64/boot/dts/apple/t6020-j474s.dts +++ b/arch/arm64/boot/dts/apple/t6020-j474s.dts @@ -46,4 +46,9 @@ &pcie0 { <0x300 &pcie0_dart_3 1 1>; }; =20 +&sound { + compatible =3D "apple,j474-macaudio", "apple,j473-macaudio", "apple,macau= dio"; + model =3D "Mac Studio J473"; +}; + #include "hwmon-mini.dtsi" diff --git a/arch/arm64/boot/dts/apple/t6021-j475c.dts b/arch/arm64/boot/dt= s/apple/t6021-j475c.dts index 9fe17f1f7f59..8aecd23e0ac3 100644 --- a/arch/arm64/boot/dts/apple/t6021-j475c.dts +++ b/arch/arm64/boot/dts/apple/t6021-j475c.dts @@ -36,4 +36,9 @@ &pcie0_dart_1 { status =3D "okay"; }; =20 +&sound { + compatible =3D "apple,j475-macaudio", "apple,j375-macaudio", "apple,macau= dio"; + model =3D "Mac Studio J475"; +}; + #include "hwmon-fan-dual.dtsi" diff --git a/arch/arm64/boot/dts/apple/t6022-j475d.dts b/arch/arm64/boot/dt= s/apple/t6022-j475d.dts index 32938a3bf96a..91ba7c1d2612 100644 --- a/arch/arm64/boot/dts/apple/t6022-j475d.dts +++ b/arch/arm64/boot/dts/apple/t6022-j475d.dts @@ -73,3 +73,8 @@ &bluetooth0 { compatible =3D "pci14e4,5f72"; brcm,board-type =3D "apple,canary"; }; + +&sound { + compatible =3D "apple,j475-macaudio", "apple,j375-macaudio", "apple,macau= dio"; + model =3D "Mac Studio J475"; +}; diff --git a/arch/arm64/boot/dts/apple/t602x-j474-j475.dtsi b/arch/arm64/bo= ot/dts/apple/t602x-j474-j475.dtsi index 926bb4ab77af..7f1faefcf9bb 100644 --- a/arch/arm64/boot/dts/apple/t602x-j474-j475.dtsi +++ b/arch/arm64/boot/dts/apple/t602x-j474-j475.dtsi @@ -36,3 +36,13 @@ &hpm2 { &hpm3 { interrupts =3D <44 IRQ_TYPE_LEVEL_LOW>; }; + +&speaker { + interrupts-extended =3D <&pinctrl_ap 58 IRQ_TYPE_LEVEL_LOW>; + shutdown-gpios =3D <&pinctrl_ap 57 GPIO_ACTIVE_HIGH>; +}; + +&jack_codec { + interrupts-extended =3D <&pinctrl_ap 59 IRQ_TYPE_LEVEL_LOW>; + reset-gpios =3D <&pinctrl_nub 8 GPIO_ACTIVE_HIGH>; +}; --=20 2.55.0