From: antohami@basealt.ru To: devel-kernel@lists.altlinux.org Subject: [d-kernel] [PATCH 06/12] mfd: bcm2835-pm: Use 'reg-names' to get resources Date: Tue, 22 Mar 2022 22:36:09 +0700 Message-ID: <76feed678d825be30b046781fc5d38f3b6bbe14d.1647954377.git.antohami@altlinux.org> (raw) In-Reply-To: <cover.1647954375.git.antohami@altlinux.org> From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> 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-22 15:36 UTC|newest] Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-03-22 15:36 [d-kernel] [PATCH 00/12] *** Enable v3d on Raspberry Pi 4 for kernel 5.10 std-def *** antohami 2022-03-22 15:36 ` [d-kernel] [PATCH 01/12] dt-bindings: soc: bcm: bcm2835-pm: Convert bindings to DT schema antohami 2022-03-22 15:36 ` [d-kernel] [PATCH 02/12] dt-bindings: soc: bcm: bcm2835-pm: Introduce reg-names antohami 2022-03-22 15:36 ` [d-kernel] [PATCH 03/12] dt-bindings: soc: bcm: bcm2835-pm: Add support for bcm2711 antohami 2022-03-22 15:36 ` [d-kernel] [PATCH 04/12] ARM: dts: bcm2835/bcm2711: Introduce reg-names in watchdog node antohami 2022-03-22 15:36 ` [d-kernel] [PATCH 05/12] ARM: dts: bcm2711: Use proper compatible in PM/Watchdog node antohami 2022-03-22 15:36 ` antohami [this message] 2022-03-22 15:36 ` [d-kernel] [PATCH 07/12] mfd: bcm2835-pm: Add support for BCM2711 antohami 2022-03-22 15:36 ` [d-kernel] [PATCH 08/12] soc: bcm: bcm2835-power: Add support for BCM2711's RPiVid ASB antohami 2022-03-22 15:36 ` [d-kernel] [PATCH 09/12] soc: bcm: bcm2835-power: Bypass power_on/off() calls antohami 2022-03-22 15:36 ` [d-kernel] [PATCH 10/12] drm/v3d: Get rid of pm code antohami 2022-03-22 15:36 ` [d-kernel] [PATCH 11/12] drm/v3d: Add support for bcm2711 antohami 2022-03-22 15:36 ` [d-kernel] [PATCH 12/12] ARM: dts: bcm2711: Enable V3D antohami 2022-03-22 16:24 ` [d-kernel] [PATCH 00/12] *** Enable v3d on Raspberry Pi 4 for kernel 5.10 std-def *** Vitaly Chikunov 2022-03-22 16:39 ` Антон Мидюков 2022-03-22 17:14 ` Vitaly Chikunov 2022-03-22 17:17 ` Антон Мидюков 2022-03-22 17:25 ` Vitaly Chikunov
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=76feed678d825be30b046781fc5d38f3b6bbe14d.1647954377.git.antohami@altlinux.org \ --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