From nobody Tue Dec 16 13:25:32 2025 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3FB3B34CF9; Thu, 15 May 2025 14:16:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318599; cv=none; b=LAmzs3Jfc7eU2lp2MZdUSZSUztqGkRxNnhduhGbEs5MztQ07WAT5X+cEM1iJ6xPOy5hB4I/YolsGnrmJrzBwBrggTOVlx10eL9R+Ao/xGw2OwNeIn544TG1ECXZIffCgkVXkMNq6sjbnw2SV2aHXsPyGKoBDwJQBHJ4vunJDk+g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318599; c=relaxed/simple; bh=GnNWfEJsCM4fk/ThPv4LmkyHVZB29fZrJcJDfdBbv8c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tMtMnXL7mC2YtugFtrXvJ9ZkiuNRpJutopJ1SNPiCBiB8PwZuUKSgibyG2mW807RhlprjiXrLBGh1PLz5S4UBwpQWQWG+nhNx1vIqOYG6S2SuMLyWet9fOmdKr5DN5FJr6gyCr1GeGRPpuU/gCNA1wb0oQRveaKtTuZKVY0cCXA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=C52st9en; arc=none smtp.client-ip=209.85.218.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="C52st9en" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-ad4d5bb4d0eso183724666b.1; Thu, 15 May 2025 07:16:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747318595; x=1747923395; 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=XrXQvrzz4wmn33In08eidQK8XMAndmPCx4B1Koh1dGU=; b=C52st9en3OiwkSdifo5xcFD8BB3gwUVvxkXndDKRiiNumIFzYPRBNNuofjM6JesXrH CuU3e1fXqL2oVmSmYMAKt4C9YT/Lrj7wuUpnBVW5iFzY3f1WRBqJSbFXRDLcFq0xDlKT Un9xsM8Uyk5fq0frqRSk0EJ4cgMbevC24JcoIGyZOpRMcevRDy+e7ZPfMKE/XrSsmziN S2RVHiqK9KZWEtGGLy3RGwB+aYMUgghdwlkO8D5dwC5NFraHZ2qmbAXNY6DDBuSCV7Hf CLcUKfAvuzee/wle93NDtdI9YuhmVfGBmvrnRw2TsxU6p53OOC+DZpjclzUVFbBq32zD uKPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747318595; x=1747923395; 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=XrXQvrzz4wmn33In08eidQK8XMAndmPCx4B1Koh1dGU=; b=asagQrNdWieRYYT9Lg7P9W8x0rFVmqOUzA3PTOMbtUPzzIL9WRfVHOVMaJl4PB9hIj R3FZ2kx55dtF4TS4R4pZltrQVSCxlAokBpCm132gaQVtdjo6KSCmL2GN5J0U/CCpyL0a mUKS0U/76VMV1gTZ0UP1UWFnVwOYoSrJduZi9xPJdupdMccBdVWFFIKI+MSFOn10V5gF N+gPxw5Rn9igG/9woNBKsNiJgt7y6VQekdu5ADJHyAl5t2UWvjlKCUy6HG83+NJW9EO0 oUwU4UZ3Wl9WY9NoERmE5b/tLxSwNw5TgRaa2B/mGOL0xVt8UPQ3tLA7QAtSCou8sd3T pqng== X-Forwarded-Encrypted: i=1; AJvYcCUinhz73m7ADx15aEsb4MP9EESSTpKJVdm6jnq6PXZ2kNMqT9DVEWlrhowTuagckOvn6uBqfLpApgip@vger.kernel.org, AJvYcCWNKqXUPp297YGn45Cyh+wAo6vssMT/APzeyDthc1dHUeO2/UkzUqu9uFROmnITKzYDJG6X6ncUwfWQEyzK@vger.kernel.org X-Gm-Message-State: AOJu0Yz8mXwi0x/2ByWrhwDji9Q6uJeVqeHZZdETriL61hQdWJNjLUTG KLjchX+1wn6240ZKj9XNHXau66n1q0xrNeTv14fLdrcqtWhOTAqc X-Gm-Gg: ASbGncthxR0RrvllPb7j/ggc16MJ/lcnYDwGPu7HhUNbTdVWKZbmanvcMIr+VbZOHuw ltWfdhyi6Q5P5TAqBqvW+z74ndELM3RT5uFketDFkIFT8y/Piju/jUtiUGT6kukM/RYlDNzP9VG KBFUGcf5ylAgGeVjb0ctzT12V2dERamE0uv49EhzuqFWMclyigTOkR+TaICyIfym5QXt3YeF6+2 Zi6qzi0V86AeuvOVI0bRZ1S5jHS6ukOsO8i8ZduB6ZR34Bwt1LzGYI55OX3woZp3dFB62kuJGCi 9Gjvlno7tZWmcUr9zIg54iWbGCev86tZY9zQlb95qrM4LN/R/XSupVoqa05zYRP47wzKNToihEV HvXJgB/WRVYMY8QISAPXicev4wiyh5Qb3 X-Google-Smtp-Source: AGHT+IGbmyTHM7gplHRzsl/8w0L/RRE3lEU5OpbaQhIBucqVAwxjQkQCfBm6MLGwXU/E8+zetovORA== X-Received: by 2002:a17:906:6610:b0:ad5:1bfd:30f0 with SMTP id a640c23a62f3a-ad51bfd3405mr169244366b.18.1747318594963; Thu, 15 May 2025 07:16:34 -0700 (PDT) Received: from hex.my.domain (83.11.178.15.ipv4.supernova.orange.pl. [83.11.178.15]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad2192c8535sm1110143966b.8.2025.05.15.07.16.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 May 2025 07:16:34 -0700 (PDT) From: Artur Weber Date: Thu, 15 May 2025 16:16:28 +0200 Subject: [PATCH v9 1/8] dt-bindings: mfd: brcm,bcm59056: Convert to YAML Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-bcm59054-v9-1-14ba0ea2ea5b@gmail.com> References: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> In-Reply-To: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Liam Girdwood , Mark Brown , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, ~postmarketos/upstreaming@lists.sr.ht, Artur Weber X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1747318592; l=6273; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=GnNWfEJsCM4fk/ThPv4LmkyHVZB29fZrJcJDfdBbv8c=; b=CuJGufesEzghWquaRYUkNGPi5EbqTvTTnxC6//qtkZmdzhLdbTJKHRCE1frU3P85b+fgG8ijv NdaSLmIWfnfBqOSH5xee8PWHVqhW5EElltBbu0YvJe6CiVCqjZ4H+OI X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= 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. The bindings have been split into two parts: the MFD binding and a separate binding for the regulator node, to simplify the addition of other models later (which have different regulators). Reviewed-by: Rob Herring (Arm) Reviewed-by: Stanislav Jakubek Signed-off-by: Artur Weber --- Changes in v6: - Replace mfd/brcm,bcm590xx.yaml with mfd/brcm,bcm59056.yaml Changes in v5: - Replace mfd/brcm,bcm59056.yaml with mfd/brcm,bcm590xx.yaml in regulator binding description Changes in v4: - Made $ref use full schema path - Cleaned up example - Dropped regulator name list comment - Changed description of regulator binding to mention BCM59056 explicitly - Changed "Power Management IC" to "Power Management Unit" to match official Broadcom naming - Renamed mfd/brcm,bcm59056.yaml to mfd/brcm,bcm590xx.yaml Changes in v3: - Moved regulator node to separate binding - Removed quotes around compatibles/vbus property - Style fixes for example --- .../devicetree/bindings/mfd/brcm,bcm59056.txt | 39 ---------------- .../devicetree/bindings/mfd/brcm,bcm59056.yaml | 54 ++++++++++++++++++= ++++ .../bindings/regulator/brcm,bcm59056.yaml | 51 ++++++++++++++++++= ++ 3 files changed, 105 insertions(+), 39 deletions(-) diff --git a/Documentation/devicetree/bindings/mfd/brcm,bcm59056.txt b/Docu= mentation/devicetree/bindings/mfd/brcm,bcm59056.txt deleted file mode 100644 index be51a15e05f926913b3a473648d977b25f1a2fbc..000000000000000000000000000= 0000000000000 --- 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 =3D "brcm,bcm59056"; - reg =3D <0x08>; - interrupts =3D ; - regulators { - rfldo_reg: rfldo { - regulator-min-microvolt =3D <1200000>; - regulator-max-microvolt =3D <3300000>; - }; - - ... - }; - }; diff --git a/Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml b/Doc= umentation/devicetree/bindings/mfd/brcm,bcm59056.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b387ef9885c3ac524e0782545db= ca9c0e81a556c --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml @@ -0,0 +1,54 @@ +# 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: Broadcom BCM590xx Power Management Units + +maintainers: + - Artur Weber + +properties: + compatible: + const: brcm,bcm59056 + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + regulators: + type: object + $ref: /schemas/regulator/brcm,bcm59056.yaml# + +required: + - compatible + - reg + - interrupts + +additionalProperties: false + +examples: + - | + #include + #include + + i2c { + #address-cells =3D <1>; + #size-cells =3D <0>; + + pmic@8 { + compatible =3D "brcm,bcm59056"; + reg =3D <0x08>; + interrupts =3D ; + + regulators { + rfldo { + regulator-min-microvolt =3D <1200000>; + regulator-max-microvolt =3D <3300000>; + }; + }; + }; + }; diff --git a/Documentation/devicetree/bindings/regulator/brcm,bcm59056.yaml= b/Documentation/devicetree/bindings/regulator/brcm,bcm59056.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7a5e36394d216232e0a2070fb20= d09dcc1ea8056 --- /dev/null +++ b/Documentation/devicetree/bindings/regulator/brcm,bcm59056.yaml @@ -0,0 +1,51 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/regulator/brcm,bcm59056.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Broadcom BCM59056 Power Management Unit regulators + +description: | + This is a part of device tree bindings for the BCM59056 power + management unit. + + See Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml for + additional information and example. + +maintainers: + - Artur Weber + +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 + +additionalProperties: false --=20 2.49.0 From nobody Tue Dec 16 13:25:32 2025 Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D3969170A26; Thu, 15 May 2025 14:16:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318600; cv=none; b=KGLmC3J4xUXIedbVTtbCdKRKIm3Z0m/voVqo997jLFG8ZwsvmyXTAOwA+qZXsau8aTe1yNg+CiuVYkPJYLxQi+gNTMg0A9P5Xb2YIM/9y/AywU0NozPUiSi5cC9fUF5vt07Cq4F7LfkUGMnve8fUeaZTXZCS3jkcMSURO+pbM9Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318600; c=relaxed/simple; bh=pl2HEbe+CyuHOD3OyLZCSAaiFxQmceMkPEwlgJ22HCI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CpSYlHyZU+Ui20Fq2IZRJHNbiP4kjSemJ0IFebVk+0QXv9Ix0m1KiQjKlYnG4oPqbU2fsGhw8e+d7Xi1l3Ed9kPb/3AedPr3Rox+6tHtT/qngAyeKUqtW+pesQY8mSCtZ/fI4tIhbaeXuE2KR64kTfXN3HWJSJRNnyu8yaHxNzU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Q0lThGq9; arc=none smtp.client-ip=209.85.218.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Q0lThGq9" Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-acae7e7587dso152780866b.2; Thu, 15 May 2025 07:16:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747318597; x=1747923397; 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=WUAKfGSHAephwzkvvqYScDjeaSuBh+AeZg+JkcSpqSc=; b=Q0lThGq9qejMd+dhm27YDDtR48pNHVfa38O1mEBpOWimm9BLZFzEe2S4EyeBkts2V9 XS/BaXb5+ORUosScpG7GHPEoGNon+vXG4PpEOIsORiK4oPOpqfwfdihy2BLBWdQ54MHf zhJ/7u3OmKfbQcQbfAm8KX7ZRCeNmq+FTW8PtRUpXWNnES7183iK/n51eCcVBihb32o8 q5DSyc1XJIO6dNQYJZ/2yNNcinTF7m9ppkHp+UkJ1LA6QW9j+ynnbLLBhteDQOlCZHi1 jbVcbx93R+P3wZD2o8SWDCMKIDFQnKJVWgSTNBinxc+YSbEXSnwx5VhslsHusafEAOCe Jc4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747318597; x=1747923397; 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=WUAKfGSHAephwzkvvqYScDjeaSuBh+AeZg+JkcSpqSc=; b=qKb71p5Vf7BA8nyTw6joea9f4P87jeI1rrGgQ+AkUoCAPt31X3ufpjeM5B8ettUnuG jgyJMTVm9OrMpKpvu+LyvGdtlNTlP/3Kpv4UNTzRkdZVmcxURdB/feyPMinaRC0eDRfY bI3MCSxf6jVwOITROMJtzR5+ogzrMpn4+mVPDhEr6EE46IQOADBSS6hwsov4PzVDhGvK jS15kRCTBKWfb53+kFi6/kZo60ChKVQLVtj6n8NkqfZlDK6ogQebIVhz2tZlb0UGefXN IWd3/HtWruviWI4FJcqfToV6r+ifgyXjGjkPYVQtV24BatS99GKDeqo843jLcm9vngsm a62A== X-Forwarded-Encrypted: i=1; AJvYcCV4H9pYLbEsnP522Yw+BGwEuENHdePLen7kI6L3uVtyKmj8fvRHNwNIH39VneC3eFigYID5w3HzxlpMQvbq@vger.kernel.org, AJvYcCVwyYMH8OhiW2bj3IXfE5pgWTa/5mqtCYU+FPBv4a+hrD6iDpZFsOguO/2gxIsY4B3FV/QCeTVjfbBI@vger.kernel.org X-Gm-Message-State: AOJu0YzhYcEK89kp0b5wy385llWwdhfJIF7yVVQxV1VtRkLG+4Wmd/RV XXdoxzWmYmLbKo0xUu/TlqeCw+ED5m5ar3bOD5kternVPBizN6k6 X-Gm-Gg: ASbGncswENEQlVhtqFMx1HsW0xy/yy/ogHBwG+b9ajFqD+25zygtMIw2fZ00I1qRvmN qgF7CjAy/ly6jymFo/6WUjGM25/ocvtxP26Vr51fer9rRksMIgQLlvc3s2ESyrzUlALIMpd+k9o yKDj+uNRNl/za+Jx3N9uvHG9uPsOpAL4daFMc/shYdprLnRK8Dyb7jJMUwLN4N6t5EX0cjSYt+4 pHTS0C98o6ywMeWoune5HHn1f2p23DUJK+gS4qaVs0M3fNz5AgJSSNbQjFA09JfD7mGwSw8pWbO HQ6akq8EaTYs0ZwzaDT7KXLsfQITdgRbz9OEFVDaUZA6E41bcVU5eNK/4XQ2uR+U8tvdWSSu9e+ rOD//FQ59GhSFd1elx3MKtg== X-Google-Smtp-Source: AGHT+IGH4uAijkHrPJ8SE6urjZ2Hq8G2vtE100Phz8L83U7VYNex0D/QaJL6ECz27Y2hKGs1s+a+Aw== X-Received: by 2002:a17:907:268d:b0:ad5:2260:e02d with SMTP id a640c23a62f3a-ad52260ea7bmr138931566b.42.1747318596371; Thu, 15 May 2025 07:16:36 -0700 (PDT) Received: from hex.my.domain (83.11.178.15.ipv4.supernova.orange.pl. [83.11.178.15]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad2192c8535sm1110143966b.8.2025.05.15.07.16.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 May 2025 07:16:36 -0700 (PDT) From: Artur Weber Date: Thu, 15 May 2025 16:16:29 +0200 Subject: [PATCH v9 2/8] dt-bindings: mfd: brcm,bcm59056: Add compatible for BCM59054 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-bcm59054-v9-2-14ba0ea2ea5b@gmail.com> References: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> In-Reply-To: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Liam Girdwood , Mark Brown , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, ~postmarketos/upstreaming@lists.sr.ht, Artur Weber X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1747318592; l=4546; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=pl2HEbe+CyuHOD3OyLZCSAaiFxQmceMkPEwlgJ22HCI=; b=iMNOwu9LI02MG4hZzFjCkGpeQJUyEniAZud0282jaff5Atik+g2EuLWpiaVkmoevA8XzZBt5p F5Uf6QtbylhBiwaFdr8jeo96Z+Xh5JPog+Ch1DNXMiJ2fbzxsI4eLLa X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= The BCM59054 MFD is fairly similar to the BCM59056, and will use the same driver. Add compatible and specify the allowed regulator nodes. Reviewed-by: Rob Herring (Arm) Reviewed-by: Stanislav Jakubek Signed-off-by: Artur Weber --- Changes in v6: - Replace mfd/brcm,bcm590xx.yaml with mfd/brcm,bcm59056.yaml Changes in v5: - Replace mfd/brcm,bcm59056.yaml with mfd/brcm,bcm590xx.yaml in regulator bindings description Changes in v4: - Fix yamllint errors (missing unevaluatedProperties) - Drop comment with regulator name list - Use full schema paths for $reg - Change description of regulator binding to mention BCM59054 explicitly - Drop quotes around vbus reg name - Change "Power Management IC" to "Power Management Unit" to match official Broadcom naming Note that I did not end up moving the regulator refs from allOf compatible matches; I explained my reasoning in [1]. [1] https://lore.kernel.org/lkml/ab853605-859d-44c6-8cbd-44391cd677e6@gmail= .com/ Changes in v3: - Split regulator node into separate file - Removed quotes around compatible --- .../devicetree/bindings/mfd/brcm,bcm59056.yaml | 26 +++++++++- .../bindings/regulator/brcm,bcm59054.yaml | 56 ++++++++++++++++++= ++++ 2 files changed, 80 insertions(+), 2 deletions(-) diff --git a/Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml b/Doc= umentation/devicetree/bindings/mfd/brcm,bcm59056.yaml index b387ef9885c3ac524e0782545dbca9c0e81a556c..b67d7a723fc242869e5bdc6b360= 2785f62af45bd 100644 --- a/Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml +++ b/Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml @@ -11,7 +11,9 @@ maintainers: =20 properties: compatible: - const: brcm,bcm59056 + enum: + - brcm,bcm59054 + - brcm,bcm59056 =20 reg: maxItems: 1 @@ -21,7 +23,6 @@ properties: =20 regulators: type: object - $ref: /schemas/regulator/brcm,bcm59056.yaml# =20 required: - compatible @@ -30,6 +31,27 @@ required: =20 additionalProperties: false =20 +allOf: + - if: + properties: + compatible: + contains: + const: brcm,bcm59054 + then: + properties: + regulators: + $ref: /schemas/regulator/brcm,bcm59054.yaml# + + - if: + properties: + compatible: + contains: + const: brcm,bcm59056 + then: + properties: + regulators: + $ref: /schemas/regulator/brcm,bcm59056.yaml# + examples: - | #include diff --git a/Documentation/devicetree/bindings/regulator/brcm,bcm59054.yaml= b/Documentation/devicetree/bindings/regulator/brcm,bcm59054.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5b46d7fca05e21aa1eae991b5f9= f60b444f20c1c --- /dev/null +++ b/Documentation/devicetree/bindings/regulator/brcm,bcm59054.yaml @@ -0,0 +1,56 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/regulator/brcm,bcm59054.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Broadcom BCM59054 Power Management Unit regulators + +description: | + This is a part of device tree bindings for the BCM59054 power + management unit. + + See Documentation/devicetree/bindings/mfd/brcm,bcm59056.yaml for + additional information and example. + +maintainers: + - Artur Weber + +patternProperties: + "^(cam|sim|mmc)ldo[1-2]$": + type: object + $ref: /schemas/regulator/regulator.yaml# + unevaluatedProperties: false + + "^(rf|sd|sdx|aud|mic|usb|vib|tcx)ldo$": + type: object + $ref: /schemas/regulator/regulator.yaml# + unevaluatedProperties: false + + "^(c|mm|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-3]$": + type: object + $ref: /schemas/regulator/regulator.yaml# + unevaluatedProperties: false + + "^lvldo[1-2]$": + type: object + $ref: /schemas/regulator/regulator.yaml# + unevaluatedProperties: false + +properties: + vbus: + type: object + $ref: /schemas/regulator/regulator.yaml# + unevaluatedProperties: false + +additionalProperties: false --=20 2.49.0 From nobody Tue Dec 16 13:25:32 2025 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F27BA1C7013; Thu, 15 May 2025 14:16:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318601; cv=none; b=ASVSw2L/p9KG3A3XAjS4MbgLpKN+jLXfkn6BwUBcWiZKT5/LToN8QVGkuYfzoertLVXY82VP93dLKv5Rufj2CaX2xtLT5Vr9HdqEs+sZE+b1FeCH3kluYlDbsTKTb3fXehNS8a51jpMf9q8OKRh8aHiARhy3OhB2+py21ynuAkQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318601; c=relaxed/simple; bh=zc/KYGv+dOB7LPpRpR+zdnpyGPVsa6Afn4PttizqeaY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QRJ+skfEEViQPgkcBIfpQyrO5KmRPkIBzX/GGZBzsEu1M2pC55vAlSv7gFPWprJ+laAS/8gnTfyxvjSkIQYv9r7WMhmKH72TplAlWV8vn9J8/T+ksxriBPY7Toi6b978hUmdLnevWu2xCmIFsIJwRzQHF/hIotIryUpJQTYlsjQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=FybHy7/3; arc=none smtp.client-ip=209.85.218.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FybHy7/3" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-ad23db02350so198737566b.1; Thu, 15 May 2025 07:16:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747318598; x=1747923398; 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=uB7IlMr42gg8DLRiDGyDmhiIGwhSKkQAZl2FLPhXodg=; b=FybHy7/347Tm6OruOyfA9bKTjfFj+faV7rD9XM2iw74DLheO3npKg3YAMAA6uo9VkU lB5B7cxwgDE1FN7EnFIygIni2q5zEYXP9KBCkRyDhfv4SWG8e4Q8GRM0f6F6d9rcmFkZ 4xWUrX8cGGmPcvK/yW90WXo2tpYWGd6+aXQBQrxnTo/IilhlXB6ifVazQxRZW4V1Olsf 7YHRwC/I2F4mkWYCxjGhmmMyW6PmLAHKdar6v3teZMtB46i4I2LmxUrL4xTKbzgVQgsJ YUh/NfvZYklINCgo/TmuA/i1BWuCvIkkrXANCQaEOyWX2TJWhi4ADF0XSwTmq5XA/fpz WBGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747318598; x=1747923398; 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=uB7IlMr42gg8DLRiDGyDmhiIGwhSKkQAZl2FLPhXodg=; b=NZJiS3ezjRBQMAv+xWUVE0HnTisjk3kqXIc6r0ic40x2PE85pTe90Zc01zGMe88FVN wvATaSZg7tu3VNlQvm7zDuMQkmmtEdSli0v/KG1tF1PDPR+0UXbVLIJVrbEgXBngS40U 63SqekL51sY7pnr0llbGYpAQmzwqQBAg+f2WRLvX61qG+Gfab8xQrWo9+fXjY3TC46Ib XeczTVnPZ54ixgAqyqoEGdTLtqHtmfrZWhRrstmdoeEPE6Hyxs8aa2l5SbIPqgdB1GPa rwSYQyqAnKD2pgj7Fz9e9zr+XbYwnmS2nHCOQ+a3Aj7HqglGQV1aE3+yoBzDwZs6V7of D28A== X-Forwarded-Encrypted: i=1; AJvYcCWLcu+mKR/KnwQx5VeWYJcSS8A5GPjLxhDVEDhtA1gxwbCqsAtoUc/i0bVltq5FQOpOJzpDFJbJTCMLzobb@vger.kernel.org, AJvYcCWmXYynXNVaVpLit3csdcSgkNupzj/2Ycx8IinuAoWweB6VvzXnW8ug76UfjxKJoffz8u0qY/HyfK99@vger.kernel.org X-Gm-Message-State: AOJu0YyH1BQrwA048rgPd8UnK7fU20FK6/ydBNoVQmEdHX5cAMC54v0i 6ByaYZR49Jxdj3OnfGQkqIMgV1dK7hZ7gAPjzkm4fpPRzfBG92HT X-Gm-Gg: ASbGnctE/91cZFvUL5d6vjMMrtOmBpicEqvHaW6oHZYtDvWQvfhfcnVAAiGpgpKC62k kjaKu5qJTgoDohBBqtBo0qUQqaCKYhIVxMjP6qV+2ohphhjnSLJLIwi7yAXwHrNDVYzqXm3BwxH SwXwP69Qoe3WGVWeMksuysSWvuulxyb2xxxxHTKpPPjr7Hy3fplcTX3q7av4yH4g/Ao9570PHxi fjNJsjuGi5/M403lkO6Uk+kbbz0vuMgKoyJQOUdGV+ZC9g5nFkshW7YJ7C5M4LyFSoy3zLvIX9U jPseKNNRdRj5zF2Ny5AdZr6scGgtjCqdwi2p8jXVOL1lTq2fp39ODWlvEfyLRSzaSTCUk2+S5fE Cysn8RT8K24SwsTHP18qSag== X-Google-Smtp-Source: AGHT+IExD8WCobcAmWiSwMceR9cRqXsORoxO5gU+uaajpgi9F6F/lCv8ew7TQkTfmbUu8IansJ4GbA== X-Received: by 2002:a17:906:dc92:b0:ad2:50ef:492e with SMTP id a640c23a62f3a-ad4f717e01dmr778642466b.32.1747318597746; Thu, 15 May 2025 07:16:37 -0700 (PDT) Received: from hex.my.domain (83.11.178.15.ipv4.supernova.orange.pl. [83.11.178.15]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad2192c8535sm1110143966b.8.2025.05.15.07.16.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 May 2025 07:16:37 -0700 (PDT) From: Artur Weber Date: Thu, 15 May 2025 16:16:30 +0200 Subject: [PATCH v9 3/8] mfd: bcm590xx: Add support for multiple device types + BCM59054 compatible Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-bcm59054-v9-3-14ba0ea2ea5b@gmail.com> References: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> In-Reply-To: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Liam Girdwood , Mark Brown , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, ~postmarketos/upstreaming@lists.sr.ht, Artur Weber X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1747318592; l=3150; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=zc/KYGv+dOB7LPpRpR+zdnpyGPVsa6Afn4PttizqeaY=; b=tw9wbBZbDH75cMbnG5QmdWnMP+qBjOobs88M8T+2a8dUryao3viY7f8Qi6hbsTRbvQkjUwOA0 jv1aJXcSlwQBfKIOrlfK4jTxC92saGWB3PIF6fqJl/+I92MmGaKdo6C X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= The BCM59054 is another chip from the BCM590xx line of PMUs, commonly used on devices with the BCM21664/BCM23550 chipsets. Prepare the BCM590xx driver for supporting other devices by adding the PMUID register values for supported chip types and store them in the MFD data struct as "pmu_id". (These will be checked against the actual PMUID register values in a later commit.) Then, add a DT compatible for the BCM59054, and provide the PMU ID as OF match data. Reviewed-by: Stanislav Jakubek Signed-off-by: Artur Weber --- Changes in v6: - Move PMUID value to MFD header - Use PMUID value as OF data/device type value - Add bcm59054 to I2C ID table Changes in v4: - Rewrite commit message description - Rename "device_type" member to "dev_type" - Drop awkward line break to fit function call - Add PMU ID/revision parsing function Changes in v3: - Fix compilation warning about device_type pointer cast type - Name the device types enum and use it as the type in the MFD struct --- drivers/mfd/bcm590xx.c | 12 +++++++++++- include/linux/mfd/bcm590xx.h | 7 +++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/drivers/mfd/bcm590xx.c b/drivers/mfd/bcm590xx.c index 8b56786d85d0182acf91da203b5f943556c08422..4620eed0066fbf1dd691a2e392e= 967747b4d125b 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 =3D &i2c_pri->dev; bcm590xx->i2c_pri =3D i2c_pri; =20 + bcm590xx->pmu_id =3D (uintptr_t) of_device_get_match_data(bcm590xx->dev); + bcm590xx->regmap_pri =3D devm_regmap_init_i2c(i2c_pri, &bcm590xx_regmap_config_pri); if (IS_ERR(bcm590xx->regmap_pri)) { @@ -91,12 +93,20 @@ static int bcm590xx_i2c_probe(struct i2c_client *i2c_pr= i) } =20 static const struct of_device_id bcm590xx_of_match[] =3D { - { .compatible =3D "brcm,bcm59056" }, + { + .compatible =3D "brcm,bcm59054", + .data =3D (void *)BCM590XX_PMUID_BCM59054, + }, + { + .compatible =3D "brcm,bcm59056", + .data =3D (void *)BCM590XX_PMUID_BCM59056, + }, { } }; MODULE_DEVICE_TABLE(of, bcm590xx_of_match); =20 static const struct i2c_device_id bcm590xx_i2c_id[] =3D { + { "bcm59054" }, { "bcm59056" }, { } }; diff --git a/include/linux/mfd/bcm590xx.h b/include/linux/mfd/bcm590xx.h index c614d1b1d8a217ac2f212908a4c19ae71fa56f63..8d146e3b102a7dbce6f4dbab9f8= ae5a9c4e68c0e 100644 --- a/include/linux/mfd/bcm590xx.h +++ b/include/linux/mfd/bcm590xx.h @@ -13,6 +13,10 @@ #include #include =20 +/* PMU ID register values; also used as device type */ +#define BCM590XX_PMUID_BCM59054 0x54 +#define BCM590XX_PMUID_BCM59056 0x56 + /* max register address */ #define BCM590XX_MAX_REGISTER_PRI 0xe7 #define BCM590XX_MAX_REGISTER_SEC 0xf0 @@ -23,6 +27,9 @@ struct bcm590xx { struct i2c_client *i2c_sec; struct regmap *regmap_pri; struct regmap *regmap_sec; + + /* PMU ID value; also used as device type */ + u8 pmu_id; }; =20 #endif /* __LINUX_MFD_BCM590XX_H */ --=20 2.49.0 From nobody Tue Dec 16 13:25:32 2025 Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 140541FBCB1; Thu, 15 May 2025 14:16:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318605; cv=none; b=B4yOx8gHwOI3WAsrzIjxQlJbtcTCJqHo0b/MCZfIy9Al0RcTLZ9n/feO5DXVU2jSJ6zu5YanS8VtLex2wDQ7S04bIRrk3/l/OnBg4PQ8sJ97Ra3QRgmCS7UhwqcB2QIKXQm/j4EZ/zcCMfu0npglPjjXvlWCFEaAVxymQK1nn60= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318605; c=relaxed/simple; bh=7r2n9E5maekIC6E/9ReFUMYNXP68DM7OrhQ/lKISE6k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iFNoOzyEN4Eruabins+EnQrwYCH7lx0oI2MbWpR9HOOc4lxWEsWxGS4X++70Q5Defafe8QVRsuR9W9oKniwbNGTBU8DE6UAEdGh6n4wrh42/Y9yDViTWP9nTGlDumRQyBdbDePs1+YfvkzpdtTQ0jjBpFsL6zbCSzVMX378KCbg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jxxTiWZZ; arc=none smtp.client-ip=209.85.208.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jxxTiWZZ" Received: by mail-ed1-f46.google.com with SMTP id 4fb4d7f45d1cf-5fca2805ca4so1621413a12.1; Thu, 15 May 2025 07:16:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747318600; x=1747923400; 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=2/WfdUoQ5QD4GDYBilFtU0HBfo7TFHkHqD8++md7MIY=; b=jxxTiWZZhdtNC83k3I37/Fdr62JlIQC91ffOK9k8MoVOvWNQWvWV8ZknaEZHRsKE4i iNIsV6M61jKX5bAaScthxyzJoZk9SutDCJwsoq/N5brUxU89IeYX/f2B4anoqAuEJW73 v4nrQaBjEpzSGpxrHXEm6XNBS1p9Esa58+hm9fTKglInFsRQOWBKqYT7tsyzwdRdz+zY TWZ1ZQVEHIhrmdkzw6yFjzriedLvhZREpX/88sQTf4dX1WBRJDiLoN3FYseMpUmlfuy2 6ejtZ/e+OxIOpyqWyV/QuGPUb68aX5mcKoSsIhOeeZVe8jAEuB6p7Eim4NQL2+3t0D5n DSkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747318600; x=1747923400; 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=2/WfdUoQ5QD4GDYBilFtU0HBfo7TFHkHqD8++md7MIY=; b=R2ebhYcTFr5TJtKfz8hWcwLXRxM4mzDgWhq3w/KaDd8PbHhhMHkBRsritsI1ZdjDFT VUc5IbzP5xnJCaPcgTU4WkHsLGBc7Xb/L7VxB095sDNqp0FZJNOWz47VscnmgYbaNhOY dFd7WXTYhZhXAnraCezH9kFbG7awCcEdwUO6dALUOZKC4C7nu89HYylaOTO8WCfqMk5R vKYNpm2ssQ3NRF+NmoSYY3y84MOvg4AlIkXBI5thBbn8OMCz86Wm5S0MZANFfc/TMDf/ 4JJUSvb32YSmrM0jWjx4eKfc2coY+cNW/i7WvQ+2j8BCCwXwSYNYHmdIWVUFxo8wjI8j xJxg== X-Forwarded-Encrypted: i=1; AJvYcCVZSnqc2KojxGtgB+aR68mwTQYTqNbX5NWTIgSTvZFsD7ndB9rJddF73cJu5PdrSRdLxGgC8n3TeRKCfLQ3@vger.kernel.org, AJvYcCXRdz+Uh1eUji18OgaBwp3DG+NyPzj2TvvOG+q5BmHTz2OVeOjMjGASUHsgdz9UFyZojP7n4Rdcgw6L@vger.kernel.org X-Gm-Message-State: AOJu0YxIZiSvW/Si0GbGKefssIV4Q7zR5T1wDN/8yk2jARpaZN1HyyOo Ax+Kv+5Irpn9QQCDB1ULlQl/2DjyF39WfeciZEkIGeacCHA4ODK7 X-Gm-Gg: ASbGncsKy8cQQZvd/fTPXw8gk39wacF0p1n9TeummLv0Q9ccf87ZZrI60CK+5/2HHZu xvEfV+CS41BgA/8jW8PJ5fZvKhxa2vIiJz3FgCpoQ9Mh+7eFR9G+u9hT0zsppWVTf1hjzkUBoU7 G5F7SznV9IoZhHnAyTxuDJ5eu186cftgmkHpfP0iAVvHhFRgdD3gbU4yy0a4GZmrwZNdIYDuYKq EMfa3SGO7KJ3J6y4oES6bkcFww/nQK4vntXBd4cXc2LTaeM3sSJqmt3Jg6o/0sq4NEOMgZ0gQf3 3Z8Ggylicr1rT9rvto/KHAAQuIO6G2WtF+fa77IVKbR8XxEcGkR30Cb7VE3sjuNqFJdhFjJuWf0 xITOsUDS4Ym1EeWfl/ig+tw== X-Google-Smtp-Source: AGHT+IEhyNkA8VJM9/cJc7DMu/0IOaUkfY0AVt3v1S+4Tfr+/lPZznmy4RVgI8KquchWx9x3Q2hFNQ== X-Received: by 2002:a17:906:3384:b0:ad5:1bf5:491d with SMTP id a640c23a62f3a-ad51bf553c2mr147419266b.59.1747318600018; Thu, 15 May 2025 07:16:40 -0700 (PDT) Received: from hex.my.domain (83.11.178.15.ipv4.supernova.orange.pl. [83.11.178.15]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad2192c8535sm1110143966b.8.2025.05.15.07.16.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 May 2025 07:16:39 -0700 (PDT) From: Artur Weber Date: Thu, 15 May 2025 16:16:31 +0200 Subject: [PATCH v9 4/8] mfd: bcm590xx: Add PMU ID/revision parsing function Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-bcm59054-v9-4-14ba0ea2ea5b@gmail.com> References: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> In-Reply-To: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Liam Girdwood , Mark Brown , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, ~postmarketos/upstreaming@lists.sr.ht, Artur Weber X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1747318592; l=5066; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=7r2n9E5maekIC6E/9ReFUMYNXP68DM7OrhQ/lKISE6k=; b=C9WPeMJxWx8zoGh32NInJgnukZPwWI+VD16PmrEOepg024tBcuUQMSbekkWl5t1vq4tMF7wFb am5HXBF+5R2BGvtJtajlLU6Gkq4Y115SLRB4ozvR1Ceh84fk7YM1c5h X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= The BCM590xx PMUs have two I2C registers for reading the PMU ID and revision. The revision is useful for subdevice drivers, since different revisions may have slight differences in behavior (for example - BCM59054 has different regulator configurations for revision A0 and A1). Check the PMU ID register and make sure it matches the DT compatible. Fetch the digital and analog revision from the PMUREV register so that it can be used in subdevice drivers. Also add some known revision values to bcm590xx.h, for convenience when writing subdevice drivers. Reviewed-by: Stanislav Jakubek Signed-off-by: Artur Weber --- Changes in v9: - Put params to dev_dbg print on one line Changes in v8: - Change PMU ID print from dev_info to dev_dbg - Unwrap some lines and let them go up to 100 chars - Drop comment above bcm590xx_parse_version (keep the comments inside the function, they make it a bit more clear what's happening since it's doing two separate things) Changes in v7: - Return -ENODEV on PMU ID mismatch - Drop "Check your DT compatible" from ID mismatch error message Changes in v6: - Adapt to PMUID being passed as device type value - Rename rev_dig and rev_ana to rev_digital and rev_analog - Rewrite commit message Changes in v5: - Add REG_ prefix to register offset constant names Changes in v4: - Added this commit --- drivers/mfd/bcm590xx.c | 54 ++++++++++++++++++++++++++++++++++++++++= ++++ include/linux/mfd/bcm590xx.h | 14 ++++++++++++ 2 files changed, 68 insertions(+) diff --git a/drivers/mfd/bcm590xx.c b/drivers/mfd/bcm590xx.c index 4620eed0066fbf1dd691a2e392e967747b4d125b..5a8456bbd63f65b9260f05ef654= 6c026bf822bae 100644 --- a/drivers/mfd/bcm590xx.c +++ b/drivers/mfd/bcm590xx.c @@ -17,6 +17,15 @@ #include #include =20 +/* Under primary I2C address: */ +#define BCM590XX_REG_PMUID 0x1e + +#define BCM590XX_REG_PMUREV 0x1f +#define BCM590XX_PMUREV_DIG_MASK 0xF +#define BCM590XX_PMUREV_DIG_SHIFT 0 +#define BCM590XX_PMUREV_ANA_MASK 0xF0 +#define BCM590XX_PMUREV_ANA_SHIFT 4 + static const struct mfd_cell bcm590xx_devs[] =3D { { .name =3D "bcm590xx-vregs", @@ -37,6 +46,47 @@ static const struct regmap_config bcm590xx_regmap_config= _sec =3D { .cache_type =3D REGCACHE_MAPLE, }; =20 +/* Map PMU ID value to model name string */ +static const char * const bcm590xx_names[] =3D { + [BCM590XX_PMUID_BCM59054] =3D "BCM59054", + [BCM590XX_PMUID_BCM59056] =3D "BCM59056", +}; + +static int bcm590xx_parse_version(struct bcm590xx *bcm590xx) +{ + unsigned int id, rev; + int ret; + + /* Get PMU ID and verify that it matches compatible */ + ret =3D regmap_read(bcm590xx->regmap_pri, BCM590XX_REG_PMUID, &id); + if (ret) { + dev_err(bcm590xx->dev, "failed to read PMU ID: %d\n", ret); + return ret; + } + + if (id !=3D bcm590xx->pmu_id) { + dev_err(bcm590xx->dev, "Incorrect ID for %s: expected %x, got %x.\n", + bcm590xx_names[bcm590xx->pmu_id], bcm590xx->pmu_id, id); + return -ENODEV; + } + + /* Get PMU revision and store it in the info struct */ + ret =3D regmap_read(bcm590xx->regmap_pri, BCM590XX_REG_PMUREV, &rev); + if (ret) { + dev_err(bcm590xx->dev, "failed to read PMU revision: %d\n", ret); + return ret; + } + + bcm590xx->rev_digital =3D (rev & BCM590XX_PMUREV_DIG_MASK) >> BCM590XX_PM= UREV_DIG_SHIFT; + + bcm590xx->rev_analog =3D (rev & BCM590XX_PMUREV_ANA_MASK) >> BCM590XX_PMU= REV_ANA_SHIFT; + + dev_dbg(bcm590xx->dev, "PMU ID 0x%x (%s), revision: digital %d, analog %d= ", + id, bcm590xx_names[id], bcm590xx->rev_digital, bcm590xx->rev_analog); + + return 0; +} + static int bcm590xx_i2c_probe(struct i2c_client *i2c_pri) { struct bcm590xx *bcm590xx; @@ -78,6 +128,10 @@ static int bcm590xx_i2c_probe(struct i2c_client *i2c_pr= i) goto err; } =20 + ret =3D bcm590xx_parse_version(bcm590xx); + if (ret) + goto err; + ret =3D devm_mfd_add_devices(&i2c_pri->dev, -1, bcm590xx_devs, ARRAY_SIZE(bcm590xx_devs), NULL, 0, NULL); if (ret < 0) { diff --git a/include/linux/mfd/bcm590xx.h b/include/linux/mfd/bcm590xx.h index 8d146e3b102a7dbce6f4dbab9f8ae5a9c4e68c0e..fbc458e94bef923ca1b69afe2ca= c944adf6fedf8 100644 --- a/include/linux/mfd/bcm590xx.h +++ b/include/linux/mfd/bcm590xx.h @@ -17,6 +17,16 @@ #define BCM590XX_PMUID_BCM59054 0x54 #define BCM590XX_PMUID_BCM59056 0x56 =20 +/* Known chip revision IDs */ +#define BCM59054_REV_DIGITAL_A1 1 +#define BCM59054_REV_ANALOG_A1 2 + +#define BCM59056_REV_DIGITAL_A0 1 +#define BCM59056_REV_ANALOG_A0 1 + +#define BCM59056_REV_DIGITAL_B0 2 +#define BCM59056_REV_ANALOG_B0 2 + /* max register address */ #define BCM590XX_MAX_REGISTER_PRI 0xe7 #define BCM590XX_MAX_REGISTER_SEC 0xf0 @@ -30,6 +40,10 @@ struct bcm590xx { =20 /* PMU ID value; also used as device type */ u8 pmu_id; + + /* Chip revision, read from PMUREV reg */ + u8 rev_digital; + u8 rev_analog; }; =20 #endif /* __LINUX_MFD_BCM590XX_H */ --=20 2.49.0 From nobody Tue Dec 16 13:25:32 2025 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 681641F7910; Thu, 15 May 2025 14:16:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318605; cv=none; b=KV9YMp2nBACV/L/zXfTtxh2RsSsxxDxDuUVUPdacbK6g9wY1KKpOt4yiLSUTM0guizFvcG68B0neD+xS6WJ9yKvI44KL+o3kURoG0Nn4afikmFK6oBnBglo2p3s+PVYStxjAfyC8GmmU+Mt8AmIE45j5DooT9YptP/te7LHJNQE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318605; c=relaxed/simple; bh=7vXj2lL0ABhnybPOu3woikYgEpsr5/S9c7rX9e+zIdA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=j0cIHTKsQB3pXrmp6a0rVTGlC/z43hb3Ovls8KlTsLPDVYO8NCXYDSNeYzOscpGF1kFi9xre2eWdmHFmpk6YIFezgINmSJh3Prygcek0RqB0j8yh9UfQiUMn1S/sMiUdVvQbKgcDhGs1q1iGHUAh8CUw8lrZR+RiQdFMFIv2FcU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=IyGxRnT1; arc=none smtp.client-ip=209.85.218.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IyGxRnT1" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-ad24677aaf6so128006266b.2; Thu, 15 May 2025 07:16:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747318602; x=1747923402; 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=j3UDIwrt8q2IoO3p0cBHqtcQzcmLYI3JiYKPqxI7uzI=; b=IyGxRnT1Y3ThQjh+k4oW+ijtu1kwORowy8CDF/gLrd7prAcOziuFm+EFNpbe8dPpqr bDs7Us2ReuoCeQYvW0zNVMU8+aUy/j8PnrqVcBij8NzT+0FMbi8IWPm68ObQ9joVJLw1 epvDk+bVEVaZ0WsuUtQVGaiIP0/BOfzf5wHBfbb2kWgmAbr3VVLh6GLkpmgl5WAu0CTK lUstrmTWblskocz0W4qZnUvdYMm24P9Bjp0QRSfGXVXXHRD9cL39dFvKlCtR9A3g26uz IPlV10dOmdqDHlOG8LVNbwMntgKk9VHNOZa1IZQMEUTTBBG6tJ0iYPURcv/xCVRZLND4 tVMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747318602; x=1747923402; 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=j3UDIwrt8q2IoO3p0cBHqtcQzcmLYI3JiYKPqxI7uzI=; b=gyZNvI/pOQzgpBeq8QbFaICVNkMiU7AdtAbiGT7tO9fpI4kUaJYDi61cbO1paEde5w 8w2JzntSHfFDSh5ZXcgPujxk+T0HTlqkTxb2b5pp6Ypf3LGb5xU24qmmmOhdm28/syvX w4At0AkFIV3gfwtbnyPVov5nNyOFYKh2+DsfA7WtkYwfGNXX0iux7yRBx8zwdyioa1CF LRpzB0vGyZv9L/2f9R5VPI1a7mbJtv91whcPd7qefGsKshYdXpYdfnGq0qz0TObVFqEL WDnEHhjTuX4FdYjrKuvEnNom3XS1T27HOjRg7dhM52rVQusosZfyYEP1J/B7QjX8khRn LXqw== X-Forwarded-Encrypted: i=1; AJvYcCV+cND5Dtg8s13P3PgtTznMz2ML7ihOjItXs5vqsFHaqUHvU09wmhRV5TVnXvSrQILpKr3jNnrJLvCZ3bVi@vger.kernel.org, AJvYcCW3or6lltB573iIp7Djggm4U88s8Fiw+OTsD2cPdetDxcZZg0qxyq1iSHNtvoO43mf1wP/UwSGxgFsZ@vger.kernel.org X-Gm-Message-State: AOJu0YxnifgnaXVoXXAkd8QqpaHYUFBYWcLgrnNVJMQbk9REN4+KIRW+ os09Hm+cVqbPhwbGCATLn0QlaI92pN8A5eq+xSDCzczLlFghzm7iGMxuwA== X-Gm-Gg: ASbGnctXZcXIkyYZ9X/CVp97duJ/lfcIHqbZSK3Xgr+29Wbw7hfQNjG2VOs5bIzWKxa qna2s6uY9JmrWUYPLM8tUosigJqHnyHrLn2urTtQ9M4n8TSv6p7Ks5ozlkI+30fVBsg/lDsjlpB qE8boeWZDWSF/XEKJ295otNnii8rZ4e8R+iGC51MQPR2WKS3XIyJq7F0+sIVS1J+vOcrgFSIWMW oEUAZ/6RMVkME8McMflu2Zq3nKEeHUvm1ALGRp114HP+ClGjjpCrji8OL6pT8PyEUYoZwxmiOfl KlwGz0z0IihauipcggXZMQRCq5INUqmTAQHEjC5Ovk5mpMejWwN/E4VEpl0Z5rTDl5qasfNH4JL nFCk5lDCrAsfEVdwlVv6hIwy1da+139D8 X-Google-Smtp-Source: AGHT+IHDnCJ5OcM3OaKjhVLJS7uemAJqnm0OcV5tal0KrD+Vmzr2b9JmP0FGtbI1pOMCPRLeROP6rw== X-Received: by 2002:a17:907:6a17:b0:ad2:4fb8:c0ab with SMTP id a640c23a62f3a-ad4f71e99cdmr712484066b.31.1747318601543; Thu, 15 May 2025 07:16:41 -0700 (PDT) Received: from hex.my.domain (83.11.178.15.ipv4.supernova.orange.pl. [83.11.178.15]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad2192c8535sm1110143966b.8.2025.05.15.07.16.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 May 2025 07:16:41 -0700 (PDT) From: Artur Weber Date: Thu, 15 May 2025 16:16:32 +0200 Subject: [PATCH v9 5/8] regulator: bcm590xx: Use dev_err_probe for regulator register error Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-bcm59054-v9-5-14ba0ea2ea5b@gmail.com> References: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> In-Reply-To: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Liam Girdwood , Mark Brown , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, ~postmarketos/upstreaming@lists.sr.ht, Artur Weber X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1747318592; l=1173; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=7vXj2lL0ABhnybPOu3woikYgEpsr5/S9c7rX9e+zIdA=; b=/BTWBM2DePXxZdvfSKM2bAtC7wlRqGwG63cagASWO9dexV0q3QfMB+e6Kb5EQvvT78vUqP/hx ldrxBdEtf/7A6L6UcO8XQ5YI/H+5FU3v5GI0ZW+t+T94qV/WGOZcXEK X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= Instead of calling dev_err() and returning PTR_ERR(...) separately, use a single "return dev_err_probe" statement. Reviewed-by: Stanislav Jakubek Signed-off-by: Artur Weber Reviewed-by: Mark Brown --- Changes in v4: - Added this commit --- drivers/regulator/bcm590xx-regulator.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/regulator/bcm590xx-regulator.c b/drivers/regulator/bcm= 590xx-regulator.c index 9f0cda46b01506080ae5fa709104a8df4d174a8d..a17311fa30e4d48c0a4925778d7= bed486ac7a982 100644 --- a/drivers/regulator/bcm590xx-regulator.c +++ b/drivers/regulator/bcm590xx-regulator.c @@ -340,12 +340,10 @@ static int bcm590xx_probe(struct platform_device *pde= v) =20 rdev =3D devm_regulator_register(&pdev->dev, &pmu->desc[i], &config); - if (IS_ERR(rdev)) { - dev_err(bcm590xx->dev, - "failed to register %s regulator\n", - pdev->name); - return PTR_ERR(rdev); - } + if (IS_ERR(rdev)) + return dev_err_probe(bcm590xx->dev, PTR_ERR(rdev), + "failed to register %s regulator\n", + pdev->name); } =20 return 0; --=20 2.49.0 From nobody Tue Dec 16 13:25:32 2025 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3055B1FFC53; Thu, 15 May 2025 14:16:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318608; cv=none; b=K9qJO3F+f94MezQ6d189dBsdiNMScM/cYCQ/pA9ctLaqH3fYq/jPPFfHeAzMh94A1dHW2xrfnwBktC4WtYm6Zk1OglUnsKKQo2z2QKhXuI6B48/U+PTB3s+ua2WhL6kTWha4RxQoHbFYJAzybHSFlX1EkStTGtoQq45paSdXgto= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318608; c=relaxed/simple; bh=GgIqAIOhSA1tBQqg8I+BSP41at2zgMr2ND8NIBrW5zM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ppMFgA7QlU3OlO01RF6hgw7mcjqlNPfb+4WSSxjsoLSsZjjiHEPRhDTVMHHucaQp5n0GSEX60ObVVA1Bp3Bt6PJb4Yvp6pPRGoLerH3g42BxoyNJMs3RgxcTzWA2/60SyuH6AVTLIaw5TL7faqTh6SLyOi+PJGBMiLzFAn7dzYQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=EOsrbOU8; arc=none smtp.client-ip=209.85.218.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EOsrbOU8" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-acb5ec407b1so154846566b.1; Thu, 15 May 2025 07:16:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747318603; x=1747923403; 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=bGbbzu12oYfvm9H35y5KVOIUrBj8pzeyrKVGNLlXznw=; b=EOsrbOU8LVwuU0vE7MVRCDuH3mP0EyXKbj31VvDwpV9vHfa2N15eehyQU251HsIEJy An8J5Ku9QKq6Q2+EP2lInGpskbBvyGLkP0fEzTUFawLDqfR0lPtU9+ZhjAdbOAENkToP T+plZSkyZA1/5mnknhxvcsviTDb9vDuPvqgWmPvPgUGCg3xlFw47DzuApQcLuVlS04u7 UUo7KsmPtmXj1hmjnz3k21rCYH5ogk+eax9ZpMPRwkOXuPcI8aEQxWi/SNOHJL8Uu1Jd IRRA+WFaZmOXWrLxYc7yIyU2nRUxh92f2nhNJtibe9g+qEvtusY74YSiP3AFsUovyLLV xI2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747318603; x=1747923403; 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=bGbbzu12oYfvm9H35y5KVOIUrBj8pzeyrKVGNLlXznw=; b=BNK9Q4/VqwDSooahR/FLcYogGwqmVULG6A5ODUiNkpp8ir2ZyCAHdH2UBd3y1jefZO XItPvf/TC69uXUJkFN10uI4vFBkU405GGoXSS3T0KWeqXJkqaeXZPK8YNGP73S0LvvrE ZnFzzAwMx+YQBvC/JQOFpn6sT4aN9ISPb+/2mJHDM5GhCmbptRZ+V40f4c90sdKxV/kC lQ6H7Pr3lm21ewlkx0bL3evLRXZbPylowLTtOQoFJ/hZlJpg4CNl7fMTvwXdVfSeUYLA uR6ldhH9hDnw5c9y5+dABKAAx875a9/3Ssi5QB5/KwMb6lEV8vfrS9Llfj5DrYR6mxWA lMDQ== X-Forwarded-Encrypted: i=1; AJvYcCVBfXWxg4aQoAFECbCGh9wC445jILbWKOJ6S9awxbkx8qwcErEc/VPftePKdIEpkw79VT0Syfvdb0x5UivH@vger.kernel.org, AJvYcCVIRFxcm1qrTBCK8+9Cv2Ce5+wuINvP90FOSbhUr+j+HGtklN5soJmU2j8jTUZUmA99A6xambmh3Ufn@vger.kernel.org X-Gm-Message-State: AOJu0Yzqw0H+wW6PvMsMFuIHL/h+QqXKauHTCfkJzfgIv/L0qFqjtB+O Wsjbb4BdHHeO+nQk7PGBTIMypk5bt7GR6EJvdlUi0AHlCZt4f33H5PVNvw== X-Gm-Gg: ASbGncsm0F/qNPFwt9be6clQVoeQRtTH4SGukCoQZagtHNxlPoxOT7ss4qDMLAfhiCU 9PskY8SoD4VmXZGbzxr0LIm75HMcJLnwVzMXXStxD/pAMgjG/Hmt3Wf/bwpVivVaRv4Qcemi6T+ rq7jaVLhrDFfU/4K9YnIBudzTj/pbVKF1f33VEgknMJSnugsoPX8KTBpFW8LY3kArQImWjrEEDC 08e6lNWU4Kh5bH2aezp3bPQCD8A+JBepiUT2QbKj7eK2PtJfKGiWsUMz12Iih24m6/5w6MFXD9h aL275JQgCliHvs+1S+XpSIUZLwsPrMjcboH2o7sLVLm3GvJKCEULN4xT2ti/VmFZ1nszFLAZA/6 WIiQB60oHkDKQRBRaFUC57Q== X-Google-Smtp-Source: AGHT+IFmHKERBnvqZBlFlG+Xgxsax1E0yLnE4tnSe6XLELlFNUI7gZBCRI89XUAzDT0t3OqSs8/K6w== X-Received: by 2002:a17:907:c205:b0:ad2:50d1:eb56 with SMTP id a640c23a62f3a-ad515ded462mr225280866b.16.1747318603089; Thu, 15 May 2025 07:16:43 -0700 (PDT) Received: from hex.my.domain (83.11.178.15.ipv4.supernova.orange.pl. [83.11.178.15]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad2192c8535sm1110143966b.8.2025.05.15.07.16.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 May 2025 07:16:42 -0700 (PDT) From: Artur Weber Date: Thu, 15 May 2025 16:16:33 +0200 Subject: [PATCH v9 6/8] regulator: bcm590xx: Store regulator descriptions in table Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-bcm59054-v9-6-14ba0ea2ea5b@gmail.com> References: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> In-Reply-To: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Liam Girdwood , Mark Brown , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, ~postmarketos/upstreaming@lists.sr.ht, Artur Weber X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1747318592; l=16626; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=GgIqAIOhSA1tBQqg8I+BSP41at2zgMr2ND8NIBrW5zM=; b=OGdt8iqvUiZb8j4nOqnfSeiokAYIgNku0AyQ+3UlljJoGWcypI1rb6dqPw5uxmlFxx8oOeV5O o+Z9uqGvptFC0YjChN60ATdCYxP35Q+5Sdw0vA+jc1B0/NEWRGi3bix X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= Instead of filling in the regulator description programatically, store the data in a struct. This will make it a bit nicer to introduce support for other BCM590xx chips besides the BCM59056. To do this, add a new struct type, bcm590xx_reg_data, to store all of the necessary information. Drop the old IS_LDO, IS_GPLDO... macros in favor of the "type" field in this struct. Adapt the old bcm590xx_reg struct to the new types. Reviewed-by: Stanislav Jakubek Signed-off-by: Artur Weber Reviewed-by: Mark Brown --- Changes in v6: - Adapt to changes in MFD header Changes in v5: - Move the bcm590xx_regmap_type enum to the bcm590xx.h header - Rename bcm590xx_reg_info to bcm590xx_reg_data Changes in v4: - Replace incorrect return in regmap selection error handling - Use switch statement for regmap selection Changes in v3: - Added this commit --- drivers/regulator/bcm590xx-regulator.c | 473 ++++++++++++++++++++++-------= ---- include/linux/mfd/bcm590xx.h | 6 + 2 files changed, 322 insertions(+), 157 deletions(-) diff --git a/drivers/regulator/bcm590xx-regulator.c b/drivers/regulator/bcm= 590xx-regulator.c index a17311fa30e4d48c0a4925778d7bed486ac7a982..c2427ea166626bdc1eb7cfb9999= 7d95e5125ed91 100644 --- a/drivers/regulator/bcm590xx-regulator.c +++ b/drivers/regulator/bcm590xx-regulator.c @@ -20,6 +20,18 @@ =20 /* I2C slave 0 registers */ #define BCM590XX_RFLDOPMCTRL1 0x60 +#define BCM590XX_CAMLDO1PMCTRL1 0x62 +#define BCM590XX_CAMLDO2PMCTRL1 0x64 +#define BCM590XX_SIMLDO1PMCTRL1 0x66 +#define BCM590XX_SIMLDO2PMCTRL1 0x68 +#define BCM590XX_SDLDOPMCTRL1 0x6a +#define BCM590XX_SDXLDOPMCTRL1 0x6c +#define BCM590XX_MMCLDO1PMCTRL1 0x6e +#define BCM590XX_MMCLDO2PMCTRL1 0x70 +#define BCM590XX_AUDLDOPMCTRL1 0x72 +#define BCM590XX_MICLDOPMCTRL1 0x74 +#define BCM590XX_USBLDOPMCTRL1 0x76 +#define BCM590XX_VIBLDOPMCTRL1 0x78 #define BCM590XX_IOSR1PMCTRL1 0x7a #define BCM590XX_IOSR2PMCTRL1 0x7c #define BCM590XX_CSRPMCTRL1 0x7e @@ -28,7 +40,25 @@ #define BCM590XX_MSRPMCTRL1 0x8a #define BCM590XX_VSRPMCTRL1 0x8e #define BCM590XX_RFLDOCTRL 0x96 +#define BCM590XX_CAMLDO1CTRL 0x97 +#define BCM590XX_CAMLDO2CTRL 0x98 +#define BCM590XX_SIMLDO1CTRL 0x99 +#define BCM590XX_SIMLDO2CTRL 0x9a +#define BCM590XX_SDLDOCTRL 0x9b +#define BCM590XX_SDXLDOCTRL 0x9c +#define BCM590XX_MMCLDO1CTRL 0x9d +#define BCM590XX_MMCLDO2CTRL 0x9e +#define BCM590XX_AUDLDOCTRL 0x9f +#define BCM590XX_MICLDOCTRL 0xa0 +#define BCM590XX_USBLDOCTRL 0xa1 +#define BCM590XX_VIBLDOCTRL 0xa2 #define BCM590XX_CSRVOUT1 0xc0 +#define BCM590XX_IOSR1VOUT1 0xc3 +#define BCM590XX_IOSR2VOUT1 0xc6 +#define BCM590XX_MSRVOUT1 0xc9 +#define BCM590XX_SDSR1VOUT1 0xcc +#define BCM590XX_SDSR2VOUT1 0xcf +#define BCM590XX_VSRVOUT1 0xd2 =20 /* I2C slave 1 registers */ #define BCM590XX_GPLDO5PMCTRL1 0x16 @@ -94,11 +124,6 @@ =20 #define BCM590XX_NUM_REGS 27 =20 -#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 =3D=3D BCM590XX_REG_VBUS) - /* LDO group A: supported voltages in microvolts */ static const unsigned int ldo_a_table[] =3D { 1200000, 1800000, 2500000, 2700000, 2800000, @@ -111,10 +136,6 @@ static const unsigned int ldo_c_table[] =3D { 2900000, 3000000, 3300000, }; =20 -static const unsigned int ldo_vbus[] =3D { - 5000000, -}; - /* DCDC group CSR: supported voltages in microvolts */ static const struct linear_range dcdc_csr_ranges[] =3D { REGULATOR_LINEAR_RANGE(860000, 2, 50, 10000), @@ -137,115 +158,25 @@ static const struct linear_range dcdc_sdsr1_ranges[]= =3D { REGULATOR_LINEAR_RANGE(900000, 52, 63, 0), }; =20 -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; +enum bcm590xx_reg_type { + BCM590XX_REG_TYPE_LDO, + BCM590XX_REG_TYPE_GPLDO, + BCM590XX_REG_TYPE_SR, + BCM590XX_REG_TYPE_VBUS }; =20 -#define BCM590XX_REG_TABLE(_name, _table) \ - { \ - .name =3D #_name, \ - .n_voltages =3D ARRAY_SIZE(_table), \ - .volt_table =3D _table, \ - } - -#define BCM590XX_REG_RANGES(_name, _ranges) \ - { \ - .name =3D #_name, \ - .n_voltages =3D 64, \ - .n_linear_ranges =3D ARRAY_SIZE(_ranges), \ - .linear_ranges =3D _ranges, \ - } - -static struct bcm590xx_info bcm590xx_regs[] =3D { - 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), +struct bcm590xx_reg_data { + enum bcm590xx_reg_type type; + enum bcm590xx_regmap_type regmap; + const struct regulator_desc desc; }; =20 struct bcm590xx_reg { - struct regulator_desc *desc; struct bcm590xx *mfd; + unsigned int n_regulators; + const struct bcm590xx_reg_data *regs; }; =20 -static int bcm590xx_get_vsel_register(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; -} - -static int bcm590xx_get_enable_register(int id) -{ - int reg =3D 0; - - if (BCM590XX_REG_IS_LDO(id)) - reg =3D BCM590XX_RFLDOPMCTRL1 + id * 2; - else if (BCM590XX_REG_IS_GPLDO(id)) - reg =3D BCM590XX_GPLDO1PMCTRL1 + id * 2; - else - switch (id) { - case BCM590XX_REG_CSR: - reg =3D BCM590XX_CSRPMCTRL1; - break; - case BCM590XX_REG_IOSR1: - reg =3D BCM590XX_IOSR1PMCTRL1; - break; - case BCM590XX_REG_IOSR2: - reg =3D BCM590XX_IOSR2PMCTRL1; - break; - case BCM590XX_REG_MSR: - reg =3D BCM590XX_MSRPMCTRL1; - break; - case BCM590XX_REG_SDSR1: - reg =3D BCM590XX_SDSR1PMCTRL1; - break; - case BCM590XX_REG_SDSR2: - reg =3D BCM590XX_SDSR2PMCTRL1; - break; - case BCM590XX_REG_VSR: - reg =3D BCM590XX_VSRPMCTRL1; - break; - case BCM590XX_REG_VBUS: - reg =3D BCM590XX_OTG_CTRL; - break; - } - - - return reg; -} - static const struct regulator_ops bcm590xx_ops_ldo =3D { .is_enabled =3D regulator_is_enabled_regmap, .enable =3D regulator_enable_regmap, @@ -272,73 +203,301 @@ static const struct regulator_ops bcm590xx_ops_vbus = =3D { .disable =3D regulator_disable_regmap, }; =20 +#define BCM590XX_REG_DESC(_name, _name_lower) \ + .id =3D BCM590XX_REG_##_name, \ + .name =3D #_name_lower, \ + .of_match =3D of_match_ptr(#_name_lower), \ + .regulators_node =3D of_match_ptr("regulators"), \ + .type =3D REGULATOR_VOLTAGE, \ + .owner =3D THIS_MODULE \ + +#define BCM590XX_LDO_DESC(_name, _name_lower, _table) \ + BCM590XX_REG_DESC(_name, _name_lower), \ + .ops =3D &bcm590xx_ops_ldo, \ + .n_voltages =3D ARRAY_SIZE(_table), \ + .volt_table =3D _table, \ + .vsel_reg =3D BCM590XX_##_name##CTRL, \ + .vsel_mask =3D BCM590XX_LDO_VSEL_MASK, \ + .enable_reg =3D BCM590XX_##_name##PMCTRL1, \ + .enable_mask =3D BCM590XX_REG_ENABLE, \ + .enable_is_inverted =3D true + +#define BCM590XX_SR_DESC(_name, _name_lower, _ranges) \ + BCM590XX_REG_DESC(_name, _name_lower), \ + .ops =3D &bcm590xx_ops_dcdc, \ + .n_voltages =3D 64, \ + .linear_ranges =3D _ranges, \ + .n_linear_ranges =3D ARRAY_SIZE(_ranges), \ + .vsel_reg =3D BCM590XX_##_name##VOUT1, \ + .vsel_mask =3D BCM590XX_SR_VSEL_MASK, \ + .enable_reg =3D BCM590XX_##_name##PMCTRL1, \ + .enable_mask =3D BCM590XX_REG_ENABLE, \ + .enable_is_inverted =3D true + +static const struct bcm590xx_reg_data bcm590xx_regs[BCM590XX_NUM_REGS] =3D= { + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_LDO_DESC(RFLDO, rfldo, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_LDO_DESC(CAMLDO1, camldo1, ldo_c_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_LDO_DESC(CAMLDO2, camldo2, ldo_c_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_LDO_DESC(SIMLDO1, simldo1, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_LDO_DESC(SIMLDO2, simldo2, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_LDO_DESC(SDLDO, sdldo, ldo_c_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_LDO_DESC(SDXLDO, sdxldo, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_LDO_DESC(MMCLDO1, mmcldo1, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_LDO_DESC(MMCLDO2, mmcldo2, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_LDO_DESC(AUDLDO, audldo, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_LDO_DESC(MICLDO, micldo, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_LDO_DESC(USBLDO, usbldo, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_LDO_DESC(VIBLDO, vibldo, ldo_c_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_SR_DESC(CSR, csr, dcdc_csr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_SR_DESC(IOSR1, iosr1, dcdc_iosr1_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_SR_DESC(IOSR2, iosr2, dcdc_iosr1_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_SR_DESC(MSR, msr, dcdc_iosr1_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_SR_DESC(SDSR1, sdsr1, dcdc_sdsr1_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_SR_DESC(SDSR2, sdsr2, dcdc_iosr1_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM590XX_SR_DESC(VSR, vsr, dcdc_iosr1_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM590XX_LDO_DESC(GPLDO1, gpldo1, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM590XX_LDO_DESC(GPLDO2, gpldo2, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM590XX_LDO_DESC(GPLDO3, gpldo3, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM590XX_LDO_DESC(GPLDO4, gpldo4, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM590XX_LDO_DESC(GPLDO5, gpldo5, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM590XX_LDO_DESC(GPLDO6, gpldo6, ldo_a_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_VBUS, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM590XX_REG_DESC(VBUS, vbus), + .ops =3D &bcm590xx_ops_vbus, + .n_voltages =3D 1, + .fixed_uV =3D 5000000, + .enable_reg =3D BCM590XX_OTG_CTRL, + .enable_mask =3D BCM590XX_VBUS_ENABLE, + }, + }, +}; + static int bcm590xx_probe(struct platform_device *pdev) { struct bcm590xx *bcm590xx =3D dev_get_drvdata(pdev->dev.parent); struct bcm590xx_reg *pmu; + const struct bcm590xx_reg_data *info; struct regulator_config config =3D { }; - struct bcm590xx_info *info; struct regulator_dev *rdev; - int i; + unsigned int i; =20 pmu =3D devm_kzalloc(&pdev->dev, sizeof(*pmu), GFP_KERNEL); if (!pmu) return -ENOMEM; =20 pmu->mfd =3D bcm590xx; + pmu->n_regulators =3D BCM590XX_NUM_REGS; + pmu->regs =3D bcm590xx_regs; =20 platform_set_drvdata(pdev, pmu); =20 - pmu->desc =3D devm_kcalloc(&pdev->dev, - BCM590XX_NUM_REGS, - sizeof(struct regulator_desc), - GFP_KERNEL); - if (!pmu->desc) - return -ENOMEM; - - info =3D bcm590xx_regs; - - for (i =3D 0; i < BCM590XX_NUM_REGS; i++, info++) { - /* Register the regulators */ - pmu->desc[i].name =3D info->name; - pmu->desc[i].of_match =3D of_match_ptr(info->name); - pmu->desc[i].regulators_node =3D of_match_ptr("regulators"); - pmu->desc[i].supply_name =3D info->vin_name; - pmu->desc[i].id =3D i; - pmu->desc[i].volt_table =3D info->volt_table; - pmu->desc[i].n_voltages =3D info->n_voltages; - pmu->desc[i].linear_ranges =3D info->linear_ranges; - pmu->desc[i].n_linear_ranges =3D info->n_linear_ranges; - - if ((BCM590XX_REG_IS_LDO(i)) || (BCM590XX_REG_IS_GPLDO(i))) { - pmu->desc[i].ops =3D &bcm590xx_ops_ldo; - pmu->desc[i].vsel_mask =3D BCM590XX_LDO_VSEL_MASK; - } else if (BCM590XX_REG_IS_VBUS(i)) - pmu->desc[i].ops =3D &bcm590xx_ops_vbus; - else { - pmu->desc[i].ops =3D &bcm590xx_ops_dcdc; - pmu->desc[i].vsel_mask =3D BCM590XX_SR_VSEL_MASK; - } - - if (BCM590XX_REG_IS_VBUS(i)) - pmu->desc[i].enable_mask =3D BCM590XX_VBUS_ENABLE; - else { - pmu->desc[i].vsel_reg =3D bcm590xx_get_vsel_register(i); - pmu->desc[i].enable_is_inverted =3D true; - pmu->desc[i].enable_mask =3D BCM590XX_REG_ENABLE; - } - pmu->desc[i].enable_reg =3D bcm590xx_get_enable_register(i); - pmu->desc[i].type =3D REGULATOR_VOLTAGE; - pmu->desc[i].owner =3D THIS_MODULE; + /* Register the regulators */ + for (i =3D 0; i < pmu->n_regulators; i++) { + info =3D &pmu->regs[i]; =20 config.dev =3D bcm590xx->dev; config.driver_data =3D pmu; - if (BCM590XX_REG_IS_GPLDO(i) || BCM590XX_REG_IS_VBUS(i)) - config.regmap =3D bcm590xx->regmap_sec; - else + + switch (info->regmap) { + case BCM590XX_REGMAP_PRI: config.regmap =3D bcm590xx->regmap_pri; + break; + case BCM590XX_REGMAP_SEC: + config.regmap =3D bcm590xx->regmap_sec; + break; + default: + dev_err(bcm590xx->dev, + "invalid regmap for %s regulator; this is a driver bug\n", + pdev->name); + return -EINVAL; + } =20 - rdev =3D devm_regulator_register(&pdev->dev, &pmu->desc[i], + rdev =3D devm_regulator_register(&pdev->dev, &info->desc, &config); if (IS_ERR(rdev)) return dev_err_probe(bcm590xx->dev, PTR_ERR(rdev), diff --git a/include/linux/mfd/bcm590xx.h b/include/linux/mfd/bcm590xx.h index fbc458e94bef923ca1b69afe2cac944adf6fedf8..5a5783abd47b9a6bb6f9bb3a8ca= fddbd01aa7fcc 100644 --- a/include/linux/mfd/bcm590xx.h +++ b/include/linux/mfd/bcm590xx.h @@ -27,6 +27,12 @@ #define BCM59056_REV_DIGITAL_B0 2 #define BCM59056_REV_ANALOG_B0 2 =20 +/* regmap types */ +enum bcm590xx_regmap_type { + BCM590XX_REGMAP_PRI, + BCM590XX_REGMAP_SEC, +}; + /* max register address */ #define BCM590XX_MAX_REGISTER_PRI 0xe7 #define BCM590XX_MAX_REGISTER_SEC 0xf0 --=20 2.49.0 From nobody Tue Dec 16 13:25:32 2025 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CAC2B204592; Thu, 15 May 2025 14:16:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318609; cv=none; b=EuWBNT88vckjzLEBPq2CIrhdLXgztJg8CLRUMSgCazB+cNjqH3H92ioDvBQQUGfQNOWpMbe7Q73XLyPnBQdArAdDuv4oIq3RZQqBe2Jrr14tKl3dxt+yNKNd2D8wi0hsItWuKiCvBq9EEmVY7W1bvtmA/ubST+rdTTBJ3JjopsA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318609; c=relaxed/simple; bh=GCauXOznjVmiyxV0TOPUzg1387Fw5xLoQI7nGpubkUA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=euJbN9u+pysF0y3oHVrNrM4szD+acY8611NA6PTD3/0/gcySFiPeUJIK/4syCO3rNv2BtNefepfIcDEU6ZZEY8g5K4nYzxp8zSPyiaKf598eG0ZJFQMBXsXF/mbT7+8GcBXTqtYng06MrMbYJqvACpohvqrLgx968n6e1Ui7tfw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OdgJm9/B; arc=none smtp.client-ip=209.85.208.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OdgJm9/B" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5fff52493e0so671059a12.3; Thu, 15 May 2025 07:16:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747318605; x=1747923405; 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=BPJiUoigX9xpVHBEwtkYh2HME+p40LQ+kFK3OZBzY+4=; b=OdgJm9/BjaST8ytC1VGFjeWDdbyTugKu17gn5oQIt7VjEFqH2oKgCBjmB6SutQ0oto tcus1NPCa1vJAqI3HBmWxH1I+3ytmmVJ7NWa9Plb3FMyTr48NALUzNxFTg8h/UuMyGuR O20tcwVM1nRXOrfLGlVAovuBDfk4DexLIvb8L990RRWzTexGilWGdMpQl9eQHngFmgGH 5Bt1U4YkRObYHiIn7+yrTczA8OKXFIIx0M/2oc2r/uiaIdkDgwnAd2/+t6blSItomscQ e0uLjRDhBaAsVjiaGKdRlVTNuubmQrVi4RRjBkHUErsZjdRuFOWPlXZPnoHBFL/poYGV Al0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747318605; x=1747923405; 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=BPJiUoigX9xpVHBEwtkYh2HME+p40LQ+kFK3OZBzY+4=; b=PwvMoEUszS58zFkbezty9hhBGDo/+ELVPQ2Bg9AHOL4wEF/b6yawnItFfHqEQ3Dd0w /k3jeK5SGikOlc0/QUQmu1XCIysojORowJxleZcxMZxegKPizdFdoSq5c0AoNcWKCHeS bOzUj8LAqwDkORbf3gzzuRoa32hbnA/dHhV5O2ReiThGgQKiNt12s97ITjCj+TIu1Uxc enEdlkNkSweKcjrG4NIekJne1qgSSQg8dSY+5L8Sr/q/+zwT5hyqRVPDf2rCcT/g4gzn 5sUPs02SWd1995vlf1Z00rqhzzrnm39wNj1dkWP4GAPWCGiCoEbrilJh1AWmN5OatK9Z hP0Q== X-Forwarded-Encrypted: i=1; AJvYcCX/p4u4xxu6BvzJMx3wz6pKlmMCdKn8LZTeO67Ia+CxwORmXkDIjFjIzqToi5lKdXJW1UJGfYw7zV2R@vger.kernel.org, AJvYcCXZegmLQuMaf2cTxUsUQE3jjUGjrEH8pW/03P5moi4ftNtLZwZyRJxPF/2Sksiw7pb2DbtXItv5w+4oY/Y2@vger.kernel.org X-Gm-Message-State: AOJu0Yzpy9T+dXquyuePbafDsMO3Y0m92QoEj7z1VvUXZwQdOCmQtECN dLXoKbJUMd7YVNYFF0opwW4tFFf6YmJtjAgEHPztCSzGI/UqaXaa X-Gm-Gg: ASbGncv8SsQ9bqJ0BwZ7ZlSjY7PenDmU9Wn56e+WEikAbE+bphMs77n2JUwsDp/jWLM lnWRci9cpZD1KhA/dp1xHHGcEn1U7XYs363ggYHb5i1gIxGmnPq3vhRmdBPpnXj9ZSI8Lfo1qlY n7+x3J1XE7kT0F7WyKhxREDX9HMAC1+tF1Yh9+gWooULZpnTs+/n3rWu84QQwhH1PHhVfTtj96M cIs4wJxZUNk0rUQ7VyCuNmhy3083U1DaFoWSnSZhSPGnG4gl4CkiFdBefYZ3DibqcpCcSJHV6cl y3GrNzHXzKKaI4jMSmIP9/T6vHSRnAXpJINLp63lGOQ5pwU/jvn7JQJfDvHTfreUu4L58Rj1qs4 EmNxwibrs6Dh1EdTXEFMGJg== X-Google-Smtp-Source: AGHT+IErol/9780W/jh3ZGyr3FDLc+7vbfBVkcARlMIJE4m1npCJhHus8JM8t6oB7LUt4sz9yw0w8Q== X-Received: by 2002:a17:907:2ce5:b0:ace:c505:3349 with SMTP id a640c23a62f3a-ad4f714630amr783088666b.12.1747318604707; Thu, 15 May 2025 07:16:44 -0700 (PDT) Received: from hex.my.domain (83.11.178.15.ipv4.supernova.orange.pl. [83.11.178.15]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad2192c8535sm1110143966b.8.2025.05.15.07.16.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 May 2025 07:16:44 -0700 (PDT) From: Artur Weber Date: Thu, 15 May 2025 16:16:34 +0200 Subject: [PATCH v9 7/8] regulator: bcm590xx: Rename BCM59056-specific data as such Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-bcm59054-v9-7-14ba0ea2ea5b@gmail.com> References: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> In-Reply-To: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Liam Girdwood , Mark Brown , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, ~postmarketos/upstreaming@lists.sr.ht, Artur Weber X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1747318592; l=21217; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=GCauXOznjVmiyxV0TOPUzg1387Fw5xLoQI7nGpubkUA=; b=YLIj9tP4W0orfBjXqKh1182HUDV2NyafkVwAGRI0q+FLn7EasDUa7w6ycaOg3mzpUxsXkgPfD wwQZ1b8SubGA7CrsZf+yy07vaFWAIiPmxHybN88YeMuzqY6DM4Xtjha X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= Previously, the driver used the BCM590XX prefix for register data specific to the BCM59056. As we will be introducing other regulators to this driver as well, make the BCM59056-specific values use the BCM59056 prefix. Reviewed-by: Stanislav Jakubek Signed-off-by: Artur Weber Reviewed-by: Mark Brown --- Changes in v5: - Adapt to rename of bcm590xx_reg_info to bcm590xx_reg_data Changes in v4: - Drop unused BCM590XX_MAX_NUM_REGS constant Changes in v3: - Added this commit --- drivers/regulator/bcm590xx-regulator.c | 369 +++++++++++++++++------------= ---- 1 file changed, 189 insertions(+), 180 deletions(-) diff --git a/drivers/regulator/bcm590xx-regulator.c b/drivers/regulator/bcm= 590xx-regulator.c index c2427ea166626bdc1eb7cfb99997d95e5125ed91..f35b2b72e46f70496e16be52445= 29a5d95d0546d 100644 --- a/drivers/regulator/bcm590xx-regulator.c +++ b/drivers/regulator/bcm590xx-regulator.c @@ -18,146 +18,11 @@ #include #include =20 -/* I2C slave 0 registers */ -#define BCM590XX_RFLDOPMCTRL1 0x60 -#define BCM590XX_CAMLDO1PMCTRL1 0x62 -#define BCM590XX_CAMLDO2PMCTRL1 0x64 -#define BCM590XX_SIMLDO1PMCTRL1 0x66 -#define BCM590XX_SIMLDO2PMCTRL1 0x68 -#define BCM590XX_SDLDOPMCTRL1 0x6a -#define BCM590XX_SDXLDOPMCTRL1 0x6c -#define BCM590XX_MMCLDO1PMCTRL1 0x6e -#define BCM590XX_MMCLDO2PMCTRL1 0x70 -#define BCM590XX_AUDLDOPMCTRL1 0x72 -#define BCM590XX_MICLDOPMCTRL1 0x74 -#define BCM590XX_USBLDOPMCTRL1 0x76 -#define BCM590XX_VIBLDOPMCTRL1 0x78 -#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_CAMLDO1CTRL 0x97 -#define BCM590XX_CAMLDO2CTRL 0x98 -#define BCM590XX_SIMLDO1CTRL 0x99 -#define BCM590XX_SIMLDO2CTRL 0x9a -#define BCM590XX_SDLDOCTRL 0x9b -#define BCM590XX_SDXLDOCTRL 0x9c -#define BCM590XX_MMCLDO1CTRL 0x9d -#define BCM590XX_MMCLDO2CTRL 0x9e -#define BCM590XX_AUDLDOCTRL 0x9f -#define BCM590XX_MICLDOCTRL 0xa0 -#define BCM590XX_USBLDOCTRL 0xa1 -#define BCM590XX_VIBLDOCTRL 0xa2 -#define BCM590XX_CSRVOUT1 0xc0 -#define BCM590XX_IOSR1VOUT1 0xc3 -#define BCM590XX_IOSR2VOUT1 0xc6 -#define BCM590XX_MSRVOUT1 0xc9 -#define BCM590XX_SDSR1VOUT1 0xcc -#define BCM590XX_SDSR2VOUT1 0xcf -#define BCM590XX_VSRVOUT1 0xd2 - -/* 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) =20 -/* - * RFLDO to VSR regulators are - * accessed via I2C slave 0 - */ - -/* 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 - -/* 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 - -/* - * 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 - -/* LDO group A: supported voltages in microvolts */ -static const unsigned int ldo_a_table[] =3D { - 1200000, 1800000, 2500000, 2700000, 2800000, - 2900000, 3000000, 3300000, -}; - -/* LDO group C: supported voltages in microvolts */ -static const unsigned int ldo_c_table[] =3D { - 3100000, 1800000, 2500000, 2700000, 2800000, - 2900000, 3000000, 3300000, -}; - -/* DCDC group CSR: supported voltages in microvolts */ -static const struct linear_range dcdc_csr_ranges[] =3D { - 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[] =3D { - REGULATOR_LINEAR_RANGE(860000, 2, 51, 10000), - REGULATOR_LINEAR_RANGE(1500000, 52, 52, 0), - REGULATOR_LINEAR_RANGE(1800000, 53, 53, 0), - REGULATOR_LINEAR_RANGE(900000, 54, 63, 0), -}; - -/* DCDC group SDSR1: supported voltages in microvolts */ -static const struct linear_range dcdc_sdsr1_ranges[] =3D { - REGULATOR_LINEAR_RANGE(860000, 2, 50, 10000), - REGULATOR_LINEAR_RANGE(1340000, 51, 51, 0), - REGULATOR_LINEAR_RANGE(900000, 52, 63, 0), -}; - enum bcm590xx_reg_type { BCM590XX_REG_TYPE_LDO, BCM590XX_REG_TYPE_GPLDO, @@ -203,43 +68,187 @@ static const struct regulator_ops bcm590xx_ops_vbus = =3D { .disable =3D regulator_disable_regmap, }; =20 -#define BCM590XX_REG_DESC(_name, _name_lower) \ - .id =3D BCM590XX_REG_##_name, \ +#define BCM590XX_REG_DESC(_model, _name, _name_lower) \ + .id =3D _model##_REG_##_name, \ .name =3D #_name_lower, \ .of_match =3D of_match_ptr(#_name_lower), \ .regulators_node =3D of_match_ptr("regulators"), \ .type =3D REGULATOR_VOLTAGE, \ .owner =3D THIS_MODULE \ =20 -#define BCM590XX_LDO_DESC(_name, _name_lower, _table) \ - BCM590XX_REG_DESC(_name, _name_lower), \ +#define BCM590XX_LDO_DESC(_model, _model_lower, _name, _name_lower, _table= ) \ + BCM590XX_REG_DESC(_model, _name, _name_lower), \ .ops =3D &bcm590xx_ops_ldo, \ - .n_voltages =3D ARRAY_SIZE(_table), \ - .volt_table =3D _table, \ - .vsel_reg =3D BCM590XX_##_name##CTRL, \ + .n_voltages =3D ARRAY_SIZE(_model_lower##_##_table), \ + .volt_table =3D _model_lower##_##_table, \ + .vsel_reg =3D _model##_##_name##CTRL, \ .vsel_mask =3D BCM590XX_LDO_VSEL_MASK, \ - .enable_reg =3D BCM590XX_##_name##PMCTRL1, \ + .enable_reg =3D _model##_##_name##PMCTRL1, \ .enable_mask =3D BCM590XX_REG_ENABLE, \ .enable_is_inverted =3D true =20 -#define BCM590XX_SR_DESC(_name, _name_lower, _ranges) \ - BCM590XX_REG_DESC(_name, _name_lower), \ +#define BCM590XX_SR_DESC(_model, _model_lower, _name, _name_lower, _ranges= ) \ + BCM590XX_REG_DESC(_model, _name, _name_lower), \ .ops =3D &bcm590xx_ops_dcdc, \ .n_voltages =3D 64, \ - .linear_ranges =3D _ranges, \ - .n_linear_ranges =3D ARRAY_SIZE(_ranges), \ - .vsel_reg =3D BCM590XX_##_name##VOUT1, \ + .linear_ranges =3D _model_lower##_##_ranges, \ + .n_linear_ranges =3D ARRAY_SIZE(_model_lower##_##_ranges), \ + .vsel_reg =3D _model##_##_name##VOUT1, \ .vsel_mask =3D BCM590XX_SR_VSEL_MASK, \ - .enable_reg =3D BCM590XX_##_name##PMCTRL1, \ + .enable_reg =3D _model##_##_name##PMCTRL1, \ .enable_mask =3D BCM590XX_REG_ENABLE, \ .enable_is_inverted =3D true =20 -static const struct bcm590xx_reg_data bcm590xx_regs[BCM590XX_NUM_REGS] =3D= { +#define BCM59056_REG_DESC(_name, _name_lower) \ + BCM590XX_REG_DESC(BCM59056, _name, _name_lower) +#define BCM59056_LDO_DESC(_name, _name_lower, _table) \ + BCM590XX_LDO_DESC(BCM59056, bcm59056, _name, _name_lower, _table) +#define BCM59056_SR_DESC(_name, _name_lower, _ranges) \ + BCM590XX_SR_DESC(BCM59056, bcm59056, _name, _name_lower, _ranges) + +/* BCM59056 data */ + +/* I2C slave 0 registers */ +#define BCM59056_RFLDOPMCTRL1 0x60 +#define BCM59056_CAMLDO1PMCTRL1 0x62 +#define BCM59056_CAMLDO2PMCTRL1 0x64 +#define BCM59056_SIMLDO1PMCTRL1 0x66 +#define BCM59056_SIMLDO2PMCTRL1 0x68 +#define BCM59056_SDLDOPMCTRL1 0x6a +#define BCM59056_SDXLDOPMCTRL1 0x6c +#define BCM59056_MMCLDO1PMCTRL1 0x6e +#define BCM59056_MMCLDO2PMCTRL1 0x70 +#define BCM59056_AUDLDOPMCTRL1 0x72 +#define BCM59056_MICLDOPMCTRL1 0x74 +#define BCM59056_USBLDOPMCTRL1 0x76 +#define BCM59056_VIBLDOPMCTRL1 0x78 +#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_CAMLDO1CTRL 0x97 +#define BCM59056_CAMLDO2CTRL 0x98 +#define BCM59056_SIMLDO1CTRL 0x99 +#define BCM59056_SIMLDO2CTRL 0x9a +#define BCM59056_SDLDOCTRL 0x9b +#define BCM59056_SDXLDOCTRL 0x9c +#define BCM59056_MMCLDO1CTRL 0x9d +#define BCM59056_MMCLDO2CTRL 0x9e +#define BCM59056_AUDLDOCTRL 0x9f +#define BCM59056_MICLDOCTRL 0xa0 +#define BCM59056_USBLDOCTRL 0xa1 +#define BCM59056_VIBLDOCTRL 0xa2 +#define BCM59056_CSRVOUT1 0xc0 +#define BCM59056_IOSR1VOUT1 0xc3 +#define BCM59056_IOSR2VOUT1 0xc6 +#define BCM59056_MSRVOUT1 0xc9 +#define BCM59056_SDSR1VOUT1 0xcc +#define BCM59056_SDSR2VOUT1 0xcf +#define BCM59056_VSRVOUT1 0xd2 + +/* I2C slave 1 registers */ +#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 + * accessed via I2C slave 0 + */ + +/* LDO regulator IDs */ +#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 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 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 BCM59056_NUM_REGS 27 + +/* LDO group A: supported voltages in microvolts */ +static const unsigned int bcm59056_ldo_a_table[] =3D { + 1200000, 1800000, 2500000, 2700000, 2800000, + 2900000, 3000000, 3300000, +}; + +/* LDO group C: supported voltages in microvolts */ +static const unsigned int bcm59056_ldo_c_table[] =3D { + 3100000, 1800000, 2500000, 2700000, 2800000, + 2900000, 3000000, 3300000, +}; + +/* DCDC group CSR: supported voltages in microvolts */ +static const struct linear_range bcm59056_dcdc_csr_ranges[] =3D { + 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 bcm59056_dcdc_iosr1_ranges[] =3D { + REGULATOR_LINEAR_RANGE(860000, 2, 51, 10000), + REGULATOR_LINEAR_RANGE(1500000, 52, 52, 0), + REGULATOR_LINEAR_RANGE(1800000, 53, 53, 0), + REGULATOR_LINEAR_RANGE(900000, 54, 63, 0), +}; + +/* DCDC group SDSR1: supported voltages in microvolts */ +static const struct linear_range bcm59056_dcdc_sdsr1_ranges[] =3D { + REGULATOR_LINEAR_RANGE(860000, 2, 50, 10000), + REGULATOR_LINEAR_RANGE(1340000, 51, 51, 0), + REGULATOR_LINEAR_RANGE(900000, 52, 63, 0), +}; + +static const struct bcm590xx_reg_data bcm59056_regs[BCM59056_NUM_REGS] =3D= { { .type =3D BCM590XX_REG_TYPE_LDO, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_LDO_DESC(RFLDO, rfldo, ldo_a_table), + BCM59056_LDO_DESC(RFLDO, rfldo, ldo_a_table), }, }, =20 @@ -247,7 +256,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_LDO, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_LDO_DESC(CAMLDO1, camldo1, ldo_c_table), + BCM59056_LDO_DESC(CAMLDO1, camldo1, ldo_c_table), }, }, =20 @@ -255,7 +264,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_LDO, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_LDO_DESC(CAMLDO2, camldo2, ldo_c_table), + BCM59056_LDO_DESC(CAMLDO2, camldo2, ldo_c_table), }, }, =20 @@ -263,7 +272,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_LDO, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_LDO_DESC(SIMLDO1, simldo1, ldo_a_table), + BCM59056_LDO_DESC(SIMLDO1, simldo1, ldo_a_table), }, }, =20 @@ -271,7 +280,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_LDO, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_LDO_DESC(SIMLDO2, simldo2, ldo_a_table), + BCM59056_LDO_DESC(SIMLDO2, simldo2, ldo_a_table), }, }, =20 @@ -279,7 +288,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_LDO, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_LDO_DESC(SDLDO, sdldo, ldo_c_table), + BCM59056_LDO_DESC(SDLDO, sdldo, ldo_c_table), }, }, =20 @@ -287,7 +296,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_LDO, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_LDO_DESC(SDXLDO, sdxldo, ldo_a_table), + BCM59056_LDO_DESC(SDXLDO, sdxldo, ldo_a_table), }, }, =20 @@ -295,7 +304,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_LDO, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_LDO_DESC(MMCLDO1, mmcldo1, ldo_a_table), + BCM59056_LDO_DESC(MMCLDO1, mmcldo1, ldo_a_table), }, }, =20 @@ -303,7 +312,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_LDO, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_LDO_DESC(MMCLDO2, mmcldo2, ldo_a_table), + BCM59056_LDO_DESC(MMCLDO2, mmcldo2, ldo_a_table), }, }, =20 @@ -311,7 +320,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_LDO, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_LDO_DESC(AUDLDO, audldo, ldo_a_table), + BCM59056_LDO_DESC(AUDLDO, audldo, ldo_a_table), }, }, =20 @@ -319,7 +328,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_LDO, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_LDO_DESC(MICLDO, micldo, ldo_a_table), + BCM59056_LDO_DESC(MICLDO, micldo, ldo_a_table), }, }, =20 @@ -327,7 +336,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_LDO, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_LDO_DESC(USBLDO, usbldo, ldo_a_table), + BCM59056_LDO_DESC(USBLDO, usbldo, ldo_a_table), }, }, =20 @@ -335,7 +344,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_LDO, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_LDO_DESC(VIBLDO, vibldo, ldo_c_table), + BCM59056_LDO_DESC(VIBLDO, vibldo, ldo_c_table), }, }, =20 @@ -343,7 +352,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_SR, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_SR_DESC(CSR, csr, dcdc_csr_ranges), + BCM59056_SR_DESC(CSR, csr, dcdc_csr_ranges), }, }, =20 @@ -351,7 +360,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_SR, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_SR_DESC(IOSR1, iosr1, dcdc_iosr1_ranges), + BCM59056_SR_DESC(IOSR1, iosr1, dcdc_iosr1_ranges), }, }, =20 @@ -359,7 +368,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_SR, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_SR_DESC(IOSR2, iosr2, dcdc_iosr1_ranges), + BCM59056_SR_DESC(IOSR2, iosr2, dcdc_iosr1_ranges), }, }, =20 @@ -367,7 +376,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_SR, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_SR_DESC(MSR, msr, dcdc_iosr1_ranges), + BCM59056_SR_DESC(MSR, msr, dcdc_iosr1_ranges), }, }, =20 @@ -375,7 +384,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_SR, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_SR_DESC(SDSR1, sdsr1, dcdc_sdsr1_ranges), + BCM59056_SR_DESC(SDSR1, sdsr1, dcdc_sdsr1_ranges), }, }, =20 @@ -383,7 +392,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_SR, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_SR_DESC(SDSR2, sdsr2, dcdc_iosr1_ranges), + BCM59056_SR_DESC(SDSR2, sdsr2, dcdc_iosr1_ranges), }, }, =20 @@ -391,7 +400,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_SR, .regmap =3D BCM590XX_REGMAP_PRI, .desc =3D { - BCM590XX_SR_DESC(VSR, vsr, dcdc_iosr1_ranges), + BCM59056_SR_DESC(VSR, vsr, dcdc_iosr1_ranges), }, }, =20 @@ -399,7 +408,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_GPLDO, .regmap =3D BCM590XX_REGMAP_SEC, .desc =3D { - BCM590XX_LDO_DESC(GPLDO1, gpldo1, ldo_a_table), + BCM59056_LDO_DESC(GPLDO1, gpldo1, ldo_a_table), }, }, =20 @@ -407,7 +416,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_GPLDO, .regmap =3D BCM590XX_REGMAP_SEC, .desc =3D { - BCM590XX_LDO_DESC(GPLDO2, gpldo2, ldo_a_table), + BCM59056_LDO_DESC(GPLDO2, gpldo2, ldo_a_table), }, }, =20 @@ -415,7 +424,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_GPLDO, .regmap =3D BCM590XX_REGMAP_SEC, .desc =3D { - BCM590XX_LDO_DESC(GPLDO3, gpldo3, ldo_a_table), + BCM59056_LDO_DESC(GPLDO3, gpldo3, ldo_a_table), }, }, =20 @@ -423,7 +432,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_GPLDO, .regmap =3D BCM590XX_REGMAP_SEC, .desc =3D { - BCM590XX_LDO_DESC(GPLDO4, gpldo4, ldo_a_table), + BCM59056_LDO_DESC(GPLDO4, gpldo4, ldo_a_table), }, }, =20 @@ -431,7 +440,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_GPLDO, .regmap =3D BCM590XX_REGMAP_SEC, .desc =3D { - BCM590XX_LDO_DESC(GPLDO5, gpldo5, ldo_a_table), + BCM59056_LDO_DESC(GPLDO5, gpldo5, ldo_a_table), }, }, =20 @@ -439,7 +448,7 @@ static const struct bcm590xx_reg_data bcm590xx_regs[BCM= 590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_GPLDO, .regmap =3D BCM590XX_REGMAP_SEC, .desc =3D { - BCM590XX_LDO_DESC(GPLDO6, gpldo6, ldo_a_table), + BCM59056_LDO_DESC(GPLDO6, gpldo6, ldo_a_table), }, }, =20 @@ -447,11 +456,11 @@ static const struct bcm590xx_reg_data bcm590xx_regs[B= CM590XX_NUM_REGS] =3D { .type =3D BCM590XX_REG_TYPE_VBUS, .regmap =3D BCM590XX_REGMAP_SEC, .desc =3D { - BCM590XX_REG_DESC(VBUS, vbus), + BCM59056_REG_DESC(VBUS, vbus), .ops =3D &bcm590xx_ops_vbus, .n_voltages =3D 1, .fixed_uV =3D 5000000, - .enable_reg =3D BCM590XX_OTG_CTRL, + .enable_reg =3D BCM59056_OTG_CTRL, .enable_mask =3D BCM590XX_VBUS_ENABLE, }, }, @@ -471,8 +480,8 @@ static int bcm590xx_probe(struct platform_device *pdev) return -ENOMEM; =20 pmu->mfd =3D bcm590xx; - pmu->n_regulators =3D BCM590XX_NUM_REGS; - pmu->regs =3D bcm590xx_regs; + pmu->n_regulators =3D BCM59056_NUM_REGS; + pmu->regs =3D bcm59056_regs; =20 platform_set_drvdata(pdev, pmu); =20 --=20 2.49.0 From nobody Tue Dec 16 13:25:32 2025 Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62743153800; Thu, 15 May 2025 14:16:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318610; cv=none; b=lM7u195IXWTho3LptmXEBdoXsk/FVUTZXy+RiPhHJ5MXvsWH52RWIN+Ui+4EfU8sIliLpPovtkd01Ayx9xaSU1kYAM0QkhX9um5IrFLmqQH5ABExYSssKiJ2VAV0nxdkIzYEqeqgC79F6XkfbiJAB9VAl+KcZ6sSe8bjQLnJO8Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747318610; c=relaxed/simple; bh=OB5zB02qpMlu0vKKGVANSjVLj5dnUi5M067202ur9PM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=P3rrrzwGjiem4IBxLd1/fRHFKTc2XCoYHUQc4b/0J1dprUfrnOzq3fBWydFYQRHk8LfraBA4X+2MkLDJi+zABKqMRoFftNp15rEjDN6YXFIKwqf2BlkFIYRiQh14cbsx7FjiHF6PtC38vOd9XhCqFRafCrKmmBy7cJTVcpQvZGY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UNkK1Ls8; arc=none smtp.client-ip=209.85.208.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UNkK1Ls8" Received: by mail-ed1-f44.google.com with SMTP id 4fb4d7f45d1cf-5fc3f0a5506so2019562a12.0; Thu, 15 May 2025 07:16:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747318606; x=1747923406; 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=OtJzoYXiiMXuyOzpxGEF/NZSi55mpsYUZTHiXnvFSwU=; b=UNkK1Ls8suHkQE0xVDONp2JziYBCJRRzmYI0Umqk7Os2BuLf3PmnI4iShR0ERdQCvL Af+tvg/vOJ9Piw/gtzzqxnHKXwmn/aPRacWqsCiozUpjM8SsbFaiQ/uGKFWvdK61e89G ImM4L4dGTeDOCSHAV/7Fp3ifuNTiQtCjY5nuQdfX6qE7XB0LDEAylQMQpbP776k4AodQ uK7yCQDiMe4U3FRLmeL8UK/s6OaozBhOisMhaYTM2+gnKjaoSAOZyKP6EBd+zwGfZ4t6 pkNGpZO6SOWZWYh0NQmV6gw7A10d2cKw7lBmG10u5yEtl39BnFne/wtlhqKPuW4gaH62 yLGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747318606; x=1747923406; 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=OtJzoYXiiMXuyOzpxGEF/NZSi55mpsYUZTHiXnvFSwU=; b=Glx0f8p7/lsVn8q0dKy7Mtx+91hZ+kqKpfE7Xzl0eUVxwW+tgaV+tAfIm8xFnB89IW 27h9feql8Pj0xMNkbSDuXUFgdTFlCw+OAnJ6eqr2wLDsPG1gzV2MsZGpZrtLgxNsj7Gl PHpc7DRfwSWxBJIYsNIbDLgWyqmcdb15NQ3I8cgZE8W4OLzjmC9S1OwfcVPtxYmtqsi/ sV73hS8pKGBThK4dd2zhhUEKrR9wVXyN7kdZf7GJIVCPbgJp6wX7RM83/nSJ73qKn/K5 pN6/tCzPRY+MyIKtn1nZLpEhknHLQm9cX1LvmWo8rCOxOQXPccx80vagLMo4z0RUKfCC oaGw== X-Forwarded-Encrypted: i=1; AJvYcCUivjkhC2bFQIJyPnWHNpbqAqbtVFm6pgw/nhV7MEZhPq97hSmUHWXLe+XxMruRXmn1w7hqLTWqrZda9/Je@vger.kernel.org, AJvYcCWci5x4d3QmKrHpGOJnl19LC6a3ZLx/vP8c5BBvmIyAf2VcmFXZJsIDFG8VGS2tQxgogkbux0crOIvp@vger.kernel.org X-Gm-Message-State: AOJu0YwXBcJFZMUYcG824B5qFK+8JjDubIjUcKoPU0rxbLE1brQY/h8m /HcZHXFMecwbRN9sThWWhYmeYkb7fCc2fGX4rkh9NAI8ag3OpgY7 X-Gm-Gg: ASbGnct4eYrNgQgVkX31D+uekVfk0djNL1l4vEdg1Exrtz7syBdjQHsgPO33b/rI8DT KrFO5JyxZT5hlNuRurvPx7r0iEY84+KR0El4nSSOxLUWfwmbxrKe9jsXf4H0yNTOHGqzNqB82/q nxu0nqR8Hbsjs7xQvtbM36aDNraDOFMZG/HoRSXh7MlfZTq3+hz3CGBkRCoNGuGMzqDhBTCZdDA 9bCqK4TfN3/PtuOLkqtcqRdM54bVMQtD9uVE5spln4TTg3S/NWxJz6FKjh0KTcBIpGaAph7pXqx AMuixwVXQQCHlz9cLQ347dPW599vVSu4xtUQomB76YPxJfFu7PTDtpdZPE9EnIXOoV7YqjMw9Zq 5yoELeypuGd3EzVLvmt6eGHshWkxnsh76 X-Google-Smtp-Source: AGHT+IEI6ovJO+VZmBK1dokQLWL9r5YACZVHhxQAuURWqkFuMQh/bz0iI8Iwf9Vi7aKgaVlmJDfrpQ== X-Received: by 2002:a17:907:a05:b0:ad2:47e7:3f2e with SMTP id a640c23a62f3a-ad4f74c6b65mr817008366b.49.1747318606238; Thu, 15 May 2025 07:16:46 -0700 (PDT) Received: from hex.my.domain (83.11.178.15.ipv4.supernova.orange.pl. [83.11.178.15]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad2192c8535sm1110143966b.8.2025.05.15.07.16.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 May 2025 07:16:45 -0700 (PDT) From: Artur Weber Date: Thu, 15 May 2025 16:16:35 +0200 Subject: [PATCH v9 8/8] regulator: bcm590xx: Add support for BCM59054 regulators Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250515-bcm59054-v9-8-14ba0ea2ea5b@gmail.com> References: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> In-Reply-To: <20250515-bcm59054-v9-0-14ba0ea2ea5b@gmail.com> To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Liam Girdwood , Mark Brown , Florian Fainelli , Ray Jui , Scott Branden , Broadcom internal kernel review list Cc: Stanislav Jakubek , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, ~postmarketos/upstreaming@lists.sr.ht, Artur Weber X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1747318592; l=17870; i=aweber.kernel@gmail.com; s=20231030; h=from:subject:message-id; bh=OB5zB02qpMlu0vKKGVANSjVLj5dnUi5M067202ur9PM=; b=tIa6Z04n8JoLX9OHC+WJURsOFPDiQS1AQNhkJUCTy5A01S9rU4HebnRE4gKQay5OmikLHNVur //9Uxlz0DImA7EWh1ECTLCS+ns8T7XIvA0ZzNOOZxc57QVsaMiL4ONo X-Developer-Key: i=aweber.kernel@gmail.com; a=ed25519; pk=RhDBfWbJEHqDibXbhNEBAnc9FMkyznGxX/hwfhL8bv8= The BCM59056 and BCM59054 are very similar in terms of regulators. Add the register definitions for the BCM59054 and enable support for it in the driver. Reviewed-by: Stanislav Jakubek Signed-off-by: Artur Weber --- Changes in v6: - dev_type -> pmu_id conversion, rev_ana -> rev_analog rename Changes in v5: - Adapt to regmap type enum being moved/value names being renamed - Adapt to rename of bcm590xx_reg_info to bcm590xx_reg_data Changes in v4: - Lock MICLDO at 1.8v to match vendor kernel behavior - Set different voltage table for VSR based on PMU revision - Fix incorrect table being used for LVLDO1 - Add missing newline to "unknown device type" error message Changes in v3: - Adapt to regulator info being moved to tables --- drivers/regulator/bcm590xx-regulator.c | 649 +++++++++++++++++++++++++++++= +++- 1 file changed, 647 insertions(+), 2 deletions(-) diff --git a/drivers/regulator/bcm590xx-regulator.c b/drivers/regulator/bcm= 590xx-regulator.c index f35b2b72e46f70496e16be5244529a5d95d0546d..50414f4cb10958bb33a9fcfa5ed= 5aaecde9d0715 100644 --- a/drivers/regulator/bcm590xx-regulator.c +++ b/drivers/regulator/bcm590xx-regulator.c @@ -52,6 +52,17 @@ static const struct regulator_ops bcm590xx_ops_ldo =3D { .map_voltage =3D regulator_map_voltage_iterate, }; =20 +/* + * LDO ops without voltage selection, used for MICLDO on BCM59054. + * (These are currently the same as VBUS ops, but will be different + * in the future once full PMMODE support is implemented.) + */ +static const struct regulator_ops bcm590xx_ops_ldo_novolt =3D { + .is_enabled =3D regulator_is_enabled_regmap, + .enable =3D regulator_enable_regmap, + .disable =3D regulator_disable_regmap, +}; + static const struct regulator_ops bcm590xx_ops_dcdc =3D { .is_enabled =3D regulator_is_enabled_regmap, .enable =3D regulator_enable_regmap, @@ -106,6 +117,13 @@ static const struct regulator_ops bcm590xx_ops_vbus = =3D { #define BCM59056_SR_DESC(_name, _name_lower, _ranges) \ BCM590XX_SR_DESC(BCM59056, bcm59056, _name, _name_lower, _ranges) =20 +#define BCM59054_REG_DESC(_name, _name_lower) \ + BCM590XX_REG_DESC(BCM59054, _name, _name_lower) +#define BCM59054_LDO_DESC(_name, _name_lower, _table) \ + BCM590XX_LDO_DESC(BCM59054, bcm59054, _name, _name_lower, _table) +#define BCM59054_SR_DESC(_name, _name_lower, _ranges) \ + BCM590XX_SR_DESC(BCM59054, bcm59054, _name, _name_lower, _ranges) + /* BCM59056 data */ =20 /* I2C slave 0 registers */ @@ -466,6 +484,617 @@ static const struct bcm590xx_reg_data bcm59056_regs[B= CM59056_NUM_REGS] =3D { }, }; =20 +/* BCM59054 data */ + +/* I2C slave 0 registers */ +#define BCM59054_RFLDOPMCTRL1 0x60 +#define BCM59054_CAMLDO1PMCTRL1 0x62 +#define BCM59054_CAMLDO2PMCTRL1 0x64 +#define BCM59054_SIMLDO1PMCTRL1 0x66 +#define BCM59054_SIMLDO2PMCTRL1 0x68 +#define BCM59054_SDLDOPMCTRL1 0x6a +#define BCM59054_SDXLDOPMCTRL1 0x6c +#define BCM59054_MMCLDO1PMCTRL1 0x6e +#define BCM59054_MMCLDO2PMCTRL1 0x70 +#define BCM59054_AUDLDOPMCTRL1 0x72 +#define BCM59054_MICLDOPMCTRL1 0x74 +#define BCM59054_USBLDOPMCTRL1 0x76 +#define BCM59054_VIBLDOPMCTRL1 0x78 +#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_CAMLDO1CTRL 0x97 +#define BCM59054_CAMLDO2CTRL 0x98 +#define BCM59054_SIMLDO1CTRL 0x99 +#define BCM59054_SIMLDO2CTRL 0x9a +#define BCM59054_SDLDOCTRL 0x9b +#define BCM59054_SDXLDOCTRL 0x9c +#define BCM59054_MMCLDO1CTRL 0x9d +#define BCM59054_MMCLDO2CTRL 0x9e +#define BCM59054_AUDLDOCTRL 0x9f +#define BCM59054_MICLDOCTRL 0xa0 +#define BCM59054_USBLDOCTRL 0xa1 +#define BCM59054_VIBLDOCTRL 0xa2 +#define BCM59054_CSRVOUT1 0xc0 +#define BCM59054_IOSR1VOUT1 0xc3 +#define BCM59054_IOSR2VOUT1 0xc6 +#define BCM59054_MMSRVOUT1 0xc9 +#define BCM59054_SDSR1VOUT1 0xcc +#define BCM59054_SDSR2VOUT1 0xcf +#define BCM59054_VSRVOUT1 0xd2 + +/* 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[] =3D { + 1200000, 1800000, 2500000, 2700000, 2800000, + 2900000, 3000000, 3300000, +}; + +/* LDO group 2: supported voltages in microvolts */ +static const unsigned int bcm59054_ldo_2_table[] =3D { + 3100000, 1800000, 2500000, 2700000, 2800000, + 2900000, 3000000, 3300000, +}; + +/* LDO group 3: supported voltages in microvolts */ +static const unsigned int bcm59054_ldo_3_table[] =3D { + 1000000, 1107000, 1143000, 1214000, 1250000, + 1464000, 1500000, 1786000, +}; + +/* DCDC group SR: supported voltages in microvolts */ +static const struct linear_range bcm59054_dcdc_sr_ranges[] =3D { + 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 (BCM59054A1): supported voltages in microvolts */ +static const struct linear_range bcm59054_dcdc_vsr_a1_ranges[] =3D { + 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), +}; + +/* DCDC group CSR: supported voltages in microvolts */ +static const struct linear_range bcm59054_dcdc_csr_ranges[] =3D { + REGULATOR_LINEAR_RANGE(700000, 0, 1, 100000), + REGULATOR_LINEAR_RANGE(860000, 2, 60, 10000), + REGULATOR_LINEAR_RANGE(900000, 61, 63, 0), +}; + +static const struct bcm590xx_reg_data bcm59054_regs[BCM59054_NUM_REGS] =3D= { + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(RFLDO, rfldo, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(CAMLDO1, camldo1, ldo_2_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(CAMLDO2, camldo2, ldo_2_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(SIMLDO1, simldo1, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(SIMLDO2, simldo2, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(SDLDO, sdldo, ldo_2_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(SDXLDO, sdxldo, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(MMCLDO1, mmcldo1, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(MMCLDO2, mmcldo2, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(AUDLDO, audldo, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_REG_DESC(MICLDO, micldo), + .ops =3D &bcm590xx_ops_ldo_novolt, + /* MICLDO is locked at 1.8V */ + .n_voltages =3D 1, + .fixed_uV =3D 1800000, + .enable_reg =3D BCM59054_MICLDOPMCTRL1, + .enable_mask =3D BCM590XX_REG_ENABLE, + .enable_is_inverted =3D true, + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(USBLDO, usbldo, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(VIBLDO, vibldo, ldo_2_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(CSR, csr, dcdc_csr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(IOSR1, iosr1, dcdc_sr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(IOSR2, iosr2, dcdc_sr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(MMSR, mmsr, dcdc_sr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(SDSR1, sdsr1, dcdc_sr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(SDSR2, sdsr2, dcdc_sr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(VSR, vsr, dcdc_sr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_LDO_DESC(GPLDO1, gpldo1, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_LDO_DESC(GPLDO2, gpldo2, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_LDO_DESC(GPLDO3, gpldo3, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_LDO_DESC(TCXLDO, tcxldo, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_LDO_DESC(LVLDO1, lvldo1, ldo_3_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_LDO_DESC(LVLDO2, lvldo2, ldo_3_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_VBUS, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_REG_DESC(VBUS, vbus), + .ops =3D &bcm590xx_ops_vbus, + .n_voltages =3D 1, + .fixed_uV =3D 5000000, + .enable_reg =3D BCM59054_OTG_CTRL, + .enable_mask =3D BCM590XX_VBUS_ENABLE, + }, + }, +}; + +/* + * BCM59054A1 regulators; same as previous revision, but with different + * VSR voltage table. + */ +static const struct bcm590xx_reg_data bcm59054_a1_regs[BCM59054_NUM_REGS] = =3D { + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(RFLDO, rfldo, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(CAMLDO1, camldo1, ldo_2_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(CAMLDO2, camldo2, ldo_2_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(SIMLDO1, simldo1, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(SIMLDO2, simldo2, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(SDLDO, sdldo, ldo_2_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(SDXLDO, sdxldo, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(MMCLDO1, mmcldo1, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(MMCLDO2, mmcldo2, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(AUDLDO, audldo, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_REG_DESC(MICLDO, micldo), + .ops =3D &bcm590xx_ops_ldo_novolt, + /* MICLDO is locked at 1.8V */ + .n_voltages =3D 1, + .fixed_uV =3D 1800000, + .enable_reg =3D BCM59054_MICLDOPMCTRL1, + .enable_mask =3D BCM590XX_REG_ENABLE, + .enable_is_inverted =3D true, + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(USBLDO, usbldo, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_LDO, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_LDO_DESC(VIBLDO, vibldo, ldo_2_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(CSR, csr, dcdc_csr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(IOSR1, iosr1, dcdc_sr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(IOSR2, iosr2, dcdc_sr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(MMSR, mmsr, dcdc_sr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(SDSR1, sdsr1, dcdc_sr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(SDSR2, sdsr2, dcdc_sr_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_SR, + .regmap =3D BCM590XX_REGMAP_PRI, + .desc =3D { + BCM59054_SR_DESC(VSR, vsr, dcdc_vsr_a1_ranges), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_LDO_DESC(GPLDO1, gpldo1, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_LDO_DESC(GPLDO2, gpldo2, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_LDO_DESC(GPLDO3, gpldo3, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_LDO_DESC(TCXLDO, tcxldo, ldo_1_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_LDO_DESC(LVLDO1, lvldo1, ldo_3_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_GPLDO, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_LDO_DESC(LVLDO2, lvldo2, ldo_3_table), + }, + }, + + { + .type =3D BCM590XX_REG_TYPE_VBUS, + .regmap =3D BCM590XX_REGMAP_SEC, + .desc =3D { + BCM59054_REG_DESC(VBUS, vbus), + .ops =3D &bcm590xx_ops_vbus, + .n_voltages =3D 1, + .fixed_uV =3D 5000000, + .enable_reg =3D BCM59054_OTG_CTRL, + .enable_mask =3D BCM590XX_VBUS_ENABLE, + }, + }, +}; + static int bcm590xx_probe(struct platform_device *pdev) { struct bcm590xx *bcm590xx =3D dev_get_drvdata(pdev->dev.parent); @@ -480,8 +1109,24 @@ static int bcm590xx_probe(struct platform_device *pde= v) return -ENOMEM; =20 pmu->mfd =3D bcm590xx; - pmu->n_regulators =3D BCM59056_NUM_REGS; - pmu->regs =3D bcm59056_regs; + + switch (pmu->mfd->pmu_id) { + case BCM590XX_PMUID_BCM59054: + pmu->n_regulators =3D BCM59054_NUM_REGS; + if (pmu->mfd->rev_analog =3D=3D BCM59054_REV_ANALOG_A1) + pmu->regs =3D bcm59054_a1_regs; + else + pmu->regs =3D bcm59054_regs; + break; + case BCM590XX_PMUID_BCM59056: + pmu->n_regulators =3D BCM59056_NUM_REGS; + pmu->regs =3D bcm59056_regs; + break; + default: + dev_err(bcm590xx->dev, + "unknown device type, could not initialize\n"); + return -EINVAL; + } =20 platform_set_drvdata(pdev, pmu); =20 --=20 2.49.0