From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=74.125.82.172 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793264494; b=csgs7p4qFWjj0MwKQAzZLP46uyz3Dki9+ZqLotGZ1qA1BiAFa7x4AcqYO0nvl6ZJawX5 0fcUsTd049MLIqjTSWI62ojxDLi4FVIKiYCSi08q2rbrF04lc3daad3UOAUYMYelenD7s 5yBWjoTRovjyhQGOD3hULftRlLDtOe7cDt2zrJfZmVRfl2p3KGASKSqk4aA1NBNQ+zBrk 2AUa7zQOagWrsuhnNMO8xKlxHMYsKeNX6FVl+5Vx5txtejQR9qJqdyNpGS3W07ShRxqqU 7ILoQ696EaU5OX1F2PLeLtU7CDwW5nMwGLJFb+Y1iY+OtnnqGYIOY4tyBA5olckOuoA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793264494; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:To:Cc:Subject:Date:Message-ID:X-Mailer:In-Reply-To:References: MIME-Version:Content-Transfer-Encoding; bh=5ZHPP80P/K5Og+av73zHRl2Ft2Q1yinNFTFs8Wj9Vvw=; b=4HmN5f2GHj2ZUPSwJWcDp+QGmejhcsvaHcLP7OC13Ks52cpMOOAhCJRKR55EGiOaXnA4 6ROEzjpaMwN4cD35lgDAxowEQuS3//VhMKbBXCAq6mHRKxf2nUIejusjAIvK6uDq9kOcH dG/gr4CIPVKHDuv6nlf2CEqnn3LNyYVbV1JTwcfyLWu/g57FMtQrLouQyQ1918fz3ZAam ExqD0VaTaz8PJ6t7h+eLjtPZMtb58WLxJxezVCYjlTPwZ8Th3Ya7ExG/i55S9AigEoJXS YE3RVZd9SI8Q/dCH5RlmqhlgU2b4r+VZIz+byVeYUB/9Sl/8/dfpiMkqjj5o6cSmqUw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20260707 header.b=CA3LCyJ7; arc=none smtp.remote-ip=74.125.82.172 Received: from mail-dy1-f172.google.com (mail-dy1-f172.google.com [74.125.82.172]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0F74B606A338 for ; Thu, 29 Oct 2026 09:01:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 0F74B606A338 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, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20260707 header.b=CA3LCyJ7 Received: by mail-dy1-f172.google.com with SMTP id 5a478bee46e88-36a17a332ecso2726238eec.1 for ; Thu, 29 Oct 2026 02:01:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20260707; t=1793264492; x=1793869292; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=5ZHPP80P/K5Og+av73zHRl2Ft2Q1yinNFTFs8Wj9Vvw=; b=CA3LCyJ7nJ/xoJVBGK7euuvFzDooHoTkancn1/gOxLVhjkV9W0IXBNdBCqW/OiX92H 9gXvxbQ5ViuabsM2dJqowCO25Nhn0OnwZtEr0DGEq1trREc/LmtGBEDHIE1+uJOjFOzK xc3mXgwxk1dwMn3lfUNHTlk1yX9y2ij0QeRu6KKP3rTNCIj2saYmL0zm0nbzBivHhcUk +MUT5NcNWQ+IQenZp4oOj7GXdjUVtpF16UUjZ9VbmIyylrrQjEGl+1U/aQKidV+fsDBe +5j+PrkMZuRgJ7aKoCIDWEYqX4gv0aePmwTjEVe1F0VQVTuVNSwHPI5oGlTatJ1SLARt DX5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793264492; x=1793869292; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=5ZHPP80P/K5Og+av73zHRl2Ft2Q1yinNFTFs8Wj9Vvw=; b=tv+9/frtTL6s+Fbzvp7bRupjP0nkk9TU81YteclG9cak5LpoPB71bnTRIEt7Pq5Xdm U8dheZYCytai/KrCRnx8Gf1yRVObWAZid0oqfT1Ufg1vMXPRlPzsVqsY5eRFyiAiNKQc xhOfv103yM5Vl34qS4MtMOdMhQdhW84ZtXY+UrX/rNaSZbBSz//6e1ORkbNJxDaVqZvx nnInt97nZhXgU1qMXQcUNIeKDH4duvLeeVWo17LvD4RbnzErlQnfdx34mRSezDHW4Lzo RHGWyz13+bobo5iUSxROt+joCX3SNe0H0VyYAAhz4LjXZhcE57CSIPZ54/3WSEK9qz0R mFlQ== X-Forwarded-Encrypted: i=1; AKwUvBw8zdzCl/Y8ClXQlOWKKw26tMOm7NldlTRJOXfpyOWMjQeY3z7ZUXU2b2qamdPmMXXvAM2b0pn6l+FI@vger.kernel.org X-Gm-Message-State: AFq9FYLFfODHoLdkbK3PMa5GKpV+XPL/YOn4t7oRfNQi0zhjKfLHt5B5 GYEF1OSs4oUekzyGijNkHtdMhAqFldjaiWKy0AHFcGx3mPKtjcrvKRA= X-Gm-Gg: AYBFou2rLOGPAmEhTC/EYqy3uPny33OOGZ6awGykEiwsOIrvq91+bAfL5NKa6oqlrQm 4Hb3gq3sTDCdHMYnAO+/yluiUOFsHfsFAHj+cSWFjbHDv8oIWUjXW3BlpIaQ25AbdFWXeD51nWO L96Uncx8Tu5q3EeM2z4IQ8FgqwedyuOxgOteI/s/T1AZE4itry0s3A+tkJo7zM3fhtAsKk+tEt/ qfWF0IpmQG27qeXiJLasSdKk2Ci67MsuO4t7/9ebHSfiI3mbDFK33KvwyXaQNZc2MvQtVBMQH2P nBvAX6Ic0DzxJRz1qbsKHlnH3VwM0dKZIwe3O0wgQ2WYYhEhUo3aVewOaZ0XVRepl0PW5WePeWk Tu6KTCcAcjYnW4zOVQVkJ9IV5zdpmY+RVUYda8PsJikz8wgL5ry/rAhNjdH96vnudPiU0FCvnpb 8sZLqceZB0Xv/dcf4QeAn68IY8oXKcgDZORwtwicEEIYONkilCju0kcWaO2+KPEOmZOOImiOGjo JGiOaRoKHBwr/dfUyxTWmgvBss3yMJ1OTfWQe8nTiEaCf5gAH2VlSpYNGg7TR2No7XTvzQvm5h5 zev/R7v54uTouN5u/D2WglJzphEO7qFraJ25BvqrE+OUGR9bRdAN9AjW2nXyaQ== X-Received: by 2002:a05:7300:f587:b0:369:fc38:6821 with SMTP id 5a478bee46e88-36a20113296mr6116491eec.12.1793264491785; Thu, 29 Oct 2026 02:01:31 -0700 (PDT) Received: from at-Standard-PC-Q35-ICH9-2009 ([27.60.20.232]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-36a23641e78sm16497937eec.0.2026.10.29.02.01.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Oct 2026 02:01:31 -0700 (PDT) From: Atharva Tiwari To: Cc: Atharva Tiwari , Bjorn Helgaas , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , "Rafael J. Wysocki" , Len Brown , Linus Walleij , Bartosz Golaszewski , Sven Peter , Janne Grunau , Neal Gompa , Guenter Roeck , Jonathan Cameron , David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , Lee Jones , Pavel Machek , Griffin Kroah-Hartman , Hans de Goede , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Sebastian Reichel , Alexandre Belloni , Wim Van Sebroeck , Jarkko Sakkinen , Mimi Zohar , Roberto Sassu , Dmitry Kasatkin , Eric Snowberg , Paul Moore , James Morris , "Serge E. Hallyn" , linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-gpio@vger.kernel.org, asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-hwmon@vger.kernel.org, linux-iio@vger.kernel.org, linux-leds@vger.kernel.org, mfd@lists.linux.dev, platform-driver-x86@vger.kernel.org, linux-pm@vger.kernel.org, linux-rtc@vger.kernel.org, linux-watchdog@vger.kernel.org, linux-integrity@vger.kernel.org, keyrings@vger.kernel.org, linux-security-module@vger.kernel.org Subject: [RFC PATCH 12/14] hwmon/macsmc: add more types Date: Thu, 29 Oct 2026 04:52:09 -0400 Message-ID: <20261029085504.3547-13-atharvatiwarilinuxdev@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261029085504.3547-1-atharvatiwarilinuxdev@gmail.com> References: <20261029085504.3547-1-atharvatiwarilinuxdev@gmail.com> X-Mailing-List: linux-gpio@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit SMC keys come in many data types, and Intel Macs use a lot that macsmc-hwmon couldn't read, such as the signed fixed point types like sp1e. Add support for the common integer and fixed point types, and allow writing fan speeds. Signed-off-by: Atharva Tiwari --- drivers/hwmon/macsmc-hwmon.c | 310 +++++++++++++++++++++++++++++++++++ 1 file changed, 310 insertions(+) diff --git a/drivers/hwmon/macsmc-hwmon.c b/drivers/hwmon/macsmc-hwmon.c index 1500ec2cc..2e74dcd66 100644 --- a/drivers/hwmon/macsmc-hwmon.c +++ b/drivers/hwmon/macsmc-hwmon.c @@ -221,6 +221,313 @@ static int macsmc_hwmon_read_key(struct apple_smc *smc, *val = (long)ioft; break; } + /* unsigned 8-bit integer */ + case __SMC_KEY('u', 'i', '8', ' '): { + u8 ui8 = 0; + + ret = apple_smc_read_u8(smc, sensor->macsmc_key, &ui8); + if (ret) + return ret; + + *val = ui8 * scale; + break; + } + /* signed 8-bit integer */ + case __SMC_KEY('s', 'i', '8', ' '): { + s8 si8 = 0; + + ret = apple_smc_read_s8(smc, sensor->macsmc_key, &si8); + if (ret) + return ret; + + *val = si8 * scale; + break; + } + /* unsigned 16-bit integer */ + case __SMC_KEY('u', 'i', '1', '6'): { + u16 ui16 = 0; + + ret = apple_smc_read_u16(smc, sensor->macsmc_key, &ui16); + if (ret) + return ret; + + *val = ui16 * scale; + break; + } + /* signed 16-bit integer */ + case __SMC_KEY('s', 'i', '1', '6'): { + s16 si16 = 0; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &si16); + if (ret) + return ret; + + *val = si16 * scale; + break; + } + /* unsigned 32-bit integer */ + case __SMC_KEY('u', 'i', '3', '2'): { + u32 ui32 = 0; + + ret = apple_smc_read_u32(smc, sensor->macsmc_key, &ui32); + if (ret) + return ret; + + *val = ui32 * scale; + break; + } + /* signed 32-bit integer */ + case __SMC_KEY('s', 'i', '3', '2'): { + s32 si32; + + ret = apple_smc_read_s32(smc, sensor->macsmc_key, &si32); + if (ret) + return ret; + + *val = si32 * scale; + break; + } + /* 2.14 unsigned fixed point decimal */ + case __SMC_KEY('f', 'p', '2', 'e'): { + u16 fp2e; + + ret = apple_smc_read_u16(smc, sensor->macsmc_key, &fp2e); + if (ret) + return ret; + + *val = mult_frac(be16_to_cpu(fp2e), scale, BIT(14)); + break; + } + + /* 3.13 unsigned fixed point decimal */ + case __SMC_KEY('f', 'p', '3', 'd'): { + u16 fp3d; + + ret = apple_smc_read_u16(smc, sensor->macsmc_key, &fp3d); + if (ret) + return ret; + + *val = mult_frac(be16_to_cpu(fp3d), scale, BIT(13)); + break; + } + + /* 4.12 unsigned fixed point decimal */ + case __SMC_KEY('f', 'p', '4', 'c'): { + u16 fp4c; + + ret = apple_smc_read_u16(smc, sensor->macsmc_key, &fp4c); + if (ret) + return ret; + + *val = mult_frac(be16_to_cpu(fp4c), scale, BIT(12)); + break; + } + + /* 5.11 unsigned fixed point decimal */ + case __SMC_KEY('f', 'p', '5', 'b'): { + u16 fp5b; + + ret = apple_smc_read_u16(smc, sensor->macsmc_key, &fp5b); + if (ret) + return ret; + + *val = mult_frac(be16_to_cpu(fp5b), scale, BIT(11)); + break; + } + + /* 6.10 unsigned fixed point decimal */ + case __SMC_KEY('f', 'p', '6', 'a'): { + u16 fp6a; + + ret = apple_smc_read_u16(smc, sensor->macsmc_key, &fp6a); + if (ret) + return ret; + + *val = mult_frac(be16_to_cpu(fp6a), scale, BIT(10)); + break; + } + + /* 8.8 unsigned fixed point decimal */ + case __SMC_KEY('f', 'p', '8', '8'): { + u16 fp88; + + ret = apple_smc_read_u16(smc, sensor->macsmc_key, &fp88); + if (ret) + return ret; + + *val = mult_frac(be16_to_cpu(fp88), scale, BIT(8)); + break; + } + /* 14.2 fixed point decimal */ + case __SMC_KEY('f', 'p', 'e', '2'): { + /* + * fpe2 is only used for fan stats and fan control + * so precision is not needed + */ + u16 fpe2; + + ret = apple_smc_read_u16(smc, sensor->macsmc_key, &fpe2); + if (ret) + return ret; + + *val = (be16_to_cpu(fpe2) >> 2); + break; + } + /* 1.14 signed fixed point decimal */ + case __SMC_KEY('s', 'p', '1', 'e'): { + s16 sp1e; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &sp1e); + if (ret) + return ret; + + *val = mult_frac((s16)be16_to_cpu(sp1e), scale, BIT(14)); + break; + } + + /* 2.13 signed fixed point decimal */ + case __SMC_KEY('s', 'p', '2', 'd'): { + s16 sp2d; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &sp2d); + if (ret) + return ret; + + *val = mult_frac((s16)be16_to_cpu(sp2d), scale, BIT(13)); + break; + } + + /* 3.12 signed fixed point decimal */ + case __SMC_KEY('s', 'p', '3', 'c'): { + s16 sp3c; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &sp3c); + if (ret) + return ret; + + *val = mult_frac((s16)be16_to_cpu(sp3c), scale, BIT(12)); + break; + } + + /* 4.11 signed fixed point decimal */ + case __SMC_KEY('s', 'p', '4', 'b'): { + s16 sp4b; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &sp4b); + if (ret) + return ret; + + *val = mult_frac((s16)be16_to_cpu(sp4b), scale, BIT(11)); + break; + } + + /* 5.10 signed fixed point decimal */ + case __SMC_KEY('s', 'p', '5', 'a'): { + s16 sp5a; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &sp5a); + if (ret) + return ret; + + *val = mult_frac((s16)be16_to_cpu(sp5a), scale, BIT(10)); + break; + } + + /* 6.9 signed fixed point decimal */ + case __SMC_KEY('s', 'p', '6', '9'): { + s16 sp69; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &sp69); + if (ret) + return ret; + + *val = mult_frac((s16)be16_to_cpu(sp69), scale, BIT(9)); + break; + } + + /* 7.8 signed fixed point decimal */ + case __SMC_KEY('s', 'p', '7', '8'): { + s16 sp78; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &sp78); + if (ret) + return ret; + + *val = mult_frac((s16)be16_to_cpu(sp78), scale, BIT(8)); + break; + } + + /* 8.7 signed fixed point decimal */ + case __SMC_KEY('s', 'p', '8', '7'): { + s16 sp87; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &sp87); + if (ret) + return ret; + + *val = mult_frac((s16)be16_to_cpu(sp87), scale, BIT(7)); + break; + } + + /* 9.6 signed fixed point decimal */ + case __SMC_KEY('s', 'p', '9', '6'): { + s16 sp96; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &sp96); + if (ret) + return ret; + + *val = mult_frac((s16)be16_to_cpu(sp96), scale, BIT(6)); + break; + } + + /* 10.5 signed fixed point decimal */ + case __SMC_KEY('s', 'p', 'a', '5'): { + s16 spa5; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &spa5); + if (ret) + return ret; + + *val = mult_frac((s16)be16_to_cpu(spa5), scale, BIT(5)); + break; + } + + /* 12.3 signed fixed point decimal */ + case __SMC_KEY('s', 'p', 'c', '3'): { + s16 spc3; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &spc3); + if (ret) + return ret; + + *val = mult_frac((s16)be16_to_cpu(spc3), scale, BIT(3)); + break; + } + + /* 13.2 signed fixed point decimal */ + case __SMC_KEY('s', 'p', 'd', '2'): { + s16 spd2; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &spd2); + if (ret) + return ret; + + *val = mult_frac((s16)be16_to_cpu(spd2), scale, BIT(2)); + break; + } + + /* 15.0 signed fixed point decimal */ + case __SMC_KEY('s', 'p', 'f', '0'): { + s16 spf0; + + ret = apple_smc_read_s16(smc, sensor->macsmc_key, &spf0); + if (ret) + return ret; + + *val = (s16)be16_to_cpu(spf0) * scale; + break; + } default: return -EOPNOTSUPP; } @@ -263,6 +570,9 @@ static int macsmc_hwmon_write_key(struct apple_smc *smc, /* unsigned 8-bit integer */ case __SMC_KEY('u', 'i', '8', ' '): return apple_smc_write_u8(smc, sensor->macsmc_key, val); + /* 14.2 fixed point decimal */ + case __SMC_KEY('f', 'p', 'e', '2'): + return apple_smc_write_u16(smc, sensor->macsmc_key, cpu_to_be16(val << 2)); default: return -EOPNOTSUPP; } -- 2.55.0