From nobody Wed Jun 17 02:53:18 2026 Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.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 F0D4141323A for ; Tue, 28 Apr 2026 12:19:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777378789; cv=none; b=tTsivNGz4P6ky4Oc+DQy7sgpm9wrza2emgcNuJDLXKcdsYLnepP1qd6nJFubsHb/R4Xgvwd7bAerzdW11L/0nUsIIIcE4eTu3FbOjO8yurANEIqp1yAftQzvXWaJKxS4vEnYLvsphlmgGR8VfiWhN/MaBow0JZ6N8wDoXdfItiI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777378789; c=relaxed/simple; bh=GpiPsYASiqbAHQFZCILpVMlA6CP9faFuuzfrDYjZMIA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LltMhQ+YOUqagUUTCFC4DHxd51PpYSCBy5mmKYS5sXsdi8bvc8T2Wi3B46GmvWDodLKSuUvKwIUquXJAweXSUPJO0Ti4OWscbOc1nx8qgWOXv1QXBmmZQg16B/4AMdLNKN2S6yi5cN9hzznhKPxa+2xpvnnKDMGZFTJ3yOvW8ks= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=inventec.com; spf=fail smtp.mailfrom=inventec.com; dkim=pass (2048-bit key) header.d=inventec.com header.i=@inventec.com header.b=OAfU7K9F; arc=none smtp.client-ip=209.85.210.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=inventec.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=inventec.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=inventec.com header.i=@inventec.com header.b="OAfU7K9F" Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-82f69adeecbso4651638b3a.2 for ; Tue, 28 Apr 2026 05:19:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inventec.com; s=google; t=1777378781; x=1777983581; 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=Vm32vRoZZ5yFrCpJ+KYjb2vzes9BEArqT3PAPVNaYwI=; b=OAfU7K9FCYjmrU6xF/JFNjk1GsrejmslTGiNDtPESRMBU47BBf7Pq7V3GCOlxU/tEP o5YCIK1aFhkE53XesuwqWQdsCPexThO3vTrd4t57kpfR3IV+OVWbJDoQB90825qYxW6G 9Ue6v2QmA9Xn5LnSgD+O+H08dV78suvJxEtHT6Jbh7j3gJGtOS0EFpGDmtbzXkNrG+Rl 9qZ0rypQSLNGhRkS5RHfnV7VC7i+UsR5IIG0/I9qPIS/7hPKm5cVKTvb97v1RrF1ErDz EFd3hwvuGFY5JEd7ld7fk4uCu7QVxWFwi7sNVdb0Eqo2YCzlXTIm4WmQOe4ClhYN9N6G 8zFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777378781; x=1777983581; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Vm32vRoZZ5yFrCpJ+KYjb2vzes9BEArqT3PAPVNaYwI=; b=TxuQAh0J3PVaMw+Mr5oxJN9uTj5tcZNR6KbUDNF38Bvh09HZSTaDLaouX4HN6HC+Wb 8U/CBcX9pX2SUGFKZ1+vvBo4de/Lp5e1RUe4K/F4BsMFoLRBSYqr/9o3tjBDKyEFAXlp mdGapBHEiiaonKuL0Q/32poUdboD/BmMoJ+TzYi6RtruX3v0QKZx0PJf22CPToNjSQcR fySqOCgI5aljIp+krzL5LRzkKsOrCjvYwGaKXokKjKw/HPkejXNmYs0dLTYngxokbpSi 9sw/FlcKgycRzzofLs8nOyOwwEB48mmtSSJ2cv70MxDSDRt7o4JvJqdRUOiplKvlp9Yf 68oQ== X-Forwarded-Encrypted: i=1; AFNElJ82bY8OKWaLclGTKXQfRl9qZNA5AoUXB68U/rLbmTIt8WGS+t5Q9vStKpD3+rr+s+TPXxntl5Q3ogxtSRA=@vger.kernel.org X-Gm-Message-State: AOJu0Yzb81VhFXEwKqx6WYFsvoORdt/ie8+hqJanf9Nunz/yovcenH6F Rih2VtltvlgI9RrZV60bJmPQgXx5Wt9lAly3+Co0qwhznssjYYIfaDX2ffBAhF6oZp8= X-Gm-Gg: AeBDieuv0gkACah40DNBA0EBGGBQRFBJMTAOQjihmt212mfVZDbdZ8QqznBDZSvcv9j gGVSDiU14ium4iC8GmMux8jdBZtiWh7FVhitePjg5C9saMYqPVRmLX6jfexL3Tw3r9XF5LyUoZc zSUueVljfPyzys5OcW3wnT6qeEl6uRKNVSvHcjnR+GqtS1OUj1YuiNmMmqU1E8HYLdWI4de9Gg7 S9MLSdkoZ6kBeq0uaPB6IdBznowaxf+5O+UKDBW/RLeG72p3ORQflkOOQbcG5GABcymE6dxALlP w68+KvtP2eftCX3GX+TnKrC8TeTimpduYMof6l6rDlfLtWEEJq6HbWlXWC9O17P3XGJDAlOFwCw l7TTGbWKKwOizwHvapb8nb8iNt5/nBr0v9qIsnMbqMyRhCmJ5FkMcPyQLIavF9dFaTSjrTiBTv0 gheWk9WvTk0pr3oY+JXy34bmYR/AjJtzTlnG/d1QXb X-Received: by 2002:a05:6a00:1885:b0:82c:9cd2:fee5 with SMTP id d2e1a72fcca58-834dda62ca5mr3222108b3a.7.1777378780756; Tue, 28 Apr 2026 05:19:40 -0700 (PDT) Received: from [127.0.1.1] ([123.51.235.216]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834daf5705fsm3254587b3a.42.2026.04.28.05.19.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 05:19:40 -0700 (PDT) From: Brian Chiang Date: Tue, 28 Apr 2026 12:19:28 +0000 Subject: [PATCH v2 1/2] dt-bindings: trivial: Add LX1308 support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260428-add-support-lx1308-v2-1-90f115954143@inventec.com> References: <20260428-add-support-lx1308-v2-0-90f115954143@inventec.com> In-Reply-To: <20260428-add-support-lx1308-v2-0-90f115954143@inventec.com> To: Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jonathan Corbet , Shuah Khan Cc: linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Brian Chiang X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1777378774; l=1627; i=chiang.brian@inventec.com; s=20260316; h=from:subject:message-id; bh=GpiPsYASiqbAHQFZCILpVMlA6CP9faFuuzfrDYjZMIA=; b=tmE2g1bOGOEgdkl42iKy3s/qc4U+BujOm/diKonrLdCGc3P/Tp7el24NWT8VRY2aGaZRSmsmQ tfekRdhFruaAGBUwbWnBJYj2gzqtgsS4GwMfoF2YXkAqe5A5c8CuBEb X-Developer-Key: i=chiang.brian@inventec.com; a=ed25519; pk=q+NqJYuJbGpA9KS9941D7f+8PVVW+k7DvaGgFykBiUc= Add device tree bindings for the Luxshare LX1308, a high-efficiency 12V 860W DC/DC power module with PMBus interface. Signed-off-by: Brian Chiang Acked-by: Krzysztof Kozlowski --- Documentation/devicetree/bindings/trivial-devices.yaml | 2 ++ Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Documentation/devicetree/bindings/trivial-devices.yaml b/Docum= entation/devicetree/bindings/trivial-devices.yaml index a482aeadcd44..037baf4cd67d 100644 --- a/Documentation/devicetree/bindings/trivial-devices.yaml +++ b/Documentation/devicetree/bindings/trivial-devices.yaml @@ -181,6 +181,8 @@ properties: - jedec,spd5118 # Linear Technology LTC2488 - lineartechnology,ltc2488 + # Regulated 12V, 860W, Digital DC/DC Power Module + - luxshare,lx1308 # 5 Bit Programmable, Pulse-Width Modulator - maxim,ds1050 # 10 kOhm digital potentiometer with I2C interface diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Docum= entation/devicetree/bindings/vendor-prefixes.yaml index ee7fd3cfe203..67fb1592daaa 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml @@ -967,6 +967,8 @@ patternProperties: description: Shenzhen Luckfox Technology Co., Ltd. "^lunzn,.*": description: Shenzhen Lunzn Technology Co., Ltd. + "^luxshare,.*": + description: Luxshare-ICT Co., Ltd. "^luxul,.*": description: Lagrand | AV "^lwn,.*": --=20 2.43.0 From nobody Wed Jun 17 02:53:18 2026 Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.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 DE67440FD9A for ; Tue, 28 Apr 2026 12:19:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777378796; cv=none; b=DF1x3NOSleC2xjoj0JRJAAymLmXeFpiIglBWlam7KGAfJdm9X9+ae54pgI6/ae8+8uMR2FPOaUmP2RlbRfv5tiGadi6dhKjN8FKKQcmG0iNqpGEV8DnykQyZmDqPrYkl1djfQ//gA4z0qRd/212MtUscMUDfWdRdXNzM4fY01T4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777378796; c=relaxed/simple; bh=M/sOIDN1OH5lbAtVgg3JeylSjCLDwSD5RTk79w8wpko=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uI31IT/ukl54580LOeymJVxo81oA1q6JguhArTGz1EJ+jGNE3Hi6EDtA4/EuzQLZpXRTd5QbOM9IWh9cmilTB40z+f7kuX6oOxYO+4Q1KU0IapWKQgEKqdupm8tKmJYnY2gowJfq7yhVpEWfotQez7HQ1Apwgy1Q1QrzHmORthM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=inventec.com; spf=fail smtp.mailfrom=inventec.com; dkim=pass (2048-bit key) header.d=inventec.com header.i=@inventec.com header.b=AoCGqHKt; arc=none smtp.client-ip=209.85.210.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=inventec.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=inventec.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=inventec.com header.i=@inventec.com header.b="AoCGqHKt" Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-824c9da9928so5508423b3a.3 for ; Tue, 28 Apr 2026 05:19:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inventec.com; s=google; t=1777378784; x=1777983584; 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=am9M3EBhsBtI0W+fdPdNyDSQadIL28OCsPQk25ZYgrA=; b=AoCGqHKtA5JLLi8MIovpDUPqqy3Uwjq10CnUyeIFJlZzhRndg/gvcPTB36eZSx1k/+ Egktoyz25eoeX0bFpnzAkKFBXweomcXF5FqfABm5lD6y9dTvyVc4ROqVjP8pbK7UqxKB kDWMKjn286uzXBFDBymr1j7YX8hbqMm4Q/sX2tKmBZv/uNAWb2YH1C8LQLhbPTqT1bK+ niMYN7UJ5iKmBfvsmT/6NwspVCA0VcA02cLFwpObbbmLwfU/ru6JQ+F8rxt3TFiCx0vV 3jcMe4BPJ3azMQcSOov0QpydgZ/U0qajHa8lSS9t+2a3HVoRsvImo/fbhjbOGqpnG1mS Xd8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777378784; x=1777983584; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=am9M3EBhsBtI0W+fdPdNyDSQadIL28OCsPQk25ZYgrA=; b=TPiTvbwiS4zL978VILnlG2pgw6AdZUsq5RPehqVfvFz4MahhH3oRUjdfvX4CkPpDCo 7vhqxLr7OvkNXOR/wGg0ppSv1bZpLd+f6ZOpZ8b67LdjN/I6JFtDNKNyGmj998OqrCNI beeonj74KPRrfBwYV/mGSToOy5skGAxpZiLVxbPl1IuTrJC0kMVokaRMLUY4kZm1hTQn OXcTadM+064yUA79pSFOBAYNMZi04dJSUTz5hPgv++DPJC2r0JwzR18NW5YqTnU8aloW epC5JbNIpAQBpln3IF/14fXXTofIQgsz14U6DuJ6oQx08pypaCbaHj31nfqE7raP3NZ6 lZRQ== X-Forwarded-Encrypted: i=1; AFNElJ/NQ4sWI4xlmOASIfSOuJ02ji/9CivrK87C5/vudrYprE6rx5C6UI2A7C5lX/415ggVQhYcS8L5XDTNWsg=@vger.kernel.org X-Gm-Message-State: AOJu0YwA2HEldm6wqjwqdIVJehrFgVyU7cUda5OGFFVoVqXiG3rs4G+1 ft4NZzc4+IcHDQElQZe9Zo+2895fRGVpWGCK9G1YRYc5KJD3zCfZHpxjzcG/YxeCw7U= X-Gm-Gg: AeBDiev7IyDcXfEE9Ta1XI6M2b4gSMwb0fIr/KJk0FzzAjeYz/ijBBwc6fTovErCR4m HY+tiSCIZr+R2v5Yhct/jXAekMW28nAOpSfeew8bG5zxNByWZVJrOwv2qDJ7u7mK55I3D8Id8wW DFATsaUu6Z4FI+9vMtZTAF98ZE86ZwXQu4DCJO3PxmK2jJ5LwS/3ObRNC1Jfxh/zodnecy4AlxS cF0BJxlqU39CGyuwR7nhS3cAwc0W3NBzv+jNcVnl6JhVl9HLeVl1w+pOoawQaVb/90JHaFB1Xak +16RDSMwX/6nl1F9bdkepUoq8IX/ucTcwzujnN1wO+7Zt41d2yRlKXHjmSgAtvnXOH5s11xCPD1 LhmoqTQthebDYXGXsBb9sy7wWhomkRTJTkoE7knXyvtoR6hv3g0Kr8m/htLkjOvp0QRXfKY4Gfa ce5XvvwyOm5ZR1PIsiFvYATNFPTGjEVysflEAboQZL X-Received: by 2002:a05:6a00:1805:b0:82c:e09b:3f76 with SMTP id d2e1a72fcca58-834ddc791bdmr3068989b3a.41.1777378783835; Tue, 28 Apr 2026 05:19:43 -0700 (PDT) Received: from [127.0.1.1] ([123.51.235.216]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-834daf5705fsm3254587b3a.42.2026.04.28.05.19.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 05:19:43 -0700 (PDT) From: Brian Chiang Date: Tue, 28 Apr 2026 12:19:29 +0000 Subject: [PATCH v2 2/2] hwmon: (pmbus/lx1308) Add support for LX1308 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260428-add-support-lx1308-v2-2-90f115954143@inventec.com> References: <20260428-add-support-lx1308-v2-0-90f115954143@inventec.com> In-Reply-To: <20260428-add-support-lx1308-v2-0-90f115954143@inventec.com> To: Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jonathan Corbet , Shuah Khan Cc: linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Brian Chiang X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1777378774; l=11714; i=chiang.brian@inventec.com; s=20260316; h=from:subject:message-id; bh=M/sOIDN1OH5lbAtVgg3JeylSjCLDwSD5RTk79w8wpko=; b=lPbZLKRAyGIyAkbNNrCinnnrVVDG3QyFhF6tEDprn2s4A4zTXl5PVTHVCz2M1npddCMeIWjCR Dt6SU4zkHaZBSjoJ+Bry1czDY0ywld4nrVatCkbAHrWFOPuWJbPMJg0 X-Developer-Key: i=chiang.brian@inventec.com; a=ed25519; pk=q+NqJYuJbGpA9KS9941D7f+8PVVW+k7DvaGgFykBiUc= Add support for the Luxshare LX1308, a high-efficiency 12V 860W DC/DC power module. The module operates from 40-60V input voltage. Signed-off-by: Brian Chiang --- Documentation/hwmon/index.rst | 1 + Documentation/hwmon/lx1308.rst | 90 ++++++++++++++++++ drivers/hwmon/pmbus/Kconfig | 10 ++ drivers/hwmon/pmbus/Makefile | 1 + drivers/hwmon/pmbus/lx1308.c | 204 +++++++++++++++++++++++++++++++++++++= ++++ 5 files changed, 306 insertions(+) diff --git a/Documentation/hwmon/index.rst b/Documentation/hwmon/index.rst index b2ca8513cfcd..c86c21554c37 100644 --- a/Documentation/hwmon/index.rst +++ b/Documentation/hwmon/index.rst @@ -145,6 +145,7 @@ Hardware Monitoring Kernel Drivers ltc4261 ltc4282 ltc4286 + lx1308 macsmc-hwmon max127 max15301 diff --git a/Documentation/hwmon/lx1308.rst b/Documentation/hwmon/lx1308.rst new file mode 100644 index 000000000000..c1b72e1647c5 --- /dev/null +++ b/Documentation/hwmon/lx1308.rst @@ -0,0 +1,90 @@ +.. SPDX-License-Identifier: GPL-2.0-or-later + +Kernel driver lx1308 +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +Supported chips: + + * Luxshare LX1308 + + Prefixes: 'lx1308' + + Addresses scanned: - + + Datasheet: Datasheet is not publicly available. + +Author: Brian Chiang + + +Description +----------- + +The LX1308 is a high-efficiency, non-isolated, regulated 12V, 860W, +digital DC/DC power module. The module operates from a 40V to 60V DC +primary bus and provides a 12V regulated output voltage. It can deliver +up to 860W continuous and 1300W in transient. + +The module has slow OCP and fast OCP. If the module output current is high= er +than slow OCP set point and the lasting time is also longer than the delay, +the module will shut down and retry 3 time, if the fault still exists then +module enter latch mode. + +If the module output current is higher than fast OCP set point then it shut +down and enter latch mode. + +The driver is a client driver to the core PMBus driver. +Please see Documentation/hwmon/pmbus.rst for details on PMBus client drive= rs. + + +Usage Notes +----------- + +This driver does not auto-detect devices. You will have to instantiate the +devices explicitly. Please see Documentation/i2c/instantiating-devices.rst= for +details. + + +Sysfs entries +------------- + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D +curr1_alarm Input current alarm +curr1_input Input current (IIN) +curr1_label "iin" +curr2_crit Output over current fault threshold (slow OCP, 60m= s delay) +curr2_crit_alarm Output over current fault alarm +curr2_input Output current (IOUT) +curr2_label "iout1" +curr2_max Output over current warning threshold (slow OCP, 6= 0ms delay) +curr2_max_alarm Output over current warning alarm +in1_crit Input over voltage fault threshold +in1_crit_alarm Input over voltage fault alarm +in1_input Input voltage (VIN) +in1_label "vin" +in1_lcrit Input under voltage fault threshold +in1_lcrit_alarm Input under voltage fault alarm +in1_max Input over voltage warning threshold +in1_max_alarm Input over voltage warning alarm +in1_min Input under voltage warning threshold +in1_min_alarm Input under voltage warning alarm +in2_crit Output over voltage fault threshold +in2_crit_alarm Output over voltage fault alarm +in2_input Output voltage (VOUT) +in2_label "vout1" +in2_lcrit Output under voltage fault threshold +in2_lcrit_alarm Output under voltage fault alarm +in2_max Output over voltage warning threshold +in2_max_alarm Output over voltage warning alarm +in2_min Output under voltage warning threshold +in2_min_alarm Output under voltage warning alarm +power1_alarm Input power alarm +power1_input Input power (PIN) +power1_label "pin" +power2_input Output power (POUT) +power2_label "pout1" +temp1_crit Over temperature fault threshold +temp1_crit_alarm Over temperature fault alarm +temp1_input Module hot spot temperature +temp1_max Over temperature warning threshold +temp1_max_alarm Over temperature warning alarm +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig index fc1273abe357..1b003a828537 100644 --- a/drivers/hwmon/pmbus/Kconfig +++ b/drivers/hwmon/pmbus/Kconfig @@ -302,6 +302,16 @@ config SENSORS_LTC4286 If you say yes here you get hardware monitoring support for Analog Devices LTC4286. =20 +config SENSORS_LX1308 + tristate "Luxshare LX1308 DC/DC Power Module" + help + If you say yes here you get hardware monitoring support for + Luxshare LX1308, a high-efficiency 12V 860W DC/DC power module + with PMBus interface. + + This driver can also be built as a module. If so, the module will + be called lx1308. + config SENSORS_MAX15301 tristate "Maxim MAX15301" help diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile index d6c86924f887..95fc539a77e9 100644 --- a/drivers/hwmon/pmbus/Makefile +++ b/drivers/hwmon/pmbus/Makefile @@ -29,6 +29,7 @@ obj-$(CONFIG_SENSORS_LT7182S) +=3D lt7182s.o obj-$(CONFIG_SENSORS_LTC2978) +=3D ltc2978.o obj-$(CONFIG_SENSORS_LTC3815) +=3D ltc3815.o obj-$(CONFIG_SENSORS_LTC4286) +=3D ltc4286.o +obj-$(CONFIG_SENSORS_LX1308) +=3D lx1308.o obj-$(CONFIG_SENSORS_MAX15301) +=3D max15301.o obj-$(CONFIG_SENSORS_MAX16064) +=3D max16064.o obj-$(CONFIG_SENSORS_MAX16601) +=3D max16601.o diff --git a/drivers/hwmon/pmbus/lx1308.c b/drivers/hwmon/pmbus/lx1308.c new file mode 100644 index 000000000000..0c453393796b --- /dev/null +++ b/drivers/hwmon/pmbus/lx1308.c @@ -0,0 +1,204 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +#include +#include +#include +#include +#include "pmbus.h" + +#define LX1308_MFR_IOUT_OCP3_FAULT 0xBE +#define LX1308_MFR_IOUT_OCP3_WARN 0xBF + +/* + * Decode a Linear11-encoded word to an integer value. + * Linear11 format: bits[15:11] =3D signed 5-bit exponent, + * bits[10:0] =3D signed 11-bit mantissa. Result =3D mant * 2^exp. + */ +static inline int linear11_to_int(u16 word) +{ + s16 exp =3D ((s16)word) >> 11; + s16 mant =3D ((s16)((word & 0x7ff) << 5)) >> 5; + + return (exp >=3D 0) ? (int)((u32)mant << exp) : (mant >> -exp); +} + +static int lx1308_read_word_data(struct i2c_client *client, int page, + int phase, int reg) +{ + int ret; + + if (page > 0) + return -ENXIO; + + switch (reg) { + /* + * The LX1308 OCP3 registers (slow OCP, 60ms delay) use a + * manufacturer-specific U8.0 format. Read the byte value N and present + * it as a Linear11 word with exponent 0. + */ + case PMBUS_IOUT_OC_FAULT_LIMIT: + ret =3D i2c_smbus_read_byte_data(client, LX1308_MFR_IOUT_OCP3_FAULT); + if (ret < 0) + break; + ret &=3D 0x7FF; + break; + + case PMBUS_IOUT_OC_WARN_LIMIT: + ret =3D i2c_smbus_read_byte_data(client, LX1308_MFR_IOUT_OCP3_WARN); + if (ret < 0) + break; + ret &=3D 0x7FF; + break; + + /* + * The following registers are not implemented by the LX1308. Return + * -ENXIO to suppress the corresponding sysfs attributes. + */ + case PMBUS_IIN_OC_WARN_LIMIT: + case PMBUS_IIN_OC_FAULT_LIMIT: + case PMBUS_IOUT_UC_FAULT_LIMIT: + case PMBUS_PIN_OP_WARN_LIMIT: + case PMBUS_POUT_OP_WARN_LIMIT: + case PMBUS_UT_WARN_LIMIT: + case PMBUS_UT_FAULT_LIMIT: + case PMBUS_MFR_IIN_MAX: + case PMBUS_MFR_IOUT_MAX: + case PMBUS_MFR_VIN_MIN: + case PMBUS_MFR_VIN_MAX: + case PMBUS_MFR_VOUT_MIN: + case PMBUS_MFR_VOUT_MAX: + case PMBUS_MFR_PIN_MAX: + case PMBUS_MFR_POUT_MAX: + case PMBUS_MFR_MAX_TEMP_1: + ret =3D -ENXIO; + break; + + default: + ret =3D -ENODATA; + break; + } + + return ret; +} + +static int lx1308_write_word_data(struct i2c_client *client, int page, + int reg, u16 word) +{ + int ret; + + if (page > 0) + return -ENXIO; + + switch (reg) { + case PMBUS_IOUT_OC_FAULT_LIMIT: + /* + * Decode Linear11 word from pmbus_core back to a plain integer + * and write as the U8.0 byte the device expects. + */ + ret =3D i2c_smbus_write_byte_data(client, LX1308_MFR_IOUT_OCP3_FAULT, + clamp_val(linear11_to_int(word), 0, 255)); + break; + + case PMBUS_IOUT_OC_WARN_LIMIT: + ret =3D i2c_smbus_write_byte_data(client, LX1308_MFR_IOUT_OCP3_WARN, + clamp_val(linear11_to_int(word), 0, 255)); + break; + + default: + ret =3D -ENODATA; + break; + } + + return ret; +} + +static struct pmbus_driver_info lx1308_info =3D { + .pages =3D 1, + .format[PSC_VOLTAGE_IN] =3D linear, + .format[PSC_VOLTAGE_OUT] =3D linear, + .format[PSC_CURRENT_IN] =3D linear, + .format[PSC_CURRENT_OUT] =3D linear, + .format[PSC_POWER] =3D linear, + .format[PSC_TEMPERATURE] =3D linear, + + .func[0] =3D PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT + | PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT + | PMBUS_HAVE_PIN | PMBUS_HAVE_POUT + | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP + | PMBUS_HAVE_STATUS_INPUT, + + .read_word_data =3D lx1308_read_word_data, + .write_word_data =3D lx1308_write_word_data, +}; + +static const struct of_device_id lx1308_of_match[] =3D { + { .compatible =3D "luxshare,lx1308" }, + { } +}; + +MODULE_DEVICE_TABLE(of, lx1308_of_match); + +static const struct i2c_device_id lx1308_id[] =3D { + { "lx1308" }, + { } +}; + +MODULE_DEVICE_TABLE(i2c, lx1308_id); + +static int lx1308_probe(struct i2c_client *client) +{ + u8 buf[I2C_SMBUS_BLOCK_MAX + 1]; + const struct i2c_device_id *mid; + int ret; + + ret =3D i2c_smbus_read_block_data(client, PMBUS_MFR_ID, buf); + if (ret < 0) + return dev_err_probe(&client->dev, ret, + "Failed to read manufacturer id\n"); + buf[ret] =3D '\0'; + + if (ret !=3D 12 || strncmp(buf, "LUXSHARE", 8)) + return dev_err_probe(&client->dev, -ENODEV, + "Unsupported Manufacturer ID '%s'\n", buf); + + ret =3D i2c_smbus_read_block_data(client, PMBUS_MFR_MODEL, buf); + if (ret < 0) + return dev_err_probe(&client->dev, ret, + "Failed to read Manufacturer Model\n"); + buf[ret] =3D '\0'; + + for (mid =3D lx1308_id; mid->name[0]; mid++) { + if (!strncasecmp(mid->name, buf, strlen(mid->name))) + break; + } + if (!mid->name[0]) + return dev_err_probe(&client->dev, -ENODEV, + "Unsupported Manufacturer Model '%s'\n", buf); + + ret =3D i2c_smbus_read_block_data(client, PMBUS_MFR_REVISION, buf); + if (ret < 0) + return dev_err_probe(&client->dev, ret, + "Failed to read Manufacturer Revision\n"); + buf[ret] =3D '\0'; + + if (ret !=3D 12 || buf[0] !=3D 'V') + return dev_err_probe(&client->dev, -ENODEV, + "Unsupported Manufacturer Revision '%s'\n", buf); + return pmbus_do_probe(client, &lx1308_info); +} + +static struct i2c_driver lx1308_driver =3D { + .driver =3D { + .name =3D "lx1308", + .of_match_table =3D lx1308_of_match, + }, + .probe =3D lx1308_probe, + .id_table =3D lx1308_id, +}; + +module_i2c_driver(lx1308_driver); + +MODULE_AUTHOR("Brian Chiang "); +MODULE_DESCRIPTION("PMBus driver for Luxshare LX1308"); +MODULE_LICENSE("GPL"); +MODULE_IMPORT_NS("PMBUS"); --=20 2.43.0