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

Philipp Zabel p.zabel at pengutronix.de
Mon Aug 24 07:31:44 PDT 2026


On Mi, 2026-08-12 at 13:34 +0400, George Moussalem via B4 Relay wrote:
> From: Praveenkumar I <quic_ipkumar at quicinc.com>
> 
> 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 at quicinc.com>
> Signed-off-by: George Moussalem <george.moussalem at outlook.com>
> ---
>  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



More information about the linux-phy mailing list