From patchwork Wed Mar 1 09:12:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naresh Solanki X-Patchwork-Id: 62805 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp3523864wrd; Wed, 1 Mar 2023 01:15:15 -0800 (PST) X-Google-Smtp-Source: AK7set/6LlOID9nYpP++mqxDNvwe9T1c6ZvPMw/Z4txXh4V0156c9euWoZj0Cy7SHK4XoGO9Mq8J X-Received: by 2002:aa7:c651:0:b0:4ac:c1bf:2a26 with SMTP id z17-20020aa7c651000000b004acc1bf2a26mr5637289edr.12.1677662115632; Wed, 01 Mar 2023 01:15:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677662115; cv=none; d=google.com; s=arc-20160816; b=SR1ZkVccpSKkILhWxonTmSroLXJwblI60DcfmkjEtWye6X8yejO9NFSzutsG9cUC12 X3aIoNw8O2857Ec3FYDFWdoQ9toBp2sJ4DDGiVxEZIUk+tZATeOxDdtEZfOMJGutuuCO z5EGP9WfoJ55SIK46pyyDvlhmAiot8KKGBClazLMWrNqsHwlS9gEjHlvqAwEhVw8pSbp /LMSHe6CRN3VuATLG5KjUIgp7lbOfqZIWMEam2YTYBo0H3UuKSPYqARcmB6FoDBC8QtX OJCPGIYTkJ8ebitE3hgv3nItO0TEHL6MsxIJ80jS7igmgmeYklM0LQ6f22EjjQrRATrd a0dQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=WUPmhliitXmdULS7FNWdqBgJqWmIJnQg9y2FVhSFvHM=; b=wb+ItsxUZQpl1b7GTZ9By0//u4E9ih/9gLXbtign74zgHzQOCmpAYaW1xZUN1rMndr xGTo+IhwIqC73deTKaknPwQ/ab3iDM1Dg65Pk7vTDUDBeg4dwMwtFqzABLNsqJtmjknC 56P3JrArTqcKRty2/WVc10zqHrqtANOu038Idk6VyExJbrG0C8LrQtC3OP5CZRgu104R cEkPg3LXnUOW6cW68ppmzVCOV9FnrJx5x5n2dNn5O7WA4dECe16MxKNqP+mpudYLinCG Xx7m9u0w7uskA4Vb+KP2C6SiE/QEM8QRomIpv/V39+wYBL4cjoynCuQktG6Ri4CZWJ4n CcTA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@9elements.com header.s=google header.b=EJSTTVir; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=9elements.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ga9-20020a1709070c0900b008b1cbfbe1efsi2409011ejc.19.2023.03.01.01.14.52; Wed, 01 Mar 2023 01:15:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@9elements.com header.s=google header.b=EJSTTVir; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=9elements.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229823AbjCAJNe (ORCPT + 99 others); Wed, 1 Mar 2023 04:13:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35942 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229759AbjCAJNV (ORCPT ); Wed, 1 Mar 2023 04:13:21 -0500 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A0AFB4C2E for ; Wed, 1 Mar 2023 01:12:56 -0800 (PST) Received: by mail-wr1-x42d.google.com with SMTP id h11so715997wrm.5 for ; Wed, 01 Mar 2023 01:12:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=9elements.com; s=google; t=1677661971; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=WUPmhliitXmdULS7FNWdqBgJqWmIJnQg9y2FVhSFvHM=; b=EJSTTVirwvWvvzeST5d3o2yqpAthOAO+gB0vORl7BcrNwrTLt3l4Te5GrjM9N1FEQr nZH4vwttJAH6BnM4v2RdIujpQYWD4Dq/6oyuaP9CjYwXDqv+uUP+LO03WSydH00+KQWm pS4OO8dfAVtFrbGA2K/SoQjIMjcZ1eP3NihkrQBwjkI+j7jMOpNbUVs3GxwejFG3hoiZ Vi2Hw7pGdR8B6DC3sXlKX9DMjXdD0x3fdmE48BEtZo6LEm0nnW9SU92Qk3t/qhKAyEEv cYaNxl6vcx4yvkEXDINXz2kLYJY4JsQsyoqnDaGkxIJtMtcrkcAveJy5ljbZ/bFCwLqD QBrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1677661971; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=WUPmhliitXmdULS7FNWdqBgJqWmIJnQg9y2FVhSFvHM=; b=mr9ZRP2GIe46TeNk5pxejKd825jbGKzdUsCcoX15tl6uwP9jCPe0qAo4KXZcIfHSnI YVBn1KeUHOkn+s3QCFBCI9yrpmWdM1P4u4vQYDlsYzMj6QKfOgIH4Mhqf38uiLSnG4cp hZPbFFzPI0tQxtjxNxXejx5Vkjj9djyQm0aJnkD57hEHhyWbDbgXNtw60Jiu6yfjb6pi SrWEYF022aCJ4l7Yy1AvFOUAHqeAFnOPyq2NeZKSTPr0nqPCK2QQulu+mAO86ZHaYzLJ 3ZazpqCh2Hc7b/e5Y0EYMOdzIW82R4uzNBvDz4fGvLvsTFWtmvohXKEiViwYsbKGFI2a nKuw== X-Gm-Message-State: AO0yUKW7X8VDnYthBQ7UwaWM4WIqA2XenVYBKRaLyMD4xcdyh3u8azAm QV5a8e7FDmeOTsbkEWJ/GFXVlQ== X-Received: by 2002:adf:ec47:0:b0:2c9:ee31:962a with SMTP id w7-20020adfec47000000b002c9ee31962amr4385782wrn.64.1677661971327; Wed, 01 Mar 2023 01:12:51 -0800 (PST) Received: from stroh80.sec.9e.network (ip-078-094-000-051.um19.pools.vodafone-ip.de. [78.94.0.51]) by smtp.gmail.com with ESMTPSA id s8-20020a5d4ec8000000b002c704271b05sm12072232wrv.66.2023.03.01.01.12.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Mar 2023 01:12:51 -0800 (PST) From: Naresh Solanki X-Google-Original-From: Naresh Solanki To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Patrick Rudolph Cc: Marcello Sylvester Bauer , Naresh Solanki , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] dt-bindings: mfd: Add MAX5970 and MAX5978 Date: Wed, 1 Mar 2023 10:12:33 +0100 Message-Id: <20230301091234.3159953-1-Naresh.Solanki@9elements.com> X-Mailer: git-send-email 2.39.1 MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759156230716632963?= X-GMAIL-MSGID: =?utf-8?q?1759156230716632963?= From: Marcello Sylvester Bauer The MAX597x is a hot swap controller with configurable fault protection. It also has 10bit ADC for current & voltage measurements. Signed-off-by: Marcello Sylvester Bauer Co-developed-by: Patrick Rudolph Signed-off-by: Patrick Rudolph Co-developed-by: Naresh Solanki Signed-off-by: Naresh Solanki --- .../bindings/mfd/maxim,max5970.yaml | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 Documentation/devicetree/bindings/mfd/maxim,max5970.yaml base-commit: 59c54c59974649b2e7bc92faae4a21e2b2408db2 diff --git a/Documentation/devicetree/bindings/mfd/maxim,max5970.yaml b/Documentation/devicetree/bindings/mfd/maxim,max5970.yaml new file mode 100644 index 000000000000..6ee269afdab2 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/maxim,max5970.yaml @@ -0,0 +1,151 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mfd/maxim,max5970.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Regulator for MAX5970 smart switch from Maxim Integrated. + +maintainers: + - Patrick Rudolph + +description: | + The smart switch provides no output regulation, but independent fault protection + and voltage and current sensing. + Programming is done through I2C bus. + + Datasheets: + https://datasheets.maximintegrated.com/en/ds/MAX5970.pdf + https://datasheets.maximintegrated.com/en/ds/MAX5978.pdf + +properties: + compatible: + enum: + - maxim,max5970 + - maxim,max5978 + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + leds: + type: object + description: + Properties for four LEDS. + + properties: + "#address-cells": + const: 1 + + "#size-cells": + const: 0 + + patternProperties: + "^led@[0-3]$": + $ref: /schemas/leds/common.yaml# + type: object + + additionalProperties: false + + vss1-supply: + description: Supply of the first channel. + + vss2-supply: + description: Supply of the second channel. + + regulators: + type: object + description: + Properties for both hot swap control/switch. + + patternProperties: + "^sw[0-1]$": + $ref: /schemas/regulator/regulator.yaml# + type: object + properties: + shunt-resistor-micro-ohms: + description: | + The value of current sense resistor in microohms. + + required: + - shunt-resistor-micro-ohms + + unevaluatedProperties: false + + additionalProperties: false + +required: + - compatible + - reg + - regulators + - vss1-supply + +allOf: + - if: + properties: + compatible: + enum: + - maxim,max5970 + then: + required: + - vss2-supply + +additionalProperties: false + +examples: + - | + i2c { + #address-cells = <1>; + #size-cells = <0>; + regulator@3a { + compatible = "maxim,max5978"; + reg = <0x3a>; + vss1-supply = <&p3v3>; + + regulators { + sw0_ref_0: sw0 { + shunt-resistor-micro-ohms = <12000>; + }; + }; + + leds { + #address-cells = <1>; + #size-cells = <0>; + led@0 { + reg = <0>; + label = "led0"; + default-state = "on"; + }; + led@1 { + reg = <1>; + label = "led1"; + default-state = "on"; + }; + }; + }; + }; + + - | + i2c { + #address-cells = <1>; + #size-cells = <0>; + + regulator@3a { + compatible = "maxim,max5970"; + reg = <0x3a>; + vss1-supply = <&p3v3>; + vss2-supply = <&p5v>; + + regulators { + sw0_ref_1: sw0 { + shunt-resistor-micro-ohms = <12000>; + }; + sw1_ref_1: sw1 { + shunt-resistor-micro-ohms = <10000>; + }; + }; + }; + }; +... From patchwork Wed Mar 1 09:12:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naresh Solanki X-Patchwork-Id: 62807 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp3525000wrd; Wed, 1 Mar 2023 01:17:59 -0800 (PST) X-Google-Smtp-Source: AK7set80pb6GcvyYoTfjqFAEILuLSJZ8FW964+QNqHr0WesGi5oAKwW0ClMzweghe1SnsgvPcpSR X-Received: by 2002:a17:907:a588:b0:8b1:3821:1406 with SMTP id vs8-20020a170907a58800b008b138211406mr6475125ejc.45.1677662279153; Wed, 01 Mar 2023 01:17:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677662279; cv=none; d=google.com; s=arc-20160816; b=QBkIMxQLj4IxMKY94KARCNeCQKm2bhSeON9kNCxZqBNpB5SJIx+28TYHKSit5+TZEh tOZRjZXyNHlCS8o1YZqT5qsYW3VhETEuTZtQkJ0j6DN0snbr/8ofbHH5MyteozQgg0GM KRxrOaeRDStTMMoR2yrENFYHewPtigQRF2tXrJKza0j3opCoCK4vZQ8wnJ6pbIQM0Mj1 V8iv820ugRLQWZjMeB+Pc4KHHGS2Ua9onmcqLuygpSNWA/4NIDhdc3ZIfc+6TglZI8EF MnNBzkr4/5o5MiXQKK7ppaezTdmMmQQYREaqgqzS2u+adVjwn6YB7r3sLNo8Wp5ePF+Q oejw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=k8cE2nYyroyY+N05om5Zg3FelpYcKKnaG2Z1LHphPvA=; b=kEb8eh6IPfpkw35TArntFKPv6mTWpBUqAKLl6Z1GDr1jKI9D2X/zGAqVRVGBJ4QgYp Nt8hqMQTl8Wd/DxfsvycGYQdsBaL0b32+7rUGoixVW1h9dpLfisRAhopYcJY/7v8pLL7 cSYC75F1kLCPokXyvtK+fA+nYgs/loGWCAz1HA5yHx+IFZxLOSM7VZXG7vvsY5oVo0H1 taTUSCTyXlIluuAQnGvri9tonVwFC8kiG6UlrarPTTJfmL0zr2APKc8yWpjRAMyBkkYQ pC+4KkAkh3cD/Bq1r0TljHVOY1IiHrwftHlC0QREVMSvWFvDTBDEWwIXHqf9OID38gU2 ERWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@9elements.com header.s=google header.b=fT3yWe9C; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=9elements.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bm9-20020a170906c04900b008d13b2aae64si396226ejb.337.2023.03.01.01.17.36; Wed, 01 Mar 2023 01:17:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@9elements.com header.s=google header.b=fT3yWe9C; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=9elements.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229515AbjCAJNj (ORCPT + 99 others); Wed, 1 Mar 2023 04:13:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36166 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229955AbjCAJNW (ORCPT ); Wed, 1 Mar 2023 04:13:22 -0500 Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 200062706 for ; Wed, 1 Mar 2023 01:12:57 -0800 (PST) Received: by mail-wr1-x42b.google.com with SMTP id v16so9646144wrn.0 for ; Wed, 01 Mar 2023 01:12:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=9elements.com; s=google; t=1677661972; 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; bh=k8cE2nYyroyY+N05om5Zg3FelpYcKKnaG2Z1LHphPvA=; b=fT3yWe9CLuTMf790ZsTEUSqLJ3ajaZBSwvba5PVK1KCNfqWu4RF+YozuHyMltyhZzP 0hYxYyg2ZW0S3uIxGH2IEY30zmm5w2KgU7iNZwcp58RkPh2ArH7aBE6pnx4C7Rhxj0sL wpCptEg+7dO6E3w4n6z6Ufb2Et7W3gQsNbcFBlhq56rsvoQ4ockKFKDeL79K/i6x5eCi fQTDd2ZEpt6ubvyVSimu4nsAS51m/uCYtrugH0EEV3w1V7/XzVDfK9WjvV6hLjNKM7d+ F17IGzAeXmJxRAfSXrtX6XQikz0tDqP1UwgVOE1D2e41svxW2tsaOrsxKdyxXcbrU1GI mZFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1677661972; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=k8cE2nYyroyY+N05om5Zg3FelpYcKKnaG2Z1LHphPvA=; b=w3C4dCpDEGzDAyHLqBmx9uyZiYczzw6ed2UCYgVF0oCHSrhqGfdS6E6og4I8L4Tb0o kUn0zKaaI89J2ujFZkLIIQOa9W4YtAphigyPoWoI+ru7D+ggwTSFWFFroYCBiNq862Mb Pp8xsB8R8eQ015v+N661rcPX97sXvuZfmN/HCrgveKDAnptIiy1p5qcJ9Y6sIGnSM3VO xlnheGxXZb9DwuW8mZWYAf+QT6brRt9B4MzVgsUO4ENWofMbLPHVjsV6LaV/GcI+Bc5x aYhH3h3bfc4iXiSYDmIOZ4acvpwZL6VvvBVaT9rdkqh8g2NZNJ8XomSlAM+bK4OSe7uc kvHw== X-Gm-Message-State: AO0yUKWpoNHjMPC7LIpX58l+KEOBH8DXeXHXt818ghjFB9NzOOqstFEN 6g+jFKNT8lQEHXnWiU4Fuc7KBg== X-Received: by 2002:a05:6000:1287:b0:2ca:338a:defc with SMTP id f7-20020a056000128700b002ca338adefcmr4588042wrx.37.1677661972458; Wed, 01 Mar 2023 01:12:52 -0800 (PST) Received: from stroh80.sec.9e.network (ip-078-094-000-051.um19.pools.vodafone-ip.de. [78.94.0.51]) by smtp.gmail.com with ESMTPSA id s8-20020a5d4ec8000000b002c704271b05sm12072232wrv.66.2023.03.01.01.12.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Mar 2023 01:12:52 -0800 (PST) From: Naresh Solanki X-Google-Original-From: Naresh Solanki To: Lee Jones Cc: Patrick Rudolph , Marcello Sylvester Bauer , Naresh Solanki , linux-kernel@vger.kernel.org Subject: [PATCH 2/2] mfd: max597x: Add support for MAX5970 and MAX5978 Date: Wed, 1 Mar 2023 10:12:34 +0100 Message-Id: <20230301091234.3159953-2-Naresh.Solanki@9elements.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230301091234.3159953-1-Naresh.Solanki@9elements.com> References: <20230301091234.3159953-1-Naresh.Solanki@9elements.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759156401903489999?= X-GMAIL-MSGID: =?utf-8?q?1759156401903489999?= From: Patrick Rudolph Implement a regulator driver with IRQ support for fault management. Written against documentation [1] and [2] and tested on real hardware. Every channel has it's own regulator supply nammed 'vss1-supply' and 'vss2-supply'. The regulator supply is used to determine the output voltage, as the smart switch provides no output regulation. The driver requires the 'shunt-resistor-micro-ohms' to be present in the devicetree to properly calculate current related values. You must specify compatible devictree layout: regulator@3a { reg = <0x3a>; vss1-supply = <&p3v3>; compatible = "maxim,max5978"; ... regulators { sw0_ref: SW0 { regulator-compatible = "SW0"; shunt-resistor-micro-ohms = <12000>; ... } } } 1: https://datasheets.maximintegrated.com/en/ds/MAX5970.pdf 2: https://datasheets.maximintegrated.com/en/ds/MAX5978.pdf Signed-off-by: Patrick Rudolph Signed-off-by: Marcello Sylvester Bauer Signed-off-by: Naresh Solanki --- drivers/mfd/Kconfig | 10 ++++ drivers/mfd/simple-mfd-i2c.c | 13 +++++ include/linux/mfd/max597x.h | 97 ++++++++++++++++++++++++++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 include/linux/mfd/max597x.h diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index d4fc4ca9fdbd..de899e0d2f1a 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -266,6 +266,16 @@ config MFD_MADERA_SPI Support for the Cirrus Logic Madera platform audio SoC core functionality controlled via SPI. +config MFD_MAX597X + tristate "Maxim 597x power switch and monitor" + depends on (I2C && OF) + select MFD_SIMPLE_MFD_I2C + help + This driver controls a Maxim 5970/5978 switch via I2C bus. + The MAX5970/5978 is a smart switch with no output regulation, but + fault protection and voltage and current monitoring capabilities. + Also it supports upto 4 indication leds. + config MFD_CS47L15 bool "Cirrus Logic CS47L15" select PINCTRL_CS47L15 diff --git a/drivers/mfd/simple-mfd-i2c.c b/drivers/mfd/simple-mfd-i2c.c index e31f13fd6a79..20782b4dd172 100644 --- a/drivers/mfd/simple-mfd-i2c.c +++ b/drivers/mfd/simple-mfd-i2c.c @@ -72,9 +72,22 @@ static const struct simple_mfd_data silergy_sy7636a = { .mfd_cell_size = ARRAY_SIZE(sy7636a_cells), }; +static const struct mfd_cell max597x_cells[] = { + { .name = "max597x-regulator", }, + { .name = "max597x-iio", }, + { .name = "max597x-led", }, +}; + +static const struct simple_mfd_data maxim_max597x = { + .mfd_cell = max597x_cells, + .mfd_cell_size = ARRAY_SIZE(max597x_cells), +}; + static const struct of_device_id simple_mfd_i2c_of_match[] = { { .compatible = "kontron,sl28cpld" }, { .compatible = "silergy,sy7636a", .data = &silergy_sy7636a}, + { .compatible = "maxim,max5970", .data = &maxim_max597x}, + { .compatible = "maxim,max5978", .data = &maxim_max597x}, {} }; MODULE_DEVICE_TABLE(of, simple_mfd_i2c_of_match); diff --git a/include/linux/mfd/max597x.h b/include/linux/mfd/max597x.h new file mode 100644 index 000000000000..8a4da98caf3e --- /dev/null +++ b/include/linux/mfd/max597x.h @@ -0,0 +1,97 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Device driver for regulators in MAX5970 and MAX5978 IC + * + * Copyright (c) 2022 9elements GmbH + * + * Author: Patrick Rudolph + */ + +#ifndef _MAX597X_H +#define _MAX597X_H + +#include + +#define MAX5970_NUM_SWITCHES 2 +#define MAX5978_NUM_SWITCHES 1 +#define MAX597X_NUM_LEDS 4 + +struct max597x_data { + int num_switches; + u32 irng[MAX5970_NUM_SWITCHES]; + u32 mon_rng[MAX5970_NUM_SWITCHES]; + u32 shunt_micro_ohms[MAX5970_NUM_SWITCHES]; +}; + +enum max597x_chip_type { + MAX597x_TYPE_MAX5978 = 1, + MAX597x_TYPE_MAX5970, +}; + +#define MAX5970_REG_CURRENT_L(ch) (0x01 + (ch) * 4) +#define MAX5970_REG_CURRENT_H(ch) (0x00 + (ch) * 4) +#define MAX5970_REG_VOLTAGE_L(ch) (0x03 + (ch) * 4) +#define MAX5970_REG_VOLTAGE_H(ch) (0x02 + (ch) * 4) +#define MAX5970_REG_MON_RANGE 0x18 +#define MAX5970_MON_MASK 0x3 +#define MAX5970_MON(reg, ch) \ + (((reg) >> ((ch) * 2)) & MAX5970_MON_MASK) +#define MAX5970_MON_MAX_RANGE_UV 16000000 + +#define MAX5970_REG_CH_UV_WARN_H(ch) (0x1A + (ch) * 10) +#define MAX5970_REG_CH_UV_WARN_L(ch) (0x1B + (ch) * 10) +#define MAX5970_REG_CH_UV_CRIT_H(ch) (0x1C + (ch) * 10) +#define MAX5970_REG_CH_UV_CRIT_L(ch) (0x1D + (ch) * 10) +#define MAX5970_REG_CH_OV_WARN_H(ch) (0x1E + (ch) * 10) +#define MAX5970_REG_CH_OV_WARN_L(ch) (0x1F + (ch) * 10) +#define MAX5970_REG_CH_OV_CRIT_H(ch) (0x20 + (ch) * 10) +#define MAX5970_REG_CH_OV_CRIT_L(ch) (0x21 + (ch) * 10) + +#define MAX5970_VAL2REG_H(x) (((x) >> 2) & 0xFF) +#define MAX5970_VAL2REG_L(x) ((x) & 0x3) + +#define MAX5970_REG_DAC_FAST(ch) (0x2E + (ch)) + +#define MAX5970_FAST2SLOW_RATIO 200 + +#define MAX5970_REG_STATUS0 0x31 +#define MAX5970_CB_IFAULTF(ch) (1 << (ch)) +#define MAX5970_CB_IFAULTS(ch) (1 << ((ch) + 4)) + +#define MAX5970_REG_STATUS1 0x32 +#define STATUS1_PROT_MASK 0x3 +#define STATUS1_PROT(reg) \ + (((reg) >> 6) & STATUS1_PROT_MASK) +#define STATUS1_PROT_SHUTDOWN 0 +#define STATUS1_PROT_CLEAR_PG 1 +#define STATUS1_PROT_ALERT_ONLY 2 + +#define MAX5970_REG_STATUS2 0x33 +#define MAX5970_IRNG_MASK 0x3 +#define MAX5970_IRNG(reg, ch) \ + (((reg) >> ((ch) * 2)) & MAX5970_IRNG_MASK) + +#define MAX5970_REG_STATUS3 0x34 +#define MAX5970_STATUS3_ALERT BIT(4) +#define MAX5970_STATUS3_PG(ch) BIT(ch) + +#define MAX5970_REG_FAULT0 0x35 +#define UV_STATUS_WARN(ch) (1 << (ch)) +#define UV_STATUS_CRIT(ch) (1 << ((ch) + 4)) + +#define MAX5970_REG_FAULT1 0x36 +#define OV_STATUS_WARN(ch) (1 << (ch)) +#define OV_STATUS_CRIT(ch) (1 << ((ch) + 4)) + +#define MAX5970_REG_FAULT2 0x37 +#define OC_STATUS_WARN(ch) (1 << (ch)) + +#define MAX5970_REG_CHXEN 0x3b +#define CHXEN(ch) (3 << ((ch) * 2)) + +#define MAX5970_REG_LED_FLASH 0x43 + +#define MAX_REGISTERS 0x49 +#define ADC_MASK 0x3FF + +#endif /* _MAX597X_H */