From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=74.125.82.171 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793264493; b=IHZLkzS1QgH/YMpNovfVK6vHysOgwwwpqOS9PE1JHI0fPlS8QEGy6gi8tTvF16Nzy9g8 H1EKrDBGrPGQmOMlDSxbtNyN/nZ+Kx6dM4a4qWj8+xjTO1MYa5Q6WuoIq/s2VDVixVYCq /PsRKp776fRZVBM0RvPxlLOXa5p6GxWYYse0WcIfbDOx37norwFOg54s0oVKtgFtPjABo +/h5kGbZ5SCHKsUA+otcqQi6r/DdPhoxgT3Msyh3l8oBdrCGyn26/IasckEcDVNtW84vh 1jDEopY5NH5XPn6wN1H0tfcHGARJk98hGyGRTxVBgl/6M6NofeAqUIQXMIhfhMJD/Zg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793264493; 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=LTa+Q70r1dYgZGVXRYt1yVmfR1/w57M61C2VkhRIlxTVzlUExJN74dYyOc6gPrxVJN4B qmoHXq9z4cqCzB4jU7dNOjuMIos1XQpczd2iovUJttr6lz0e0aHapKU8TtXOGmoWJjDZc 0OfAAhshwVyHC8QFrw0Uj7w0LrO/ZAPA+kgTsvVNua8t3wwD6Cj5SHyjT7eW55E4dQxR8 LCIP3euWpJnygfqq/cvRmtjN1BveJ0vmdMrDcbs4y+7Vse8WQXy9LhLnCizcJ9cRKFvPG vRLVAEsSlMZdjOy2mQPdPZrJgi5T6DuHopSpbgmu4VgAeOCM5/kTxaA1GCJXF19Kt8A== 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.171 Received: from mail-dy1-f171.google.com (mail-dy1-f171.google.com [74.125.82.171]) (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 10A37606A33A for ; Thu, 29 Oct 2026 09:01:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 10A37606A33A 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-f171.google.com with SMTP id 5a478bee46e88-3645f0f3fcdso3465621eec.0 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=GuOSFpvDcnSKNInZ3FZWSK6zKP7tEH7BA2vahvUVtSjdRkw9b7dEHhyZyKxz4OS5AG ggsW9M2pWk9LLtaQoDzz1LtYX0reaBdQ68m2tFha4XzsT2XKq3GZ1sdqW9+LchWQNEm6 JLpe51DQJuIwQpea13G1XYYEuYBb9/o7dt8i8tvQ7T+CY718XZhkgI16iL0rwy9TU+/T sWZtRolbVK31O1AV1qzA8FCFxf4jd26YwbfvktMqEPQofMIq6mWDWUKsmplXOuEi2PoQ k+OSopxdIzFus8cPAgyOKSBFPMnanMaGbZEutp2L+HaBlKtUb9GE/RBeSOW0VxqfAOro 1zTA== X-Forwarded-Encrypted: i=1; AKwUvByEyJmHsVlGtni2yw4BMAa538VP4gU3FlrQYYFSkK0ZnGrHvmOjeruKLOIZ2vzrHF6FzfCoslZg4UOpar8bn6o=@vger.kernel.org X-Gm-Message-State: AFq9FYLOtT8Qwj6ZpC6V/UrkE9Gtp4Utn5K7O+04fykKTUH0Qaba9BTp JmraKPggOc0Kf3wvpgnznl5Iyi/1s6hdEdhcwp/F5zCYp9EQW4iu+SI= X-Gm-Gg: AYBFou3rOoIs+jb92Rh1c53n1AGBDcELRm11kSpfE0Fd/v01pHlQ9rFm3Sfw27qjxXP 8Jq62OO/ykzCBwzgBHYYT+fnPUgMLIZ8QSXK/7FaFH+Ac9VGIX5jQXwTpkp+DjHhqRAmKp8h8Zg je2hhpjNcx3tyItFkNYFs/KSoNqHoUZP5S0Ua13W+0CJ0o3IrBTJgp1HLJuZhPPkyeNlcUJ7t9i Wwpi1zS6wyl2lGHfSfNnAZytt2lA8SCk7MUp4JKWibu33nKULqBFRahdNv49yAlJyV/cwPZLZVv ubWQffZM9ah+Rm1lx90D6XTTlpWrBqPgOUQlsfWG373hugWVjMEm55uvjqFLyKdXUIg4CaJqM5e UNB5auWV9MmwlYKgwKFLv4Mp60SXwAuo/WuVTSAcf9dP9Sd7Myl1pak6nwi9i2rvqTLyTPlGEiX lHsLjXkIRLW5AOzSXD1CB5GRxOpMmM/LZzPCaEu7jxX/mrPy12pzKZSDWzYR7Go5l51hEbE8Dag 8VCIgyVw/L/fTikfRfn6BOZxnaiIEgUtFlmMJvnX0hlC3+pHm+ZYMUqWrNE0XYkP73n3EOmQB5O PvkMkG2aGnxsOoxh7phDl1SgIGQfGKUI0BE8OWRaO8kdLkoxgy7dp/WLyQ92/Q== 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-integrity@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