From patchwork Sat Apr 5 23:15:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Calligeros X-Patchwork-Id: 14039255 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (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 B85F51A2541; Sat, 5 Apr 2025 23:15:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894940; cv=none; b=QJIvkxii0mXXPSGYQsEzccnkrasKODk554iv3Uk84GXEXdRWWqGDPDixDJ5tHnKaNwwJFyAlcrv/Hgb57Luy81fvtbV66YMw4CE1+/stL3crkkqGS3d1HcDuQ/KIknavK0GOurjG3dRHd41vHfdLhz1eCb9Myx6En/NzIkRnDMc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894940; c=relaxed/simple; bh=HqJUvE3cm056/al8IELSKt4YG1QY6I7o2vDGy5tCaZA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WhDkUukTZXqiPNrjFLG/kqOTx8rBymJp89tyCaIV193NsELXpBri/RlP3Kgu3rnt5cz1gy9UaY4BpkEVacAohC3oL2uCBIAHuQ1a3A6Yd3tvQ/xhEqwSc/VQgy83sNn7OqQ5xeWkYpeS2hxVk+difom3/ci0ECw3tmcgT7/C2aQ= 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=SeNe683I; arc=none smtp.client-ip=209.85.214.176 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="SeNe683I" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-227aaa82fafso27108195ad.2; Sat, 05 Apr 2025 16:15:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743894938; x=1744499738; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=/zT7z/HktyzmUzeS1R/jDHnCVkQulwygo5o6mh5iuzs=; b=SeNe683IHdxrYkSQwUNW8+MQA9S6LhlRi/ctCvxhnADqaN3KzGte9PEwgeOYvi1RQ1 Y4QzBkAPxRLpgIfihoibFAuJm5lxeo1jgF4HmJuDYE/3cUGKAcWqy8I3z9egZyer+0Bj IKBXylWOureMdVA8H4th7nDpxnkFGoqBxcBE+mxfNV1d2m465EJwvFE+cKQa+ilNLfRj Ny94q3w3nmo+XKbbaMAx33Nj7i7n0hJF3tU//hsrvjCWXGCM5fKxMNkCNmToj5gzfG1e atOWnsEs+hC4QTDHB3hQsf75ypzek5AMmHzymypMJpGFbRpm+T5okyWpbQqu48WnH0+k s46w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743894938; x=1744499738; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/zT7z/HktyzmUzeS1R/jDHnCVkQulwygo5o6mh5iuzs=; b=YWYiQWo7mcG+ZHMEHwK8q9bdPX2+L8RdmCyyb8LbUjplLECJPL29ykQCRzX6r0ZgeD OYy9b5nkPh3nQDuafc2ghSxXEIWc1ghJxvw+TvD+Tiuv25k8Ecdaj1lZM1IYtwBKlnp9 yclPNeTnk/1sgNBYpVw8BgFniQi99Nk8FWJRLFeo8eppDLOrg6u3Qq+OBmEmdw4zJ5AG iayNRwGr1wLv7Mg8PruHgWFblce7+FfgSjp1sORhqihfStWaRX1p17KMnZfZRGmpIf8z JG5+/eC4xE+M+gzcUy0X3jORvwSm2CxxiDVxzuPYDOoFnwa9OGDfQd7FHbXO2VBulY21 Vfug== X-Forwarded-Encrypted: i=1; AJvYcCUFGLjXPjCdZmrdzHxKZH2XfnHlF4R700jCFeYYdV00NDKeaVkwggFbPl4VLQBC3FOjWnIh73xesoWB@vger.kernel.org, AJvYcCUtfwctNHlWM75zaqNh+D20qJFyNqnSAzbYWA2VB8GIo5mfz1XeoI5BVJNZT+5qC1gGmBjVS33a+n8Fm4c=@vger.kernel.org, AJvYcCV4MYg9T1ScRDJ+2FQ6WIlAekDRkH+i6THtX+IcSXoiWLNt6REmLczm+8UEcI9e7CcITeze+UTCS9cOBuA=@vger.kernel.org, AJvYcCX6jJA9FhnODUUv4eHFesY7Ei7q93/QVYTg/aieYEDrf2jOz1wBlOxybla0daVFnXf5jDLkBzw4oDL25pyH@vger.kernel.org X-Gm-Message-State: AOJu0YxoYrSarWNNhviiYs0BlvpckYEbzeM4MoEBF3Bxy4TaRAm8cbbe Le6jM8BuGIXhZvfvRqUInJa9BM80MzLI2HwXdgOS+MD7piC7pLki X-Gm-Gg: ASbGncugiFKEojvbUY3FBeAQNf39KKjrb6VQpbegIIfU13MFCMl71bO6ahrT3WX9U3v DpjCk55YVT4hm1SP41cbs185a+0ky6pE3RZsFmbdfjK5P1orlA4XFmWTWaflidfI1pnMLk6HKKt qdp88ONUFKDIBSYGzM5G3DRTYdeRy36HrpZvSDfY3j5GiatAyzymTUTmyEr+ItK8S/WUmTUT49s w89ONbgcm91ijVwzFsNfigSXMEaRCavAvMlbLgH+67rmC1brk8IHtMlLL7JC7qZ52FCoRlish+x HYZWH2mF92qhPCAOleqhWx4vOnuKMm7vi+hmPwSNh8e8Hp/XhqUzYMW+8Ap1JcL8XdrHGSZZrfz EtJbfIew4fL1S9XAQKTH9RkJg4Xa4TaueUlmFsAo= X-Google-Smtp-Source: AGHT+IGRchoS/CucZE1tgNu5aAkMlUokbSk42txl/eCkLWISpt+NHELUlUL8kUdOf6jUGAiNHPSQzQ== X-Received: by 2002:a17:902:d4c4:b0:226:4764:1963 with SMTP id d9443c01a7336-22a8a1d6f93mr108621555ad.51.1743894937944; Sat, 05 Apr 2025 16:15:37 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-229785c994esm55048345ad.102.2025.04.05.16.15.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Apr 2025 16:15:37 -0700 (PDT) From: James Calligeros Date: Sun, 06 Apr 2025 09:15:05 +1000 Subject: [PATCH v5 1/8] ASoC: tas2770: Power cycle amp on ISENSE/VSENSE change Precedence: bulk X-Mailing-List: linux-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250406-apple-codec-changes-v5-1-50a00ec850a3@gmail.com> References: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> In-Reply-To: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> To: Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Shenghao Ding , Kevin Lu , Baojun Xu , Dan Murphy , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shi Fu , Jean Delvare , Guenter Roeck Cc: Alyssa Rosenzweig , =?utf-8?q?Martin_Povi=C5=A1er?= , Hector Martin , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, asahi@lists.linux.dev, linux-hwmon@vger.kernel.org, Neal Gompa , James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2687; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=PCUEqTWLJugE/p5yI6mH/FN1rmh28HR0YZQdpuB+rAk=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDOkfd3b2a/nYCfT0nL4YrvFb7HqT7zcR00neorqzFc8c+ Si8neFwRykLgxgXg6yYIsuGJiGP2UZsN/tFKvfCzGFlAhnCwMUpABNp4WBkuFtR9ji/W7hnX/7N 4rzy4K4L/d/NHNgW5RjWfD4hZVVQxchwOMtVzKTE+DmbivP2w5NW21VeLf7y8/zmCSv2+L+Yzaf HDgA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin The ISENSE/VSENSE blocks are only powered up when the amplifier transitions from shutdown to active. This means that if those controls are flipped on while the amplifier is already playing back audio, they will have no effect. Fix this by forcing a power cycle around transitions in those controls. Reviewed-by: Neal Gompa Signed-off-by: Hector Martin Signed-off-by: James Calligeros --- sound/soc/codecs/tas2770.c | 30 +++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/sound/soc/codecs/tas2770.c b/sound/soc/codecs/tas2770.c index 7f219df8be7046912bf3ef452f75c17b5118bcf6..8de7e94d4ba478aa9b705a81e7276bd005c8a18e 100644 --- a/sound/soc/codecs/tas2770.c +++ b/sound/soc/codecs/tas2770.c @@ -156,11 +156,37 @@ static const struct snd_kcontrol_new isense_switch = static const struct snd_kcontrol_new vsense_switch = SOC_DAPM_SINGLE("Switch", TAS2770_PWR_CTRL, 2, 1, 1); +static int sense_event(struct snd_soc_dapm_widget *w, + struct snd_kcontrol *kcontrol, int event) +{ + struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); + struct tas2770_priv *tas2770 = snd_soc_component_get_drvdata(component); + + /* + * Powering up ISENSE/VSENSE requires a trip through the shutdown state. + * Do that here to ensure that our changes are applied properly, otherwise + * we might end up with non-functional IVSENSE if playback started earlier, + * which would break software speaker protection. + */ + switch (event) { + case SND_SOC_DAPM_PRE_REG: + return snd_soc_component_update_bits(component, TAS2770_PWR_CTRL, + TAS2770_PWR_CTRL_MASK, + TAS2770_PWR_CTRL_SHUTDOWN); + case SND_SOC_DAPM_POST_REG: + return tas2770_update_pwr_ctrl(tas2770); + default: + return 0; + } +} + static const struct snd_soc_dapm_widget tas2770_dapm_widgets[] = { SND_SOC_DAPM_AIF_IN("ASI1", "ASI1 Playback", 0, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_MUX("ASI1 Sel", SND_SOC_NOPM, 0, 0, &tas2770_asi1_mux), - SND_SOC_DAPM_SWITCH("ISENSE", TAS2770_PWR_CTRL, 3, 1, &isense_switch), - SND_SOC_DAPM_SWITCH("VSENSE", TAS2770_PWR_CTRL, 2, 1, &vsense_switch), + SND_SOC_DAPM_SWITCH_E("ISENSE", TAS2770_PWR_CTRL, 3, 1, &isense_switch, + sense_event, SND_SOC_DAPM_PRE_REG | SND_SOC_DAPM_POST_REG), + SND_SOC_DAPM_SWITCH_E("VSENSE", TAS2770_PWR_CTRL, 2, 1, &vsense_switch, + sense_event, SND_SOC_DAPM_PRE_REG | SND_SOC_DAPM_POST_REG), SND_SOC_DAPM_DAC_E("DAC", NULL, SND_SOC_NOPM, 0, 0, tas2770_dac_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD), SND_SOC_DAPM_OUTPUT("OUT"), From patchwork Sat Apr 5 23:15:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Calligeros X-Patchwork-Id: 14039256 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (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 7D98E1DE4DC; Sat, 5 Apr 2025 23:15:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894948; cv=none; b=XVb4IKcevgxpmTJnytsLxFD33HBofEojDY9b/Op6O2g7Xki0P/eZsiv34NLfGPTUdmzsvhWf2FFNY+rer6rUFwUzynQu5jMVQdfTSvvcGv1o9zTByowY1FBYtOKlQQzlb+f2r9HdKhDc5g+HxzjcUq8Ml17wc1E9pDqzS2Hcnes= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894948; c=relaxed/simple; bh=/3vhqRp+rjiPGHeGrM8yyAU6vaDCJHkfWLO5hwwE4hA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mIry4wlbtuOQHgSYNQmiqMNVVmUfXdnuSDDOBY/HG+hEx4eBQ/XgPODsca6VUI/GPwSloSC3O66hqKFP2gNfDs7votv477+Pqap8EnWNJyGIxSvvyqq/MfN83RBJPL1BJwMrpU0MRfin06rqnxFUkw0xjEkRzs69TCrtPGTw42k= 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=TsEwGhqf; arc=none smtp.client-ip=209.85.214.178 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="TsEwGhqf" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-223fb0f619dso31051155ad.1; Sat, 05 Apr 2025 16:15:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743894946; x=1744499746; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=j+61GEBl1ZKDXz7eqvknnogiq5/rNWdXiMpBWTCFhnU=; b=TsEwGhqfif9mv4IDhvQsN9J1+bDgjNHQBPZ7dHK8vA8nHpS6c9AFdhWRU4LUS7GMTP ZR6i6wptBb1YtfpTQmQH2dnysEx7Wkirov88tgRaX+CezU7v5NWLF2HzXitXcFdBPDY5 Higw9o+hll5xR96Hh+Ygj0QyA3rzdduVxfTO5T9H/ZKa1N08UqIgClZWfHm6Sx9W35Pp EONMVszWB1s+3EIVfG97J9D4dlCgCYwUkcOLKRmdBO6oETYHVhGvJjdR4G8vMOs6gJd7 QN4PJ81E0t/NCZ026ZTWYt85tGZdlOr4uLg4xmWfQliVjuLasE5NrMoRbxMZrzInLrGy Cz/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743894946; x=1744499746; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=j+61GEBl1ZKDXz7eqvknnogiq5/rNWdXiMpBWTCFhnU=; b=lMTD7Wlrw5Mv60i0uQecvt8BOZaznsOO98BeZuJS3rIVKBOt+FeXMTSedo6tZoqTdZ 9jNwTw/kt+FJJuwvOyfNzEgI+LIYbsiajJnbp5UnT+GHviX9XS7Bfxwle7C2kbuEZ+pK gNvElZ8fj2PBVgOfXT+dQiM2H08TYJeRsvpTUOCyTQoyQpMiF6ypooMplD6MzuECwbxq jvZPngkvefDUs4nvHekqfQwuIBIhJp2vcH1jP/doZjHq3KAKezxJgWnYZGhc/RT5iCSM pRDZdbrGROwsIIPv+5lwJYc7TH2sj3nyWjkSzL7QLk4XY8bahktONfX8jv1QTSwjk4YL U24Q== X-Forwarded-Encrypted: i=1; AJvYcCVRxPYETzaewXWrh3gWrVpGlxWxZZAFMSIMhV/krqSxCSeOOeiPIDPvJh2lSccE21sjDXAtBba9RYr7ItY=@vger.kernel.org, AJvYcCWUv17D1+a7j8x1pNghGVY6DZ60hMbHkfsSy9XET+VLklUBfN2XwtmpG4jCgoMGfHpGeXd4PEUZaAjMyMgf@vger.kernel.org, AJvYcCWW2ekV+slK/GbuRVy3q6KSlamRkDPK+XM3/susDxH7kf4n+vIaTTpTC+0eq0IZmZjThQgXNu3vZEw3@vger.kernel.org, AJvYcCX8EuEUZaB9VS2VKlxyoSZrKBObp3qJoafgpdKd107vTcpsD+CRu+TSvJGyMRw7dwioNIIudkLWxbyJ/s8=@vger.kernel.org X-Gm-Message-State: AOJu0YzIYiBSltzOqEEXaLZOFBmgXAfhr7Xq542tkshIzn/2gdO4w1S+ aZVWYpj5cryMBE+3XkjijfXMM6Nc4jzE4Bz0LnPe4rXikH8VoilT X-Gm-Gg: ASbGncsGGhFDEJKzpG9hZ/Oag++mITQks1ke1WY1Igsuu/QSzNrh3pSomKenFvWnKtV Tk1tzxhXWoFwavqvQQ5GW4jfvQXfKbb3hWhaiqw+DwBwKUUKRPl8iSHumV7aVEoB7im0V5QCbcT ec900xLSJFfn+sL+D/rv5bNDQKpDIssyuLXRTFAezd0s5Y7IBJHTHZzAobgcDe5n1R7wTfrZ1bL NjCz1Tgw07VAdWgrPqTBKTBZdPNlsUEKRfX9lJ1QZdu8rR1w6w/pa8vMqYYPeOOZ4oTrDyi8Jbs IbZSmjegEKQ5/M5OFpmKaiKIJyUrY5AoArXbLXgQ+owbQaEnIYrCeHJDaXsmU+6fN4Vrb7RFO1b pPwkJmMWj775SLo4NBHLtOihUupFmtDiEGvghFm4= X-Google-Smtp-Source: AGHT+IEWO7gtti3PE85/TmgpHFUrQczmq00aBrD/xi0Nh7zI90sg0i8/SvZFs9lCaImsMEr/kuMdvA== X-Received: by 2002:a17:902:b282:b0:223:2630:6b82 with SMTP id d9443c01a7336-22a8a04a7b8mr86804555ad.10.1743894945695; Sat, 05 Apr 2025 16:15:45 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-229785c994esm55048345ad.102.2025.04.05.16.15.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Apr 2025 16:15:45 -0700 (PDT) From: James Calligeros Date: Sun, 06 Apr 2025 09:15:06 +1000 Subject: [PATCH v5 2/8] ASoC: tas2770: Support setting the PDM TX slot Precedence: bulk X-Mailing-List: linux-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250406-apple-codec-changes-v5-2-50a00ec850a3@gmail.com> References: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> In-Reply-To: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> To: Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Shenghao Ding , Kevin Lu , Baojun Xu , Dan Murphy , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shi Fu , Jean Delvare , Guenter Roeck Cc: Alyssa Rosenzweig , =?utf-8?q?Martin_Povi=C5=A1er?= , Hector Martin , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, asahi@lists.linux.dev, linux-hwmon@vger.kernel.org, Neal Gompa , James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4896; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=EUPivI1e5lG/Ctwi0iED8gK1+8hCsJ53czJp1dml81s=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDOkfd3ZOdpt7o/3wE23mHGVBx8uKt2Jv7Dq6+3aB+gZvz 3lBi/dc7ShlYRDjYpAVU2TZ0CTkMduI7Wa/SOVemDmsTCBDGLg4BWAitecZGQ5/W2WufKP7qe+n tyulhFJVnvq8tb0/eW11E/dn7cX9y1IY/rsVX5Qua/Gs2Z3kLqg4penmsoXn+tfumr6KoXJO3mQ JR04A X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin We don't actually support configuring the PDM input right now. Rather, this is useful as a hack. On Apple Silicon machines, amps are split between two I2S buses which are logically ANDed internally at the SoC. Odd and even slot groups are driven by amps on either bus respectively. Since the signals are ANDed, unused slot groups must be driven as zero to avoid corrupting the data from the other side. On most recent machines (TAS2764-based), this is accomplished using the "SDOUT zero mask" feature of that chip. Unfortunately, TAS2770 does not support this. It does support zeroing out *all* unused slots, which works well for machines with a single amp per I2S bus. That is all, except one. The 13" M1 MacBook Pro is the only machine using TAS2770 and two amps per I2S bus: L Bus: SPK0I SPK0V Hi-Z Hi-Z SPK2I SPK2V Hi-Z Hi-Z R Bus: Hi-Z Hi-Z SPK1I SPK2V Hi-Z Hi-Z SPK3I SPK3V To ensure uncorrupted data, we need to force all the Hi-Z periods to zero. We cannot use the "force all zero" feature, as that would cause a bus conflict between both amps. We can use the pull-down feature, but that leaves a few bits of garbage on the trailing edge of the speaker data, since the pull-down is weak. This is where the PDM transmit feature comes in. With PDM grounded and disabled (the default state), the PDM slot is transmitted as all zeroes. We can use that to force a zero 16-bit slot after the voltage data for each speaker, cleaning it up. Then the pull-down ensures the line stays low for the subsequent slot: L Bus: SPK0I SPK0V PDM0 PulDn SPK2I SPK2V PDM0 PulDn R Bus: PDM0 PulDn SPK1I SPK2V PDM0 PulDn SPK3I SPK3V Yes, this is a horrible hack, but it beats adding dummy slots that would be visible to the userspace capture side. There may be some other way to fix the logical AND behavior on the MCA side... that would make this unnecessary. ("How does Apple deal with this"? - they don't, macOS does not use IVSENSE on TAS2770 machines even though it's physically wired up, but we want to do so on Linux.) Reviewed-by: Neal Gompa Signed-off-by: Hector Martin Signed-off-by: James Calligeros --- sound/soc/codecs/tas2770.c | 25 +++++++++++++++++++++++++ sound/soc/codecs/tas2770.h | 6 ++++++ 2 files changed, 31 insertions(+) diff --git a/sound/soc/codecs/tas2770.c b/sound/soc/codecs/tas2770.c index 8de7e94d4ba478aa9b705a81e7276bd005c8a18e..55e4723044044338bd941763240d24ccfef6e8f3 100644 --- a/sound/soc/codecs/tas2770.c +++ b/sound/soc/codecs/tas2770.c @@ -240,6 +240,19 @@ static int tas2770_set_ivsense_transmit(struct tas2770_priv *tas2770, return 0; } +static int tas2770_set_pdm_transmit(struct tas2770_priv *tas2770, int slot) +{ + struct snd_soc_component *component = tas2770->component; + int ret; + + ret = snd_soc_component_update_bits(component, TAS2770_TDM_CFG_REG7, + TAS2770_TDM_CFG_REG7_PDM_MASK | + TAS2770_TDM_CFG_REG7_50_MASK, + TAS2770_TDM_CFG_REG7_PDM_ENABLE | + slot); + return ret; +} + static int tas2770_set_bitwidth(struct tas2770_priv *tas2770, int bitwidth) { int ret; @@ -543,6 +556,13 @@ static int tas2770_codec_probe(struct snd_soc_component *component) return ret; } + if (tas2770->pdm_slot != -1) { + ret = tas2770_set_pdm_transmit(tas2770, tas2770->pdm_slot); + + if (ret < 0) + return ret; + } + return 0; } @@ -682,6 +702,11 @@ static int tas2770_parse_dt(struct device *dev, struct tas2770_priv *tas2770) tas2770->v_sense_slot = -1; } + rc = fwnode_property_read_u32(dev->fwnode, "ti,pdm-slot-no", + &tas2770->pdm_slot); + if (rc) + tas2770->pdm_slot = -1; + tas2770->sdz_gpio = devm_gpiod_get_optional(dev, "shutdown", GPIOD_OUT_HIGH); if (IS_ERR(tas2770->sdz_gpio)) { if (PTR_ERR(tas2770->sdz_gpio) == -EPROBE_DEFER) diff --git a/sound/soc/codecs/tas2770.h b/sound/soc/codecs/tas2770.h index f75f40781ab136cccbe1c272f7129ddd3e4a22a3..3fd2e7003c50b6a4bae2d86681e9219b5a244a11 100644 --- a/sound/soc/codecs/tas2770.h +++ b/sound/soc/codecs/tas2770.h @@ -77,6 +77,11 @@ #define TAS2770_TDM_CFG_REG6_ISNS_MASK BIT(6) #define TAS2770_TDM_CFG_REG6_ISNS_ENABLE BIT(6) #define TAS2770_TDM_CFG_REG6_50_MASK GENMASK(5, 0) + /* TDM Configuration Reg10 */ +#define TAS2770_TDM_CFG_REG7 TAS2770_REG(0X0, 0x11) +#define TAS2770_TDM_CFG_REG7_PDM_MASK BIT(6) +#define TAS2770_TDM_CFG_REG7_PDM_ENABLE BIT(6) +#define TAS2770_TDM_CFG_REG7_50_MASK GENMASK(5, 0) /* Brown Out Prevention Reg0 */ #define TAS2770_BO_PRV_REG0 TAS2770_REG(0X0, 0x1B) /* Interrupt MASK Reg0 */ @@ -138,6 +143,7 @@ struct tas2770_priv { struct device *dev; int v_sense_slot; int i_sense_slot; + int pdm_slot; bool dac_powered; bool unmuted; }; From patchwork Sat Apr 5 23:15:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: James Calligeros X-Patchwork-Id: 14039257 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.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 2B77F1C8625; Sat, 5 Apr 2025 23:15:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894955; cv=none; b=e+h2vh3rlsn6lOCieak/Q0mMAB33Iq1IYfKWCVonURY/6NWo647Qk2Ly23CcoRW0Piiyb1nrNRBj05AWNX8oltMNckf6SJVX1AmKEhscVI7lF6G9IFFBmcLn0uwdchI4KBKtykos+Ge3XGNEf0SODsefR6RfBGYOHJYuS1cCCHE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894955; c=relaxed/simple; bh=TCm6ICnn4hWfWQL4sbSAXGwOU0wyVtdYiBPxab6jEBM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=h41Kg+C3ORceul7FwgmmVvmdOZUE80APxHbaSw0eomJUuI7x6hmDybozK5JHUve0E8NlDUQl51Bsirda8wt2AgQhcMzArS4xLrnOdxc7ZOHwyB+vTo8sawzzVjRmGXvsylqyOeaVEb1lm+UqzlQPcHPac7rES/l4vxUxWSqOCwk= 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=abjYjqr4; arc=none smtp.client-ip=209.85.214.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="abjYjqr4" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-22438c356c8so31207995ad.1; Sat, 05 Apr 2025 16:15:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743894953; x=1744499753; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=oK2/ZeW8ANllKk46FkJuUv+WaiUUGbjs5ATKiMs/AJs=; b=abjYjqr4+qv+ux8BTd8RTK9zbmj3Yp2dUdyx6RdYaAL3672CjDjBbt6pELim/OZ9GK H9SduanlkdKdtlj/8DVBkX5aVyAOcWF9YsZx7jYwIM7bnXUvSWfSXwY3tT3tsQFm0BIy /P7EMo/g4Of0z2NFKGEZkiE+/JuUcRqz6RWkMzzcsqtMc/UIyYZ9PBxzjEIBEGljYR2X G8iB89gEWq5ALth1ldQecl0Grz+wijNwaxuz1bsIQiIZFfVudfTxGMd5JdCdva/GPUJZ kXgmKiG/5HqcsKmlawxE1NDgrKtp5iQvDKxh6jy/yps7OsfG7rEP2itA4iEeKsChyCOf lXRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743894953; x=1744499753; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oK2/ZeW8ANllKk46FkJuUv+WaiUUGbjs5ATKiMs/AJs=; b=S+wkUkk3zRSux+g0yENYfcZdsN5PBjrIndC/Wstdct4Q7wCZRaoyHzqEpbEo7h95FM DJOnJUwXxFsgcYwWwhEijm5ptm0efzdSlBLaciirXOSKUlFEFIKn6FO1M4IzxD6jsWAW tEPMWpHPmXGEBITGkBmEKuITpi0QSCyRu0XmNW79GwsSEKP/+u/4+OzNedmdjb28Nhcp y/UoQqSdiS1Df1sOJobkp3o+uqjyhbz/awZxoS7pzyqW0RESD+l2daTfGJ9wqCrv7R5Y j1jjMkcsWykTteNq9HjvdsnJ+cV6zfJRq76erw8HgQ7fiXPerc4ukhXOGEVtoDmgktNJ 627A== X-Forwarded-Encrypted: i=1; AJvYcCUFW2DYjBIOLlMvZ457mykpEP8TKCzOukLP2JHnn9cJLhEyR03KPu73mfLeP92Inb7P9YKL/tdEclUYa9c=@vger.kernel.org, AJvYcCUjPQLuKhvKHgUDR0kPPZneaAJow8Eoy82Z3JMO59Kslhnu7R/Ehwp9BQJkqSMALUnJntsFxpKcKNdu@vger.kernel.org, AJvYcCXJMhTPkyuR5ivFEsb1xvSjZxoryBJ8A+SD6YgzAW8gf4kxZhZhRlkTII5wNO0rG/K8eMkoBuBjliIRw2Ij@vger.kernel.org, AJvYcCXQ/pov/UYItt/HmvAvsbUmFqmYXeFtwY29WHji6IFh3q88XrQ/h1hNcsrmKSlxD1gP8T+8R/YVicjkQ2o=@vger.kernel.org X-Gm-Message-State: AOJu0YwU9fbjpOfO0u3+6fypeFzlIYsu1+YaVB8IO8zTxV/xzvnNUBQ3 tcXg5pwWCIsKqJczDFXnCFkleL+EhHtX7ZaIwDFUlbeC8OmuHYfw X-Gm-Gg: ASbGncupsRrK8RF20ck3CnX2KZNsVtcEFOX+14+7UmULYMIN63PkjwnYf2X33Lqk6tx HX7rg+DYENEqw+E/1dr0xHp240tFmFHPteTY34KqOAmVsbxboI4uIaGsLV+1Dsy1jcX6kqK6Hac n7STDYWdXaJrFDbodV3+NJ2Chh78Ni5r9UcEZwNHd4qag15n75hHNTZZIvM+kR24CY9UXVXvRW8 GL9EhEXOFmCYZ0nmuoesG15Neb6SDMvL0CCqtAfcwA/5C80LS34D79k+d93vP7yU5GFVn7WuYtN SV9m1IHqeuHrSO/uS83F8pGdQF2JaEz8p4CABQyVAVTZY17y7C0Dn4NdjmIOG7ENAFcCQTijmxD tzQ/D6m8HhxlL0mx0v8jE3iV/PdF4h9mRciYAVN8= X-Google-Smtp-Source: AGHT+IGRLt/UgytCUZ6RX0b6+stfUBPUHZ9HiQpm2F23F9DZ8bIT2TMqzECkL+Le43z/TyHUlcvc4Q== X-Received: by 2002:a17:902:d591:b0:227:ac2a:1dd6 with SMTP id d9443c01a7336-22a8a87a6c3mr128550555ad.24.1743894953445; Sat, 05 Apr 2025 16:15:53 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-229785c994esm55048345ad.102.2025.04.05.16.15.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Apr 2025 16:15:53 -0700 (PDT) From: James Calligeros Date: Sun, 06 Apr 2025 09:15:07 +1000 Subject: [PATCH v5 3/8] ASoC: tas2764: Reinit cache on part reset Precedence: bulk X-Mailing-List: linux-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250406-apple-codec-changes-v5-3-50a00ec850a3@gmail.com> References: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> In-Reply-To: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> To: Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Shenghao Ding , Kevin Lu , Baojun Xu , Dan Murphy , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shi Fu , Jean Delvare , Guenter Roeck Cc: Alyssa Rosenzweig , =?utf-8?q?Martin_Povi=C5=A1er?= , Hector Martin , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, asahi@lists.linux.dev, linux-hwmon@vger.kernel.org, Neal Gompa , James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1447; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=9m3wSRyoGMFtfeJA0LTHIxypfZ4C2ZJU7xKp8v385vM=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDOkfd3ZGaMRzKhobM5hK2/K/OhG9R4XnhOwW3x17nTqT1 F6mxDt1lLIwiHExyIopsmxoEvKYbcR2s1+kci/MHFYmkCEMXJwCMJHfDYwM7163amy8WcL7vaZ/ 4QFb2/3vI37NYr33/dyZsGhL2YTCXYwMs6VtfI/fvqHIZnlaRLOm6ojuoXDtS3Ghss9nTg0sfab AAwA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povišer When the part is reset in component_probe, do not forget to reinit the regcache, otherwise the cache can get out of sync with the part's actual state. This fix is similar to commit 0a0342ede303 ("ASoC: tas2770: Reinit regcache on reset") which concerned the tas2770 driver. Fixes: 827ed8a0fa50 ("ASoC: tas2764: Add the driver for the TAS2764") Reviewed-by: Neal Gompa Signed-off-by: Martin Povišer Signed-off-by: James Calligeros --- sound/soc/codecs/tas2764.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sound/soc/codecs/tas2764.c b/sound/soc/codecs/tas2764.c index 08aa7ee34256896915f3ed6438b8b8827ce240c7..49b73b74b2d9dd6d09747cabc2b00519c549775d 100644 --- a/sound/soc/codecs/tas2764.c +++ b/sound/soc/codecs/tas2764.c @@ -546,6 +546,8 @@ static uint8_t sn012776_bop_presets[] = { 0x06, 0x3e, 0x37, 0x30, 0xff, 0xe6 }; +static const struct regmap_config tas2764_i2c_regmap; + static int tas2764_codec_probe(struct snd_soc_component *component) { struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component); @@ -559,6 +561,7 @@ static int tas2764_codec_probe(struct snd_soc_component *component) } tas2764_reset(tas2764); + regmap_reinit_cache(tas2764->regmap, &tas2764_i2c_regmap); if (tas2764->irq) { ret = snd_soc_component_write(tas2764->component, TAS2764_INT_MASK0, 0xff); From patchwork Sat Apr 5 23:15:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Calligeros X-Patchwork-Id: 14039258 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (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 20E9B1C8625; Sat, 5 Apr 2025 23:16:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894963; cv=none; b=n+2W9/T6WtyEyY8bveM2O3nnHJVEGcehmjY5EDtol7u1tiJrhEOu5ztcBJb6L4AZevPquIw2KDLbL3hyG5o5e4SF/woPgFqaPBKZYq+Q628s92k/06+K5tlZgjC6HvRv+bEQtPK5xXCn6f/cxxowIeQalNAkoWNI1+DdHD2DiA8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894963; c=relaxed/simple; bh=NKoEg61ykul7LJA/d5/4y5aypypGyjWZZdHNgsP/B1E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ArN87vdHIHq8LSEPzZL1GQChWVM/66cYXADQC5BmXLQcc/l6qysYMSjYPmI/OTLC9nTs7CLXOBLr0g/qds5Uskjy4OCqpWf8UoPBh4Cd4SRk72B72fZobW57D8Ba4w7bijW91MvkesBJMycIzF2+wpzorz02yE7OPXGYMrtSxd8= 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=Vn77f0K4; arc=none smtp.client-ip=209.85.214.177 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="Vn77f0K4" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-22548a28d0cso43275665ad.3; Sat, 05 Apr 2025 16:16:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743894961; x=1744499761; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=sZwEITRysV/CTBC7Bt4CSH8RxtTe6q6jNA5tekEdNXE=; b=Vn77f0K48xkUHwMxFhiG4BVpcyN0VqVEBm7XovVJ4phXvjN4PWNUcPtmCBMEaTnJzB 1cQHiF7/6/GlPl59m9uGU7f1rRaC4l06pFy7TDxt4lNehekvuqo/dfgLLdVD3QvjKWpg /K5jbHTQK9p4o0cGftLz25hlvY79RpIRWpiNDcoyQ8uNGvMOMhTUXU5RGbxTeQNNqKoS /qbYdt0QbV7kQ9BxnKbR9pghoCS+B7gWY3i3OSXbD8aCPydh6jKSkXWpvmCg8KDWPp/p 8MBegG+DhqN17dvIOTj3seC89cG22q3p4W78OZ5CdcyEPRnSjjJgFCyAKX73Dym/60YK 7EDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743894961; x=1744499761; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sZwEITRysV/CTBC7Bt4CSH8RxtTe6q6jNA5tekEdNXE=; b=X+XRdvsVZKBjrHkFZPDC4EkIEUFYFfTs7XSGGuP52GLtl/4hKxpzV8q/3sn9v/HSf0 zsKGzspdYZLcHT/eIaKeDNg7YN6dUxszEfNwh0TDXpBCwy2YjJf2oz1qlGXs7TZKrWIP 8t6ULU29pG8/ldaO2gd6aAdx+kdQVmXSgBWDeMaXozgpa3oAK5t75vRaJbYkVYOOMp9h hjeik5qVN4PP/MRscQT+QvUiKCCpAc4MiGAhHFU1x4zx1KW8SNffeN3cYksuLiGBytNm Hfl5nhjXwNPdTFuDHlRNDOLnV0cwpF/wmeDNm9U6cjykH/1NBQ6Hjh5IJfuK8P3TYcvt 3+rg== X-Forwarded-Encrypted: i=1; AJvYcCU8OkveufJQSYsAGoBEI++4cmSmp4Ve+mhX6tb4pXvTHzP6oGA3iO3wahhkTFpLC32O5QrD60K1zPeQ5bA=@vger.kernel.org, AJvYcCVxRRazha+eGQQlC1EG44CM0PFqrZPkuYT+CZGJTSQpFC3zp39VmO5Y0Wb+2pdBhCt6eFrpy9JtittT@vger.kernel.org, AJvYcCWwWgPq/UGSHM6Nr8IRfyfUyL1NvStElfVOuPYahRG5fkZi2nWs1hhPLrGPlcQcV7W/V0QMLY1spPnq/Xn/@vger.kernel.org, AJvYcCXYbmS0SW/hhIVKhopVLrwBotfyCNJyIBcH/Dl2BuXa/mnfeHXS/QiWkD29uSSu6pBokDVzC1fRVjibsbk=@vger.kernel.org X-Gm-Message-State: AOJu0Yxkm6h3zKqWC+JdPGn4ByWvqcJ+l3rsGKkZC4XMSKo9QaA6zLPC 3UBCexWU1W2As7TkBOWkgzqP68VJZK1nF//5DltjSzpuumn0THti X-Gm-Gg: ASbGncvHee93SsFwwugdTStyrTbYYxU+ZyLiEIrBFBf44lE289b+hBbjF29apGkVXKL h6pQTkwbztObWdVsb9vFF6Y8j9/45NcyOLGdQ2nlYeuNnEKcsIjctgdw0Gnr5UdK3msxmfkh2wm dUNsx997+4ersy5dJdn/HRpb1H89z32V4lxLBGu019ihMRycv1+UynIdEH5I7mQsYF3JgMZZ5FX 9Efa2K05HShbns4zCyARbKS9fL3Y0WXlM/gU7eiDM3phcDtQGCyOlYs567uEpkVP9HZ7ukoDfxX I/JJsimHh6DJ4MP8tcD+lD172LrNXvPNvwGKOPG2/7IIyGmX6L3NAcuCOmNkpxnr/Ghw7E7NJZq 0OnlV6d2Ngo08uVtsIA1usQh+c56i7djlPFp5caY= X-Google-Smtp-Source: AGHT+IGG750Fc5A1dfFEEYjJ56maIziG5tfTLYOevsCGnu8/cR4+rqBu5vubN9qrUcKUfYucyYwy6A== X-Received: by 2002:a17:902:e749:b0:224:13a4:d61e with SMTP id d9443c01a7336-22a8a8d31e9mr97517265ad.51.1743894961245; Sat, 05 Apr 2025 16:16:01 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-229785c994esm55048345ad.102.2025.04.05.16.15.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Apr 2025 16:16:00 -0700 (PDT) From: James Calligeros Date: Sun, 06 Apr 2025 09:15:08 +1000 Subject: [PATCH v5 4/8] ASoC: tas2764: Enable main IRQs Precedence: bulk X-Mailing-List: linux-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250406-apple-codec-changes-v5-4-50a00ec850a3@gmail.com> References: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> In-Reply-To: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> To: Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Shenghao Ding , Kevin Lu , Baojun Xu , Dan Murphy , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shi Fu , Jean Delvare , Guenter Roeck Cc: Alyssa Rosenzweig , =?utf-8?q?Martin_Povi=C5=A1er?= , Hector Martin , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, asahi@lists.linux.dev, linux-hwmon@vger.kernel.org, Neal Gompa , James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1198; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=6OJDDX1zkNT36kN5P3XhHJr3KCVfmEmqMN+HbJKjHZM=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDOkfd3aKtaodXv3ySvGhU6ULUheHG07gmXKwZkW+i/WN8 C+eK4QPdZSwMIhxMciKKbJsaBLymG3EdrNfpHIvzBxWJpAhDFycAjCRK92MDD+jvfrfzDRcP+Gg 0T75Ak+/Z6tfxOyY06+XsPUkl/4v/W8M32ubVzMtvhl5g72T6/GpqQ1C579M9eiUCZyoMc2i75c XIwA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin IRQ handling was added in commit dae191fb957f ("ASoC: tas2764: Add IRQ handling") however that same commit masks all interrupts coming from the chip. Unmask the "main" interrupts so that we can see and deal with a number of errors including clock, voltage, and current. Fixes: dae191fb957f ("ASoC: tas2764: Add IRQ handling") Reviewed-by: Neal Gompa Signed-off-by: Hector Martin Signed-off-by: James Calligeros --- sound/soc/codecs/tas2764.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/soc/codecs/tas2764.c b/sound/soc/codecs/tas2764.c index 49b73b74b2d9dd6d09747cabc2b00519c549775d..fbfe4d032df7b26b7db0f7c7dcb47661277006d0 100644 --- a/sound/soc/codecs/tas2764.c +++ b/sound/soc/codecs/tas2764.c @@ -564,7 +564,7 @@ static int tas2764_codec_probe(struct snd_soc_component *component) regmap_reinit_cache(tas2764->regmap, &tas2764_i2c_regmap); if (tas2764->irq) { - ret = snd_soc_component_write(tas2764->component, TAS2764_INT_MASK0, 0xff); + ret = snd_soc_component_write(tas2764->component, TAS2764_INT_MASK0, 0x00); if (ret < 0) return ret; From patchwork Sat Apr 5 23:15:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: James Calligeros X-Patchwork-Id: 14039259 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (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 096221DEFFD; Sat, 5 Apr 2025 23:16:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894971; cv=none; b=jjYQmSP4NJadciC+GtPdB5HoJM9JnYiiWZK13IwqqvzIvDNrFQd0VRRBwzAewnCDJqXtszJrK/2xPqwXuOOvBSdcw/gKXYlKNg7Eh4RMMvkAJkjU/zg2e8Y8k7iy8z3aY/Kb5H3/LsONn5uYv3kscARusUWOuYqWMOSiWIzt4k0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894971; c=relaxed/simple; bh=G51hIuSMcs69fsP3kxPgPSB+sadxSZFQ9IDE7EICSys=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IeBTV4lw5wMg0cTdm8E98AFSrt1J9or6P97z8dfDNc0Kv/7vPg4EzVIjvY0KBp4ibKDYrEa/eBccAWTbZ7m1gZRfACYb7oxj9h1CVdSUGWqYlRZFv4Z3IgRlXY1vlazZhrk9QdYE2s2vBLccroN7FLVc7qj6wRIuwge1bBdvsVk= 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=Ailz/rRF; arc=none smtp.client-ip=209.85.214.180 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="Ailz/rRF" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-22928d629faso31514275ad.3; Sat, 05 Apr 2025 16:16:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743894969; x=1744499769; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=xXyMsWo9eIJUoUgRuYRDp4l/Hr3tALUSH8In3QapG74=; b=Ailz/rRF8pvbcvNssQ2+1gVDR1iHMK+TQIOpvbuOYIwQPMMk4ZmY5ua4fzi8D1n7bj 6tQbh4p5/2QUn2SFMgkLCsAq2vUI//8p86UpHPLUgezf0px+ojUKL2VN/JKWgpNacWfM zyfRELN+YuQYUlTD32awJstudZpcY57eFODPqMAWkYzbjTt/wykG9+WJbgDv4wTMlo4R rnmtF7pi3yp9Vf2ivgbBZOZCnH/HIPEK7flDjhjOnv7i67ZpXGgAcf3fi6Asl3b/93Xi STGWSuTfBwvh3MJKbd0xmrC3V4mFcqLCHTppGyh/P6xKkNQsBSFqikDsLFiymlD3xX4j L4bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743894969; x=1744499769; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xXyMsWo9eIJUoUgRuYRDp4l/Hr3tALUSH8In3QapG74=; b=NlC6f3vCqJfKpXMv8UI1SZunMlJSL7+WnZfq/BtL5ClpLOd7gLFpnjsVzFSxVN2cCH dZThxqhyZttyBqOmKxy2FoYDn5ngYJmALd9ZrpqtmtZCYlgQtT5ZByO5JpXcZzCTkUHK k4Z2DBymsWBol8ujeqLb5bRbsEO9umsNa9xenhF2gRjzRaOCkcGGvWDLgShHHogQUot/ 5mW05hD/6p3ApmXl1wiX8a6cpNah54qAE3YMBYyEXs4jU9jQ+M73elHMWHEkJmGbjCRP TBvZpB/qpKvVEQbOxjG2VM9EEJg1bbyCW/AUPfDyvZmu3A50DDj6DDvuDxeZZTXZtalP uHtg== X-Forwarded-Encrypted: i=1; AJvYcCVMzUbsqafS9yly7/l20XKJ/k0VRtw7XI8Ap+HP4VVWa1x7kAS6VZjBgu+rJZGk6D6uZDJfSVK6dTv610Q=@vger.kernel.org, AJvYcCVPnfgxYy1+E/bmbhCw+1F/xgKfJ0lDq8bHhK3ZKwAWv9LVU2mi8ZIu8eOanhJeokSTFtaecOhqJ7f1KV4=@vger.kernel.org, AJvYcCVmMPa/f6ZQkGI/2gxQ88zh5hWTL0BNTkHGHhZJZ3keoPoi2v32ommXC4oFDf0s6W1IxwQ7j0DMtIw4@vger.kernel.org, AJvYcCXp1UjCk24Lf2IcL9zKGIc/ap0uPxm+T3X5CghQXPgn0XL734DsMDKjxLB1Jh9hxUjKjZDynukiBDPgKAMx@vger.kernel.org X-Gm-Message-State: AOJu0YwnD5W/vXNu4oQcNS8Tk0eql1+swA1sXhFJWRIXVDt2wCQ2Sf3y waAYBr4EHEd+7jmoYu/R7WAigWgu9RRA5QuvL5ea+f6EBh5eQF4j X-Gm-Gg: ASbGncsd1xkQyLplV+LCHcrUFKbAYBH68sKe+CHjzOsLOhnzP32J+1tVRLvEVJEoXvQ 95GXsrvZtRuMyQYKawMdT0s1MufVVFbnaFb/o1jq/jlQkEJXP9G2i3KWCX8DxjlGj4N631T/vF1 WGyNdFiwqh+1+FH8EjGpa6p+o2RE85sjiVS8Fm4Q0QN5sOQLKzvsS+fdNU1Cw7hO+M4YNRvX71X nERXa/yAcKnnewrc0xM/8xuoZZVZ7uLjyBxn46In7OyzWgsGsmBGomcM6z7dJTHlPWaDDsRhrxD 5515B78mx73Y8adNbOQpA1ctGCDurpRKenqxrwpFZMNUpRbsE84/UBPlkPkJWfqHamhTwHqqXtY 1b11ViE14L4+OQaLUjTJgM75oEC0U34QXfomMjuw= X-Google-Smtp-Source: AGHT+IGbdDbLX7GMJybw19Iq4WA9iEwsbs7vDxezKzZjWqipK1/2AdnNvQpSyC83p7AGfjOjuLJpLg== X-Received: by 2002:a17:902:f785:b0:220:e362:9b1a with SMTP id d9443c01a7336-22a8a8739d7mr119941375ad.25.1743894968944; Sat, 05 Apr 2025 16:16:08 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-229785c994esm55048345ad.102.2025.04.05.16.16.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Apr 2025 16:16:08 -0700 (PDT) From: James Calligeros Date: Sun, 06 Apr 2025 09:15:09 +1000 Subject: [PATCH v5 5/8] ASoC: tas2764: Raise regmap range maximum Precedence: bulk X-Mailing-List: linux-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250406-apple-codec-changes-v5-5-50a00ec850a3@gmail.com> References: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> In-Reply-To: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> To: Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Shenghao Ding , Kevin Lu , Baojun Xu , Dan Murphy , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shi Fu , Jean Delvare , Guenter Roeck Cc: Alyssa Rosenzweig , =?utf-8?q?Martin_Povi=C5=A1er?= , Hector Martin , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, asahi@lists.linux.dev, linux-hwmon@vger.kernel.org, Neal Gompa , James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1379; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=C804f2ztTqLQ4FxnFPpz1XJ4BtyjpL3h2sURrICRQ10=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDOkfd3bWd2jotr13VtjPycPyxXG7/ZQ2wY+hPL0HWlr4N xWJpP7sKGVhEONikBVTZNnQJOQx24jtZr9I5V6YOaxMIEMYuDgFYCJzDzD8FT2wN8RzCuNOFaEJ Hx5n3H+ySGLK7T2vtzXsYj3u/6yO15iR4ZDNhbi1MtcvxVqrmMXWdAcZ3axgNcq2nK+ycMHp03o l/AA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povišer TAS2764 has a number of undocumented registers between page 0xf0 and 0xff. These are used to apply in-silicon quirks and workarounds at runtime. Raise the regmap max register to 0xffff to cover any quirks registers. Reviewed-by: Neal Gompa Signed-off-by: Martin Povišer Signed-off-by: James Calligeros --- sound/soc/codecs/tas2764.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sound/soc/codecs/tas2764.c b/sound/soc/codecs/tas2764.c index fbfe4d032df7b26b7db0f7c7dcb47661277006d0..718107fce3bcf6ef081f6fced7b89c708518b1a5 100644 --- a/sound/soc/codecs/tas2764.c +++ b/sound/soc/codecs/tas2764.c @@ -685,7 +685,7 @@ static const struct reg_default tas2764_reg_defaults[] = { static const struct regmap_range_cfg tas2764_regmap_ranges[] = { { .range_min = 0, - .range_max = 1 * 128, + .range_max = 0xffff, .selector_reg = TAS2764_PAGE, .selector_mask = 0xff, .selector_shift = 0, @@ -715,7 +715,7 @@ static const struct regmap_config tas2764_i2c_regmap = { .cache_type = REGCACHE_RBTREE, .ranges = tas2764_regmap_ranges, .num_ranges = ARRAY_SIZE(tas2764_regmap_ranges), - .max_register = 1 * 128, + .max_register = 0xffff, }; static int tas2764_parse_dt(struct device *dev, struct tas2764_priv *tas2764) From patchwork Sat Apr 5 23:15:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: James Calligeros X-Patchwork-Id: 14039260 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (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 792FF1DE4DC; Sat, 5 Apr 2025 23:16:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894979; cv=none; b=GXmTDtrqSpyzgjXXD6CCi7Abuvxdkxwzf3Yefgy1eP3zBYooQ92g9a4TNr/Eer8vnolsJ0d9ASCvlv8DlXGSWFzAf5YtSGXevfA3jy2kqrZ/dEp4FJiSidIHvfUm5xwlUxVvYlPjPkwcUw13IucVYmE67kLtNaH2MPDJlkqq9fk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894979; c=relaxed/simple; bh=XXV0remiboIC8vT/YM3SXXEpSLWra8NHMrXB3bAOdSc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N0NKoe9RsTM0+u9+yJKobMcgbVYk3yHEXa/cpk6k2vhVp85zefQksdsJgVJprUkDxv/qq8QrAdKotvFzXO5ERITbpiiIKItJ7iUFAZ8XI+AudLNXoUDIyEOhYsW69Gok3IO4QxZdO9S/P38CYiC3/j9/3/YGNoxICV1cV1aJw70= 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=ZeJm+CxQ; arc=none smtp.client-ip=209.85.214.169 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="ZeJm+CxQ" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-225477548e1so29965715ad.0; Sat, 05 Apr 2025 16:16:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743894977; x=1744499777; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=JHqAHfmXNcrBiUX48Wdw61sXBWXoE7oTU9Eeqw/vr3c=; b=ZeJm+CxQo5Dx2UR0JKlbwJ6XkoXIyykwSnNB23Lwp/K63nNMDdRFbse/up9oY7R3+s bDsGWiuEYEE6vL/bh2erBDNGmSAkgtHfLeN+c7Egw/vjLxH6HlkBfdZIltwXL253oLfL OnknUmU4iotWRTuPaajoPC5JAo+IJPz7chB1iPeH21I/Obpw4Psw3ZgndOxa45JxhMHH mPeerNnS2vgB+7m0kzgZuEASn8R+Nuu7bWy9dG8bvQNAFU9v7FfE/e1dI3fwsOtpP6ly 0PRpmdTzmz5+KmPS/gikaRrJQQS10cltIkQi4VUU+XY8qovUkVvt6Cm6iuLaef+LnPaj d7MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743894977; x=1744499777; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JHqAHfmXNcrBiUX48Wdw61sXBWXoE7oTU9Eeqw/vr3c=; b=rQ3oGNP7hK06tWYKdZRzOghotUhqVAUqVG9LUhNeV9oeBdTOZ1kwemjNg7pC19Bl06 DnEXv1UWdTn/bNMsiDw3i3ClVPVC1k5ZbishKotW4PK/wGlm8VTK1aLTGcbqlzFFzZE7 VS8FZ5EV6E82LUfzl6N8LFYOmfKv8DrTIGCi78DeO0Brc/bQEOGSTdKhh00aenVx+tGH QaTRQlw+aewfVlFCko8svESlpAH2LVAHVSsPfLh80hOtJSTCQ1tZ0Upcdsd1hCqydpZt epZDieiNaj9/RYAAbjl6SXO4pc9Qd0nKPjKdscxCyGp0n6FIlLRbDDq8o50Rgs2omYSh iBvQ== X-Forwarded-Encrypted: i=1; AJvYcCU2q58DdLydJDro1jUhBhLVh/l0Pv4I/pKm3z2QYtUBbq5QB5TsKl09wYBcTFDsJzb/RndVkhnQzGdjNfg=@vger.kernel.org, AJvYcCUBK6yBUeCU5Ru/y61xySMdqyNthsDcjjda0Q/fJ3Op4Y26b+k0+lIlQPLoau+sm4nSTq35kJhDasns/j8z@vger.kernel.org, AJvYcCV7fBVuZbCI4L3Squml/bm0TzwFDcwcbS6RDYd1CvTVVUtW5cuNVgxmvT75SYLg0X76qDAQUJWQ7bsH@vger.kernel.org, AJvYcCXrXVA+nO0DZ42j6ll3fLoRoCiotTVyswu+J/2oCN/vf4tzj29TWX3Y2hX/DXyD8Z3qtkH2Wznwx4n9bj4=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+h91siSzLSwjfjK9hH5mr4mSnVH3SwdNwWZTs0jpYwsn3X+QF 7otCUbQ+mU4nnnTm1UYlzQj0yUHF/UGrjZMi7HfnRSa3qvL4Nt9v X-Gm-Gg: ASbGncsL9Jygpv1/WgreL6ZWJGCBdJTjGq5cQu/o21zWcWz/NXUdAyJaXZVxB2WHXMW BeBHpCpkicoqy+9DjGT9AFtah9jOk4P0kFE0TS0avVAjqQVPI3lk6LpKtfeGpB0xoO39zmrP7z0 AP8I1tN92H9MCF6pqYabedEnrm6RXDeVfGxAJuI7DV9cHwKJKDgydpulg6C9ht1I5pmv7EqAlgL RLDhTZfrwJ124+L0GBMkhmblyE21PNOri1Rbe/jSCvX9hfk6vJMBy3G3zld2h5AjlL+GeRS8J61 b9iIDi9OOqEK/DpsEqV0c52/2jBWymGDJ/3kDD07q62CuQNvbg84nPP+0xdS2xyV0jxHl/6lSeG 6XKJN4UVl+BFoiUO1K/xfw4mLaNImBncyZ5WOtVI= X-Google-Smtp-Source: AGHT+IHzW/mEX3whjkwPsQueexYlvcirJnhXqeAaYH9+txAPgZ2hsFsVnFWAoyuWrrUtE4gQMK6Rdw== X-Received: by 2002:a17:902:f690:b0:220:c34c:5760 with SMTP id d9443c01a7336-22a8a8e4508mr99504385ad.51.1743894976729; Sat, 05 Apr 2025 16:16:16 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-229785c994esm55048345ad.102.2025.04.05.16.16.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Apr 2025 16:16:16 -0700 (PDT) From: James Calligeros Date: Sun, 06 Apr 2025 09:15:10 +1000 Subject: [PATCH v5 6/8] ASoC: tas2764: Apply Apple quirks Precedence: bulk X-Mailing-List: linux-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250406-apple-codec-changes-v5-6-50a00ec850a3@gmail.com> References: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> In-Reply-To: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> To: Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Shenghao Ding , Kevin Lu , Baojun Xu , Dan Murphy , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shi Fu , Jean Delvare , Guenter Roeck Cc: Alyssa Rosenzweig , =?utf-8?q?Martin_Povi=C5=A1er?= , Hector Martin , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, asahi@lists.linux.dev, linux-hwmon@vger.kernel.org, Neal Gompa , James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=9009; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=qZEzaa+3EpSBuiO12afRrJd3nOAchCfoa8/x3EZzfv0=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDOkfd3a5Hd5UlBPmKLMn9fjPK4Z7n51+90xG9OZKlYPnR WMXHRFR7yhlYRDjYpAVU2TZ0CTkMduI7Wa/SOVemDmsTCBDGLg4BWAiEQKMDHcafj3l0+7w43ad 67duuxbHtIwkmaVbX5bOWL3Q5PHph00Mf7jnLdgw9VS5ycIGibUJ1eFrGy72SZfnPLQ2cTvtW+7 sxwUA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Martin Povišer Apple's SN012776 driver has some peculiar aspects to its behavior that are suspected to work around issues in the codec part. Add a module parameter for enabling individual quirks that should be imitated after the Apple driver. Setting some of these by default seems to be required. For example, setting 0xf fixes an issue with transient overcurrent errors which can crash the chip until the next system reboot. To be safe, let's enable all of them by default. Reviewed-by: Neal Gompa Co-developed-by: Hector Martin Signed-off-by: Hector Martin Signed-off-by: Martin Povišer Co-developed-by: James Calligeros Signed-off-by: James Calligeros --- sound/soc/codecs/tas2764-quirks.h | 180 +++++++++++++++++++++++++ sound/soc/codecs/tas2764.c | 39 ++++++ 2 files changed, 219 insertions(+) diff --git a/sound/soc/codecs/tas2764-quirks.h b/sound/soc/codecs/tas2764-quirks.h new file mode 100644 index 0000000000000000000000000000000000000000..7a62b3ba5b40b3f06fc1ebeb590d9c32b1b2c7d3 --- /dev/null +++ b/sound/soc/codecs/tas2764-quirks.h @@ -0,0 +1,180 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __TAS2764_QUIRKS__ +#define __TAS2764_QUIRKS__ + +#include + +#include "tas2764.h" + +/* Bitmask of enabled Apple quirks */ +#define ENABLED_APPLE_QUIRKS 0x3f + +/* + * Disable noise gate and flip down reserved bit in NS_CFG0 + */ +#define TAS2764_NOISE_GATE_DISABLE BIT(0) + +static const struct reg_sequence tas2764_noise_gate_dis_seq[] = { + REG_SEQ0(TAS2764_REG(0x0, 0x35), 0xb0) +}; + +/* + * CONV_VBAT_PVDD_MODE=1 + */ +#define TAS2764_CONV_VBAT_PVDD_MODE BIT(1) + +static const struct reg_sequence tas2764_conv_vbat_pvdd_mode_seq[] = { + REG_SEQ0(TAS2764_REG(0x0, 0x6b), 0x41) +}; + +/* + * Reset of DAC modulator when DSP is OFF + */ +#define TAS2764_DMOD_RST BIT(2) + +static const struct reg_sequence tas2764_dmod_rst_seq[] = { + REG_SEQ0(TAS2764_REG(0x0, 0x76), 0x0) +}; + +/* + * Unknown 0x133/0x137 writes (maybe TDM related) + */ +#define TAS2764_UNK_SEQ0 BIT(3) + +static const struct reg_sequence tas2764_unk_seq0[] = { + REG_SEQ0(TAS2764_REG(0x1, 0x33), 0x80), + REG_SEQ0(TAS2764_REG(0x1, 0x37), 0x3a), +}; + +/* + * Unknown 0x614 - 0x61f writes + */ +#define TAS2764_APPLE_UNK_SEQ1 BIT(4) + +static const struct reg_sequence tas2764_unk_seq1[] = { + REG_SEQ0(TAS2764_REG(0x6, 0x14), 0x0), + REG_SEQ0(TAS2764_REG(0x6, 0x15), 0x13), + REG_SEQ0(TAS2764_REG(0x6, 0x16), 0x52), + REG_SEQ0(TAS2764_REG(0x6, 0x17), 0x0), + REG_SEQ0(TAS2764_REG(0x6, 0x18), 0xe4), + REG_SEQ0(TAS2764_REG(0x6, 0x19), 0xc), + REG_SEQ0(TAS2764_REG(0x6, 0x16), 0xaa), + REG_SEQ0(TAS2764_REG(0x6, 0x1b), 0x0), + REG_SEQ0(TAS2764_REG(0x6, 0x1c), 0x12), + REG_SEQ0(TAS2764_REG(0x6, 0x1d), 0xa0), + REG_SEQ0(TAS2764_REG(0x6, 0x1e), 0xd8), + REG_SEQ0(TAS2764_REG(0x6, 0x1f), 0x0), +}; + +/* + * Unknown writes in the 0xfd page (with secondary paging inside) + */ +#define TAS2764_APPLE_UNK_SEQ2 BIT(5) + +static const struct reg_sequence tas2764_unk_seq2[] = { + REG_SEQ0(TAS2764_REG(0xfd, 0x0d), 0xd), + REG_SEQ0(TAS2764_REG(0xfd, 0x6c), 0x2), + REG_SEQ0(TAS2764_REG(0xfd, 0x6d), 0xf), + REG_SEQ0(TAS2764_REG(0xfd, 0x0d), 0x0), +}; + +/* + * Disable 'Thermal Threshold 1' + */ +#define TAS2764_THERMAL_TH1_DISABLE BIT(6) + +static const struct reg_sequence tas2764_thermal_th1_dis_seq[] = { + REG_SEQ0(TAS2764_REG(0x1, 0x47), 0x2), +}; + +/* + * Imitate Apple's shutdown dance + */ +#define TAS2764_SHUTDOWN_DANCE BIT(7) + +static const struct reg_sequence tas2764_shutdown_dance_init_seq[] = { + /* + * SDZ_MODE=01 (immediate) + * + * We want the shutdown to happen under the influence of + * the magic writes in the 0xfdXX region, so make sure + * the shutdown is immediate and there's no grace period + * followed by the codec part. + */ + REG_SEQ0(TAS2764_REG(0x0, 0x7), 0x60), +}; + +static const struct reg_sequence tas2764_pre_shutdown_seq[] = { + REG_SEQ0(TAS2764_REG(0xfd, 0x0d), 0xd), /* switch hidden page */ + REG_SEQ0(TAS2764_REG(0xfd, 0x64), 0x4), /* do write (unknown semantics) */ + REG_SEQ0(TAS2764_REG(0xfd, 0x0d), 0x0), /* switch hidden page back */ +}; + +static const struct reg_sequence tas2764_post_shutdown_seq[] = { + REG_SEQ0(TAS2764_REG(0xfd, 0x0d), 0xd), + REG_SEQ0(TAS2764_REG(0xfd, 0x64), 0x0), /* revert write from pre sequence */ + REG_SEQ0(TAS2764_REG(0xfd, 0x0d), 0x0), +}; + +static int tas2764_do_quirky_pwr_ctrl_change(struct tas2764_priv *tas2764, + unsigned int target) +{ + unsigned int curr; + int ret; + + curr = snd_soc_component_read_field(tas2764->component, + TAS2764_PWR_CTRL, + TAS2764_PWR_CTRL_MASK); + + if (target == curr) + return 0; + + /* Handle power state transition to shutdown */ + if (target == TAS2764_PWR_CTRL_SHUTDOWN && + (curr == TAS2764_PWR_CTRL_MUTE || curr == TAS2764_PWR_CTRL_ACTIVE)) { + ret = regmap_multi_reg_write(tas2764->regmap, tas2764_pre_shutdown_seq, + ARRAY_SIZE(tas2764_pre_shutdown_seq)); + if (!ret) + ret = snd_soc_component_update_bits(tas2764->component, + TAS2764_PWR_CTRL, + TAS2764_PWR_CTRL_MASK, + TAS2764_PWR_CTRL_SHUTDOWN); + if (!ret) + ret = regmap_multi_reg_write(tas2764->regmap, + tas2764_post_shutdown_seq, + ARRAY_SIZE(tas2764_post_shutdown_seq)); + } + + ret = snd_soc_component_update_bits(tas2764->component, TAS2764_PWR_CTRL, + TAS2764_PWR_CTRL_MASK, target); + + return ret; +} + +/* + * Via devicetree (TODO): + * - switch from spread spectrum to class-D switching + * - disable edge control + * - set BOP settings (the BOP config bits *and* BOP_SRC) + */ + +/* + * Other setup TODOs: + * - DVC ramp rate + */ + +static const struct tas2764_quirk_init_sequence { + const struct reg_sequence *seq; + int len; +} tas2764_quirk_init_sequences[] = { + { tas2764_noise_gate_dis_seq, ARRAY_SIZE(tas2764_noise_gate_dis_seq) }, + { tas2764_dmod_rst_seq, ARRAY_SIZE(tas2764_dmod_rst_seq) }, + { tas2764_conv_vbat_pvdd_mode_seq, ARRAY_SIZE(tas2764_conv_vbat_pvdd_mode_seq) }, + { tas2764_unk_seq0, ARRAY_SIZE(tas2764_unk_seq0) }, + { tas2764_unk_seq1, ARRAY_SIZE(tas2764_unk_seq1) }, + { tas2764_unk_seq2, ARRAY_SIZE(tas2764_unk_seq2) }, + { tas2764_thermal_th1_dis_seq, ARRAY_SIZE(tas2764_thermal_th1_dis_seq) }, + { tas2764_shutdown_dance_init_seq, ARRAY_SIZE(tas2764_shutdown_dance_init_seq) }, +}; + +#endif /* __TAS2764_QUIRKS__ */ diff --git a/sound/soc/codecs/tas2764.c b/sound/soc/codecs/tas2764.c index 718107fce3bcf6ef081f6fced7b89c708518b1a5..21c38b2394b71ef7d05b4c2e781fdf73926fec5b 100644 --- a/sound/soc/codecs/tas2764.c +++ b/sound/soc/codecs/tas2764.c @@ -45,6 +45,8 @@ struct tas2764_priv { bool unmuted; }; +#include "tas2764-quirks.h" + static const char *tas2764_int_ltch0_msgs[8] = { "fault: over temperature", /* INT_LTCH0 & BIT(0) */ "fault: over current", @@ -122,6 +124,9 @@ static int tas2764_update_pwr_ctrl(struct tas2764_priv *tas2764) else val = TAS2764_PWR_CTRL_SHUTDOWN; + if (ENABLED_APPLE_QUIRKS & TAS2764_SHUTDOWN_DANCE) + return tas2764_do_quirky_pwr_ctrl_change(tas2764, val); + ret = snd_soc_component_update_bits(component, TAS2764_PWR_CTRL, TAS2764_PWR_CTRL_MASK, val); if (ret < 0) @@ -548,6 +553,30 @@ static uint8_t sn012776_bop_presets[] = { static const struct regmap_config tas2764_i2c_regmap; +static int tas2764_apply_init_quirks(struct tas2764_priv *tas2764) +{ + int ret, i; + + for (i = 0; i < ARRAY_SIZE(tas2764_quirk_init_sequences); i++) { + const struct tas2764_quirk_init_sequence *init_seq = + &tas2764_quirk_init_sequences[i]; + + if (!init_seq->seq) + continue; + + if (!(BIT(i) & ENABLED_APPLE_QUIRKS)) + continue; + + ret = regmap_multi_reg_write(tas2764->regmap, init_seq->seq, + init_seq->len); + + if (ret < 0) + return ret; + } + + return 0; +} + static int tas2764_codec_probe(struct snd_soc_component *component) { struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component); @@ -617,6 +646,13 @@ static int tas2764_codec_probe(struct snd_soc_component *component) if (ret < 0) return ret; } + + /* Apply all enabled Apple quirks */ + ret = tas2764_apply_init_quirks(tas2764); + + if (ret < 0) + return ret; + break; default: break; @@ -701,6 +737,9 @@ static bool tas2764_volatile_register(struct device *dev, unsigned int reg) case TAS2764_INT_LTCH0 ... TAS2764_INT_LTCH4: case TAS2764_INT_CLK_CFG: return true; + case TAS2764_REG(0xf0, 0x0) ... TAS2764_REG(0xff, 0x0): + /* TI's undocumented registers for the application of quirks */ + return true; default: return false; } From patchwork Sat Apr 5 23:15:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: James Calligeros X-Patchwork-Id: 14039261 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (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 820071DFDAE; Sat, 5 Apr 2025 23:16:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894987; cv=none; b=t5bKtOsLrQayC1enh4whZm8SpCX95lrp9/wGLrB0kQyOcnpDzGAga8FyoxZBO8meVqoCB0zIySI7VuBrWo4w9LtVqO3dBwtJalnEfaruY6qMozhmtcfQFuTDZCChHAJPhnKgAr5et55hYTyO2tU5Iu/gU+60bl+hs/nXOoN0mhQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894987; c=relaxed/simple; bh=HzPCNCOaGfHJ1SZafUSoMYOx1UbS0RK4HV+uhmMxEog=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EAEHsajNec+AhObmCybq4fDUpdivlv82ZE2k1CGnxUshYsNtRBtlpv63m+ZNXRWJZiY50VuVevN0YygkRqsFVaETZDqMBzDO/IPjd2uFJXZPrFmUI/Qooz8dFQ2MANJey3STIySrkZnX6gPAjaHECL4UMKH/wJNeaeTLaUG3dtY= 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=QdV1l83f; arc=none smtp.client-ip=209.85.214.169 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="QdV1l83f" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-22403cbb47fso32889405ad.0; Sat, 05 Apr 2025 16:16:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743894985; x=1744499785; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=oJgUl+Lri83Oq+9zJGLqwIEzCS7Ndje3xSETbGABjZc=; b=QdV1l83fcAcs5HIb+CfPN+5ql0QNDYGugIjUTaaBzIi3qf9CQwh3Z8zLYCMxmi46zP LovEVsg9bMIIuKstzX3tWTtVW5N5yNk5Eh+GLebEmkUYlpWaZHY46HsLHW3hZ/KPM46X kIIagHZ4THtPVJ94qyHNTvVFugmA785WnGjh6atCpRDkzp+JmYzf3PbiF+8Uf1LOkSSg rJ62zL+PAtimK8wE5AW6CbIDuiZGO8OfCq650M3V/6Gq10+Koqg4/dsOmhhOK95lvecO Ic8/XRGcgO/ryLww0QM3qwb6mcurepK79qc9epX4kLQoBBiWObIsxr+NwMje5ybA+OGH SCIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743894985; x=1744499785; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oJgUl+Lri83Oq+9zJGLqwIEzCS7Ndje3xSETbGABjZc=; b=I3mobKIb6FrlW32UF43EOasPSiP5EIY7Fx7xnYz/dIytpwmY4GgxH/XDKCHxtE5jB3 0Y/R4aoMcMEMoXwba4qb0W51EFq92+YDXWrHw1c4fyXG6VrYZ2ZWOq0OstR7ti4TMXPa gunBjQUkpq4XXUctkEoOydmHmQvgAB5GtSjeGY+EpZkCyrkcTwZc/263egrfvrZKLkum q2PcaeSHT8sQn3ptdLHddVIvgC7BgA7DaDFjrjdroCXBt2kkkQkm9RSCZ3enQZS6BmRn tdEzduwffu/zBhhZx8TlDf1I6ptlEser/duxV3afZov3fkj8/DIcc+Hr0tHT/NJOZXJa ytjg== X-Forwarded-Encrypted: i=1; AJvYcCVQBLYeRgyn/jdmkDJuJm/qJ0KfHvpcQsF2CaoWgi+cZTedCqR6lpsozD3y3cwC5DJtalrtjui7bFkfNN8L@vger.kernel.org, AJvYcCWSoPPFNUJJDi1MUIcSIRphJKzgdCYb+OndPnvTEbANGogLD9FvUmdkWnXp+U7iEVP5mnuFM9Hz82b2@vger.kernel.org, AJvYcCWz0PP7r6QOLBJVynmHPwf5ubTmhYpHxbmQIn4KpUB2Kb7k8TvZV5I8tLwH7ezFwDxlwzSLcCWQWKW8G6M=@vger.kernel.org, AJvYcCXTEuuI2lVp2+/AJmwuPjmF9IuCn4LnNvFrxiNz1ozxEQ3AEcioGIHIUpd2a0k6d+aeDZIt1z+1GmZ9xQ8=@vger.kernel.org X-Gm-Message-State: AOJu0YwQOMp0hSdyWY7ai2HJ0DN2xRhkgBkewHbdnVd9mnuRc0yTUcWD NFZRFhfC/rZLvu8kxGglutE1hz5mdu+njcvdgUPM3ptb03wok2iR X-Gm-Gg: ASbGncutcx1UT00+EVNvq8fx6oicqn4MoL4z4bGc0omg5Nx7nDJbJj4ZZrFp2HCxP27 TAZjdKOmJUH79KSYY1WjRXyg/R8CrgMG0Uh2YPmg+1Ms5fti7vl/wwqo5FUsjEPzcRN4LVc+jv4 mXxmGkVPOZb6An5WRvU1C4b3sUko6D2nyaUFbRX1xPn5qqMUpMVst7W3ql5sAjedFD7EaGi8eTl UVEXmxHmRqX3W9dEkF8vTdbXp8WtbHfdtQyPK/cRBLoQru6vQfEnO7R5Ckxr/lGPhFGvjlMH1G3 ysqsLlVlViG8Ig5tXasvi1Ei9IbkxEYmSFdB6lKN2MSd2G+12XPKvQcw+cK4vSonaQpevoJRnSM ulXlldE7Ehd4qREUo5x8YZNUbYWq4hMckzINDwLM= X-Google-Smtp-Source: AGHT+IEVN5VB9kZvBYQ0TjCkqo4Wt7GleWXD5XDgrsFGv91UONf5YKT42TApbq/Y0lwjk+7IjZk+Mg== X-Received: by 2002:a17:903:1cc:b0:224:1e7a:43fe with SMTP id d9443c01a7336-22a8a8ddc27mr89469255ad.46.1743894984690; Sat, 05 Apr 2025 16:16:24 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-229785c994esm55048345ad.102.2025.04.05.16.16.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Apr 2025 16:16:24 -0700 (PDT) From: James Calligeros Date: Sun, 06 Apr 2025 09:15:11 +1000 Subject: [PATCH v5 7/8] ASoC: tas2770: expose die temp to hwmon Precedence: bulk X-Mailing-List: linux-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250406-apple-codec-changes-v5-7-50a00ec850a3@gmail.com> References: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> In-Reply-To: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> To: Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Shenghao Ding , Kevin Lu , Baojun Xu , Dan Murphy , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shi Fu , Jean Delvare , Guenter Roeck Cc: Alyssa Rosenzweig , =?utf-8?q?Martin_Povi=C5=A1er?= , Hector Martin , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, asahi@lists.linux.dev, linux-hwmon@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4412; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=HzPCNCOaGfHJ1SZafUSoMYOx1UbS0RK4HV+uhmMxEog=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDOkfd3a9FRTbd79/3ka+ZWv6g3MjFB5rpcw8M+NjWMn13 q8pTByJHaUsDGJcDLJiiiwbmoQ8Zhux3ewXqdwLM4eVCWQIAxenAEzk3VWG/z5Nr94WLd8RJsYe 6Nr5XPx44Ke9Kj43PflyDjSdiFho4MDw37+lImpP1j9h/rgP7+8s2LFbff2uhcyf70lPD/NftUx iNRMA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 TAS2770 includes an ADC which reports the chip's die temperature. As per the datasheet, the temperature in degrees Celsius is derived by taking the raw value stored in the ADC's registers, dividing by 16, then subtracting 93. Create and register a hwmon device to expose the chip's die temperature to the hwmon interface. The ADC is shut down during software shutdown mode, and its registers are initialised to 0 on reset. This means that the die temperature will read -93 *C until the chip has been fully powered up at least once (e.g. the PCM its attached to is opened). Once the chip is put into software shutdown again, the ADC will also shut down. The last value sampled before this happens will persist in the ADC's registers. Co-developed-by: Martin Povišer Signed-off-by: Martin Povišer Signed-off-by: James Calligeros --- sound/soc/codecs/tas2770.c | 96 +++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/sound/soc/codecs/tas2770.c b/sound/soc/codecs/tas2770.c index 55e4723044044338bd941763240d24ccfef6e8f3..6f878b01716f728724a00ba3e1ce7afe3a420eda 100644 --- a/sound/soc/codecs/tas2770.c +++ b/sound/soc/codecs/tas2770.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -530,6 +531,88 @@ static struct snd_soc_dai_driver tas2770_dai_driver[] = { }, }; +static int tas2770_read_die_temp(struct tas2770_priv *tas2770, long *result) +{ + int ret = 0; + int reading, msb, lsb; + + ret = regmap_read(tas2770->regmap, TAS2770_TEMP_MSB, &msb); + if (ret) + return ret; + + ret = regmap_read(tas2770->regmap, TAS2770_TEMP_LSB, &lsb); + if (ret) + return ret; + + reading = (msb << 4) | (lsb >> 4); + + /* + * As per datasheet: divide register by 16 and subtract 93 to get + * degrees Celsius. hwmon requires millidegrees. Let's avoid rounding + * errors by subtracting 93 * 16 then multiplying by 1000 / 16. + * + * NOTE: The ADC registers are initialised to 0 on reset. This means + * that the temperature will read -93 *C until the chip is brought out + * of software shutdown (e.g. the PCM it's attached to is opened). The + * ADC is also shut down in software shutdown/low-power mode, so the + * value read back from its registers will be the last value sampled + * before entering software shutdown. + */ + *result = (reading - (93 * 16)) * (1000 / 16); + return 0; +} + +static umode_t tas2770_hwmon_is_visible(const void *data, + enum hwmon_sensor_types type, u32 attr, + int channel) +{ + if (type != hwmon_temp) + return 0; + + switch (attr) { + case hwmon_temp_input: + return 0444; + default: + break; + } + + return 0; +} + +static int tas2770_hwmon_read(struct device *dev, + enum hwmon_sensor_types type, + u32 attr, int channel, long *val) +{ + struct tas2770_priv *tas2770 = dev_get_drvdata(dev); + int ret; + + switch (attr) { + case hwmon_temp_input: + ret = tas2770_read_die_temp(tas2770, val); + break; + default: + ret = -EOPNOTSUPP; + break; + } + + return ret; +} + +static const struct hwmon_channel_info *const tas2770_hwmon_info[] = { + HWMON_CHANNEL_INFO(temp, HWMON_T_INPUT), + NULL +}; + +static const struct hwmon_ops tas2770_hwmon_ops = { + .is_visible = tas2770_hwmon_is_visible, + .read = tas2770_hwmon_read, +}; + +static const struct hwmon_chip_info tas2770_hwmon_chip_info = { + .ops = &tas2770_hwmon_ops, + .info = tas2770_hwmon_info, +}; + static const struct regmap_config tas2770_i2c_regmap; static int tas2770_codec_probe(struct snd_soc_component *component) @@ -758,6 +841,19 @@ static int tas2770_i2c_probe(struct i2c_client *client) } } + if (IS_REACHABLE(CONFIG_HWMON)) { + struct device *hwmon; + + hwmon = devm_hwmon_device_register_with_info(&client->dev, "tas2770", + tas2770, + &tas2770_hwmon_chip_info, + NULL); + if (IS_ERR(hwmon)) { + return dev_err_probe(&client->dev, PTR_ERR(hwmon), + "Failed to register temp sensor\n"); + } + } + result = tas2770_register_codec(tas2770); if (result) dev_err(tas2770->dev, "Register codec failed.\n"); From patchwork Sat Apr 5 23:15:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: James Calligeros X-Patchwork-Id: 14039262 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) (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 F3C651F462E; Sat, 5 Apr 2025 23:16:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894994; cv=none; b=LbdEzmCRTqNJkvMMEcc6e+MTrtf8oNDHf/ufsi4NeK8FG4eptGAAEfUUyFAeQW2O0AJa60FwezlZ1qd8Z1ttYI9ZmPHdMGtgTYdGNk8tG+9mhPalRV0zz+g9ZDC0WQuzLDBGOrwcdqh6an5Xb9Euc0F+XSDlMJ0+AGApabNVUME= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743894994; c=relaxed/simple; bh=5Z9X682HZUgLJ1v6uu51TGEAsXE/8Sre+u8dfgEfwT0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bHfOjLiJWrkTGFF/QLUhgUe1GEN+gXxAiAnL5zmJvc+dNwoVvSNN5CCaJFSS0DsqVI5g1pDdrQvWmMmOlhTNgMDTuPz253wKMxnD6bwmpn98U+bLclofzX1oDLsAn2gk0JIcnd7JlI4kSeUbC1pj67VQU8/nGKWEFqqsLLp0s4o= 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=PUVPpccP; arc=none smtp.client-ip=209.85.215.177 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="PUVPpccP" Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-7fd35b301bdso3147358a12.2; Sat, 05 Apr 2025 16:16:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743894992; x=1744499792; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=rBN7lJc+bnC3l4ET99fupuYYeHLn5bLfe23gswQ1Cp8=; b=PUVPpccPdcUfMWXtkcChmJujd2QjVX6+6wewDqNW9s16kO2mhwGY/kcJIeqFJ9ubOI 8n5y3luorl+gUHVed38JcMuYQPgZ19arW4e5Nqcaw/peFfsb7MWWWade9KNHDBcxj0hL XP1uWlpswbpcvNIzF8cQBlB/W570SsBdszToxjbk1ukq2SOHyct1RkMizcWAnA5ZLZCd Fsmx9UdClqVtfJlKtiOVUUQqsywYieK/AW77Q507akm4FvTUxEncMm9N7tGAeXHxGkoX EpfbH5rkLjCVIECipYapFpHh5KpK3nOLgPl4hlb8e5fjXaUaSwnAaE9ADWy/7qOtcseL aicQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743894992; x=1744499792; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rBN7lJc+bnC3l4ET99fupuYYeHLn5bLfe23gswQ1Cp8=; b=dDG3nF25MI8eXl2107HlQ5ouLxG3whsgAPmSzJkttgoH6GJbEB+W1RqSfsOjOqUF3P UtdAr/JI4JrSyPoG25Lu1oqlnhCLxmhOIsW18+BeDAKLZv5dDuRkBIdze1KaayUu2X4Y 3FGyxi0qQ2+MLFYQCqPmrdogGEdoJtKJHmJ8zxyUsoJt8luhF6O6xt0wZDFDArWnDYn9 wm6zpJNva7zn74+riGJ6NXPSQZxqTsVyM8Z3nPdReyVDYY7EjWWLQMJy96QqRYAEeHIe wcFsgZ/4IZQYWZiNs3Z0OtKaw83l1sAn/uDipr1IbfkPi/BEcMPqzYHldg4wBJGyu2Q0 5OZA== X-Forwarded-Encrypted: i=1; AJvYcCU6Q+hZkHTvrCKTr+N1rdengp7XgSKtzzc3jjkpqmGcWGY26EuuslVCuoABwuHzvsG4FufvuQgvYSc6ybg=@vger.kernel.org, AJvYcCWJLco+Tv0qs+k0INOzqQfFhCQ8AxEKv8KYFblBF2tZuI4y9TM1LiZlM0eqw/Kl681wqPsA7NHOHa0ZxYc=@vger.kernel.org, AJvYcCWKy+bS2Js0Ms3x0MvU4yKlxHHvr2e67rAVQ740b5Pgyneux1geBHmFU7XeWjVrauGsj3mbevpnn9r2@vger.kernel.org, AJvYcCXk4dAUPcvzGOuYZMobQ3OJOlGVpkk2rWoRuAgTtM6BXXOSpeZPURaChuuROrA5+mP+KoM43dcw0/gewHwN@vger.kernel.org X-Gm-Message-State: AOJu0YygF94viy3XM1qrn/VVGO3nc72A6vKQvuoUJpSsbp9kmqMRbI0S ZF1uP6pXGw+twiw3/EYcr/dr/XFrFIGWqmviBmek4EVO93bVTND1fvIqDOTe X-Gm-Gg: ASbGncv1SJfZkEnjW93pESEgsASKn/fvpfpgJ1oD7nQREHDFMIKRmQ2TgfD3uKL3XYI e1hn/FMWl7W1CDA5pGEG35LuFtaz1cXjvfKuakJAEYKsbV4nJOvecl0KLb5UNrVGzjlGPYYyJ0p yOnEuLfR7Grl8xnh+wPsrqpfp7V9VmpUMI/fHdRZAgLCFRG7lwVFuIRdQaPt3I6zIf5pORfCDRZ 22vqYJ0UkRmeA9ryArBMRyON/QS6qt9ANVNLzqA72xR+wPhaZy1elS1JzD81O5tAEULfqDsXNlz qLF06jqNxTOWWJQADVF7iHvRJCyQgNp96OzFuouySHe74PxLs8BNN9T46CCjlMBUltTg+ee2kCt tjOghcw3cN35k6TcDpRu5VtPY/j/uGk/Vd54PFRV16ikFiXEsRA== X-Google-Smtp-Source: AGHT+IGboQXup/sgtzEmkEwk8oMDufzhXkatqPuP1Cmf7+D+uVwma1W1OUqGKi2mrfi+tqTDKqnBBw== X-Received: by 2002:a17:90b:2e41:b0:2ee:b8ac:73b0 with SMTP id 98e67ed59e1d1-306a47c2d6amr11531890a91.2.1743894992161; Sat, 05 Apr 2025 16:16:32 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-229785c994esm55048345ad.102.2025.04.05.16.16.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 05 Apr 2025 16:16:31 -0700 (PDT) From: James Calligeros Date: Sun, 06 Apr 2025 09:15:12 +1000 Subject: [PATCH v5 8/8] ASoC: tas2764: expose die temp to hwmon Precedence: bulk X-Mailing-List: linux-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250406-apple-codec-changes-v5-8-50a00ec850a3@gmail.com> References: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> In-Reply-To: <20250406-apple-codec-changes-v5-0-50a00ec850a3@gmail.com> To: Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Shenghao Ding , Kevin Lu , Baojun Xu , Dan Murphy , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shi Fu , Jean Delvare , Guenter Roeck Cc: Alyssa Rosenzweig , =?utf-8?q?Martin_Povi=C5=A1er?= , Hector Martin , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, asahi@lists.linux.dev, linux-hwmon@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4733; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=5Z9X682HZUgLJ1v6uu51TGEAsXE/8Sre+u8dfgEfwT0=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDOkfd3Ydffj9fdjhS7FJN4MP3lQONy7btTkkfquglGhlp KdAlsaRjlIWBjEuBlkxRZYNTUIes43YbvaLVO6FmcPKBDKEgYtTACZys4HhF1OSiWzl0nUxlpJ9 wea9roGCa6+2byjY0Rrm5LN27fLiDYwMW6dJu2v3uVa/3yfL+Lp0Y9H9iL1lj54qVVZt2/SYhYW NAwA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 TAS2764 contains an ADC that reports the chip's die temperature. The temperature in degrees Celsius is yielded by subtracting 93 from the raw value reported by the ADC. Expose the codec die temperature to the hwmon interface. The chip will initialise the temperature register to 2.6 *C to avoid triggering over temp protection. As the ADC is powered down during software shutdown, this value will persist until the chip is fully powered up (e.g. when the PCM it's attached to is opened). When the chip is powered back down, the last value sampled will persist in the register. Co-developed-by: Martin Povišer Signed-off-by: Martin Povišer Signed-off-by: James Calligeros --- sound/soc/codecs/tas2764.c | 89 +++++++++++++++++++++++++ sound/soc/codecs/tas2764.h | 3 + 2 files changed, 92 insertions(+) diff --git a/sound/soc/codecs/tas2764.c b/sound/soc/codecs/tas2764.c index 21c38b2394b71ef7d05b4c2e781fdf73926fec5b..97968ee3af42e8400b8cbcc23fe2184afc8c715c 100644 --- a/sound/soc/codecs/tas2764.c +++ b/sound/soc/codecs/tas2764.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -577,6 +578,80 @@ static int tas2764_apply_init_quirks(struct tas2764_priv *tas2764) return 0; } +static int tas2764_read_die_temp(struct tas2764_priv *tas2764, long *result) +{ + int ret, reg; + + ret = regmap_read(tas2764->regmap, TAS2764_TEMP, ®); + if (ret) + return ret; + /* + * As per datasheet, subtract 93 from raw value to get degrees + * Celsius. hwmon wants millidegrees. + * + * NOTE: The chip will initialise the TAS2764_TEMP register to + * 2.6 *C to avoid triggering temperature protection. Since the + * ADC is powered down during software shutdown, this value will + * persist until the chip is fully powered up (e.g. the PCM it's + * attached to is opened). The ADC will power down again when + * the chip is put back into software shutdown, with the last + * value sampled persisting in the ADC's register. + */ + *result = (reg - 93) * 1000; + return 0; +} + +static umode_t tas2764_hwmon_is_visible(const void *data, + enum hwmon_sensor_types type, u32 attr, + int channel) +{ + if (type != hwmon_temp) + return 0; + + switch (attr) { + case hwmon_temp_input: + return 0444; + default: + break; + } + + return 0; +} + +static int tas2764_hwmon_read(struct device *dev, + enum hwmon_sensor_types type, + u32 attr, int channel, long *val) +{ + struct tas2764_priv *tas2764 = dev_get_drvdata(dev); + int ret; + + switch (attr) { + case hwmon_temp_input: + ret = tas2764_read_die_temp(tas2764, val); + break; + default: + ret = -EOPNOTSUPP; + break; + } + + return ret; +} + +static const struct hwmon_channel_info *const tas2764_hwmon_info[] = { + HWMON_CHANNEL_INFO(temp, HWMON_T_INPUT), + NULL +}; + +static const struct hwmon_ops tas2764_hwmon_ops = { + .is_visible = tas2764_hwmon_is_visible, + .read = tas2764_hwmon_read, +}; + +static const struct hwmon_chip_info tas2764_hwmon_chip_info = { + .ops = &tas2764_hwmon_ops, + .info = tas2764_hwmon_info, +}; + static int tas2764_codec_probe(struct snd_soc_component *component) { struct tas2764_priv *tas2764 = snd_soc_component_get_drvdata(component); @@ -825,6 +900,20 @@ static int tas2764_i2c_probe(struct i2c_client *client) } } + if (IS_REACHABLE(CONFIG_HWMON)) { + struct device *hwmon; + + hwmon = devm_hwmon_device_register_with_info(&client->dev, "tas2764", + tas2764, + &tas2764_hwmon_chip_info, + NULL); + if (IS_ERR(hwmon)) { + return dev_err_probe(&client->dev, PTR_ERR(hwmon), + "Failed to register temp sensor\n"); + } + } + + return devm_snd_soc_register_component(tas2764->dev, &soc_component_driver_tas2764, tas2764_dai_driver, diff --git a/sound/soc/codecs/tas2764.h b/sound/soc/codecs/tas2764.h index 3251dc0106e07862dd69efd69fa0e40c3858ecb7..538290ed3d92acea3322240a3bd09edd63694e50 100644 --- a/sound/soc/codecs/tas2764.h +++ b/sound/soc/codecs/tas2764.h @@ -117,6 +117,9 @@ #define TAS2764_INT_LTCH3 TAS2764_REG(0x0, 0x50) #define TAS2764_INT_LTCH4 TAS2764_REG(0x0, 0x51) +/* Readout Registers */ +#define TAS2764_TEMP TAS2764_REG(0x0, 0x56) + /* Clock/IRQ Settings */ #define TAS2764_INT_CLK_CFG TAS2764_REG(0x0, 0x5c) #define TAS2764_INT_CLK_CFG_IRQZ_CLR BIT(2)