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