From: Wang Dongsheng <dongsheng.wang@hxt-semitech.com> To: andrew@lunn.ch, timur@kernel.org Cc: Wang Dongsheng <dongsheng.wang@hxt-semitech.com>, yu.zheng@hxt-semitech.com, f.fainelli@gmail.com, rjw@rjwysocki.net, linux-acpi@vger.kernel.org, netdev@vger.kernel.org Subject: [RFC PATCH 2/3] net: qcom/emac: split phy_config to mdio bus create and get phy device Date: Thu, 8 Nov 2018 15:22:34 +0800 [thread overview] Message-ID: <7964cfa6df086189a87613a93d6184ad596cca55.1541660504.git.dongsheng.wang@hxt-semitech.com> (raw) In-Reply-To: <cover.1541660504.git.dongsheng.wang@hxt-semitech.com> This patch separate emac_mdio_bus_create and emac_get_phydev from emac_phy_config, and do some codes clean. Signed-off-by: Wang Dongsheng <dongsheng.wang@hxt-semitech.com> --- drivers/net/ethernet/qualcomm/emac/emac-phy.c | 96 +++++++++++-------- 1 file changed, 56 insertions(+), 40 deletions(-) diff --git a/drivers/net/ethernet/qualcomm/emac/emac-phy.c b/drivers/net/ethernet/qualcomm/emac/emac-phy.c index 53dbf1e163a8..8289fdda4be7 100644 --- a/drivers/net/ethernet/qualcomm/emac/emac-phy.c +++ b/drivers/net/ethernet/qualcomm/emac/emac-phy.c @@ -96,15 +96,15 @@ static int emac_mdio_write(struct mii_bus *bus, int addr, int regnum, u16 val) return 0; } -/* Configure the MDIO bus and connect the external PHY */ -int emac_phy_config(struct platform_device *pdev, struct emac_adapter *adpt) +static int emac_mdio_bus_create(struct platform_device *pdev, + struct emac_adapter *adpt) { struct device_node *np = pdev->dev.of_node; struct mii_bus *mii_bus; int ret; /* Create the mii_bus object for talking to the MDIO bus */ - adpt->mii_bus = mii_bus = devm_mdiobus_alloc(&pdev->dev); + mii_bus = devm_mdiobus_alloc(&pdev->dev); if (!mii_bus) return -ENOMEM; @@ -115,50 +115,66 @@ int emac_phy_config(struct platform_device *pdev, struct emac_adapter *adpt) mii_bus->parent = &pdev->dev; mii_bus->priv = adpt; - if (has_acpi_companion(&pdev->dev)) { - u32 phy_addr; - - ret = mdiobus_register(mii_bus); - if (ret) { - dev_err(&pdev->dev, "could not register mdio bus\n"); - return ret; - } - ret = device_property_read_u32(&pdev->dev, "phy-channel", - &phy_addr); - if (ret) - /* If we can't read a valid phy address, then assume - * that there is only one phy on this mdio bus. - */ - adpt->phydev = phy_find_first(mii_bus); - else - adpt->phydev = mdiobus_get_phy(mii_bus, phy_addr); - - /* of_phy_find_device() claims a reference to the phydev, - * so we do that here manually as well. When the driver - * later unloads, it can unilaterally drop the reference - * without worrying about ACPI vs DT. - */ - if (adpt->phydev) - get_device(&adpt->phydev->mdio.dev); - } else { - struct device_node *phy_np; - - ret = of_mdiobus_register(mii_bus, np); - if (ret) { - dev_err(&pdev->dev, "could not register mdio bus\n"); - return ret; - } + ret = of_mdiobus_register(mii_bus, has_acpi_companion(&pdev->dev) ? + NULL : np); + if (ret) + dev_err(&pdev->dev, "Could not register mdio bus\n"); + + adpt->mii_bus = ret ? NULL : mii_bus; + return ret; +} + +static int emac_get_phydev(struct platform_device *pdev, + struct emac_adapter *adpt) +{ + struct device_node *np = pdev->dev.of_node; + struct mii_bus *bus = adpt->mii_bus; + struct device_node *phy_np; + struct phy_device *phydev; + u32 phy_addr; + int ret; + + if (!has_acpi_companion(&pdev->dev)) { phy_np = of_parse_phandle(np, "phy-handle", 0); adpt->phydev = of_phy_find_device(phy_np); of_node_put(phy_np); + return adpt->phydev ? 0 : -ENODEV; } - if (!adpt->phydev) { - dev_err(&pdev->dev, "could not find external phy\n"); - mdiobus_unregister(mii_bus); + ret = device_property_read_u32(&pdev->dev, "phy-channel", + &phy_addr); + /* If we can't read a valid phy address, then assume + * that there is only one phy on this mdio bus. + */ + phydev = ret ? phy_find_first(bus) : mdiobus_get_phy(bus, phy_addr); + if (!phydev) return -ENODEV; - } + /* of_phy_find_device() claims a reference to the phydev, + * so we do that here manually as well. When the driver + * later unloads, it can unilaterally drop the reference + * without worrying about ACPI vs DT. + */ + get_device(&phydev->mdio.dev); + adpt->phydev = phydev; return 0; } + +/* Configure the MDIO bus and connect the external PHY */ +int emac_phy_config(struct platform_device *pdev, struct emac_adapter *adpt) +{ + int ret; + + ret = emac_mdio_bus_create(pdev, adpt); + if (ret) + return ret; + + ret = emac_get_phydev(pdev, adpt); + if (ret) { + dev_err(&pdev->dev, "Could not find external phy\n"); + mdiobus_unregister(adpt->mii_bus); + } + + return ret; +} -- 2.18.0
WARNING: multiple messages have this Message-ID (diff)
From: Wang Dongsheng <dongsheng.wang@hxt-semitech.com> To: <andrew@lunn.ch>, <timur@kernel.org> Cc: Wang Dongsheng <dongsheng.wang@hxt-semitech.com>, <yu.zheng@hxt-semitech.com>, <f.fainelli@gmail.com>, <rjw@rjwysocki.net>, <linux-acpi@vger.kernel.org>, <netdev@vger.kernel.org> Subject: [RFC PATCH 2/3] net: qcom/emac: split phy_config to mdio bus create and get phy device Date: Thu, 8 Nov 2018 15:22:34 +0800 [thread overview] Message-ID: <7964cfa6df086189a87613a93d6184ad596cca55.1541660504.git.dongsheng.wang@hxt-semitech.com> (raw) In-Reply-To: <cover.1541660504.git.dongsheng.wang@hxt-semitech.com> This patch separate emac_mdio_bus_create and emac_get_phydev from emac_phy_config, and do some codes clean. Signed-off-by: Wang Dongsheng <dongsheng.wang@hxt-semitech.com> --- drivers/net/ethernet/qualcomm/emac/emac-phy.c | 96 +++++++++++-------- 1 file changed, 56 insertions(+), 40 deletions(-) diff --git a/drivers/net/ethernet/qualcomm/emac/emac-phy.c b/drivers/net/ethernet/qualcomm/emac/emac-phy.c index 53dbf1e163a8..8289fdda4be7 100644 --- a/drivers/net/ethernet/qualcomm/emac/emac-phy.c +++ b/drivers/net/ethernet/qualcomm/emac/emac-phy.c @@ -96,15 +96,15 @@ static int emac_mdio_write(struct mii_bus *bus, int addr, int regnum, u16 val) return 0; } -/* Configure the MDIO bus and connect the external PHY */ -int emac_phy_config(struct platform_device *pdev, struct emac_adapter *adpt) +static int emac_mdio_bus_create(struct platform_device *pdev, + struct emac_adapter *adpt) { struct device_node *np = pdev->dev.of_node; struct mii_bus *mii_bus; int ret; /* Create the mii_bus object for talking to the MDIO bus */ - adpt->mii_bus = mii_bus = devm_mdiobus_alloc(&pdev->dev); + mii_bus = devm_mdiobus_alloc(&pdev->dev); if (!mii_bus) return -ENOMEM; @@ -115,50 +115,66 @@ int emac_phy_config(struct platform_device *pdev, struct emac_adapter *adpt) mii_bus->parent = &pdev->dev; mii_bus->priv = adpt; - if (has_acpi_companion(&pdev->dev)) { - u32 phy_addr; - - ret = mdiobus_register(mii_bus); - if (ret) { - dev_err(&pdev->dev, "could not register mdio bus\n"); - return ret; - } - ret = device_property_read_u32(&pdev->dev, "phy-channel", - &phy_addr); - if (ret) - /* If we can't read a valid phy address, then assume - * that there is only one phy on this mdio bus. - */ - adpt->phydev = phy_find_first(mii_bus); - else - adpt->phydev = mdiobus_get_phy(mii_bus, phy_addr); - - /* of_phy_find_device() claims a reference to the phydev, - * so we do that here manually as well. When the driver - * later unloads, it can unilaterally drop the reference - * without worrying about ACPI vs DT. - */ - if (adpt->phydev) - get_device(&adpt->phydev->mdio.dev); - } else { - struct device_node *phy_np; - - ret = of_mdiobus_register(mii_bus, np); - if (ret) { - dev_err(&pdev->dev, "could not register mdio bus\n"); - return ret; - } + ret = of_mdiobus_register(mii_bus, has_acpi_companion(&pdev->dev) ? + NULL : np); + if (ret) + dev_err(&pdev->dev, "Could not register mdio bus\n"); + + adpt->mii_bus = ret ? NULL : mii_bus; + return ret; +} + +static int emac_get_phydev(struct platform_device *pdev, + struct emac_adapter *adpt) +{ + struct device_node *np = pdev->dev.of_node; + struct mii_bus *bus = adpt->mii_bus; + struct device_node *phy_np; + struct phy_device *phydev; + u32 phy_addr; + int ret; + + if (!has_acpi_companion(&pdev->dev)) { phy_np = of_parse_phandle(np, "phy-handle", 0); adpt->phydev = of_phy_find_device(phy_np); of_node_put(phy_np); + return adpt->phydev ? 0 : -ENODEV; } - if (!adpt->phydev) { - dev_err(&pdev->dev, "could not find external phy\n"); - mdiobus_unregister(mii_bus); + ret = device_property_read_u32(&pdev->dev, "phy-channel", + &phy_addr); + /* If we can't read a valid phy address, then assume + * that there is only one phy on this mdio bus. + */ + phydev = ret ? phy_find_first(bus) : mdiobus_get_phy(bus, phy_addr); + if (!phydev) return -ENODEV; - } + /* of_phy_find_device() claims a reference to the phydev, + * so we do that here manually as well. When the driver + * later unloads, it can unilaterally drop the reference + * without worrying about ACPI vs DT. + */ + get_device(&phydev->mdio.dev); + adpt->phydev = phydev; return 0; } + +/* Configure the MDIO bus and connect the external PHY */ +int emac_phy_config(struct platform_device *pdev, struct emac_adapter *adpt) +{ + int ret; + + ret = emac_mdio_bus_create(pdev, adpt); + if (ret) + return ret; + + ret = emac_get_phydev(pdev, adpt); + if (ret) { + dev_err(&pdev->dev, "Could not find external phy\n"); + mdiobus_unregister(adpt->mii_bus); + } + + return ret; +} -- 2.18.0
next prev parent reply other threads:[~2018-11-08 7:22 UTC|newest] Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-09-17 8:53 [PATCH v2 0/4] net: qcom/emac: add shared mdio bus support Wang Dongsheng 2018-09-17 8:53 ` Wang Dongsheng 2018-09-17 8:53 ` [PATCH v2 1/4] net: qcom/emac: split phy_config to mdio bus create and get phy device Wang Dongsheng 2018-09-17 8:53 ` [PATCH v2 2/4] dt-bindings: net: qcom: Add binding for shared mdio bus Wang Dongsheng 2018-09-17 8:53 ` Wang Dongsheng 2018-09-17 14:50 ` Andrew Lunn 2018-09-17 16:47 ` Wang, Dongsheng 2018-09-17 16:54 ` Florian Fainelli 2018-09-18 8:47 ` Wang, Dongsheng 2018-09-18 12:35 ` Andrew Lunn 2018-09-19 9:19 ` Wang, Dongsheng 2018-09-19 12:25 ` Andrew Lunn 2018-09-19 14:05 ` Timur Tabi 2018-09-19 15:20 ` Andrew Lunn 2018-09-20 13:42 ` Timur Tabi 2018-10-25 10:08 ` [PATCH v3 0/2] net: qcom/emac: add shared mdio bus support Wang Dongsheng 2018-10-25 10:08 ` [PATCH v3 1/2] net: qcom/emac: split phy_config to mdio bus create and get phy device Wang Dongsheng 2018-10-25 10:09 ` [PATCH v3 2/2] net: qcom/emac: add phy-handle support for ACPI Wang Dongsheng 2018-10-25 19:24 ` Andrew Lunn 2018-10-26 2:18 ` Wang, Dongsheng 2018-10-26 2:37 ` Timur Tabi 2018-10-26 3:04 ` Wang, Dongsheng 2018-10-26 13:13 ` Andrew Lunn 2018-10-29 2:39 ` Wang, Dongsheng 2018-10-29 12:40 ` Andrew Lunn 2018-10-30 5:15 ` Wang, Dongsheng 2018-11-08 7:21 ` [RFC PATCH 0/3] acpi: Add acpi mdio support code Wang Dongsheng 2018-11-08 7:21 ` Wang Dongsheng 2018-11-08 7:22 ` [RFC PATCH 1/3] " Wang Dongsheng 2018-11-08 7:22 ` Wang Dongsheng 2018-11-08 7:45 ` Rafael J. Wysocki 2018-11-08 7:55 ` Wang, Dongsheng 2018-11-08 8:01 ` Rafael J. Wysocki 2018-11-12 17:25 ` Andrew Lunn 2018-11-08 7:22 ` Wang Dongsheng [this message] 2018-11-08 7:22 ` [RFC PATCH 2/3] net: qcom/emac: split phy_config to mdio bus create and get phy device Wang Dongsheng 2018-11-08 7:22 ` [RFC PATCH 3/3] net: qcom/emac: add phy-handle support for ACPI Wang Dongsheng 2018-11-08 7:22 ` Wang Dongsheng 2018-11-08 23:23 ` [RFC PATCH 0/3] acpi: Add acpi mdio support code Andrew Lunn 2018-11-09 0:37 ` Timur Tabi 2018-11-10 9:10 ` Wang, Dongsheng 2018-11-12 17:20 ` Andrew Lunn 2018-11-13 7:36 ` Wang, Dongsheng 2018-11-12 2:52 ` Wang, Dongsheng 2018-09-20 1:33 ` [PATCH v2 2/4] dt-bindings: net: qcom: Add binding for shared mdio bus Wang, Dongsheng
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=7964cfa6df086189a87613a93d6184ad596cca55.1541660504.git.dongsheng.wang@hxt-semitech.com \ --to=dongsheng.wang@hxt-semitech.com \ --cc=andrew@lunn.ch \ --cc=f.fainelli@gmail.com \ --cc=linux-acpi@vger.kernel.org \ --cc=netdev@vger.kernel.org \ --cc=rjw@rjwysocki.net \ --cc=timur@kernel.org \ --cc=yu.zheng@hxt-semitech.com \ /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: linkBe 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.