linux/drivers/reset
Krzysztof Kozlowski c721f189e8 reset: Instantiate reset GPIO controller for shared reset-gpios
Devices sharing a reset GPIO could use the reset framework for
coordinated handling of that shared GPIO line.  We have several cases of
such needs, at least for Devicetree-based platforms.

If Devicetree-based device requests a reset line, while "resets"
Devicetree property is missing but there is a "reset-gpios" one,
instantiate a new "reset-gpio" platform device which will handle such
reset line.  This allows seamless handling of such shared reset-gpios
without need of changing Devicetree binding [1].

To avoid creating multiple "reset-gpio" platform devices, store the
Devicetree "reset-gpios" GPIO specifiers used for new devices on a
linked list.  Later such Devicetree GPIO specifier (phandle to GPIO
controller, GPIO number and GPIO flags) is used to check if reset
controller for given GPIO was already registered.

If two devices have conflicting "reset-gpios" property, e.g. with
different ACTIVE_xxx flags, this would allow to spawn two separate
"reset-gpio" devices, where the second would fail probing on busy GPIO
request.

Link: https://lore.kernel.org/all/YXi5CUCEi7YmNxXM@robh.at.kernel.org/ [1]
Cc: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Chris Packham <chris.packham@alliedtelesis.co.nz>
Cc: Sean Anderson <sean.anderson@seco.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Acked-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20240129115216.96479-5-krzysztof.kozlowski@linaro.org
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
2024-02-21 11:53:25 +01:00
..
hisilicon reset: hisilicon: hi6220: fix Wvoid-pointer-to-enum-cast warning 2023-11-24 11:26:19 +01:00
starfive reset: starfive: jh7110: Add StarFive STG/ISP/VOUT resets support 2023-07-26 11:45:31 -07:00
sti reset: Use device_get_match_data() 2023-11-28 17:23:01 +01:00
tegra reset: tegra-bpmp: Restore Handle errors in BPMP response 2022-04-04 11:14:13 +02:00
core.c reset: Instantiate reset GPIO controller for shared reset-gpios 2024-02-21 11:53:25 +01:00
Kconfig reset: gpio: Add GPIO-based reset controller 2024-02-21 11:53:25 +01:00
Makefile reset: gpio: Add GPIO-based reset controller 2024-02-21 11:53:25 +01:00
reset-a10sr.c reset: a10sr: add missing of_match_table reference 2021-05-10 09:48:17 +02:00
reset-ath79.c reset: ath79: remove unneeded call to platform_set_drvdata() 2023-08-08 15:31:00 +02:00
reset-axs10x.c reset: axs10x: Use devm_platform_ioremap_resource() 2023-05-08 09:28:31 +02:00
reset-bcm6345.c reset: bcm6345: remove unneeded call to platform_set_drvdata() 2023-08-08 15:31:00 +02:00
reset-berlin.c reset: berlin: support module build 2021-06-07 12:45:59 +02:00
reset-brcmstb-rescal.c reset: brcmstb-rescal: Use devm_platform_ioremap_resource() 2023-05-08 09:28:31 +02:00
reset-brcmstb.c reset: brcmstb: Use devm_platform_get_and_ioremap_resource() 2023-11-28 17:19:38 +01:00
reset-gpio.c reset: gpio: Add GPIO-based reset controller 2024-02-21 11:53:25 +01:00
reset-hsdk.c reset: reset-hsdk: Use devm_platform_ioremap_resource() 2023-05-08 09:28:31 +02:00
reset-imx7.c reset: Explicitly include correct DT includes 2023-07-28 17:36:20 +02:00
reset-intel-gw.c reset: Explicitly include correct DT includes 2023-07-28 17:36:20 +02:00
reset-k210.c reset: Explicitly include correct DT includes 2023-07-28 17:36:20 +02:00
reset-lantiq.c reset: lantiq: remove unneeded call to platform_set_drvdata() 2023-08-08 15:31:00 +02:00
reset-lpc18xx.c reset: lpc18xx: remove unneeded call to platform_set_drvdata() 2023-08-08 15:31:00 +02:00
reset-ma35d1.c reset: Add Nuvoton ma35d1 reset driver support 2023-06-05 13:18:09 +02:00
reset-meson-audio-arb.c reset: meson-audio-arb: Convert to devm_platform_ioremap_resource() 2023-11-28 17:19:38 +01:00
reset-meson.c reset: reset-meson: add support for Amlogic C3 SoC Reset Controller 2023-11-28 17:21:59 +01:00
reset-microchip-sparx5.c reset: Explicitly include correct DT includes 2023-07-28 17:36:20 +02:00
reset-mpfs.c reset: Explicitly include correct DT includes 2023-07-28 17:36:20 +02:00
reset-npcm.c reset: Use device_get_match_data() 2023-11-28 17:23:01 +01:00
reset-pistachio.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 422 2019-06-05 17:37:15 +02:00
reset-qcom-aoss.c reset: qcom-aoss: Convert to devm_platform_ioremap_resource() 2023-11-28 17:19:39 +01:00
reset-qcom-pdc.c reset: qcom: Convert to devm_platform_ioremap_resource() 2023-11-28 17:19:39 +01:00
reset-raspberrypi.c reset: raspberrypi: Release firmware handle on unbind 2021-03-22 17:59:51 +01:00
reset-rzg2l-usbphy-ctrl.c reset: renesas: Check return value of reset_control_deassert() 2022-04-04 11:00:27 +02:00
reset-scmi.c reset: reset-scmi: Port driver to the new scmi_reset_proto_ops interface 2021-03-30 16:34:54 +01:00
reset-simple.c reset: simple: add support for Sophgo SG2042 2024-02-21 11:51:39 +01:00
reset-socfpga.c reset: socfpga: add empty driver allowing consumers to probe 2021-10-05 12:23:16 +02:00
reset-sunplus.c reset: sunplus: Use devm_platform_get_and_ioremap_resource() 2023-11-28 17:19:39 +01:00
reset-sunxi.c reset: Move reset-simple header out of drivers/reset 2020-06-16 14:19:56 +02:00
reset-ti-sci.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_320.RULE 2022-06-10 14:51:36 +02:00
reset-ti-syscon.c reset: ti: syscon: remove unneeded call to platform_set_drvdata() 2023-08-08 15:31:00 +02:00
reset-tn48m.c reset: Add Delta TN48M CPLD reset controller 2022-02-25 09:59:35 +01:00
reset-tps380x.c reset: tps380x: Fix spelling mistake "Voltags" -> "Voltage" 2022-07-28 14:08:50 +02:00
reset-uniphier-glue.c reset: uniphier-glue: Use devm_platform_get_and_ioremap_resource() 2023-11-28 17:19:39 +01:00
reset-uniphier.c reset: Explicitly include correct DT includes 2023-07-28 17:36:20 +02:00
reset-zynq.c reset: zynq: remove unneeded call to platfrom_set_drvdata() 2023-08-08 15:31:00 +02:00
reset-zynqmp.c reset: zynqmp: removed unneeded call to platform_set_drvdata() 2023-08-08 15:31:00 +02:00