Commit 6fcb22ef authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull phy fixes from Vinod Koul:
 "A few core API fixes for devm calls and bunch of driver fixes as
  usual:

   - devm_phy_xxx fixes for few APIs in the phy core

   - qmp driver register name config

   - init sequence fix for usb driver

   - rockchip driver setting drvdata correctly in samsung hdptx and
     reset fix for naneng combophy

   - regulator dependency fix for mediatek hdmi driver

   - overflow assertion fix for stm32 driver"

* tag 'phy-fixes-6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy:
  phy: mediatek: phy-mtk-hdmi: add regulator dependency
  phy: freescale: fsl-samsung-hdmi: Fix 64-by-32 division cocci warnings
  phy: core: Fix an OF node refcount leakage in of_phy_provider_lookup()
  phy: core: Fix an OF node refcount leakage in _of_phy_get()
  phy: core: Fix that API devm_phy_destroy() fails to destroy the phy
  phy: core: Fix that API devm_of_phy_provider_unregister() fails to unregister the phy provider
  phy: core: Fix that API devm_phy_put() fails to release the phy
  phy: rockchip: samsung-hdptx: Set drvdata before enabling runtime PM
  phy: stm32: work around constant-value overflow assertion
  phy: qcom-qmp: Fix register name in RX Lane config of SC8280XP
  phy: rockchip: naneng-combphy: fix phy reset
  phy: usb: Toggle the PHY power during init
parents ab8beb20 17194c29
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -325,6 +325,12 @@ static void usb_init_common_7216(struct brcm_usb_init_params *params)
	void __iomem *ctrl = params->regs[BRCM_REGS_CTRL];

	USB_CTRL_UNSET(ctrl, USB_PM, XHC_S2_CLK_SWITCH_EN);

	/*
	 * The PHY might be in a bad state if it is already powered
	 * up. Toggle the power just in case.
	 */
	USB_CTRL_SET(ctrl, USB_PM, USB_PWRDN);
	USB_CTRL_UNSET(ctrl, USB_PM, USB_PWRDN);

	/* 1 millisecond - for USB clocks to settle down */
+1 −2
Original line number Diff line number Diff line
@@ -424,8 +424,7 @@ static unsigned long fsl_samsung_hdmi_phy_find_pms(unsigned long fout, u8 *p, u1
			 * Fvco = (M * f_ref) / P,
			 * where f_ref is 24MHz.
			 */
			tmp = (u64)_m * 24 * MHZ;
			do_div(tmp, _p);
			tmp = div64_ul((u64)_m * 24 * MHZ, _p);
			if (tmp < 750 * MHZ ||
			    tmp > 3000 * MHZ)
				continue;
+1 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ config PHY_MTK_HDMI
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on COMMON_CLK
	depends on OF
	depends on REGULATOR
	select GENERIC_PHY
	help
	  Support HDMI PHY for Mediatek SoCs.
+13 −8
Original line number Diff line number Diff line
@@ -145,9 +145,11 @@ static struct phy_provider *of_phy_provider_lookup(struct device_node *node)
			return phy_provider;

		for_each_child_of_node(phy_provider->children, child)
			if (child == node)
			if (child == node) {
				of_node_put(child);
				return phy_provider;
			}
	}

	return ERR_PTR(-EPROBE_DEFER);
}
@@ -629,8 +631,10 @@ static struct phy *_of_phy_get(struct device_node *np, int index)
		return ERR_PTR(-ENODEV);

	/* This phy type handled by the usb-phy subsystem for now */
	if (of_device_is_compatible(args.np, "usb-nop-xceiv"))
		return ERR_PTR(-ENODEV);
	if (of_device_is_compatible(args.np, "usb-nop-xceiv")) {
		phy = ERR_PTR(-ENODEV);
		goto out_put_node;
	}

	mutex_lock(&phy_provider_mutex);
	phy_provider = of_phy_provider_lookup(args.np);
@@ -652,6 +656,7 @@ static struct phy *_of_phy_get(struct device_node *np, int index)

out_unlock:
	mutex_unlock(&phy_provider_mutex);
out_put_node:
	of_node_put(args.np);

	return phy;
@@ -737,7 +742,7 @@ void devm_phy_put(struct device *dev, struct phy *phy)
	if (!phy)
		return;

	r = devres_destroy(dev, devm_phy_release, devm_phy_match, phy);
	r = devres_release(dev, devm_phy_release, devm_phy_match, phy);
	dev_WARN_ONCE(dev, r, "couldn't find PHY resource\n");
}
EXPORT_SYMBOL_GPL(devm_phy_put);
@@ -1121,7 +1126,7 @@ void devm_phy_destroy(struct device *dev, struct phy *phy)
{
	int r;

	r = devres_destroy(dev, devm_phy_consume, devm_phy_match, phy);
	r = devres_release(dev, devm_phy_consume, devm_phy_match, phy);
	dev_WARN_ONCE(dev, r, "couldn't find PHY resource\n");
}
EXPORT_SYMBOL_GPL(devm_phy_destroy);
@@ -1263,7 +1268,7 @@ void devm_of_phy_provider_unregister(struct device *dev,
{
	int r;

	r = devres_destroy(dev, devm_phy_provider_release, devm_phy_match,
	r = devres_release(dev, devm_phy_provider_release, devm_phy_match,
			   phy_provider);
	dev_WARN_ONCE(dev, r, "couldn't find PHY provider device resource\n");
}
+1 −1
Original line number Diff line number Diff line
@@ -1052,7 +1052,7 @@ static const struct qmp_phy_init_tbl sc8280xp_usb3_uniphy_rx_tbl[] = {
	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_FO_GAIN, 0x2f),
	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_COUNT_LOW, 0xff),
	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_COUNT_HIGH, 0x0f),
	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SO_GAIN, 0x0a),
	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FO_GAIN, 0x0a),
	QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL1, 0x54),
	QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x0f),
	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0f),
Loading