From nobody Wed Jun 17 04:14:28 2026 Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.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 0A5013A63EF for ; Wed, 22 Apr 2026 12:06:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776859586; cv=none; b=Ufhgeys8mac29/Ckp81FQvK7dz4P6LUngygZftQqY2JQjEh6pNyS+4qhYrh60zTA/WsDU8xtqbeTLvpnSKGRwKMroIpy95XcV+rEOgUyS5gfDQQznfNffWwFd7kmh7XbhOr+I/VW+LNGLCAQDuIPJZkFWOGGSP2HbpTHE3nOm8I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776859586; c=relaxed/simple; bh=K6kXILzd2iMJnONaLp/UgH6p8zJDWKMT+WvFlL3J0Js=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oUrsyk+X0fwGeycxiPIParY/0eroDeMFvj2k7thHOvnsrkQ04S3cXGSCrvrOsYQ5FFFK/I+HIWN9sB9LQZFWOkxjisZbHmv6HQScXXC6QHB5zbi94lmvuGco1fZXN3P0ADTv8DnXezipEkfveK6qs6yKFmByaqP18/xISOzemiY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=inventec.com; spf=pass smtp.mailfrom=inventec.com; dkim=pass (2048-bit key) header.d=inventec.com header.i=@inventec.com header.b=Fjk2OJOk; arc=none smtp.client-ip=209.85.210.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=inventec.com Authentication-Results: smtp.subspace.kernel.org; spf=pass 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="Fjk2OJOk" Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-824c9da9928so2626700b3a.3 for ; Wed, 22 Apr 2026 05:06:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inventec.com; s=google; t=1776859583; x=1777464383; 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=HOQKPwDDzrcAD0phDanh6XQC7w96PXuOSuzVKz/b9lI=; b=Fjk2OJOkngr82YUWzoDl6Kd03zgRcCUpGCcHwsEJ+VDfDP0+zXimq4aUtc5Bi1grEM NCDE0KmDWrLixApOnFQP7vNiHPFeQtVglOxaWoRodySFSnIRVNPyhWDK/3yauclvHFYv ziwqRknCyHmXr+WPFLHR3oiqAj6Shoq6uJbHdXcQBylQbTGbbKGiHclrLgKcRu4Ws2rg UmxQKlKITCIPgktIp8W/786U4PrZyqsAhuKQ/yb2TYkjO387GFFZgj6MQaLksknET8et mikpn9v52+eURDeduWSrn1GTLUPqFdY8ZWW56vwoiM4VBF2ySTtxiLrIfoi2zjvrVgUn uJhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776859583; x=1777464383; 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=HOQKPwDDzrcAD0phDanh6XQC7w96PXuOSuzVKz/b9lI=; b=Ocn8bsIRaUkMZ8R+mfGLLMmCCNXWeGiZAAoUxn4JqoiLUY3O7S/hF5rc4WfBdBFewf frbvbwHQ3XAWg0ht8li1FsLhAQVFkFTQWkhOlWCEMOeRL48pJz8tSj6xB4H17JSD6D5j wUTkWud1huyrHgFBKQGSVkFRiqJvskROXXpDEsg3C4iNOH/Xto6n0IhxkXP8elVdkj8E tR/nCA688uhU6NRnLWSR6veD8yG4wE63FiCPQPZJ1tiQ+BODhifjII2t24W5Prida43S OVQ6oLZwlanj49imNtBDOjjApT/ROVPTqa0whPC5kfz3P6x/V88V/ElYAKXXno6KImMl /hfw== X-Forwarded-Encrypted: i=1; AFNElJ9Ot6EyD5LNnptje+udNxXGoc+TK2YvkT0eeBdu734jJi4gkeB96GMaDjzovLRBqELWZzl9r84Am3lA4oI=@vger.kernel.org X-Gm-Message-State: AOJu0YyIre0A4ZKB7IBU8k+btVc+30en3vM6yo/kF1HHKkrP2ZXp+FOs 7yNZcXEVePGVGisGD9XU0rNOSVHZa6B0yECLrNtxGWapTI+S+7en5pidVrNrdi2qliU= X-Gm-Gg: AeBDieuWyjJx+VNN8VpHaFP+FHFpmWpoqCQWMF35wxrJr68mHKbsqGvDlwVnNOKZB97 cIeIDJsoZeJoyV47JUkaKcN7545MO2TTCzDFXs6Cyj434Tq9nkGQSc848gNsZeyrsWe0kwHmmJ2 5mAL7MwXnMF48KhBgGOrAeL8nztQ5mNxkeP+FZqi5G5uik6wJGT5MCymftsy9n7ymR+NSEkrHh1 wpXwT92hpEnqonV+saUlYtNfgnPKTNBr3eCKgCHpxxdR/fSOTTEdkFzAJUEpZ3CiEoSlYK0QEEg AC4m7WNMP5e2eRvF2x+iYGEOaXd7ojXbxkTNshgabFaaZoUOpNQ7zKAUXb8KwKLeenzhD0rEiye LYbJuidOsd/+hEqZJz3OSzoo1ktEMpV8FdvusBRTUtuzqfDg7RLkjLqYiXw4p4Imnlght0hbnm7 6hwAZK2+qe9UpcmSXbyd2cjCPU7DMttmnOLIr7T4LaKRiIZ48VQOn8fRwbv32dK8d0lz2tklOvq ely X-Received: by 2002:a05:6a00:10c5:b0:82c:ddbb:7db3 with SMTP id d2e1a72fcca58-82f8c95c94cmr23378749b3a.25.1776859583175; Wed, 22 Apr 2026 05:06:23 -0700 (PDT) Received: from [127.0.1.1] (60-250-242-163.hinet-ip.hinet.net. [60.250.242.163]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82f8ebb3fa2sm17086636b3a.29.2026.04.22.05.06.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 05:06:22 -0700 (PDT) From: Brian Chiang Date: Wed, 22 Apr 2026 12:06:15 +0000 Subject: [PATCH 1/2] dt-bindings: (pmbus/lx1308) 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: <20260422-add-support-lx1308-v1-1-9b8322f45aae@inventec.com> References: <20260422-add-support-lx1308-v1-0-9b8322f45aae@inventec.com> In-Reply-To: <20260422-add-support-lx1308-v1-0-9b8322f45aae@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=1776859578; l=3150; i=chiang.brian@inventec.com; s=20260316; h=from:subject:message-id; bh=K6kXILzd2iMJnONaLp/UgH6p8zJDWKMT+WvFlL3J0Js=; b=eCXpJOmrWLqiPrJTwm7WXb64vLmd7+OKz7DeIasA+gQhQ608RaflSXpzWoGj6cZgUlwxmSB7+ bW6GwKYrtpOCFd38S5TRj3zMcnG9t93tcXaawLCh4xfDP1xzQw2i5yG 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 --- .../bindings/hwmon/pmbus/luxshare,lx1308.yaml | 49 ++++++++++++++++++= ++++ .../devicetree/bindings/vendor-prefixes.yaml | 2 + MAINTAINERS | 8 ++++ 3 files changed, 59 insertions(+) diff --git a/Documentation/devicetree/bindings/hwmon/pmbus/luxshare,lx1308.= yaml b/Documentation/devicetree/bindings/hwmon/pmbus/luxshare,lx1308.yaml new file mode 100644 index 000000000000..a8d92447508d --- /dev/null +++ b/Documentation/devicetree/bindings/hwmon/pmbus/luxshare,lx1308.yaml @@ -0,0 +1,49 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- + +$id: http://devicetree.org/schemas/hwmon/pmbus/luxshare,lx1308.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Luxshare LX1308 Digital DC/DC Power Module + +maintainers: + - 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. + +properties: + compatible: + enum: + - luxshare,lx1308lch + - luxshare,lx1308nch + - luxshare,lx1308sch + - luxshare,lx1308ldh + - luxshare,lx1308ndh + - luxshare,lx1308sdh + - luxshare,lx1308 + + reg: + maxItems: 1 + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + i2c { + #address-cells =3D <1>; + #size-cells =3D <0>; + + power-module@60 { + compatible =3D "luxshare,lx1308"; + reg =3D <0x60>; + }; + }; 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,.*": diff --git a/MAINTAINERS b/MAINTAINERS index c3fe46d7c4bc..58fa595cff6a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -15175,6 +15175,14 @@ S: Maintained F: Documentation/devicetree/bindings/iio/light/liteon,ltr390.yaml F: drivers/iio/light/ltr390.c =20 +LUXSHARE LX1308 PMBUS DRIVER +M: Brian Chiang +L: linux-hwmon@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/hwmon/pmbus/luxshare,lx1308.yaml +F: Documentation/hwmon/lx1308.rst +F: drivers/hwmon/pmbus/lx1308.c + LYNX 28G SERDES PHY DRIVER M: Ioana Ciornei L: netdev@vger.kernel.org --=20 2.43.0 From nobody Wed Jun 17 04:14:28 2026 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (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 A69B22DFF04 for ; Wed, 22 Apr 2026 12:06:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776859591; cv=none; b=Vte16P9P+zOfZx/XeRSboOTJV9bKSp/ikTRlNneSXvkmLtVjgUIdOyHmqRA5UrkvCTzzyRWU57ggQmymEnMrPjT4mdCkw2WubcJ1sO24lNk7aR13mv3GivmIqZ07FL+3SxgIBHBluj+5WeweTa4ZjVl1qJ7fz6EQsEBFyO4UKkc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776859591; c=relaxed/simple; bh=YdWIS+GWYOxF9myOt65lgye4aOYTDmJb1XDgOuFE4hY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jyfnOivAJcS8u0DGQoT5y0QZdPaX8xc5X73eRSwSy5k8B+Aw3Z3hudgDsm/Ytn5xOStPKeng8IvDwA5IeAap7JKCOslEnDIyWocE3DeMehT4MM3edTUdu3cLMU/A06nGU8Hd3uXNBt+Rln+UfKJol63HrMJjTj2sV/00e6fA55Q= 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=b5qsZW4l; arc=none smtp.client-ip=209.85.210.175 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="b5qsZW4l" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-82f8893bff3so2549790b3a.2 for ; Wed, 22 Apr 2026 05:06:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inventec.com; s=google; t=1776859586; x=1777464386; 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=KgmCuXwUu4Wzi6ClM7vTGFeIrRj3dmweZd0IGS6MY0s=; b=b5qsZW4lkZ7B08MQAHSrCNf4mLZmco33Gj1a0H/GC26wpfMB1opA46MwGeLtuNKwIv EphhhQwN01nFCy0O35P097VY4CdwtY2Njs17GTWoGKRZF+8FOFWS+/ZxAMJyYgAVEBxX hWSsDU2SWCcNbhblK7PsqFQvukcLWqLB2LSFeDz+27hfIdX5ZY9m7WZ3P73KAHWDvYHe eCgIivsZaPhyA09cWnk+ZU4FKCsK3Dvh3BUGv7y0Xhmo7G/ldOMEJgZK0z08Q49L+OLU 60vv29tg9kqPknaHEBzzADaXLrIFSDagzAhJBHUfzBjgKfXGLBE4ubef48xb0C/OA6DN OUWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776859586; x=1777464386; 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=KgmCuXwUu4Wzi6ClM7vTGFeIrRj3dmweZd0IGS6MY0s=; b=aKRSMXVpXXVkrDtp8nokgiRNW4txUiM4ixhPtyNzDDdEFRzgmzpbHRE+1pddi6m9qB LUa8KreZsakqmgPM4lKoVTFxXkD2fayfY7L68sXhUkQ+omWdiaqhhDuR0819/ikbqZvv GBHo9PbRNcEki+tn2qv0xqQ0qKT1VhliYVQbmzdHi+Ub9h1Byo1Qqxo088jgn2QcowpQ 44qnZRJ9dCeoIGBPWmAMevhtA+1/d+lCvwc96gcJMr4ROSblhyhAuOnuRrkWXo54YHD+ rNR9TWBvYv6XPWgZye2C/GnvW/0GRdKQDeATpvGLNU5kSsqb6eU7MygFZFsaUxegvRiL aGVg== X-Forwarded-Encrypted: i=1; AFNElJ9y+q6PEM1Dwxbtx/tUXpSQKF7gwNosCp/G06H1do6mpjqK6SQqX02n/EKSiddHM1mo7aTzAY26nuPslu8=@vger.kernel.org X-Gm-Message-State: AOJu0YzLbbATay10M3ad1C2sQGe0j9N+abd+UNDYpi6lunWMJYXIrmHR Gz6o9s1v7hwHt1tiGnXyE4JnQCg7p7Jc5P7n6ic0Nd5xvyCpx/YnCJQnRSCNqnxPATU= X-Gm-Gg: AeBDies5lHLeAD+ZVPfzAP2dIzLoDAUsrFbo//wvW1gP8ZGh/YW/mjFHN4LaxeJQV/2 Llm7VQS/Rh781nZ6fQhOtjF5b4r44IXa3hwBe98ILxcEUL6cZcry5i3Us1zmZlA8fEhGN+m8kkP od488m4pezzpQOYURDLfjD2mlOfpleUIXN5gfuM20gWKcSdffndb1Hao+ALqhEzG2nPWJHJ0I0f dCu+ovSzKKdbvHHa0t67n/WhEYo1Kjgy9IUGeFQROdbYqQQuzJzk22MuxZoRll0RpnYC9FMll9z 6dqRb5PJbT0N5HGttAZQXDIDWf71s9gvE+/k8l/g/LTnyddPFqgP4vg4+S1YxjV6VgOACO2HF2P h9jHwVy9nMpnnzpnpXYJGitAGxgjk2qLfPulBOWsMPUXa+JqXqXVt/scCqxsBmz52Ukd4ObDMiB Ov5oDXMXwtmFihGsmBEKS0oyXbH/Lr7B/you+1HVPJKlmDhWBVwkhEVE4sIsZ95ygB5HLA0j42y wtS X-Received: by 2002:a05:6a00:4b4f:b0:82c:6bcc:f3fa with SMTP id d2e1a72fcca58-82f8c94401fmr22326504b3a.35.1776859585837; Wed, 22 Apr 2026 05:06:25 -0700 (PDT) Received: from [127.0.1.1] (60-250-242-163.hinet-ip.hinet.net. [60.250.242.163]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82f8ebb3fa2sm17086636b3a.29.2026.04.22.05.06.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 05:06:25 -0700 (PDT) From: Brian Chiang Date: Wed, 22 Apr 2026 12:06:16 +0000 Subject: [PATCH 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: <20260422-add-support-lx1308-v1-2-9b8322f45aae@inventec.com> References: <20260422-add-support-lx1308-v1-0-9b8322f45aae@inventec.com> In-Reply-To: <20260422-add-support-lx1308-v1-0-9b8322f45aae@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=1776859578; l=11742; i=chiang.brian@inventec.com; s=20260316; h=from:subject:message-id; bh=YdWIS+GWYOxF9myOt65lgye4aOYTDmJb1XDgOuFE4hY=; b=Bb/ZDIwDLuqQhZqK8G3UAC8/VDlDB3vUXpxFCfYhGSqEMXle1Uqhyuu6esZt3SEHd5ByB37Ha WfGjRPIt6jlALKmTBnbH5vTuynivrvApSlrC5yd4CW9ZAnZekRpBX4D 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..1c5dc4294248 100644 --- a/drivers/hwmon/pmbus/Kconfig +++ b/drivers/hwmon/pmbus/Kconfig @@ -221,6 +221,16 @@ config SENSORS_ISL68137 This driver can also be built as a module. If so, the module will be called isl68137. =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_LM25066 tristate "National Semiconductor LM25066 and compatibles" help diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile index d6c86924f887..4861e144c7e7 100644 --- a/drivers/hwmon/pmbus/Makefile +++ b/drivers/hwmon/pmbus/Makefile @@ -23,6 +23,7 @@ obj-$(CONFIG_SENSORS_IR36021) +=3D ir36021.o obj-$(CONFIG_SENSORS_IR38064) +=3D ir38064.o obj-$(CONFIG_SENSORS_IRPS5401) +=3D irps5401.o obj-$(CONFIG_SENSORS_ISL68137) +=3D isl68137.o +obj-$(CONFIG_SENSORS_LX1308) +=3D lx1308.o obj-$(CONFIG_SENSORS_LM25066) +=3D lm25066.o obj-$(CONFIG_SENSORS_LT3074) +=3D lt3074.o obj-$(CONFIG_SENSORS_LT7182S) +=3D lt7182s.o diff --git a/drivers/hwmon/pmbus/lx1308.c b/drivers/hwmon/pmbus/lx1308.c new file mode 100644 index 000000000000..c7a7a1fd4f21 --- /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) ? (mant << exp) : (mant / (1 << (-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 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 const struct of_device_id lx1308_of_match[] =3D { + { .compatible =3D "luxshare,lx1308" }, + { } +}; + +MODULE_DEVICE_TABLE(of, lx1308_of_match); + +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