From: Bjorn Helgaas <helgaas@kernel.org>
To: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com>
Cc: "Bjorn Helgaas" <bhelgaas@google.com>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Krzysztof Wilczyński" <kwilczynski@kernel.org>,
"Manivannan Sadhasivam" <mani@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Chaitanya Chundru" <krishna.chundru@oss.qualcomm.com>,
"Linus Walleij" <linusw@kernel.org>,
"Bartosz Golaszewski" <brgl@kernel.org>,
"Bjorn Andersson" <andersson@kernel.org>,
"Konrad Dybcio" <konradybcio@kernel.org>,
"Michael Walle" <mwalle@kernel.org>,
"Alex Elder" <elder@riscstar.com>,
"Daniel Thompson" <daniel@riscstar.com>,
linux-pci@vger.kernel.org, devicetree@vger.kernel.org,
linux-gpio@vger.kernel.org, linux-arm-msm@vger.kernel.org
Subject: Re: [PATCH v2 3/5] PCI/pwrctrl: tc9563: add GPIO auxiliary device support
Date: Thu, 3 Sep 2026 16:17:18 -0500 [thread overview]
Message-ID: <20260903211718.GA2247285@bhelgaas> (raw)
In-Reply-To: <20260903-pci-tc9563-aux-v2-3-34c625b542c1@oss.qualcomm.com>
On Thu, Sep 03, 2026 at 09:52:59AM +0200, Lorenzo Bianconi wrote:
> The TC9563 embeds a GPIO controller used for per-port reset signals.
> Create an auxiliary device for it so the gpio-tc9563 driver can
> register the GPIO chip and enable DT-based GPIO lookups. Pass the
> tc9563 regmap to the auxiliary device as its platform data.
>
> The downstream port DT parsing loop gains an of_node_is_type() filter
> to skip non-PCI child nodes such as the GPIO controller node.
"Add an of_node_is_type() filter in the downstream port DT parsing
loop ..." to match the rest. Or even just "Skip non-PCI nodes such as
GPIO controller nodes when parsing downstream port DT".
> The pwrctrl driver does not wait for the GPIO chip to be probed. The
> per-port reset GPIO lookup, returning -EPROBE_DEFER until the chip is
> registered, is added in the next patch.
>
> Select AUXILIARY_BUS and GPIO_TC9563 in Kconfig.
>
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com>
What's the merge strategy? I guess this depends on the previous
drivers/gpio patches because they add linux/soc/qcom/tc9563.h, which
this patch uses, so they all have to go together?
Capitalize "Add GPIO ..." in the subject to match the history, then
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
> ---
> drivers/pci/pwrctrl/Kconfig | 1 +
> drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c | 80 ++++++++++++++++++++++++++++++--
> 2 files changed, 78 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/pci/pwrctrl/Kconfig b/drivers/pci/pwrctrl/Kconfig
> index 1952ab4f29b6..38aab596aa04 100644
> --- a/drivers/pci/pwrctrl/Kconfig
> +++ b/drivers/pci/pwrctrl/Kconfig
> @@ -29,6 +29,7 @@ config PCI_PWRCTRL_TC9563
> select PCI_PWRCTRL
> default m if ARCH_QCOM
> depends on I2C
> + depends on GPIO_TC9563
> select REGMAP_I2C
> help
> Say Y here to enable the PCI Power Control driver of TC9563 PCIe
> diff --git a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c
> index b0d8912690a2..6df512d78b54 100644
> --- a/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c
> +++ b/drivers/pci/pwrctrl/pci-pwrctrl-tc9563.c
> @@ -4,11 +4,13 @@
> */
>
> #include <linux/array_size.h>
> +#include <linux/auxiliary_bus.h>
> #include <linux/bitfield.h>
> #include <linux/bits.h>
> #include <linux/delay.h>
> #include <linux/device.h>
> #include <linux/gpio/consumer.h>
> +#include <linux/gpio/driver.h>
> #include <linux/i2c.h>
> #include <linux/module.h>
> #include <linux/of.h>
> @@ -20,12 +22,10 @@
> #include <linux/regulator/consumer.h>
> #include <linux/string.h>
> #include <linux/types.h>
> +#include <linux/soc/qcom/tc9563.h>
Alphabetize in with the rest of the #includes.
>
> #include "../pci.h"
>
> -#define TC9563_GPIO_CONFIG 0x801208
> -#define TC9563_RESET_GPIO 0x801210
> -
> #define TC9563_PORT_L0S_DELAY 0x82496c
> #define TC9563_PORT_L1_DELAY 0x824970
>
> @@ -393,6 +393,73 @@ static int tc9563_pwrctrl_parse_device_dt(struct device_node *node,
> return 0;
> }
>
> +static void tc9563_pwrctrl_adev_release(struct device *dev)
> +{
> + struct auxiliary_device *adev = to_auxiliary_dev(dev);
> +
> + of_node_put(adev->dev.of_node);
> + kfree(adev);
> +}
> +
> +static void tc9563_pwrctrl_adev_remove(void *data)
> +{
> + struct auxiliary_device *adev = data;
> +
> + auxiliary_device_delete(adev);
> + auxiliary_device_uninit(adev);
> +}
> +
> +static int tc9563_pwrctrl_adev_add(struct device *dev, const char *name,
> + u32 id, struct device_node *of_node,
> + void *priv_data)
> +{
> + struct auxiliary_device *adev;
> + int ret;
> +
> + adev = kzalloc_obj(*adev);
> + if (!adev)
> + return -ENOMEM;
> +
> + adev->id = id;
> + adev->name = name;
> + adev->dev.parent = dev;
> + adev->dev.platform_data = priv_data;
> + adev->dev.release = tc9563_pwrctrl_adev_release;
> + adev->dev.of_node = of_node_get(of_node);
> +
> + ret = auxiliary_device_init(adev);
> + if (ret) {
> + of_node_put(adev->dev.of_node);
> + kfree(adev);
> + return ret;
> + }
> +
> + ret = auxiliary_device_add(adev);
> + if (ret) {
> + auxiliary_device_uninit(adev);
> + return ret;
> + }
> +
> + return devm_add_action_or_reset(dev, tc9563_pwrctrl_adev_remove, adev);
> +}
> +
> +static int tc9563_pwrctrl_add_gpio_adev(struct tc9563_pwrctrl *tc9563)
> +{
> + struct device *dev = tc9563->pwrctrl.dev;
> + struct fwnode_handle *fwnode;
> + int ret;
> +
> + fwnode = gpiochip_node_get_first(dev);
> + if (!fwnode)
> + return 0;
> +
> + ret = tc9563_pwrctrl_adev_add(dev, TC9563_GPIO_DEV_NAME, 0,
> + to_of_node(fwnode), tc9563->regmap);
> + fwnode_handle_put(fwnode);
> +
> + return ret;
> +}
> +
> static int tc9563_pwrctrl_power_off(struct pci_pwrctrl *pwrctrl)
> {
> struct tc9563_pwrctrl *tc9563 = container_of(pwrctrl,
> @@ -565,6 +632,9 @@ static int tc9563_pwrctrl_probe(struct platform_device *pdev)
> */
> port = TC9563_USP;
> for_each_child_of_node_scoped(node, child) {
> + if (!of_node_is_type(child, "pci"))
> + continue;
> +
> if (++port >= TC9563_MAX)
> break;
>
> @@ -596,6 +666,10 @@ static int tc9563_pwrctrl_probe(struct platform_device *pdev)
> tc9563->pwrctrl.power_on = tc9563_pwrctrl_power_on;
> tc9563->pwrctrl.power_off = tc9563_pwrctrl_power_off;
>
> + ret = tc9563_pwrctrl_add_gpio_adev(tc9563);
> + if (ret)
> + goto remove_i2c;
> +
> ret = devm_pci_pwrctrl_device_set_ready(dev, &tc9563->pwrctrl);
> if (ret)
> goto power_off;
>
> --
> 2.55.0
>
next prev parent reply other threads:[~2026-09-03 21:17 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-03 7:52 [PATCH v2 0/5] PCI/pwrctrl: tc9563: introduce support for embedded GPIO controller Lorenzo Bianconi
2026-09-03 7:52 ` [PATCH v2 1/5] dt-bindings: PCI: toshiba,tc9563: document " Lorenzo Bianconi
2026-09-03 7:52 ` [PATCH v2 2/5] gpio: tc9563: add support for the " Lorenzo Bianconi
2026-09-03 8:50 ` Bartosz Golaszewski
2026-09-03 8:56 ` Lorenzo Bianconi
2026-09-03 13:55 ` Manivannan Sadhasivam
2026-09-03 7:52 ` [PATCH v2 3/5] PCI/pwrctrl: tc9563: add GPIO auxiliary device support Lorenzo Bianconi
2026-09-03 8:47 ` Bartosz Golaszewski
2026-09-03 8:57 ` Lorenzo Bianconi
2026-09-03 14:04 ` Manivannan Sadhasivam
2026-09-04 13:51 ` Lorenzo Bianconi
2026-09-03 21:17 ` Bjorn Helgaas [this message]
2026-09-04 13:59 ` Lorenzo Bianconi
2026-09-03 7:53 ` [PATCH v2 4/5] PCI/pwrctrl: tc9563: switch per-port reset to GPIO descriptor API Lorenzo Bianconi
2026-09-03 8:49 ` Bartosz Golaszewski
2026-09-03 14:07 ` Manivannan Sadhasivam
2026-09-03 22:03 ` Bjorn Helgaas
2026-09-04 14:35 ` Lorenzo Bianconi
2026-09-03 7:53 ` [PATCH v2 5/5] arm64: dts: qcom: qcs6490-rb3gen2: enable TC9563 embedded GPIO controller Lorenzo Bianconi
2026-09-03 8:41 ` Bartosz Golaszewski
2026-09-03 13:00 ` Abel Vesa
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=20260903211718.GA2247285@bhelgaas \
--to=helgaas@kernel.org \
--cc=andersson@kernel.org \
--cc=bhelgaas@google.com \
--cc=brgl@kernel.org \
--cc=conor+dt@kernel.org \
--cc=daniel@riscstar.com \
--cc=devicetree@vger.kernel.org \
--cc=elder@riscstar.com \
--cc=konradybcio@kernel.org \
--cc=krishna.chundru@oss.qualcomm.com \
--cc=krzk+dt@kernel.org \
--cc=kwilczynski@kernel.org \
--cc=linusw@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lorenzo.bianconi@oss.qualcomm.com \
--cc=lpieralisi@kernel.org \
--cc=mani@kernel.org \
--cc=mwalle@kernel.org \
--cc=robh@kernel.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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.