Re: [PATCH v2 02/14] phy: qcom: Introduce Qualcomm IPQ5332 Super-Speed USB UNIPHY driver

From: Philipp Zabel

Date: Mon Aug 24 2026 - 10:37:57 EST


On Mi, 2026-08-12 at 13:34 +0400, George Moussalem via B4 Relay wrote:
> From: Praveenkumar I <quic_ipkumar@xxxxxxxxxxx>
>
> Adds Qualcomm 22ull Super-Speed USB UNIPHY driver support which is
> present in Qualcomm IPQ5018 & IPQ5332 SoCs.
>
> This PHY is interfaced with SNPS DWC3 USB and SNPS DWC PCIe. Either one
> of the interface can use the it and selection is done via mux present in
> TCSR register. By default, the PHY is configured for PCIe interface and
> needs this driver to configure the mux for USB.
>
> Signed-off-by: Praveenkumar I <quic_ipkumar@xxxxxxxxxxx>
> Signed-off-by: George Moussalem <george.moussalem@xxxxxxxxxxx>
> ---
> drivers/phy/qualcomm/Kconfig | 10 +
> drivers/phy/qualcomm/Makefile | 1 +
> .../phy/qualcomm/phy-qcom-uniphy-usb-ss-22ull.c | 304 +++++++++++++++++++++
> 3 files changed, 315 insertions(+)
>
[...]
> diff --git a/drivers/phy/qualcomm/phy-qcom-uniphy-usb-ss-22ull.c b/drivers/phy/qualcomm/phy-qcom-uniphy-usb-ss-22ull.c
> new file mode 100644
> index 000000000000..089de7cebef0
> --- /dev/null
> +++ b/drivers/phy/qualcomm/phy-qcom-uniphy-usb-ss-22ull.c
> @@ -0,0 +1,304 @@
[...]
> +static int qcom_uniphy_usb_probe(struct platform_device *pdev)
> +{
> + struct phy_provider *phy_provider;
> + struct device *dev = &pdev->dev;
> + struct uniphy_usb *uniphy;
> + int ret;
> +
> + uniphy = devm_kzalloc(dev, sizeof(*uniphy), GFP_KERNEL);
> + if (!uniphy)
> + return -ENOMEM;
> +
> + uniphy->dev = dev;
> +
> + uniphy->cfg = of_device_get_match_data(dev);
> + if (!uniphy->cfg)
> + return -EINVAL;
> +
> + uniphy->base = devm_platform_ioremap_resource(pdev, 0);
> + if (IS_ERR(uniphy->base))
> + return dev_err_probe(dev, PTR_ERR(uniphy->base),
> + "failed to map base\n");
> +
> + ret = devm_clk_bulk_get_all(dev, &uniphy->clks);
> + if (ret < 0)
> + return dev_err_probe(dev, ret, "failed to get clocks\n");
> +
> + uniphy->num_clks = ret;
> +
> + uniphy->reset = devm_reset_control_get_exclusive_by_index(dev, 0);

There is only a single reset control. Don't use
devm_reset_control_get_exclusive_by_index(), use
devm_reset_control_get_exclusive(dev, NULL) instead.

regards
Philipp