123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- From 21a2802a8365cfa82cc02187c1f95136d85592ad Mon Sep 17 00:00:00 2001
- From: Christian Marangi <[email protected]>
- Date: Fri, 8 Dec 2023 15:51:59 +0100
- Subject: [PATCH 12/13] net: phy: at803x: move at8035 specific DT parse to
- dedicated probe
- Move at8035 specific DT parse for clock out frequency to dedicated probe
- to make at803x probe function more generic.
- This is to tidy code and no behaviour change are intended.
- Detection logic is changed, we check if the clk 25m mask is set and if
- it's not zero, we assume the qca,clk-out-frequency property is set.
- The property is checked in the generic at803x_parse_dt called by
- at803x_probe.
- Signed-off-by: Christian Marangi <[email protected]>
- Reviewed-by: Andrew Lunn <[email protected]>
- Signed-off-by: David S. Miller <[email protected]>
- ---
- drivers/net/phy/at803x.c | 60 +++++++++++++++++++++++++++-------------
- 1 file changed, 41 insertions(+), 19 deletions(-)
- --- a/drivers/net/phy/at803x.c
- +++ b/drivers/net/phy/at803x.c
- @@ -638,23 +638,6 @@ static int at803x_parse_dt(struct phy_de
-
- priv->clk_25m_reg |= FIELD_PREP(AT803X_CLK_OUT_MASK, sel);
- priv->clk_25m_mask |= AT803X_CLK_OUT_MASK;
- -
- - /* Fixup for the AR8030/AR8035. This chip has another mask and
- - * doesn't support the DSP reference. Eg. the lowest bit of the
- - * mask. The upper two bits select the same frequencies. Mask
- - * the lowest bit here.
- - *
- - * Warning:
- - * There was no datasheet for the AR8030 available so this is
- - * just a guess. But the AR8035 is listed as pin compatible
- - * to the AR8030 so there might be a good chance it works on
- - * the AR8030 too.
- - */
- - if (phydev->drv->phy_id == ATH8030_PHY_ID ||
- - phydev->drv->phy_id == ATH8035_PHY_ID) {
- - priv->clk_25m_reg &= AT8035_CLK_OUT_MASK;
- - priv->clk_25m_mask &= AT8035_CLK_OUT_MASK;
- - }
- }
-
- ret = of_property_read_u32(node, "qca,clk-out-strength", &strength);
- @@ -1635,6 +1618,45 @@ static int at8031_config_intr(struct phy
- return at803x_config_intr(phydev);
- }
-
- +static int at8035_parse_dt(struct phy_device *phydev)
- +{
- + struct at803x_priv *priv = phydev->priv;
- +
- + /* Mask is set by the generic at803x_parse_dt
- + * if property is set. Assume property is set
- + * with the mask not zero.
- + */
- + if (priv->clk_25m_mask) {
- + /* Fixup for the AR8030/AR8035. This chip has another mask and
- + * doesn't support the DSP reference. Eg. the lowest bit of the
- + * mask. The upper two bits select the same frequencies. Mask
- + * the lowest bit here.
- + *
- + * Warning:
- + * There was no datasheet for the AR8030 available so this is
- + * just a guess. But the AR8035 is listed as pin compatible
- + * to the AR8030 so there might be a good chance it works on
- + * the AR8030 too.
- + */
- + priv->clk_25m_reg &= AT8035_CLK_OUT_MASK;
- + priv->clk_25m_mask &= AT8035_CLK_OUT_MASK;
- + }
- +
- + return 0;
- +}
- +
- +/* AR8030 and AR8035 shared the same special mask for clk_25m */
- +static int at8035_probe(struct phy_device *phydev)
- +{
- + int ret;
- +
- + ret = at803x_probe(phydev);
- + if (ret)
- + return ret;
- +
- + return at8035_parse_dt(phydev);
- +}
- +
- static int qca83xx_config_init(struct phy_device *phydev)
- {
- u8 switch_revision;
- @@ -2107,7 +2129,7 @@ static struct phy_driver at803x_driver[]
- PHY_ID_MATCH_EXACT(ATH8035_PHY_ID),
- .name = "Qualcomm Atheros AR8035",
- .flags = PHY_POLL_CABLE_TEST,
- - .probe = at803x_probe,
- + .probe = at8035_probe,
- .config_aneg = at803x_config_aneg,
- .config_init = at803x_config_init,
- .soft_reset = genphy_soft_reset,
- @@ -2128,7 +2150,7 @@ static struct phy_driver at803x_driver[]
- .phy_id = ATH8030_PHY_ID,
- .name = "Qualcomm Atheros AR8030",
- .phy_id_mask = AT8030_PHY_ID_MASK,
- - .probe = at803x_probe,
- + .probe = at8035_probe,
- .config_init = at803x_config_init,
- .link_change_notify = at803x_link_change_notify,
- .set_wol = at803x_set_wol,
|