From patchwork Mon Oct 30 19:36:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artur Weber X-Patchwork-Id: 159860 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp2462460vqb; Mon, 30 Oct 2023 12:37:45 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHEOGmMU9D3vwnosZGa5sGzdzkjBNw3Lhc7RTDDYYTlOciOrgXh+oPnrJzmTtD7wV0eTRUE X-Received: by 2002:a05:6358:51d8:b0:168:dc4a:c96f with SMTP id 24-20020a05635851d800b00168dc4ac96fmr9205576rwl.16.1698694665225; Mon, 30 Oct 2023 12:37:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698694665; cv=none; d=google.com; s=arc-20160816; b=TBL/0I3ykAZLdtt032xZljro6c3ut+zBpIsCQ6F17mxmpI+I7kIkl+jwhn54AwNTyA a3OtJH9lYZfVLpfGvIFoTNv0bgP3KhWAeHGK3J8xAkkkQMv+Ikyz/+9rVQgyqsYTsyce 5sip+SJGqsov6cr/lOEnmeklEQViI/oX73svEapR63cJLDzx79+mDy6n2mV0Utu9mDIc R0wHwOUhwcQ0OEzWowmfirimwhVQF18Q0yiNJIPHSpz6RmygQlorJwCLd93zG+erJnBJ 9VSZPeTdIwRNO6i86r32KJmv5FnkBOGGJG4gOS5PNsNL6LZxQXY+BLNLcrvOQ7FURDNj NrvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=swATsRm/D/rD5LWbhxOgcaqNC48PvNHzrc6mwlQlkRo=; fh=pNQf8kBW3o3Cr/f9RsS2JPU7rcdrv8+HQq3q4Yx0m48=; b=oLp20IhUYBCtY4ONXXVjT4yjlw//rV9axq0QHpJjvkO3WohA1aFF+nMTC/fa5rci1B 7Ib9u59qoRugy2DcFNOWB/d+haSpMrSZJFg+0kV780rBa9kc9nTBQCKUMqXZz0HdvqMN KAToGhUtJy/uY+pkT93LU+l84s27h079TnFmcp1ArjeAmEPUYb7XBnSSczSgavH9VWFH sQbw4fR3Zw28fKJ7jlifKOsE1LhTAn24F6WGniiVcR+TnPqWFIEk6Qy1KFQr9pow00j7 rbTumn5cki3UcBrEf7x0JBAbTNj9X4NtXod6SFDQPWsPraf4LDzr6qBN5I2Gg1M5D+gJ Gm8g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=TNMwdrTe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id l184-20020a633ec1000000b00584b3e195basi5288284pga.289.2023.10.30.12.37.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 12:37:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=TNMwdrTe; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id D1FB3807CED2; Mon, 30 Oct 2023 12:37:38 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229937AbjJ3Tg6 (ORCPT + 32 others); Mon, 30 Oct 2023 15:36:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43820 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229837AbjJ3Tg4 (ORCPT ); Mon, 30 Oct 2023 15:36:56 -0400 Received: from mail-lf1-x12d.google.com (mail-lf1-x12d.google.com [IPv6:2a00:1450:4864:20::12d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0E8D9E4; Mon, 30 Oct 2023 12:36:54 -0700 (PDT) Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-507a3b8b113so7050700e87.0; Mon, 30 Oct 2023 12:36:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698694612; x=1699299412; 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=swATsRm/D/rD5LWbhxOgcaqNC48PvNHzrc6mwlQlkRo=; b=TNMwdrTeUoaKkyAka2zhYPkkCaPnrKgcu65NzPg3E8keiqnF5LYUBWpdSDCTkeCKee Zc96XNxA/PRrl2lJ2iKiMH9qJEMwe+WW8GOBdKTXO1rRrcOxMUNq2wnhGxVG1IobFfnR 6ECwSmXEdLN25M3YAJvC+z0pcSXPHxkcIIOK9M5Uit1AEnf/hZcX4EpRT6O4XeXC6WLY u/grzs/DWKlYh0zqMTKjt73kJ9g/6uj42KdLaSzqAiJ1qR4IAgQxAU8bzLt0kMMqwU6K yMXeEGvq00ddYXltgep6a5kuqBtnqk2ZU/JFN8aTMhbE+dU6wCpAD2lUgJ01443rwg0V oQLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698694612; x=1699299412; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=swATsRm/D/rD5LWbhxOgcaqNC48PvNHzrc6mwlQlkRo=; b=ryqQ2Iv+nsrWP1YouGMN6dBTKdXZBtoaUBWWAmZNA9amG6OOFucMXKYyITa/GTwT6I pClH0/7f0hGaKhjsYl2t8PiTZdKtjGC8r7a9v0iq1jcnSEmj50xkfqMhRuBpCzo7WC6T pJH1Vb2TT6Mw1R9bVyLz5cSqb2NgQ5y/h2YwFzi4Z5Es7suPnki5rnlxTqu5d/9caKnQ yD3oaov7bjXNHciJ6HNShsLoqsnxP4qRx0odMM8KW/rkEPAoN1KxtMS8xVpi8j1SXy4E yk77Qj1d3VFFukAKPhYLt3fw3pj+Y+v5zJKCie2QqxbWUuhNp3/0d7SmlIBhXLRaDdxo OIag== X-Gm-Message-State: AOJu0YzhVAjYkBQRziDslImuGn4Rfz9+sG9K08afycNwCwbV0Wu9saYK dfZKWHex65iGSB8oJRlycko= X-Received: by 2002:a05:6512:489a:b0:502:9fce:b6d4 with SMTP id eq26-20020a056512489a00b005029fceb6d4mr7018134lfb.25.1698694612133; Mon, 30 Oct 2023 12:36:52 -0700 (PDT) Received: from hex.my.domain (83.11.208.51.ipv4.supernova.orange.pl. [83.11.208.51]) by smtp.gmail.com with ESMTPSA id a27-20020ac2521b000000b0050482b29ac8sm1510781lfl.31.2023.10.30.12.36.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 12:36:51 -0700 (PDT) From: Artur Weber Date: Mon, 30 Oct 2023 20:36:38 +0100 Subject: [PATCH 1/6] dt-bindings: mfd: brcm,bcm59056: Convert to YAML MIME-Version: 1.0 Message-Id: <20231030-bcm59054-v1-1-3517f980c1e3@gmail.com> References: <20231030-bcm59054-v1-0-3517f980c1e3@gmail.com> In-Reply-To: <20231030-bcm59054-v1-0-3517f980c1e3@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list , Liam Girdwood , Mark Brown Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Artur Weber X-Mailer: b4 0.12.4 X-Developer-Signature: v=1; a=ed25519-sha256; t=1698694608; l=4521; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=Y62BQBGtAcPv02Fu046rbEKVHmHWcxt/VeMRr4coqwE=; b=NXn9onAcbC7xKz6CkbyIxg5LEEu9GFFO0hSS76/oKuLrVrPcz57N+/GGBvnxVJPYP/i02U1hu RnJrwGYM67tDIxoQUuTf/QZUxB0QkMPSRR+FqKBij5kYBfJHDe4kBy8 X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Mon, 30 Oct 2023 12:37:38 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781210456959757226 X-GMAIL-MSGID: 1781210456959757226 Convert devicetree bindings for the Broadcom BCM59056 PMU MFD from TXT to YAML format. This patch does not change any functionality; the bindings remain the same. Signed-off-by: Artur Weber --- .../devicetree/bindings/mfd/brcm,bcm59056.txt | 39 ---------- .../devicetree/bindings/mfd/brcm,bcm59056.yaml | 91 ++++++++++++++++++++++ 2 files changed, 91 insertions(+), 39 deletions(-) diff --git a/Documentation/devicetree/bindings/mfd/brcm,bcm59056.txt b/Documentation/devicetree/bindings/mfd/brcm,bcm59056.txt deleted file mode 100644 index be51a15e05f9..000000000000 --- a/Documentation/devicetree/bindings/mfd/brcm,bcm59056.txt +++ /dev/null @@ -1,39 +0,0 @@ -------------------------------- -BCM590xx Power Management Units -------------------------------- - -Required properties: -- compatible: "brcm,bcm59056" -- reg: I2C slave address -- interrupts: interrupt for the PMU. Generic interrupt client node bindings - are described in interrupt-controller/interrupts.txt - ------------------- -Voltage Regulators ------------------- - -Optional child nodes: -- regulators: container node for regulators following the generic - regulator binding in regulator/regulator.txt - - The valid regulator node names for BCM59056 are: - rfldo, camldo1, camldo2, simldo1, simldo2, sdldo, sdxldo, - mmcldo1, mmcldo2, audldo, micldo, usbldo, vibldo, - csr, iosr1, iosr2, msr, sdsr1, sdsr2, vsr, - gpldo1, gpldo2, gpldo3, gpldo4, gpldo5, gpldo6, - vbus - -Example: - pmu: bcm59056@8 { - compatible = "brcm,bcm59056"; - reg = <0x08>; - interrupts = ; - regulators { - rfldo_reg: rfldo { - regulator-min-microvolt = <1200000>; - regulator-max-microvolt = <3300000>; - }; - - ... - }; - }; diff --git a/Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml b/Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml new file mode 100644 index 000000000000..6d6acc9fd312 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml @@ -0,0 +1,91 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mfd/brcm,bcm59056.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: BCM590xx Power Management Unit MFD + +maintainers: + - Artur Weber + +properties: + compatible: + enum: + - "brcm,bcm59056" + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + regulators: + type: object + description: Container node for regulators. + + # The valid regulator node names for BCM59056 are: + # rfldo, camldo1, camldo2, simldo1, simldo2, sdldo, sdxldo, + # mmcldo1, mmcldo2, audldo, micldo, usbldo, vibldo, + # csr, iosr1, iosr2, msr, sdsr1, sdsr2, vsr, + # gpldo1, gpldo2, gpldo3, gpldo4, gpldo5, gpldo6, + # vbus + patternProperties: + "^(cam|sim|mmc)ldo[1-2]$": + type: object + $ref: /schemas/regulator/regulator.yaml# + unevaluatedProperties: false + + "^(rf|sd|sdx|aud|mic|usb|vib)ldo$": + type: object + $ref: /schemas/regulator/regulator.yaml# + unevaluatedProperties: false + + "^(c|m|v)sr$": + type: object + $ref: /schemas/regulator/regulator.yaml# + unevaluatedProperties: false + + "^(io|sd)sr[1-2]$": + type: object + $ref: /schemas/regulator/regulator.yaml# + unevaluatedProperties: false + + "^gpldo[1-6]$": + type: object + $ref: /schemas/regulator/regulator.yaml# + unevaluatedProperties: false + + properties: + "vbus": + type: object + $ref: /schemas/regulator/regulator.yaml# + unevaluatedProperties: false + +required: + - compatible + - reg + - interrupts + +additionalProperties: false + +examples: + - | + #include + + i2c { + #address-cells = <1>; + #size-cells = <0>; + + pmu: bcm59056@8 { + compatible = "brcm,bcm59056"; + reg = <0x08>; + interrupts = <0 215 IRQ_TYPE_LEVEL_HIGH>; + regulators { + rfldo_reg: rfldo { + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; + }; From patchwork Mon Oct 30 19:36:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artur Weber X-Patchwork-Id: 159857 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp2462227vqb; Mon, 30 Oct 2023 12:37:19 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEHt4q0XQVKWaj9Om4G05Vhac/JW63A2o3E4cQ91DJbsFM2UcR2Sch5Wq/5CAz+QLW5JDxh X-Received: by 2002:a17:90a:d998:b0:27d:5be:f218 with SMTP id d24-20020a17090ad99800b0027d05bef218mr8775446pjv.23.1698694638881; Mon, 30 Oct 2023 12:37:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698694638; cv=none; d=google.com; s=arc-20160816; b=dJ1uBeLqyDF4M832omV8ej4hxC7J//8FmJpz4znGX2FarK/corJ/Z1s3ZKG+XuBtyP yAY/WvIOpWhISId/KPHIdPbiYDY4UEHq/qyV1YjdBtoHwMh5k0gajiyFYIL1MGqqFaID YTdwelXjaScTUXbLHNJiBOEZl345qa5Q20Zm/OK/jcGijtbZbNNe10/2kUb9a32fqGD6 dOPPQkQ5OQfBm0YZhA4VFQ+KrI9dZpY3LNKN+o0aq50yUIzTzB0PVar906Q7NorjBxxQ e3jpruY6i+TbUQLnpZe40ljmQu0eYraYSxC29sxCGDC4lsPuZZmRUz9ca8LTJHJejhwT BbuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=rsTszCSXFvrVoDKYOUlX0fXU0RZFKqac+kUpQnY46h0=; fh=pNQf8kBW3o3Cr/f9RsS2JPU7rcdrv8+HQq3q4Yx0m48=; b=bvgLe4dCYzQieq7ImG2YkxdWyD8FbLm3vMHfsWTcSN97Z6bvg5rlkMhf8V15mQAFiM 9MzDxa72SfMsWgDmkb25ub8Qho3FbHOeTLU2DVNHD+IXdeKMStfNX8zGLrx6K3qE/ycg RxDRtocIWJuz3FxRL93VoyPG9gJVl7o+TQjzKZ4deT9vefl37PjaXbtl5Bjm3Z03WmHc 9q4x7hTX/TyQ9l/aRup9hdWQHfb5ZxTSkCIC7We+BPIstxucl+gXCLkxpdzVEfCtCGxF aI/LV9yJQZn492g1hP+8YDXIIk9Pzd9oqtwuY/aOWbgk+NivtcFsYy2bQDIhltWTDIjh RPHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=W4YQ9fCa; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id gv2-20020a17090b11c200b0027d82c2b020si2690662pjb.88.2023.10.30.12.37.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 12:37:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=W4YQ9fCa; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 14032802C692; Mon, 30 Oct 2023 12:37:17 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230468AbjJ3ThF (ORCPT + 32 others); Mon, 30 Oct 2023 15:37:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58712 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230304AbjJ3Tg6 (ORCPT ); Mon, 30 Oct 2023 15:36:58 -0400 Received: from mail-lf1-x130.google.com (mail-lf1-x130.google.com [IPv6:2a00:1450:4864:20::130]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8D442E8; Mon, 30 Oct 2023 12:36:55 -0700 (PDT) Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-507a3b8b113so7050734e87.0; Mon, 30 Oct 2023 12:36:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698694614; x=1699299414; 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=rsTszCSXFvrVoDKYOUlX0fXU0RZFKqac+kUpQnY46h0=; b=W4YQ9fCaKV9tDJKF4uQu/OSDPGxuvJSHdSLodpK9YQ5sChfsfd2lrUAmrlDN6WMTNd p/QZ1gwdBS93OwHOsU4dNCPymbtpvHXi4nuS1aWGh3fYAeah8FkJr8jBmAYYq4pVJ3VV Ovwgz4f+YfxD4A3YbtoymGdvs8DhIMW9Ngcw8BtKr9xucacBVj9UfeHZIxcUTX8iBArE f1Yj1vLGX2XrsJmfyFM/Jv3mCDl5VwR78ILQzf3Tu86Gyl2HviEWlWHoQlLEPFHOIpjF LRzPE7QP1UR2ge8dicc6WC1xxZux/AexApqXFYjLmox7sN7PtjhggVyU5L3yNF5nyOWX cueg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698694614; x=1699299414; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rsTszCSXFvrVoDKYOUlX0fXU0RZFKqac+kUpQnY46h0=; b=FS22tgsaaTIgUKNFDYGnGGb8V87Hxo9POyIYMrmzt848sOHYPhwdNpqvb/KS47vTaL 6qBSmXsDTRMsqP3Osn/fZsLpVks5zoNQOW2JB9x58KFWIovEJfNV5FmrTaWXXZu7lQoh 4DTlKc4vg1HABWxDN7xOjrAAvkFF4OhuYR4r1YA4JtOcycKenA6CeNrYYpbxeoMxs66T AvNusE/t0VABuuwuF3vVWNbllY7AfjLjHNHYIie9pwqNCUuRdLCh565x1pzYivDHXxz2 ZGPMiSHufBXyVFwVLlIgCJjOwE+t+LhdPkJLG/WLBf7VOx7Xv8AEkllty7BGD/qG5EVR 0mHQ== X-Gm-Message-State: AOJu0YxsDpTB+0zBcXfz+4UbAZdYKmDTfWTVCPRskPxkv/pKOc17FJlf b/kKXN/UGrdYfvah2R3Yr7Y= X-Received: by 2002:a05:6512:1107:b0:508:1178:efa4 with SMTP id l7-20020a056512110700b005081178efa4mr9370551lfg.55.1698694613737; Mon, 30 Oct 2023 12:36:53 -0700 (PDT) Received: from hex.my.domain (83.11.208.51.ipv4.supernova.orange.pl. [83.11.208.51]) by smtp.gmail.com with ESMTPSA id a27-20020ac2521b000000b0050482b29ac8sm1510781lfl.31.2023.10.30.12.36.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 12:36:53 -0700 (PDT) From: Artur Weber Date: Mon, 30 Oct 2023 20:36:39 +0100 Subject: [PATCH 2/6] dt-bindings: mfd: brcm,bcm59056: Add compatible for BCM59054 MIME-Version: 1.0 Message-Id: <20231030-bcm59054-v1-2-3517f980c1e3@gmail.com> References: <20231030-bcm59054-v1-0-3517f980c1e3@gmail.com> In-Reply-To: <20231030-bcm59054-v1-0-3517f980c1e3@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list , Liam Girdwood , Mark Brown Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Artur Weber X-Mailer: b4 0.12.4 X-Developer-Signature: v=1; a=ed25519-sha256; t=1698694608; l=4952; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=J5qoqMtHdHEbtDpozL70617xHH15jYDWQN+WwVZOQIk=; b=CpQns/5NHRryN35mhzpRZ+QiuHTlaUGPSZFCWeE6W3Z8X9lMl5FOSeWs+7HRasA6qKs7eWOcJ 8oyHAAdrH3xCipZMdjS0mBZ0GxHEdOmrenJwRdWMVZdvFBP8uxydgTm X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, 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-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 30 Oct 2023 12:37:17 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781210429454753496 X-GMAIL-MSGID: 1781210429454753496 The BCM59054 MFD is fairly similar to the BCM59056, and will use the same driver. Add compatible and specify the allowed regulator nodes. Signed-off-by: Artur Weber --- .../devicetree/bindings/mfd/brcm,bcm59056.yaml | 125 +++++++++++++++------ 1 file changed, 88 insertions(+), 37 deletions(-) diff --git a/Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml b/Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml index 6d6acc9fd312..5b5044867eca 100644 --- a/Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml +++ b/Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml @@ -12,6 +12,7 @@ maintainers: properties: compatible: enum: + - "brcm,bcm59054" - "brcm,bcm59056" reg: @@ -24,43 +25,93 @@ properties: type: object description: Container node for regulators. - # The valid regulator node names for BCM59056 are: - # rfldo, camldo1, camldo2, simldo1, simldo2, sdldo, sdxldo, - # mmcldo1, mmcldo2, audldo, micldo, usbldo, vibldo, - # csr, iosr1, iosr2, msr, sdsr1, sdsr2, vsr, - # gpldo1, gpldo2, gpldo3, gpldo4, gpldo5, gpldo6, - # vbus - patternProperties: - "^(cam|sim|mmc)ldo[1-2]$": - type: object - $ref: /schemas/regulator/regulator.yaml# - unevaluatedProperties: false - - "^(rf|sd|sdx|aud|mic|usb|vib)ldo$": - type: object - $ref: /schemas/regulator/regulator.yaml# - unevaluatedProperties: false - - "^(c|m|v)sr$": - type: object - $ref: /schemas/regulator/regulator.yaml# - unevaluatedProperties: false - - "^(io|sd)sr[1-2]$": - type: object - $ref: /schemas/regulator/regulator.yaml# - unevaluatedProperties: false - - "^gpldo[1-6]$": - type: object - $ref: /schemas/regulator/regulator.yaml# - unevaluatedProperties: false - - properties: - "vbus": - type: object - $ref: /schemas/regulator/regulator.yaml# - unevaluatedProperties: false +allOf: + - if: + properties: + compatible: + contains: + const: "brcm,bcm59056" + then: + properties: + regulators: + # The valid regulator node names for BCM59056 are: + # rfldo, camldo1, camldo2, simldo1, simldo2, sdldo, sdxldo, + # mmcldo1, mmcldo2, audldo, micldo, usbldo, vibldo, + # csr, iosr1, iosr2, msr, sdsr1, sdsr2, vsr, + # gpldo1, gpldo2, gpldo3, gpldo4, gpldo5, gpldo6, + # vbus + patternProperties: + "^(cam|sim|mmc)ldo[1-2]$": + type: object + $ref: /schemas/regulator/regulator.yaml# + + "^(rf|sd|sdx|aud|mic|usb|vib)ldo$": + type: object + $ref: /schemas/regulator/regulator.yaml# + + "^(c|m|v)sr$": + type: object + $ref: /schemas/regulator/regulator.yaml# + + "^(io|sd)sr[1-2]$": + type: object + $ref: /schemas/regulator/regulator.yaml# + + "^gpldo[1-6]$": + type: object + $ref: /schemas/regulator/regulator.yaml# + + properties: + "vbus": + type: object + $ref: /schemas/regulator/regulator.yaml# + + additionalProperties: false + + - if: + properties: + compatible: + contains: + const: "brcm,bcm59054" + then: + properties: + regulators: + # The valid regulator node names for BCM59054 are: + # rfldo, camldo1, camldo2, simldo1, simldo2, sdldo, sdxldo, + # mmcldo1, mmcldo2, audldo, micldo, usbldo, vibldo, + # csr, iosr1, iosr2, mmsr, sdsr1, sdsr2, vsr, + # gpldo1, gpldo2, gpldo3, tcxldo, lvldo1, lvldo2 + patternProperties: + "^(cam|sim|mmc)ldo[1-2]$": + type: object + $ref: /schemas/regulator/regulator.yaml# + + "^(rf|sd|sdx|aud|mic|usb|vib|tcx)ldo$": + type: object + $ref: /schemas/regulator/regulator.yaml# + + "^(c|mm|v)sr$": + type: object + $ref: /schemas/regulator/regulator.yaml# + + "^(io|sd)sr[1-2]$": + type: object + $ref: /schemas/regulator/regulator.yaml# + + "^gpldo[1-3]$": + type: object + $ref: /schemas/regulator/regulator.yaml# + + "^lvldo[1-2]$": + type: object + $ref: /schemas/regulator/regulator.yaml# + + properties: + "vbus": + type: object + $ref: /schemas/regulator/regulator.yaml# + + additionalProperties: false required: - compatible From patchwork Mon Oct 30 19:36:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artur Weber X-Patchwork-Id: 159856 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp2462195vqb; Mon, 30 Oct 2023 12:37:15 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF0UOKT3HoDtq+3W+OPfXwZGNC+morb/FU+y7dXtEMS+cj4FQeJ6L4T3e0jCWu2s7QINC23 X-Received: by 2002:a17:90b:3597:b0:27d:24d6:7343 with SMTP id mm23-20020a17090b359700b0027d24d67343mr7329690pjb.19.1698694634813; Mon, 30 Oct 2023 12:37:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698694634; cv=none; d=google.com; s=arc-20160816; b=NE1h6NshRctbg729Ay9N/zG1m62oBpFyXSHWXS3CHt7fuJ1LH5ODTy+KOKgSkXz9bg BX9KSQHSmLtduuhpC0s4boFnQsy6OOENZug2XA3ifki4+sQUAoGs34eOqpjrjtnsus5A eyL3pm7HsDvJXRfUdA7L3pk5rYtf9WrUi2r+vF9dfnHJ2YfK/VXGpKkBU8nUiGVosfkB 3URKh33tfmoJ7Vp1dKG/D71H+WioeRsF9wKLhnuuZ34jLXHYx0cyXduFU3sRYP2bMyXH dNUdpbCAJuU4prc4LjvX1iX97zJEPyVFmGqG+GL6MfnHNKRDx1Cf9wcwnnnrMVFjup/8 txnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=3545GZ4rTilRPlMK6OENQjdsYfS2hQ9SURsOYUBvQmk=; fh=pNQf8kBW3o3Cr/f9RsS2JPU7rcdrv8+HQq3q4Yx0m48=; b=TT7NIycLb6JAFiYx++JY4ga6gJrXqUvY7rcmh9pFM0bjM++vbdHF/PNVQ6Cxz2t/OH 1IgotYFswwIEjnoCWpSqZEcOdXoVFo1NyqtbwwPGtn+fbfLTKeDXi5Z0/MKdRcMhiCfD tvQ2y5LUl0jhLcA8MNhqkSr9Fm9hZZLwgjavjjw4lheQ2//obO4JgJqNl4pekdesxgNv jSVappPnH6BidELadq+aK2iGEF+n2SP4yXYkaahDl5zB4xZkYcdc4sQp6wl0rQSbBax/ QiQVT5gw7aYvtjN3x65J3XiYxBxfcOOuI6hOkSmCzH/AwEm/GJYarBew462IShZNT1D8 7e3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=A+e3+i6h; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id a15-20020a17090acb8f00b002791e648ce3si5290989pju.174.2023.10.30.12.37.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 12:37:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=A+e3+i6h; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 12F5F8040EE6; Mon, 30 Oct 2023 12:37:13 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231167AbjJ3ThD (ORCPT + 32 others); Mon, 30 Oct 2023 15:37:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230468AbjJ3Tg7 (ORCPT ); Mon, 30 Oct 2023 15:36:59 -0400 Received: from mail-lf1-x131.google.com (mail-lf1-x131.google.com [IPv6:2a00:1450:4864:20::131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 15A86EA; Mon, 30 Oct 2023 12:36:57 -0700 (PDT) Received: by mail-lf1-x131.google.com with SMTP id 2adb3069b0e04-508126afb9bso6792745e87.0; Mon, 30 Oct 2023 12:36:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698694615; x=1699299415; 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=3545GZ4rTilRPlMK6OENQjdsYfS2hQ9SURsOYUBvQmk=; b=A+e3+i6htx2s2elGh3IHaPlPGRUyh6++kHhK3TxVzr0WPNjzFAeopth8zFAjfwn2MN Ug2Ai8JtxKE76gPP1pUJNMCthVGeRzNA+SaaX5n+8EKDppgQwjvNz7G3VVdeGzfJlmQ4 z9io28Coag9k1ziFIzMQYR8znBLE5ka7ybhZDc7hy8lktQgKdDRs8ShT0x46/Oqmll5f iAtcZ16c9wKWJfNWq4+d1CCxa1g58GchplG/iu93u92wsYi+lQd/9c/P/H74oG6aqhWs O8nfnVC+FhDdFfkeWPt0Cv7RGvYXvo+maJDQHD1p923zmhSX1MuTSIQpaLdrTdeRWD4z Qkbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698694615; x=1699299415; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3545GZ4rTilRPlMK6OENQjdsYfS2hQ9SURsOYUBvQmk=; b=pwU6RiAvDFG2uoOgFK/bdi+Wlzg/A3sTOv9Oue4/WySqS5Kni4gONq7ei3AsAEavYn 7MFKcZr4euIf2MLGZkYsuBWpkQ/os/A4BmPhdlZo8sxbdRYm53ozTZBhBcS2uZoYAlLw ykk8RXR/+Fb5cCTHELswk3/7rki3Mc23udbxl5Mdnp88w2MIu7Eurhq1N7m8SQ38Fv3g 1aa6DuZIhzjqby7iL1SUdPdbbIuRbPiWcBE+GGracR1vM2KMxpwj/QVg+ufYOt/wQOTp buiyh6j6X34J0qvEEAFBzLxv+KrfKShGW82PypUTcC4pPfCFd8QdL5lauJ8PtarsTMqy xpOA== X-Gm-Message-State: AOJu0YwqmHmUm+KNM5VUoQ3WCqiiKNw+aMEV0Tvs7GhewEV1s4y2RECX zR9naQqr0bNmrwNlx8Ya56w= X-Received: by 2002:a05:6512:3e09:b0:503:19d8:8dc3 with SMTP id i9-20020a0565123e0900b0050319d88dc3mr9284816lfv.31.1698694615292; Mon, 30 Oct 2023 12:36:55 -0700 (PDT) Received: from hex.my.domain (83.11.208.51.ipv4.supernova.orange.pl. [83.11.208.51]) by smtp.gmail.com with ESMTPSA id a27-20020ac2521b000000b0050482b29ac8sm1510781lfl.31.2023.10.30.12.36.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 12:36:54 -0700 (PDT) From: Artur Weber Date: Mon, 30 Oct 2023 20:36:40 +0100 Subject: [PATCH 3/6] ARM: dts: Drop DTS for BCM59056 PMIC MIME-Version: 1.0 Message-Id: <20231030-bcm59054-v1-3-3517f980c1e3@gmail.com> References: <20231030-bcm59054-v1-0-3517f980c1e3@gmail.com> In-Reply-To: <20231030-bcm59054-v1-0-3517f980c1e3@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list , Liam Girdwood , Mark Brown Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Artur Weber X-Mailer: b4 0.12.4 X-Developer-Signature: v=1; a=ed25519-sha256; t=1698694608; l=3995; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=DBtpuYO/zr95rgnLU/rQbbV2xjIrUTq43L7BHBrPA9U=; b=hZdG9wUjwVxv+mKU8AxupCxa7wqP/eesbom+u4x00YcCHX2XrH7KzI07mJSBw3r5HgIZBwjah DN7mNasV6LeCrxA/gv2MoC855gyUl/PFMS7JhkQ8aXq3b+MPu7jsmk3 X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED,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-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 30 Oct 2023 12:37:13 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781210425155471359 X-GMAIL-MSGID: 1781210425155471359 The BCM59056 PMIC has its own separate DTSI, meant to be included in a DTS file after defining the pmu node on some I2C bus. I'm not aware of many other devices that do this, and it seems very unintuitive. Drop the DTS in favor of adding the BCM59056 PMIC node directly into the device DTS files. Signed-off-by: Artur Weber --- arch/arm/boot/dts/broadcom/bcm28155-ap.dts | 68 +++++++++++----------- arch/arm/boot/dts/broadcom/bcm59056.dtsi | 91 ------------------------------ 2 files changed, 32 insertions(+), 127 deletions(-) diff --git a/arch/arm/boot/dts/broadcom/bcm28155-ap.dts b/arch/arm/boot/dts/broadcom/bcm28155-ap.dts index 2f3634545e64..cefaa9a3c45c 100644 --- a/arch/arm/boot/dts/broadcom/bcm28155-ap.dts +++ b/arch/arm/boot/dts/broadcom/bcm28155-ap.dts @@ -37,7 +37,39 @@ &pmu_bsc { status = "okay"; pmu: pmu@8 { + compatible = "brcm,bcm59056"; + interrupts = ; reg = <0x08>; + + regulators { + camldo1_reg: camldo1 { + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + sdldo_reg: sdldo { + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3000000>; + }; + + sdxldo_reg: sdxldo { + regulator-min-microvolt = <2700000>; + regulator-max-microvolt = <3300000>; + }; + + usbldo_reg: usbldo { + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + iosr1_reg: iosr1 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + }; + }; }; }; @@ -74,39 +106,3 @@ &usbotg { &usbphy { status = "okay"; }; - -#include "bcm59056.dtsi" - -&pmu { - compatible = "brcm,bcm59056"; - interrupts = ; - regulators { - camldo1_reg: camldo1 { - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-always-on; - }; - - sdldo_reg: sdldo { - regulator-min-microvolt = <3000000>; - regulator-max-microvolt = <3000000>; - }; - - sdxldo_reg: sdxldo { - regulator-min-microvolt = <2700000>; - regulator-max-microvolt = <3300000>; - }; - - usbldo_reg: usbldo { - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-always-on; - }; - - iosr1_reg: iosr1 { - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-always-on; - }; - }; -}; diff --git a/arch/arm/boot/dts/broadcom/bcm59056.dtsi b/arch/arm/boot/dts/broadcom/bcm59056.dtsi deleted file mode 100644 index a9bb7ad81378..000000000000 --- a/arch/arm/boot/dts/broadcom/bcm59056.dtsi +++ /dev/null @@ -1,91 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* -* Copyright 2014 Linaro Limited -* Author: Matt Porter -*/ - -&pmu { - compatible = "brcm,bcm59056"; - regulators { - rfldo_reg: rfldo { - }; - - camldo1_reg: camldo1 { - }; - - camldo2_reg: camldo2 { - }; - - simldo1_reg: simldo1 { - }; - - simldo2_reg: simldo2 { - }; - - sdldo_reg: sdldo { - }; - - sdxldo_reg: sdxldo { - }; - - mmcldo1_reg: mmcldo1 { - }; - - mmcldo2_reg: mmcldo2 { - }; - - audldo_reg: audldo { - }; - - micldo_reg: micldo { - }; - - usbldo_reg: usbldo { - }; - - vibldo_reg: vibldo { - }; - - csr_reg: csr { - }; - - iosr1_reg: iosr1 { - }; - - iosr2_reg: iosr2 { - }; - - msr_reg: msr { - }; - - sdsr1_reg: sdsr1 { - }; - - sdsr2_reg: sdsr2 { - }; - - vsr_reg: vsr { - }; - - gpldo1_reg: gpldo1 { - }; - - gpldo2_reg: gpldo2 { - }; - - gpldo3_reg: gpldo3 { - }; - - gpldo4_reg: gpldo4 { - }; - - gpldo5_reg: gpldo5 { - }; - - gpldo6_reg: gpldo6 { - }; - - vbus_reg: vbus { - }; - }; -}; From patchwork Mon Oct 30 19:36:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artur Weber X-Patchwork-Id: 159858 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp2462244vqb; Mon, 30 Oct 2023 12:37:20 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEH0bhynOESsZa1/6kFssGKBnVtv6zo3kskd/EQ0NoS7GsHTFJ5RkYBxXw3cC9K4Sk9EZA4 X-Received: by 2002:a05:6358:52c5:b0:168:ec27:47a1 with SMTP id z5-20020a05635852c500b00168ec2747a1mr14805788rwz.26.1698694640324; Mon, 30 Oct 2023 12:37:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698694640; cv=none; d=google.com; s=arc-20160816; b=m5t7NQg0qG+770npK9JRbmH4nVMaaq4MsEQ2TmetxPtPitGVLk5HNIa8PPKuMCZmqo WJNkRTv7uat3OfZ15E9XVSVhaiBiTlgRAKfyE+K6NHyGE0jNEFC2sVB20nk2mjcwSCQc HoYwqjzrBmV6gEgth8ksO1CPUug66vlJAw2RvwYaJsrMVejf2/P16MNQkBpdeRnvXQZY Rv50CaYncMWqtdNOdL1WqtSChutaf0dsNfbKXjg2HjXdvQ3O9Rqa1JVno75nz8XKvks2 rTl0Po6U9S+tsWFPE27tu3oMhqakWzy4g83Fzgc8ZwSWdFKvKdiiFiAjAfRERY4fqb5K JbHg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=MVGWdNdmpu8vSibrYJC/RZxDG0iblOVJzHPyX+FabSU=; fh=pNQf8kBW3o3Cr/f9RsS2JPU7rcdrv8+HQq3q4Yx0m48=; b=KsNEaGLdN43Zvmr+nSN7yCKJtgOYt9pJlngLP3CTSna5rKrZugZo2dGCHCOTfZcHlU DDuAHfus1+lbo4bDiyGWWfgshgU859Nw09Lj65oMyvPcvtLnmR+4bT1sI4+9O7JDe6sn JiQOgoOqoOChkiwQeOEO1YxcFxYuSQ3CqXHwxczM4RM79o6mtnwtnSW3/7d540On9ZAX 38c1uqbESAIOCo4OLSkCdkbkfkOw8VSvS8BYQ9oPGLUno80FV9qKZKw3tu6ZmlQp6bgL vVjBayJd9FAdT5Oc2JH+pNozi90bAooBefBllmBe6lS91oUXTKzuWVjc0pkNb/uonO/k 8qlg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=hu3ccR1j; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id a21-20020a63e855000000b005a9fde46f98si5418147pgk.52.2023.10.30.12.37.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 12:37:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=hu3ccR1j; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 9B573802C688; Mon, 30 Oct 2023 12:37:19 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231589AbjJ3ThI (ORCPT + 32 others); Mon, 30 Oct 2023 15:37:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58738 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230494AbjJ3ThC (ORCPT ); Mon, 30 Oct 2023 15:37:02 -0400 Received: from mail-lf1-x12b.google.com (mail-lf1-x12b.google.com [IPv6:2a00:1450:4864:20::12b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C04C4EE; Mon, 30 Oct 2023 12:36:58 -0700 (PDT) Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-50930f126b1so107614e87.3; Mon, 30 Oct 2023 12:36:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698694617; x=1699299417; 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=MVGWdNdmpu8vSibrYJC/RZxDG0iblOVJzHPyX+FabSU=; b=hu3ccR1jimNXh2B0ACJGbtYF090Tqi23OaoKu1WQpJ+cPw40xM4N84iUPpurvzGFs2 voNaItV/YTJ4dZQK9KtMcQFOb0uVwMAeRxzUHC2JKZlx0mVki9et+2tEPfo1WUypNNMm 1M0uQtG67JRlG3j+EI8PQJhiTfXsx2/GURav6o9IP4MG2VOrWca3dmhuecbENu1Zk8+h bb5k2ZKuRWV2qa2HkjKMPCbfRaTQ8ZclRsLvNAhNWl0YSnlkZn97zUeTOhbvqV46TwrC E+GkU/lv5cDKcDZS+ZZ5mi8Ftlg2D7tpJJrxpkDHm2YCDUZ7twxmlHXB6KduyFSGRYd5 Vlig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698694617; x=1699299417; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MVGWdNdmpu8vSibrYJC/RZxDG0iblOVJzHPyX+FabSU=; b=W/eGgHA1vLzrGEGyZ1TiHaBJkLzkRxEih9T3l9i4h200tLHClVX94JI59F2iVrYq+Z LhGJCw0iiynoXiqjC88P7KQEjAqHN9wTMa20nbknUka0s3yLAGTOvEr3G1BWZXHSet+w 18U5KzbiG76+YilrjwVHCXZ8Dh+KO4bEDchBSPdniKMwXNBq7GWeb+YH9Qj69zY0zPal ZQ7wgDGeiq6gZ1V4LZdu4N1Z8xFxOcsxw8cia/T1N1NRumUreD5LXjkb3Jgj3QwmZK+P Xv/cpwZ8OcbjEQnIrE+LFGQSy4ZSPtPvYxWJGMjSk2zOCAMPqvJDL+yrxc2Tlvvu/3Tu c+jA== X-Gm-Message-State: AOJu0Yy0prFPlI2ffhHilHWDLJWPjWpmbWGptcnG/aSWEIMrSgspxJgU U0m3sYJ/UgV2BhDMHZdlb3E= X-Received: by 2002:ac2:424f:0:b0:502:9a2c:f766 with SMTP id m15-20020ac2424f000000b005029a2cf766mr7192644lfl.30.1698694616903; Mon, 30 Oct 2023 12:36:56 -0700 (PDT) Received: from hex.my.domain (83.11.208.51.ipv4.supernova.orange.pl. [83.11.208.51]) by smtp.gmail.com with ESMTPSA id a27-20020ac2521b000000b0050482b29ac8sm1510781lfl.31.2023.10.30.12.36.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 12:36:56 -0700 (PDT) From: Artur Weber Date: Mon, 30 Oct 2023 20:36:41 +0100 Subject: [PATCH 4/6] mfd: bcm590xx: Add compatible for BCM59054 MIME-Version: 1.0 Message-Id: <20231030-bcm59054-v1-4-3517f980c1e3@gmail.com> References: <20231030-bcm59054-v1-0-3517f980c1e3@gmail.com> In-Reply-To: <20231030-bcm59054-v1-0-3517f980c1e3@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list , Liam Girdwood , Mark Brown Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Artur Weber X-Mailer: b4 0.12.4 X-Developer-Signature: v=1; a=ed25519-sha256; t=1698694608; l=1936; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=GaZAs1pHOm9g/5MXQbdGtce8n4JeiRhmO5EZ2BKjVhk=; b=iXnXR/iUSsOy5Qa5LWnXMndbYTWYQ0arqnxQ5RAfnU1nadKV2ZmXXoLfF5IdKOLigzM8FZ/6i NxuD1yo/ADECA98t5VkRwFb8psKKdYFIGg5911KUgycrohoLdBS8NHv X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED,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-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 30 Oct 2023 12:37:19 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781210431495346439 X-GMAIL-MSGID: 1781210431495346439 The BCM59056 supported by the bcm590xx driver is similar to the BCM59054 MFD. Add a compatible for it in the driver, in preparation for adding support for this chip in the bcm590xx regulator driver. Signed-off-by: Artur Weber --- drivers/mfd/bcm590xx.c | 5 ++++- include/linux/mfd/bcm590xx.h | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/mfd/bcm590xx.c b/drivers/mfd/bcm590xx.c index 92eede9a5e61..f5c5fa97ca9a 100644 --- a/drivers/mfd/bcm590xx.c +++ b/drivers/mfd/bcm590xx.c @@ -50,6 +50,8 @@ static int bcm590xx_i2c_probe(struct i2c_client *i2c_pri) bcm590xx->dev = &i2c_pri->dev; bcm590xx->i2c_pri = i2c_pri; + bcm590xx->device_type = (unsigned int)of_device_get_match_data(bcm590xx->dev); + bcm590xx->regmap_pri = devm_regmap_init_i2c(i2c_pri, &bcm590xx_regmap_config_pri); if (IS_ERR(bcm590xx->regmap_pri)) { @@ -91,7 +93,8 @@ static int bcm590xx_i2c_probe(struct i2c_client *i2c_pri) } static const struct of_device_id bcm590xx_of_match[] = { - { .compatible = "brcm,bcm59056" }, + { .compatible = "brcm,bcm59054", .data = (void *)BCM59054_TYPE }, + { .compatible = "brcm,bcm59056", .data = (void *)BCM59056_TYPE }, { } }; MODULE_DEVICE_TABLE(of, bcm590xx_of_match); diff --git a/include/linux/mfd/bcm590xx.h b/include/linux/mfd/bcm590xx.h index 6b8791da6119..ed0d8be6387c 100644 --- a/include/linux/mfd/bcm590xx.h +++ b/include/linux/mfd/bcm590xx.h @@ -13,12 +13,19 @@ #include #include +/* device types */ +enum { + BCM59054_TYPE, + BCM59056_TYPE, +}; + /* max register address */ #define BCM590XX_MAX_REGISTER_PRI 0xe7 #define BCM590XX_MAX_REGISTER_SEC 0xf0 struct bcm590xx { struct device *dev; + unsigned int device_type; struct i2c_client *i2c_pri; struct i2c_client *i2c_sec; struct regmap *regmap_pri; From patchwork Mon Oct 30 19:36:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artur Weber X-Patchwork-Id: 159859 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp2462308vqb; Mon, 30 Oct 2023 12:37:28 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGjwQEnqrplkhEtw5LTmzP2n/e36yqcJf6+fx/+4Xa50oWxt4D9m6EXCz8vPYCC1EPQl4WJ X-Received: by 2002:a05:6a20:da91:b0:17a:2f1:ce1 with SMTP id iy17-20020a056a20da9100b0017a02f10ce1mr11968143pzb.31.1698694647747; Mon, 30 Oct 2023 12:37:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698694647; cv=none; d=google.com; s=arc-20160816; b=f3RihSFCrqgcMV103qxo7QiNcvCist5nDKEb7HbVRgB7bvXU6uZo6H10OEWfhQib7h eq3oFL3yw52vAhsH6+a3AzLmfXIN65zswKTuEIfcX8dtezkuAOIFn3ojlZxDENbr4a6z PnSNTCjJYK+GFsuGcSZ37day6szUOo8GfMlN5NUKOL2XuXBqvgkWfVa0Fq2G9fUHi6Ey yANIgscQE6noPtaDZXcms8vMDniHfSTLETruFGHuGmResg8zRL8eyMNbRLPjkzlcr1xX TWb1v1mqlpa1LkCWFQk9kcRWbSeCtkwkQE9daUYIA4CzASRMDVUM1OTJK7hzv1cjOvkI 8ZTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=lar4q5BLMYdDXvaz2nduMcPI3LQymFQyRA6QLE+IUPA=; fh=pNQf8kBW3o3Cr/f9RsS2JPU7rcdrv8+HQq3q4Yx0m48=; b=EtwkiXEOjSLcp1I3xmrd+vMpXKvOCGs4lvuRYWZr+nIzikE4+R1jKMGn7qPa+AEq33 5wza2eX3uLI60kzzfn3MuaZ3WCO+dmosgQEIqgp9H2hpIVmjYfUKW+6X8PpzoykVXBOu IrLPoX7NCSxetAnZc5rEjKe/j50Se7OeIOOada8v5PlVOZrPiy+Au9lKBVjErkDaByx+ CN69XB4BEGcZHV+zH6AznkR5+WUfJdYMNxRoOMek/5moqIT5ENIZKKA6NXvvFq05dSzx VXhLVx2gmmqk8z7HDwdAlo5wPv9BuU1qOGUHVMKuzE8Ih/0357bAIXDpsCSlS3QS6SX/ J05g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=TSntvALj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id i18-20020aa796f2000000b0068fd7cb5864si5361100pfq.263.2023.10.30.12.37.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 12:37:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=TSntvALj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 8E867802C690; Mon, 30 Oct 2023 12:37:26 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231719AbjJ3ThP (ORCPT + 32 others); Mon, 30 Oct 2023 15:37:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58820 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231368AbjJ3ThH (ORCPT ); Mon, 30 Oct 2023 15:37:07 -0400 Received: from mail-lj1-x236.google.com (mail-lj1-x236.google.com [IPv6:2a00:1450:4864:20::236]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8959AE8; Mon, 30 Oct 2023 12:37:00 -0700 (PDT) Received: by mail-lj1-x236.google.com with SMTP id 38308e7fff4ca-2c594196344so71559801fa.3; Mon, 30 Oct 2023 12:37:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698694619; x=1699299419; 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=lar4q5BLMYdDXvaz2nduMcPI3LQymFQyRA6QLE+IUPA=; b=TSntvALjaye1tosQNaLGGMlHlp1LbeFklqLwef/mVyy5WV+5Sm97W3EEZtwZYCXEXA 1hYaIz20rTwfsaXALciX06CxD7cGtr/5mntl870NRayKonhScDcySC2Y9fE5jHfnAcKN mFBthvdPO1yQVmH9TBagxVjfC/bNGsCKGrPNiME1L6iBZEmAdNn3+q8ppvuNkv9bw+p6 uFAo2PqCwQyI1kCAWVpmjpJ374DmtTPGkRa7S5i/nzdg0yWjOQNoolEkYagDBT8TBRKR UGfHup+9ZKtyrTpf4GQGgekNd/yGY81yA5U5MbFpSqBmHKRyKD5CTQGENJbva6vHesQP x7mQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698694619; x=1699299419; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lar4q5BLMYdDXvaz2nduMcPI3LQymFQyRA6QLE+IUPA=; b=NtXw6bIKfWClg/D3ofZQZZUtveU0QrEvAEAz9mpjNVXUKxkIRly+WZUiUAUccNyuWu ZNL60KW8HKqf4kgG/Ye+OkE/L9nEzYP5gSq/fvVxQJRE1arFBhppgj5Vt4ey3S6oOZT9 PIB1xfrmhiX8ivjraqzx6TSLV7v2lRh4uzukX7XBQV7ZJJ1inoph9esApSNEy1JmQMCZ iNBmj5LSIcRezuymbHigpQOHnHwHvc13RfSwbweH/OjEyh8IBXO8m69JYaLKjE2Yxsrh /pb2lltce0ffifS2slysqUeXkLX8YOI7SgBYvgIWpzT0bBVG3kwacpg1KSYbpzeXO8Rd ORxA== X-Gm-Message-State: AOJu0YxBXe/kQWcQQCEhWSkOzUAbK0IeNCnQm9D4LTfGch0H18czMPix BllUJhcY9AoUZhnTr5wjrMA= X-Received: by 2002:ac2:4982:0:b0:509:d86:fb2c with SMTP id f2-20020ac24982000000b005090d86fb2cmr4519162lfl.58.1698694618550; Mon, 30 Oct 2023 12:36:58 -0700 (PDT) Received: from hex.my.domain (83.11.208.51.ipv4.supernova.orange.pl. [83.11.208.51]) by smtp.gmail.com with ESMTPSA id a27-20020ac2521b000000b0050482b29ac8sm1510781lfl.31.2023.10.30.12.36.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 12:36:58 -0700 (PDT) From: Artur Weber Date: Mon, 30 Oct 2023 20:36:42 +0100 Subject: [PATCH 5/6] regulator: bcm590xx: Add support for BCM59054 MIME-Version: 1.0 Message-Id: <20231030-bcm59054-v1-5-3517f980c1e3@gmail.com> References: <20231030-bcm59054-v1-0-3517f980c1e3@gmail.com> In-Reply-To: <20231030-bcm59054-v1-0-3517f980c1e3@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list , Liam Girdwood , Mark Brown Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Artur Weber X-Mailer: b4 0.12.4 X-Developer-Signature: v=1; a=ed25519-sha256; t=1698694609; l=25592; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=Vcld9l2CUccXXlMEKsE/QRX28i7sxc2Cj+81kZnastM=; b=I7E3jM0U+2Pr1ZGIQOUAO1WDPZ9JI75vWZXHUFRy3uXRWEIZuL7tE4DXsQXvqrf6tA6l2uJXh OtjgaGlbPy8BqomOVt1Ud8U9gJNkeKcGvcQFSnuHzwrAityvc0MnsjL X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED,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-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 30 Oct 2023 12:37:26 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781210438504198114 X-GMAIL-MSGID: 1781210438504198114 The BCM59054 is fairly similar in terms of regulators to the already supported BCM59056, as included in the BCM590XX driver. Add support for the BCM59054's regulators to the BCM590XX driver. Switch from using defines for common checks to using functions which return different values depending on the identified MFD model. While we're at it, fix a bug where the enable/vsel register offsets for GPLDO and LDO regulators were calculated incorrectly. Also, change the regulator enable bitmask to cover the entire PMMODE register. Signed-off-by: Artur Weber --- drivers/regulator/bcm590xx-regulator.c | 624 ++++++++++++++++++++++++--------- 1 file changed, 465 insertions(+), 159 deletions(-) diff --git a/drivers/regulator/bcm590xx-regulator.c b/drivers/regulator/bcm590xx-regulator.c index 9f0cda46b015..8b90eae06ca6 100644 --- a/drivers/regulator/bcm590xx-regulator.c +++ b/drivers/regulator/bcm590xx-regulator.c @@ -18,37 +18,54 @@ #include #include +struct bcm590xx_info { + const char *name; + const char *vin_name; + u8 n_voltages; + const unsigned int *volt_table; + u8 n_linear_ranges; + const struct linear_range *linear_ranges; +}; + +struct bcm590xx_reg { + struct regulator_desc *desc; + struct bcm590xx *mfd; +}; + +#define BCM590XX_REG_ENABLE GENMASK(7, 0) +#define BCM590XX_REG_3BIT_ENABLE (GENMASK(4, 3) | GENMASK(1, 0)) +#define BCM590XX_VBUS_ENABLE BIT(2) +#define BCM590XX_LDO_VSEL_MASK GENMASK(5, 3) +#define BCM590XX_SR_VSEL_MASK GENMASK(5, 0) + +/* BCM59056 registers */ + /* I2C slave 0 registers */ -#define BCM590XX_RFLDOPMCTRL1 0x60 -#define BCM590XX_IOSR1PMCTRL1 0x7a -#define BCM590XX_IOSR2PMCTRL1 0x7c -#define BCM590XX_CSRPMCTRL1 0x7e -#define BCM590XX_SDSR1PMCTRL1 0x82 -#define BCM590XX_SDSR2PMCTRL1 0x86 -#define BCM590XX_MSRPMCTRL1 0x8a -#define BCM590XX_VSRPMCTRL1 0x8e -#define BCM590XX_RFLDOCTRL 0x96 -#define BCM590XX_CSRVOUT1 0xc0 +#define BCM59056_RFLDOPMCTRL1 0x60 +#define BCM59056_IOSR1PMCTRL1 0x7a +#define BCM59056_IOSR2PMCTRL1 0x7c +#define BCM59056_CSRPMCTRL1 0x7e +#define BCM59056_SDSR1PMCTRL1 0x82 +#define BCM59056_SDSR2PMCTRL1 0x86 +#define BCM59056_MSRPMCTRL1 0x8a +#define BCM59056_VSRPMCTRL1 0x8e +#define BCM59056_RFLDOCTRL 0x96 +#define BCM59056_CSRVOUT1 0xc0 /* I2C slave 1 registers */ -#define BCM590XX_GPLDO5PMCTRL1 0x16 -#define BCM590XX_GPLDO6PMCTRL1 0x18 -#define BCM590XX_GPLDO1CTRL 0x1a -#define BCM590XX_GPLDO2CTRL 0x1b -#define BCM590XX_GPLDO3CTRL 0x1c -#define BCM590XX_GPLDO4CTRL 0x1d -#define BCM590XX_GPLDO5CTRL 0x1e -#define BCM590XX_GPLDO6CTRL 0x1f -#define BCM590XX_OTG_CTRL 0x40 -#define BCM590XX_GPLDO1PMCTRL1 0x57 -#define BCM590XX_GPLDO2PMCTRL1 0x59 -#define BCM590XX_GPLDO3PMCTRL1 0x5b -#define BCM590XX_GPLDO4PMCTRL1 0x5d - -#define BCM590XX_REG_ENABLE BIT(7) -#define BCM590XX_VBUS_ENABLE BIT(2) -#define BCM590XX_LDO_VSEL_MASK GENMASK(5, 3) -#define BCM590XX_SR_VSEL_MASK GENMASK(5, 0) +#define BCM59056_GPLDO5PMCTRL1 0x16 +#define BCM59056_GPLDO6PMCTRL1 0x18 +#define BCM59056_GPLDO1CTRL 0x1a +#define BCM59056_GPLDO2CTRL 0x1b +#define BCM59056_GPLDO3CTRL 0x1c +#define BCM59056_GPLDO4CTRL 0x1d +#define BCM59056_GPLDO5CTRL 0x1e +#define BCM59056_GPLDO6CTRL 0x1f +#define BCM59056_OTG_CTRL 0x40 +#define BCM59056_GPLDO1PMCTRL1 0x57 +#define BCM59056_GPLDO2PMCTRL1 0x59 +#define BCM59056_GPLDO3PMCTRL1 0x5b +#define BCM59056_GPLDO4PMCTRL1 0x5d /* * RFLDO to VSR regulators are @@ -56,74 +73,69 @@ */ /* LDO regulator IDs */ -#define BCM590XX_REG_RFLDO 0 -#define BCM590XX_REG_CAMLDO1 1 -#define BCM590XX_REG_CAMLDO2 2 -#define BCM590XX_REG_SIMLDO1 3 -#define BCM590XX_REG_SIMLDO2 4 -#define BCM590XX_REG_SDLDO 5 -#define BCM590XX_REG_SDXLDO 6 -#define BCM590XX_REG_MMCLDO1 7 -#define BCM590XX_REG_MMCLDO2 8 -#define BCM590XX_REG_AUDLDO 9 -#define BCM590XX_REG_MICLDO 10 -#define BCM590XX_REG_USBLDO 11 -#define BCM590XX_REG_VIBLDO 12 +#define BCM59056_REG_RFLDO 0 +#define BCM59056_REG_CAMLDO1 1 +#define BCM59056_REG_CAMLDO2 2 +#define BCM59056_REG_SIMLDO1 3 +#define BCM59056_REG_SIMLDO2 4 +#define BCM59056_REG_SDLDO 5 +#define BCM59056_REG_SDXLDO 6 +#define BCM59056_REG_MMCLDO1 7 +#define BCM59056_REG_MMCLDO2 8 +#define BCM59056_REG_AUDLDO 9 +#define BCM59056_REG_MICLDO 10 +#define BCM59056_REG_USBLDO 11 +#define BCM59056_REG_VIBLDO 12 /* DCDC regulator IDs */ -#define BCM590XX_REG_CSR 13 -#define BCM590XX_REG_IOSR1 14 -#define BCM590XX_REG_IOSR2 15 -#define BCM590XX_REG_MSR 16 -#define BCM590XX_REG_SDSR1 17 -#define BCM590XX_REG_SDSR2 18 -#define BCM590XX_REG_VSR 19 +#define BCM59056_REG_CSR 13 +#define BCM59056_REG_IOSR1 14 +#define BCM59056_REG_IOSR2 15 +#define BCM59056_REG_MSR 16 +#define BCM59056_REG_SDSR1 17 +#define BCM59056_REG_SDSR2 18 +#define BCM59056_REG_VSR 19 /* * GPLDO1 to VBUS regulators are * accessed via I2C slave 1 */ -#define BCM590XX_REG_GPLDO1 20 -#define BCM590XX_REG_GPLDO2 21 -#define BCM590XX_REG_GPLDO3 22 -#define BCM590XX_REG_GPLDO4 23 -#define BCM590XX_REG_GPLDO5 24 -#define BCM590XX_REG_GPLDO6 25 -#define BCM590XX_REG_VBUS 26 - -#define BCM590XX_NUM_REGS 27 +#define BCM59056_REG_GPLDO1 20 +#define BCM59056_REG_GPLDO2 21 +#define BCM59056_REG_GPLDO3 22 +#define BCM59056_REG_GPLDO4 23 +#define BCM59056_REG_GPLDO5 24 +#define BCM59056_REG_GPLDO6 25 +#define BCM59056_REG_VBUS 26 -#define BCM590XX_REG_IS_LDO(n) (n < BCM590XX_REG_CSR) -#define BCM590XX_REG_IS_GPLDO(n) \ - ((n > BCM590XX_REG_VSR) && (n < BCM590XX_REG_VBUS)) -#define BCM590XX_REG_IS_VBUS(n) (n == BCM590XX_REG_VBUS) +#define BCM59056_NUM_REGS 27 /* LDO group A: supported voltages in microvolts */ -static const unsigned int ldo_a_table[] = { +static const unsigned int bcm59056_ldo_a_table[] = { 1200000, 1800000, 2500000, 2700000, 2800000, 2900000, 3000000, 3300000, }; /* LDO group C: supported voltages in microvolts */ -static const unsigned int ldo_c_table[] = { +static const unsigned int bcm59056_ldo_c_table[] = { 3100000, 1800000, 2500000, 2700000, 2800000, 2900000, 3000000, 3300000, }; -static const unsigned int ldo_vbus[] = { +static const unsigned int bcm59056_ldo_vbus[] = { 5000000, }; /* DCDC group CSR: supported voltages in microvolts */ -static const struct linear_range dcdc_csr_ranges[] = { +static const struct linear_range bcm59056_dcdc_csr_ranges[] = { REGULATOR_LINEAR_RANGE(860000, 2, 50, 10000), REGULATOR_LINEAR_RANGE(1360000, 51, 55, 20000), REGULATOR_LINEAR_RANGE(900000, 56, 63, 0), }; /* DCDC group IOSR1: supported voltages in microvolts */ -static const struct linear_range dcdc_iosr1_ranges[] = { +static const struct linear_range bcm59056_dcdc_iosr1_ranges[] = { REGULATOR_LINEAR_RANGE(860000, 2, 51, 10000), REGULATOR_LINEAR_RANGE(1500000, 52, 52, 0), REGULATOR_LINEAR_RANGE(1800000, 53, 53, 0), @@ -131,121 +143,404 @@ static const struct linear_range dcdc_iosr1_ranges[] = { }; /* DCDC group SDSR1: supported voltages in microvolts */ -static const struct linear_range dcdc_sdsr1_ranges[] = { +static const struct linear_range bcm59056_dcdc_sdsr1_ranges[] = { REGULATOR_LINEAR_RANGE(860000, 2, 50, 10000), REGULATOR_LINEAR_RANGE(1340000, 51, 51, 0), REGULATOR_LINEAR_RANGE(900000, 52, 63, 0), }; -struct bcm590xx_info { - const char *name; - const char *vin_name; - u8 n_voltages; - const unsigned int *volt_table; - u8 n_linear_ranges; - const struct linear_range *linear_ranges; +#define BCM59056_REG_TABLE(_name, _table) \ + { \ + .name = #_name, \ + .n_voltages = ARRAY_SIZE(bcm59056_##_table), \ + .volt_table = bcm59056_##_table, \ + } + +#define BCM59056_REG_RANGES(_name, _ranges) \ + { \ + .name = #_name, \ + .n_voltages = 64, \ + .n_linear_ranges = ARRAY_SIZE(bcm59056_##_ranges), \ + .linear_ranges = bcm59056_##_ranges, \ + } + +static struct bcm590xx_info bcm59056_regs[] = { + BCM59056_REG_TABLE(rfldo, ldo_a_table), + BCM59056_REG_TABLE(camldo1, ldo_c_table), + BCM59056_REG_TABLE(camldo2, ldo_c_table), + BCM59056_REG_TABLE(simldo1, ldo_a_table), + BCM59056_REG_TABLE(simldo2, ldo_a_table), + BCM59056_REG_TABLE(sdldo, ldo_c_table), + BCM59056_REG_TABLE(sdxldo, ldo_a_table), + BCM59056_REG_TABLE(mmcldo1, ldo_a_table), + BCM59056_REG_TABLE(mmcldo2, ldo_a_table), + BCM59056_REG_TABLE(audldo, ldo_a_table), + BCM59056_REG_TABLE(micldo, ldo_a_table), + BCM59056_REG_TABLE(usbldo, ldo_a_table), + BCM59056_REG_TABLE(vibldo, ldo_c_table), + BCM59056_REG_RANGES(csr, dcdc_csr_ranges), + BCM59056_REG_RANGES(iosr1, dcdc_iosr1_ranges), + BCM59056_REG_RANGES(iosr2, dcdc_iosr1_ranges), + BCM59056_REG_RANGES(msr, dcdc_iosr1_ranges), + BCM59056_REG_RANGES(sdsr1, dcdc_sdsr1_ranges), + BCM59056_REG_RANGES(sdsr2, dcdc_iosr1_ranges), + BCM59056_REG_RANGES(vsr, dcdc_iosr1_ranges), + BCM59056_REG_TABLE(gpldo1, ldo_a_table), + BCM59056_REG_TABLE(gpldo2, ldo_a_table), + BCM59056_REG_TABLE(gpldo3, ldo_a_table), + BCM59056_REG_TABLE(gpldo4, ldo_a_table), + BCM59056_REG_TABLE(gpldo5, ldo_a_table), + BCM59056_REG_TABLE(gpldo6, ldo_a_table), + BCM59056_REG_TABLE(vbus, ldo_vbus), +}; + +/* BCM59054 registers */ + +/* I2C slave 0 registers */ +#define BCM59054_RFLDOPMCTRL1 0x60 +#define BCM59054_IOSR1PMCTRL1 0x7a +#define BCM59054_IOSR2PMCTRL1 0x7c +#define BCM59054_CSRPMCTRL1 0x7e +#define BCM59054_SDSR1PMCTRL1 0x82 +#define BCM59054_SDSR2PMCTRL1 0x86 +#define BCM59054_MMSRPMCTRL1 0x8a +#define BCM59054_VSRPMCTRL1 0x8e +#define BCM59054_RFLDOCTRL 0x96 +#define BCM59054_CSRVOUT1 0xc0 + +/* I2C slave 1 registers */ +#define BCM59054_LVLDO1PMCTRL1 0x16 +#define BCM59054_LVLDO2PMCTRL1 0x18 +#define BCM59054_GPLDO1CTRL 0x1a +#define BCM59054_GPLDO2CTRL 0x1b +#define BCM59054_GPLDO3CTRL 0x1c +#define BCM59054_TCXLDOCTRL 0x1d +#define BCM59054_LVLDO1CTRL 0x1e +#define BCM59054_LVLDO2CTRL 0x1f +#define BCM59054_OTG_CTRL 0x40 +#define BCM59054_GPLDO1PMCTRL1 0x57 +#define BCM59054_GPLDO2PMCTRL1 0x59 +#define BCM59054_GPLDO3PMCTRL1 0x5b +#define BCM59054_TCXLDOPMCTRL1 0x5d + +/* + * RFLDO to VSR regulators are + * accessed via I2C slave 0 + */ + +/* LDO regulator IDs */ +#define BCM59054_REG_RFLDO 0 +#define BCM59054_REG_CAMLDO1 1 +#define BCM59054_REG_CAMLDO2 2 +#define BCM59054_REG_SIMLDO1 3 +#define BCM59054_REG_SIMLDO2 4 +#define BCM59054_REG_SDLDO 5 +#define BCM59054_REG_SDXLDO 6 +#define BCM59054_REG_MMCLDO1 7 +#define BCM59054_REG_MMCLDO2 8 +#define BCM59054_REG_AUDLDO 9 +#define BCM59054_REG_MICLDO 10 +#define BCM59054_REG_USBLDO 11 +#define BCM59054_REG_VIBLDO 12 + +/* DCDC regulator IDs */ +#define BCM59054_REG_CSR 13 +#define BCM59054_REG_IOSR1 14 +#define BCM59054_REG_IOSR2 15 +#define BCM59054_REG_MMSR 16 +#define BCM59054_REG_SDSR1 17 +#define BCM59054_REG_SDSR2 18 +#define BCM59054_REG_VSR 19 + +/* + * GPLDO1 to VBUS regulators are + * accessed via I2C slave 1 + */ + +#define BCM59054_REG_GPLDO1 20 +#define BCM59054_REG_GPLDO2 21 +#define BCM59054_REG_GPLDO3 22 +#define BCM59054_REG_TCXLDO 23 +#define BCM59054_REG_LVLDO1 24 +#define BCM59054_REG_LVLDO2 25 +#define BCM59054_REG_VBUS 26 + +#define BCM59054_NUM_REGS 27 + +/* LDO group 1: supported voltages in microvolts */ +static const unsigned int bcm59054_ldo_1_table[] = { + 1200000, 1800000, 2500000, 2700000, 2800000, + 2900000, 3000000, 3300000, +}; + +/* LDO group 2: supported voltages in microvolts */ +static const unsigned int bcm59054_ldo_2_table[] = { + 3100000, 1800000, 2500000, 2700000, 2800000, + 2900000, 3000000, 3300000, +}; + +/* LDO group 3: supported voltages in microvolts */ +static const unsigned int bcm59054_ldo_3_table[] = { + 1000000, 1107000, 1143000, 1214000, 1250000, + 1464000, 1500000, 1786000, +}; + +static const unsigned int bcm59054_ldo_vbus[] = { + 5000000, +}; + +/* DCDC group SR: supported voltages in microvolts */ +static const struct linear_range bcm59054_dcdc_sr_ranges[] = { + REGULATOR_LINEAR_RANGE(0, 0, 1, 0), + REGULATOR_LINEAR_RANGE(860000, 2, 60, 10000), + REGULATOR_LINEAR_RANGE(1500000, 61, 61, 0), + REGULATOR_LINEAR_RANGE(1800000, 62, 62, 0), + REGULATOR_LINEAR_RANGE(900000, 63, 63, 0), +}; + +/* DCDC group VSR: supported voltages in microvolts */ +static const struct linear_range bcm59054_dcdc_vsr_ranges[] = { + REGULATOR_LINEAR_RANGE(0, 0, 1, 0), + REGULATOR_LINEAR_RANGE(860000, 2, 59, 10000), + REGULATOR_LINEAR_RANGE(1700000, 60, 60, 0), + REGULATOR_LINEAR_RANGE(1500000, 61, 61, 0), + REGULATOR_LINEAR_RANGE(1800000, 62, 62, 0), + REGULATOR_LINEAR_RANGE(1600000, 63, 63, 0), }; -#define BCM590XX_REG_TABLE(_name, _table) \ +/* DCDC group CSR: supported voltages in microvolts */ +static const struct linear_range bcm59054_dcdc_csr_ranges[] = { + REGULATOR_LINEAR_RANGE(700000, 0, 1, 100000), + REGULATOR_LINEAR_RANGE(860000, 2, 60, 10000), + REGULATOR_LINEAR_RANGE(900000, 61, 63, 0), +}; + +#define BCM59054_REG_TABLE(_name, _table) \ { \ .name = #_name, \ - .n_voltages = ARRAY_SIZE(_table), \ - .volt_table = _table, \ + .n_voltages = ARRAY_SIZE(bcm59054_##_table), \ + .volt_table = bcm59054_##_table, \ } -#define BCM590XX_REG_RANGES(_name, _ranges) \ +#define BCM59054_REG_RANGES(_name, _ranges) \ { \ .name = #_name, \ .n_voltages = 64, \ - .n_linear_ranges = ARRAY_SIZE(_ranges), \ - .linear_ranges = _ranges, \ + .n_linear_ranges = ARRAY_SIZE(bcm59054_##_ranges), \ + .linear_ranges = bcm59054_##_ranges, \ } -static struct bcm590xx_info bcm590xx_regs[] = { - BCM590XX_REG_TABLE(rfldo, ldo_a_table), - BCM590XX_REG_TABLE(camldo1, ldo_c_table), - BCM590XX_REG_TABLE(camldo2, ldo_c_table), - BCM590XX_REG_TABLE(simldo1, ldo_a_table), - BCM590XX_REG_TABLE(simldo2, ldo_a_table), - BCM590XX_REG_TABLE(sdldo, ldo_c_table), - BCM590XX_REG_TABLE(sdxldo, ldo_a_table), - BCM590XX_REG_TABLE(mmcldo1, ldo_a_table), - BCM590XX_REG_TABLE(mmcldo2, ldo_a_table), - BCM590XX_REG_TABLE(audldo, ldo_a_table), - BCM590XX_REG_TABLE(micldo, ldo_a_table), - BCM590XX_REG_TABLE(usbldo, ldo_a_table), - BCM590XX_REG_TABLE(vibldo, ldo_c_table), - BCM590XX_REG_RANGES(csr, dcdc_csr_ranges), - BCM590XX_REG_RANGES(iosr1, dcdc_iosr1_ranges), - BCM590XX_REG_RANGES(iosr2, dcdc_iosr1_ranges), - BCM590XX_REG_RANGES(msr, dcdc_iosr1_ranges), - BCM590XX_REG_RANGES(sdsr1, dcdc_sdsr1_ranges), - BCM590XX_REG_RANGES(sdsr2, dcdc_iosr1_ranges), - BCM590XX_REG_RANGES(vsr, dcdc_iosr1_ranges), - BCM590XX_REG_TABLE(gpldo1, ldo_a_table), - BCM590XX_REG_TABLE(gpldo2, ldo_a_table), - BCM590XX_REG_TABLE(gpldo3, ldo_a_table), - BCM590XX_REG_TABLE(gpldo4, ldo_a_table), - BCM590XX_REG_TABLE(gpldo5, ldo_a_table), - BCM590XX_REG_TABLE(gpldo6, ldo_a_table), - BCM590XX_REG_TABLE(vbus, ldo_vbus), +static struct bcm590xx_info bcm59054_regs[] = { + BCM59054_REG_TABLE(rfldo, ldo_1_table), + BCM59054_REG_TABLE(camldo1, ldo_2_table), + BCM59054_REG_TABLE(camldo2, ldo_2_table), + BCM59054_REG_TABLE(simldo1, ldo_1_table), + BCM59054_REG_TABLE(simldo2, ldo_1_table), + BCM59054_REG_TABLE(sdldo, ldo_2_table), + BCM59054_REG_TABLE(sdxldo, ldo_1_table), + BCM59054_REG_TABLE(mmcldo1, ldo_1_table), + BCM59054_REG_TABLE(mmcldo2, ldo_1_table), + BCM59054_REG_TABLE(audldo, ldo_1_table), + BCM59054_REG_TABLE(micldo, ldo_1_table), + BCM59054_REG_TABLE(usbldo, ldo_1_table), + BCM59054_REG_TABLE(vibldo, ldo_2_table), + BCM59054_REG_RANGES(csr, dcdc_csr_ranges), + BCM59054_REG_RANGES(iosr1, dcdc_sr_ranges), + BCM59054_REG_RANGES(iosr2, dcdc_sr_ranges), + BCM59054_REG_RANGES(mmsr, dcdc_sr_ranges), + BCM59054_REG_RANGES(sdsr1, dcdc_sr_ranges), + BCM59054_REG_RANGES(sdsr2, dcdc_sr_ranges), + BCM59054_REG_RANGES(vsr, dcdc_vsr_ranges), + BCM59054_REG_TABLE(gpldo1, ldo_1_table), + BCM59054_REG_TABLE(gpldo2, ldo_1_table), + BCM59054_REG_TABLE(gpldo3, ldo_1_table), + BCM59054_REG_TABLE(tcxldo, ldo_1_table), + BCM59054_REG_TABLE(lvldo1, ldo_3_table), + BCM59054_REG_TABLE(lvldo2, ldo_3_table), + BCM59054_REG_TABLE(vbus, ldo_vbus), }; -struct bcm590xx_reg { - struct regulator_desc *desc; - struct bcm590xx *mfd; -}; +static int bcm590xx_reg_is_ldo(struct bcm590xx_reg *pmu, int id) +{ + switch (pmu->mfd->device_type) { + case BCM59054_TYPE: + return (id < BCM59054_REG_CSR); + case BCM59056_TYPE: + return (id < BCM59056_REG_CSR); + } + return -EINVAL; +} -static int bcm590xx_get_vsel_register(int id) +static int bcm590xx_reg_is_gpldo(struct bcm590xx_reg *pmu, int id) { - if (BCM590XX_REG_IS_LDO(id)) - return BCM590XX_RFLDOCTRL + id; - else if (BCM590XX_REG_IS_GPLDO(id)) - return BCM590XX_GPLDO1CTRL + id; - else - return BCM590XX_CSRVOUT1 + (id - BCM590XX_REG_CSR) * 3; + switch (pmu->mfd->device_type) { + case BCM59054_TYPE: + return ((id > BCM59054_REG_VSR) && (id < BCM59054_REG_VBUS)); + case BCM59056_TYPE: + return ((id > BCM59056_REG_VSR) && (id < BCM59056_REG_VBUS)); + } + return -EINVAL; +} + +static int bcm590xx_reg_is_vbus(struct bcm590xx_reg *pmu, int id) +{ + switch (pmu->mfd->device_type) { + case BCM59054_TYPE: + return (id == BCM59054_REG_VBUS); + case BCM59056_TYPE: + return (id == BCM59056_REG_VBUS); + } + return -EINVAL; +} + +static int bcm590xx_reg_is_static(struct bcm590xx_reg *pmu, int id) +{ + return bcm590xx_reg_is_vbus(pmu, id); +} + +static int bcm590xx_reg_is_secondary(struct bcm590xx_reg *pmu, int id) +{ + switch (pmu->mfd->device_type) { + case BCM59054_TYPE: + return (bcm590xx_reg_is_gpldo(pmu, id) || \ + id == BCM59054_REG_VBUS); + case BCM59056_TYPE: + return (bcm590xx_reg_is_gpldo(pmu, id) || \ + id == BCM59056_REG_VBUS); + } + return -EINVAL; +} + +static int bcm590xx_reg_mode_is_3bit(struct bcm590xx_reg *pmu, int id) +{ + switch (pmu->mfd->device_type) { + case BCM59054_TYPE: + return (id == BCM59054_REG_CSR || \ + (id > BCM59054_REG_IOSR2 && id < BCM59054_REG_GPLDO1)); + case BCM59056_TYPE: + return false; + } + return -EINVAL; +} + +static int bcm590xx_get_vsel_register(struct bcm590xx_reg *pmu, int id) +{ + switch (pmu->mfd->device_type) { + case BCM59054_TYPE: + if (bcm590xx_reg_is_ldo(pmu, id)) + return BCM59054_RFLDOCTRL + (id - BCM59054_REG_RFLDO); + else if (bcm590xx_reg_is_gpldo(pmu, id)) + return BCM59054_GPLDO1CTRL + (id - BCM59054_REG_GPLDO1); + else + return BCM59054_CSRVOUT1 + (id - BCM59054_REG_CSR) * 3; + case BCM59056_TYPE: + if (bcm590xx_reg_is_ldo(pmu, id)) + return BCM59056_RFLDOCTRL + (id - BCM59056_REG_RFLDO); + else if (bcm590xx_reg_is_gpldo(pmu, id)) + return BCM59056_GPLDO1CTRL + (id - BCM59056_REG_GPLDO1); + else + return BCM59056_CSRVOUT1 + (id - BCM59056_REG_CSR) * 3; + } + return -EINVAL; } -static int bcm590xx_get_enable_register(int id) +static int bcm59054_get_enable_register(struct bcm590xx_reg *pmu, int id) { int reg = 0; - if (BCM590XX_REG_IS_LDO(id)) - reg = BCM590XX_RFLDOPMCTRL1 + id * 2; - else if (BCM590XX_REG_IS_GPLDO(id)) - reg = BCM590XX_GPLDO1PMCTRL1 + id * 2; + if (bcm590xx_reg_is_ldo(pmu, id)) + reg = BCM59054_RFLDOPMCTRL1 + (id - BCM59054_REG_RFLDO) * 2; + else if (bcm590xx_reg_is_gpldo(pmu, id)) + reg = BCM59054_GPLDO1PMCTRL1 + (id - BCM59054_REG_GPLDO1) * 2; else switch (id) { - case BCM590XX_REG_CSR: - reg = BCM590XX_CSRPMCTRL1; + case BCM59054_REG_VSR: + reg = BCM59054_VSRPMCTRL1; break; - case BCM590XX_REG_IOSR1: - reg = BCM590XX_IOSR1PMCTRL1; + case BCM59054_REG_CSR: + reg = BCM59054_CSRPMCTRL1; break; - case BCM590XX_REG_IOSR2: - reg = BCM590XX_IOSR2PMCTRL1; + case BCM59054_REG_MMSR: + reg = BCM59054_MMSRPMCTRL1; break; - case BCM590XX_REG_MSR: - reg = BCM590XX_MSRPMCTRL1; + case BCM59054_REG_SDSR1: + reg = BCM59054_SDSR1PMCTRL1; break; - case BCM590XX_REG_SDSR1: - reg = BCM590XX_SDSR1PMCTRL1; + case BCM59054_REG_SDSR2: + reg = BCM59054_SDSR2PMCTRL1; break; - case BCM590XX_REG_SDSR2: - reg = BCM590XX_SDSR2PMCTRL1; + case BCM59054_REG_IOSR1: + reg = BCM59054_IOSR1PMCTRL1; break; - case BCM590XX_REG_VSR: - reg = BCM590XX_VSRPMCTRL1; + case BCM59054_REG_IOSR2: + reg = BCM59054_IOSR2PMCTRL1; break; - case BCM590XX_REG_VBUS: - reg = BCM590XX_OTG_CTRL; + case BCM59054_REG_VBUS: + reg = BCM59054_OTG_CTRL; break; } + return reg; +} + +static int bcm59056_get_enable_register(struct bcm590xx_reg *pmu, int id) +{ + int reg = 0; + + if (bcm590xx_reg_is_ldo(pmu, id)) + reg = BCM59056_RFLDOPMCTRL1 + (id - BCM59056_REG_RFLDO) * 2; + else if (bcm590xx_reg_is_gpldo(pmu, id)) + reg = BCM59056_GPLDO1PMCTRL1 + (id - BCM59056_REG_GPLDO1) * 2; + else + switch (id) { + case BCM59056_REG_CSR: + reg = BCM59056_CSRPMCTRL1; + break; + case BCM59056_REG_IOSR1: + reg = BCM59056_IOSR1PMCTRL1; + break; + case BCM59056_REG_IOSR2: + reg = BCM59056_IOSR2PMCTRL1; + break; + case BCM59056_REG_MSR: + reg = BCM59056_MSRPMCTRL1; + break; + case BCM59056_REG_SDSR1: + reg = BCM59056_SDSR1PMCTRL1; + break; + case BCM59056_REG_SDSR2: + reg = BCM59056_SDSR2PMCTRL1; + break; + case BCM59056_REG_VSR: + reg = BCM59056_VSRPMCTRL1; + break; + case BCM59056_REG_VBUS: + reg = BCM59056_OTG_CTRL; + break; + } return reg; } +static int bcm590xx_get_enable_register(struct bcm590xx_reg *pmu, int id) +{ + switch (pmu->mfd->device_type) { + case BCM59054_TYPE: + return bcm59054_get_enable_register(pmu, id); + case BCM59056_TYPE: + return bcm59056_get_enable_register(pmu, id); + } + return -EINVAL; +} + +static int bcm590xx_get_enable_mask(struct bcm590xx_reg *pmu, int id) +{ + if (bcm590xx_reg_mode_is_3bit(pmu, id)) + return BCM590XX_REG_3BIT_ENABLE; + + return BCM590XX_REG_ENABLE; +} + static const struct regulator_ops bcm590xx_ops_ldo = { .is_enabled = regulator_is_enabled_regmap, .enable = regulator_enable_regmap, @@ -266,7 +561,7 @@ static const struct regulator_ops bcm590xx_ops_dcdc = { .map_voltage = regulator_map_voltage_linear_range, }; -static const struct regulator_ops bcm590xx_ops_vbus = { +static const struct regulator_ops bcm590xx_ops_static = { .is_enabled = regulator_is_enabled_regmap, .enable = regulator_enable_regmap, .disable = regulator_disable_regmap, @@ -279,6 +574,7 @@ static int bcm590xx_probe(struct platform_device *pdev) struct regulator_config config = { }; struct bcm590xx_info *info; struct regulator_dev *rdev; + int n_regulators; int i; pmu = devm_kzalloc(&pdev->dev, sizeof(*pmu), GFP_KERNEL); @@ -289,17 +585,23 @@ static int bcm590xx_probe(struct platform_device *pdev) platform_set_drvdata(pdev, pmu); + if (pmu->mfd->device_type == BCM59054_TYPE) { + info = bcm59054_regs; + n_regulators = BCM59054_NUM_REGS; + } else if (pmu->mfd->device_type == BCM59056_TYPE) { + info = bcm59056_regs; + n_regulators = BCM59056_NUM_REGS; + } + pmu->desc = devm_kcalloc(&pdev->dev, - BCM590XX_NUM_REGS, + n_regulators, sizeof(struct regulator_desc), GFP_KERNEL); if (!pmu->desc) return -ENOMEM; - info = bcm590xx_regs; - - for (i = 0; i < BCM590XX_NUM_REGS; i++, info++) { - /* Register the regulators */ + /* Register the regulators */ + for (i = 0; i < n_regulators; i++, info++) { pmu->desc[i].name = info->name; pmu->desc[i].of_match = of_match_ptr(info->name); pmu->desc[i].regulators_node = of_match_ptr("regulators"); @@ -310,33 +612,37 @@ static int bcm590xx_probe(struct platform_device *pdev) pmu->desc[i].linear_ranges = info->linear_ranges; pmu->desc[i].n_linear_ranges = info->n_linear_ranges; - if ((BCM590XX_REG_IS_LDO(i)) || (BCM590XX_REG_IS_GPLDO(i))) { + if (bcm590xx_reg_is_ldo(pmu, i) || \ + bcm590xx_reg_is_gpldo(pmu, i)) { pmu->desc[i].ops = &bcm590xx_ops_ldo; pmu->desc[i].vsel_mask = BCM590XX_LDO_VSEL_MASK; - } else if (BCM590XX_REG_IS_VBUS(i)) - pmu->desc[i].ops = &bcm590xx_ops_vbus; - else { + } else if (bcm590xx_reg_is_static(pmu, i)) { + pmu->desc[i].ops = &bcm590xx_ops_static; + } else { pmu->desc[i].ops = &bcm590xx_ops_dcdc; pmu->desc[i].vsel_mask = BCM590XX_SR_VSEL_MASK; } - if (BCM590XX_REG_IS_VBUS(i)) + if (bcm590xx_reg_is_vbus(pmu, i)) { pmu->desc[i].enable_mask = BCM590XX_VBUS_ENABLE; - else { - pmu->desc[i].vsel_reg = bcm590xx_get_vsel_register(i); + } else { + pmu->desc[i].vsel_reg = \ + bcm590xx_get_vsel_register(pmu, i); + pmu->desc[i].enable_mask = \ + bcm590xx_get_enable_mask(pmu, i); pmu->desc[i].enable_is_inverted = true; - pmu->desc[i].enable_mask = BCM590XX_REG_ENABLE; } - pmu->desc[i].enable_reg = bcm590xx_get_enable_register(i); + pmu->desc[i].enable_reg = \ + bcm590xx_get_enable_register(pmu, i); pmu->desc[i].type = REGULATOR_VOLTAGE; pmu->desc[i].owner = THIS_MODULE; - config.dev = bcm590xx->dev; + config.dev = pmu->mfd->dev; config.driver_data = pmu; - if (BCM590XX_REG_IS_GPLDO(i) || BCM590XX_REG_IS_VBUS(i)) - config.regmap = bcm590xx->regmap_sec; + if (bcm590xx_reg_is_secondary(pmu, i)) + config.regmap = pmu->mfd->regmap_sec; else - config.regmap = bcm590xx->regmap_pri; + config.regmap = pmu->mfd->regmap_pri; rdev = devm_regulator_register(&pdev->dev, &pmu->desc[i], &config); From patchwork Mon Oct 30 19:36:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Artur Weber X-Patchwork-Id: 159861 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp2462539vqb; Mon, 30 Oct 2023 12:37:54 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFM9WSvVtCsD8CY7MdlzEGskLIvLiWHD7NZ7mgtOWW95B2IJImpjpNzB+SER/XrwAAZ3zvk X-Received: by 2002:a05:6358:7f0e:b0:168:e4c1:eb9c with SMTP id p14-20020a0563587f0e00b00168e4c1eb9cmr13862775rwn.20.1698694673842; Mon, 30 Oct 2023 12:37:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698694673; cv=none; d=google.com; s=arc-20160816; b=ufVlpjJgjN0+8ienc76PE1wBnUmf/LhR05L2AQnk1qAZh8bcnH5OQdheudII6Q5U5N 6eOxtM1UYhWEGesuBYReDzExAhyyvFBel0XZGHVuAeppPlwFJfUiOvt7IQlj14KVo3L7 7DjzSmhKNL+PlU6kkXMs8qRpbS5NaijpzbyMt0/AFiAner/ODZNipOded23BLj62Yi78 TLCaoQ0ctW1+AoIMzXMRQH670CD/cuMayu7I3b68HzUPQWF7x95idy1yE2DMQ9Z6Hk3o nT2S+VhNkepOKW+zQ9eJrfbpxjnIhgPN1izP1a32DlxC06rw7kYu2yxt8ev0kNbpEvy4 a6Nw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=uwXnAshIuXsmpFP6ZIFMKGGNeGj7WNhS2BXuQMS+QJM=; fh=pNQf8kBW3o3Cr/f9RsS2JPU7rcdrv8+HQq3q4Yx0m48=; b=J2fqKvR7yr2GHwnfoccjYRpf/nZWy+ONJo2Ll1xTA60mTjZCKARNx1aEae8amqvTEC LEUd5QVVLWSxBO1ysnekWrg64oF2KJQnwz16V4ZvP/0rQuntD9cA42xVzEfVn+7UT2Jx VBh9Dyv7SpgeOdpkYM6Z06W/aBhwoBXSDlpIc0r2tFhtc+yY2q+51reXMaFTRCjgpyYj r4wrBjGARUeFrDv7waOQS2qMhcXUez+WkvPF+MxaZMlISFaXCFP3nXcTg9dgy4/79d+F bzeg/hdeFhpOQ/1wKknUQBXoGNnejBrchPVV3CTm7OHL9C3hstGMMSb11Im56wIN9KxT klgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=mI3tLh7t; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id cb11-20020a056a02070b00b005b910acbc8bsi5593756pgb.21.2023.10.30.12.37.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 12:37:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=mI3tLh7t; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 227C78093417; Mon, 30 Oct 2023 12:37:51 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231359AbjJ3ThM (ORCPT + 32 others); Mon, 30 Oct 2023 15:37:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58820 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231438AbjJ3ThF (ORCPT ); Mon, 30 Oct 2023 15:37:05 -0400 Received: from mail-lf1-x130.google.com (mail-lf1-x130.google.com [IPv6:2a00:1450:4864:20::130]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F1F2610C; Mon, 30 Oct 2023 12:37:01 -0700 (PDT) Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-507d1cc0538so6752524e87.2; Mon, 30 Oct 2023 12:37:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698694620; x=1699299420; 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=uwXnAshIuXsmpFP6ZIFMKGGNeGj7WNhS2BXuQMS+QJM=; b=mI3tLh7tJT/adx5bldYw3OmkzkFLUAY+spKecY6niQA3pMTia3R/ICGFQ4aHXBMm63 dqgmRdsd/+K4YsAWdn7kNnZpxaSsY97p/kdF0Pjw9s5McIciLBJsDFRbi0BKlzjLo7ps QU5kYzhmntALNxBkrBSMBc8AoDtBKpyaa0Ar7lU9abl/V4i8NdHNC0J2Y/y1YhUWUnk0 PVV3SlCShq7XhG5tbYFopNLJXVU88kSYVf3+Ua95ugWE89BTni3JVlxKyaoUTx5msA6u YdQH/NhUaLb2iH8z1S1zkWsJWww2pIz6Uu1YvDmtMgINV6nu19pkF64uBQn2NV8U6myx kW3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698694620; x=1699299420; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uwXnAshIuXsmpFP6ZIFMKGGNeGj7WNhS2BXuQMS+QJM=; b=rOI2bT8CBS1TAkHXTDMmIo+f6k6y+Y1UAN+LuUjp+gOMLlrD4KQ+8+adnrzGVonLJI zm7bh5lsadIzlcnfoFqp2R8HYJULclMXDHCpfajf3pi+f84vV8CRaxnwrQekoPnP93QT sRkgtwmEGRc0qSwJ4gUIfozQ/eIJ16I3iHhOd7HLALfWjsFwg5jF6ZcpeQ3gFIubPoq7 5fvY3csIa6MhYeaaYnxAtUC+nnmOa+evQ1Hxvog+s+cUeN9bhvoJnbkUyBnyMpontzQ6 D8YZqfao0d2BnfI517Sdcg1mxGSLulhid7yWh83JnUUtRYr2cPrzPytuQp7TcE3nzLj+ qFew== X-Gm-Message-State: AOJu0Yy3rkzFJqz+HeeAPJ69BquFpcU8LxW3VRvedMvbFz1ed8fOlgBn dlClhkq45xkBfnVt3DfEnAI= X-Received: by 2002:a05:6512:2356:b0:505:73e7:b478 with SMTP id p22-20020a056512235600b0050573e7b478mr10105643lfu.16.1698694620093; Mon, 30 Oct 2023 12:37:00 -0700 (PDT) Received: from hex.my.domain (83.11.208.51.ipv4.supernova.orange.pl. [83.11.208.51]) by smtp.gmail.com with ESMTPSA id a27-20020ac2521b000000b0050482b29ac8sm1510781lfl.31.2023.10.30.12.36.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 12:36:59 -0700 (PDT) From: Artur Weber Date: Mon, 30 Oct 2023 20:36:43 +0100 Subject: [PATCH 6/6] regulator: bcm590xx: Add proper handling for PMMODE registers MIME-Version: 1.0 Message-Id: <20231030-bcm59054-v1-6-3517f980c1e3@gmail.com> References: <20231030-bcm59054-v1-0-3517f980c1e3@gmail.com> In-Reply-To: <20231030-bcm59054-v1-0-3517f980c1e3@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list , Liam Girdwood , Mark Brown Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Artur Weber X-Mailer: b4 0.12.4 X-Developer-Signature: v=1; a=ed25519-sha256; t=1698694609; l=7020; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=vGWxlubqG22n2W7FyOydxEYR5xcja22aiT/FglbYjSU=; b=LwTI49czaQgXy+5jSMH/AMrNyEFElVZMMqdxn1sCgPGj+Y3HhWVjJ0Sydd/AngGQTBqtPYJji Yd7moFxuDFTAeY5jsQnH7/Go9Jq0QJ+Yzkp4x33aatFhGTA2OcU8c+c X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Mon, 30 Oct 2023 12:37:51 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781210466178701471 X-GMAIL-MSGID: 1781210466178701471 The state of BCM590XX regulators is controlled by writing to the PMCTRL registers; there are 7 selectable mode entries in those registers, each storing a specific mode value - OFF, LPM or ON. Which entry is selected depends on the combination of enabled PC pins (PC1, PC2 and the optional PC3). Add a new function to write a specific mode value to all entries, and make a custom enable/disable function to make use of it. Keep the is_enabled function using the naive regmap method (a potential improvement here would be to add support for getting the state of the PC pins to figure out the selected mode). It should also be possible to extend this to support regulator modes, though some work may be needed to make sure it doesn't interfere with the enabled/disabled state. Signed-off-by: Artur Weber --- drivers/regulator/bcm590xx-regulator.c | 100 ++++++++++++++++++++++++++++----- 1 file changed, 86 insertions(+), 14 deletions(-) diff --git a/drivers/regulator/bcm590xx-regulator.c b/drivers/regulator/bcm590xx-regulator.c index 8b90eae06ca6..af1ab8735ea7 100644 --- a/drivers/regulator/bcm590xx-regulator.c +++ b/drivers/regulator/bcm590xx-regulator.c @@ -38,6 +38,15 @@ struct bcm590xx_reg { #define BCM590XX_LDO_VSEL_MASK GENMASK(5, 3) #define BCM590XX_SR_VSEL_MASK GENMASK(5, 0) +#define BCM590XX_PMMODE_ON 0x0 +#define BCM590XX_PMMODE_LPM 0x1 +#define BCM590XX_PMMODE_OFF 0x2 + +#define PMMODE_3BIT_MASK(mode) \ + ((mode << 3) | mode) +#define PMMODE_2BIT_MASK(mode) \ + ((mode << 6) | (mode << 4) | (mode << 2) | mode) + /* BCM59056 registers */ /* I2C slave 0 registers */ @@ -435,16 +444,16 @@ static int bcm590xx_get_vsel_register(struct bcm590xx_reg *pmu, int id) return BCM59054_CSRVOUT1 + (id - BCM59054_REG_CSR) * 3; case BCM59056_TYPE: if (bcm590xx_reg_is_ldo(pmu, id)) - return BCM59056_RFLDOCTRL + (id - BCM59056_REG_RFLDO); + return BCM59056_RFLDOCTRL + (id - BCM59054_REG_RFLDO); else if (bcm590xx_reg_is_gpldo(pmu, id)) - return BCM59056_GPLDO1CTRL + (id - BCM59056_REG_GPLDO1); + return BCM59056_GPLDO1CTRL + (id - BCM59054_REG_GPLDO1); else return BCM59056_CSRVOUT1 + (id - BCM59056_REG_CSR) * 3; } return -EINVAL; } -static int bcm59054_get_enable_register(struct bcm590xx_reg *pmu, int id) +static int bcm59054_get_pmctrl_register(struct bcm590xx_reg *pmu, int id) { int reg = 0; @@ -483,7 +492,7 @@ static int bcm59054_get_enable_register(struct bcm590xx_reg *pmu, int id) return reg; } -static int bcm59056_get_enable_register(struct bcm590xx_reg *pmu, int id) +static int bcm59056_get_pmctrl_register(struct bcm590xx_reg *pmu, int id) { int reg = 0; @@ -522,13 +531,13 @@ static int bcm59056_get_enable_register(struct bcm590xx_reg *pmu, int id) return reg; } -static int bcm590xx_get_enable_register(struct bcm590xx_reg *pmu, int id) +static int bcm590xx_get_pmctrl_register(struct bcm590xx_reg *pmu, int id) { switch (pmu->mfd->device_type) { case BCM59054_TYPE: - return bcm59054_get_enable_register(pmu, id); + return bcm59054_get_pmctrl_register(pmu, id); case BCM59056_TYPE: - return bcm59056_get_enable_register(pmu, id); + return bcm59056_get_pmctrl_register(pmu, id); } return -EINVAL; } @@ -541,10 +550,73 @@ static int bcm590xx_get_enable_mask(struct bcm590xx_reg *pmu, int id) return BCM590XX_REG_ENABLE; } +/* + * The state of BCM590XX regulators is controlled by the PM mode; most + * regulators have 3 such modes (off, low-power and on). + * + * These modes are then stored in the PMCTRL registers - there are 7 + * PMMODE entries within these registers for any given regulator. + * Which one is selected is decided by the PC1 and PC2 pins (and the + * optional PC3 pin, if configured). + * + * For simplicity, to set a PM mode, we write it to all available + * PMMODE registers. + */ +static int +_bcm590xx_set_pmmode(struct bcm590xx_reg *pmu, int reg_id, unsigned int mode) +{ + struct regmap *regmap; + u8 pmctrl_addr = bcm590xx_get_pmctrl_register(pmu, reg_id); + unsigned int i; + int pmctrl_count; + int mode_mask; + int ret; + + /* + * Regulators using 2-bit mode controls have 2 PMCTRL registers; + * regulators using 3-bit mode controls have 4 PMCTRL registers. + * This is to accommodate all 7 selectable modes. + */ + if (bcm590xx_reg_mode_is_3bit(pmu, reg_id)) { + pmctrl_count = 4; + mode_mask = PMMODE_3BIT_MASK(mode); + } else { + pmctrl_count = 2; + mode_mask = PMMODE_2BIT_MASK(mode); + } + + if (bcm590xx_reg_is_secondary(pmu, reg_id)) + regmap = pmu->mfd->regmap_sec; + else + regmap = pmu->mfd->regmap_pri; + + for (i = 0; i < pmctrl_count; i++) { + ret = regmap_write(regmap, pmctrl_addr + i, mode_mask); + if (ret) + return ret; + } + + return 0; +} + +static int bcm590xx_regulator_enable(struct regulator_dev *rdev) +{ + struct bcm590xx_reg *pmu = rdev->reg_data; + + return _bcm590xx_set_pmmode(pmu, rdev->desc->id, BCM590XX_PMMODE_ON); +} + +static int bcm590xx_regulator_disable(struct regulator_dev *rdev) +{ + struct bcm590xx_reg *pmu = rdev->reg_data; + + return _bcm590xx_set_pmmode(pmu, rdev->desc->id, BCM590XX_PMMODE_OFF); +} + static const struct regulator_ops bcm590xx_ops_ldo = { .is_enabled = regulator_is_enabled_regmap, - .enable = regulator_enable_regmap, - .disable = regulator_disable_regmap, + .enable = bcm590xx_regulator_enable, + .disable = bcm590xx_regulator_disable, .get_voltage_sel = regulator_get_voltage_sel_regmap, .set_voltage_sel = regulator_set_voltage_sel_regmap, .list_voltage = regulator_list_voltage_table, @@ -553,8 +625,8 @@ static const struct regulator_ops bcm590xx_ops_ldo = { static const struct regulator_ops bcm590xx_ops_dcdc = { .is_enabled = regulator_is_enabled_regmap, - .enable = regulator_enable_regmap, - .disable = regulator_disable_regmap, + .enable = bcm590xx_regulator_enable, + .disable = bcm590xx_regulator_disable, .get_voltage_sel = regulator_get_voltage_sel_regmap, .set_voltage_sel = regulator_set_voltage_sel_regmap, .list_voltage = regulator_list_voltage_linear_range, @@ -563,8 +635,8 @@ static const struct regulator_ops bcm590xx_ops_dcdc = { static const struct regulator_ops bcm590xx_ops_static = { .is_enabled = regulator_is_enabled_regmap, - .enable = regulator_enable_regmap, - .disable = regulator_disable_regmap, + .enable = bcm590xx_regulator_enable, + .disable = bcm590xx_regulator_disable, }; static int bcm590xx_probe(struct platform_device *pdev) @@ -633,7 +705,7 @@ static int bcm590xx_probe(struct platform_device *pdev) pmu->desc[i].enable_is_inverted = true; } pmu->desc[i].enable_reg = \ - bcm590xx_get_enable_register(pmu, i); + bcm590xx_get_pmctrl_register(pmu, i); pmu->desc[i].type = REGULATOR_VOLTAGE; pmu->desc[i].owner = THIS_MODULE;