From: "Антон Мидюков" <antohami@basealt.ru>
To: "devel-kernel@lists.altlinux.org" <devel-kernel@lists.altlinux.org>
Subject: [d-kernel] [PATCH 06/12] mfd: bcm2835-pm: Use 'reg-names' to get resources
Date: Thu, 17 Mar 2022 22:42:08 +0700
Message-ID: <2f67b5ae-c72f-ecca-ad19-d682827bab5e@basealt.ru> (raw)
In-Reply-To: <cover.1647531042.git.antohami@altlinux.org>
If available in firmware, find resources by their 'reg-names' position
instead of relying on hardcoded offsets. Care is taken to support old
firmware nonetheless.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
drivers/mfd/bcm2835-pm.c | 55 ++++++++++++++++++++++++++--------------
1 file changed, 36 insertions(+), 19 deletions(-)
diff --git a/drivers/mfd/bcm2835-pm.c b/drivers/mfd/bcm2835-pm.c
index 42fe67f1538e..36fede92775c 100644
--- a/drivers/mfd/bcm2835-pm.c
+++ b/drivers/mfd/bcm2835-pm.c
@@ -25,9 +25,37 @@ static const struct mfd_cell bcm2835_power_devs[] = {
{ .name = "bcm2835-power" },
};
+static int bcm2835_pm_get_pdata(struct platform_device *pdev,
+ struct bcm2835_pm *pm)
+{
+ /* If no 'reg-names' property is found we can assume we're using old
+ * firmware.
+ */
+ if (!of_find_property(pm->dev->of_node, "reg-names", NULL)) {
+ dev_warn(pm->dev, "Old devicetree detected, please update your firmware.\n");
+
+ pm->base = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(pm->base))
+ return PTR_ERR(pm->base);
+
+ pm->asb = devm_platform_ioremap_resource(pdev, 1);
+ if (IS_ERR(pm->asb))
+ pm->asb = NULL;
+ } else {
+ pm->base = devm_platform_ioremap_resource_byname(pdev, "pm");
+ if (IS_ERR(pm->base))
+ return PTR_ERR(pm->base);
+
+ pm->asb = devm_platform_ioremap_resource_byname(pdev, "asb");
+ if (IS_ERR(pm->base))
+ pm->asb = NULL;
+ }
+
+ return 0;
+}
+
static int bcm2835_pm_probe(struct platform_device *pdev)
{
- struct resource *res;
struct device *dev = &pdev->dev;
struct bcm2835_pm *pm;
int ret;
@@ -39,10 +67,9 @@ static int bcm2835_pm_probe(struct platform_device *pdev)
pm->dev = dev;
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- pm->base = devm_ioremap_resource(dev, res);
- if (IS_ERR(pm->base))
- return PTR_ERR(pm->base);
+ ret = bcm2835_pm_get_pdata(pdev, pm);
+ if (ret)
+ return ret;
ret = devm_mfd_add_devices(dev, -1,
bcm2835_pm_devs, ARRAY_SIZE(bcm2835_pm_devs),
@@ -54,20 +81,10 @@ static int bcm2835_pm_probe(struct platform_device *pdev)
* bcm2835-pm binding as the key for whether we can reference
* the full PM register range and support power domains.
*/
- res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
- if (res) {
- pm->asb = devm_ioremap_resource(dev, res);
- if (IS_ERR(pm->asb))
- return PTR_ERR(pm->asb);
-
- ret = devm_mfd_add_devices(dev, -1,
- bcm2835_power_devs,
- ARRAY_SIZE(bcm2835_power_devs),
- NULL, 0, NULL);
- if (ret)
- return ret;
- }
-
+ if (pm->asb)
+ return devm_mfd_add_devices(dev, -1, bcm2835_power_devs,
+ ARRAY_SIZE(bcm2835_power_devs),
+ NULL, 0, NULL);
return 0;
}
--
2.33.0
next prev parent reply other threads:[~2022-03-17 15:42 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-17 15:41 ` [d-kernel] [PATCH 01/12] dt-bindings: soc: bcm: bcm2835-pm: Convert bindings to DT schema Антон Мидюков
2022-03-17 15:41 ` [d-kernel] [PATCH 02/12] dt-bindings: soc: bcm: bcm2835-pm: Introduce reg-names Антон Мидюков
2022-03-17 15:41 ` [d-kernel] [PATCH 03/12] dt-bindings: soc: bcm: bcm2835-pm: Add support for bcm2711 Антон Мидюков
2022-03-17 15:41 ` [d-kernel] [PATCH 04/12] ARM: dts: bcm2835/bcm2711: Introduce reg-names in watchdog node Антон Мидюков
2022-03-17 15:42 ` [d-kernel] [PATCH 05/12] ARM: dts: bcm2711: Use proper compatible in PM/Watchdog node Антон Мидюков
2022-03-17 15:42 ` Антон Мидюков [this message]
2022-03-17 15:42 ` [d-kernel] [PATCH 07/12] mfd: bcm2835-pm: Add support for BCM2711 Антон Мидюков
2022-03-17 15:42 ` [d-kernel] [PATCH 08/12] soc: bcm: bcm2835-power: Add support for BCM2711's RPiVid ASB Антон Мидюков
2022-03-17 15:42 ` [d-kernel] [PATCH 09/12] soc: bcm: bcm2835-power: Bypass power_on/off() calls Антон Мидюков
2022-03-17 15:42 ` [d-kernel] [PATCH 10/12] drm/v3d: Get rid of pm code Антон Мидюков
2022-03-17 15:42 ` [d-kernel] [PATCH 11/12] drm/v3d: Add support for bcm2711 Антон Мидюков
2022-03-17 15:43 ` [d-kernel] [PATCH 12/12] ARM: dts: bcm2711: Enable V3D Антон Мидюков
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2f67b5ae-c72f-ecca-ad19-d682827bab5e@basealt.ru \
--to=antohami@basealt.ru \
--cc=devel-kernel@lists.altlinux.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
ALT Linux kernel packages development
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel-kernel/0 devel-kernel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel-kernel devel-kernel/ http://lore.altlinux.org/devel-kernel \
devel-kernel@altlinux.org devel-kernel@altlinux.ru devel-kernel@altlinux.com
public-inbox-index devel-kernel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel-kernel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git