From: Calvin Johnson <calvin.johnson@oss.nxp.com> To: Grant Likely <grant.likely@arm.com>, "Rafael J . Wysocki" <rafael@kernel.org>, Jeremy Linton <jeremy.linton@arm.com>, Andrew Lunn <andrew@lunn.ch>, Andy Shevchenko <andy.shevchenko@gmail.com>, Florian Fainelli <f.fainelli@gmail.com>, Russell King - ARM Linux admin <linux@armlinux.org.uk>, Cristi Sovaiala <cristian.sovaiala@nxp.com>, Florin Laurentiu Chiculita <florinlaurentiu.chiculita@nxp.com>, Ioana Ciornei <ioana.ciornei@nxp.com>, Madalin Bucur <madalin.bucur@oss.nxp.com>, Heikki Krogerus <heikki.krogerus@linux.intel.com>, Marcin Wojtas <mw@semihalf.com>, Pieter Jansen Van Vuuren <pieter.jansenvv@bamboosystems.io>, Jon <jon@solid-run.com> Cc: linux.cj@gmail.com, Laurentiu Tudor <laurentiu.tudor@nxp.com>, Diana Madalina Craciun <diana.craciun@nxp.com>, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, netdev@vger.kernel.org, Calvin Johnson <calvin.johnson@oss.nxp.com>, "David S. Miller" <davem@davemloft.net>, Heiner Kallweit <hkallweit1@gmail.com>, Jakub Kicinski <kuba@kernel.org> Subject: [net-next PATCH v2 02/14] net: phy: Introduce phy related fwnode functions Date: Tue, 15 Dec 2020 22:13:03 +0530 [thread overview] Message-ID: <20201215164315.3666-3-calvin.johnson@oss.nxp.com> (raw) In-Reply-To: <20201215164315.3666-1-calvin.johnson@oss.nxp.com> Define fwnode_phy_find_device() to iterate an mdiobus and find the phy device of the provided phy fwnode. Additionally define device_phy_find_device() to find phy device of provided device. Define fwnode_get_phy_node() to get phy_node using named reference. Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com> --- Changes in v2: - use reverse christmas tree ordering for local variables drivers/net/phy/phy_device.c | 64 ++++++++++++++++++++++++++++++++++++ include/linux/phy.h | 20 +++++++++++ 2 files changed, 84 insertions(+) diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 80c2e646c093..c153273606c1 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -9,6 +9,7 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#include <linux/acpi.h> #include <linux/bitmap.h> #include <linux/delay.h> #include <linux/errno.h> @@ -2829,6 +2830,69 @@ static bool phy_drv_supports_irq(struct phy_driver *phydrv) return phydrv->config_intr && phydrv->handle_interrupt; } +/** + * fwnode_phy_find_device - Find phy_device on the mdiobus for the provided + * phy_fwnode. + * @phy_fwnode: Pointer to the phy's fwnode. + * + * If successful, returns a pointer to the phy_device with the embedded + * struct device refcount incremented by one, or NULL on failure. + */ +struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode) +{ + struct mdio_device *mdiodev; + struct device *d; + + if (!phy_fwnode) + return NULL; + + d = bus_find_device_by_fwnode(&mdio_bus_type, phy_fwnode); + if (d) { + mdiodev = to_mdio_device(d); + if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY) + return to_phy_device(d); + put_device(d); + } + + return NULL; +} +EXPORT_SYMBOL(fwnode_phy_find_device); + +/** + * device_phy_find_device - For the given device, get the phy_device + * @dev: Pointer to the given device + * + * Refer return conditions of fwnode_phy_find_device(). + */ +struct phy_device *device_phy_find_device(struct device *dev) +{ + return fwnode_phy_find_device(dev_fwnode(dev)); +} +EXPORT_SYMBOL_GPL(device_phy_find_device); + +/** + * fwnode_get_phy_node - Get the phy_node using the named reference. + * @fwnode: Pointer to fwnode from which phy_node has to be obtained. + * + * Refer return conditions of fwnode_find_reference(). + * For ACPI, only "phy-handle" is supported. DT supports all the three + * named references to the phy node. + */ +struct fwnode_handle *fwnode_get_phy_node(struct fwnode_handle *fwnode) +{ + struct fwnode_handle *phy_node; + + /* Only phy-handle is used for ACPI */ + phy_node = fwnode_find_reference(fwnode, "phy-handle", 0); + if (is_acpi_node(fwnode) || !IS_ERR(phy_node)) + return phy_node; + phy_node = fwnode_find_reference(fwnode, "phy", 0); + if (IS_ERR(phy_node)) + phy_node = fwnode_find_reference(fwnode, "phy-device", 0); + return phy_node; +} +EXPORT_SYMBOL_GPL(fwnode_get_phy_node); + /** * phy_probe - probe and init a PHY device * @dev: device to probe and init diff --git a/include/linux/phy.h b/include/linux/phy.h index 381a95732b6a..7790a9a56d0f 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -1341,10 +1341,30 @@ struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id, bool is_c45, struct phy_c45_device_ids *c45_ids); #if IS_ENABLED(CONFIG_PHYLIB) +struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode); +struct phy_device *device_phy_find_device(struct device *dev); +struct fwnode_handle *fwnode_get_phy_node(struct fwnode_handle *fwnode); struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45); int phy_device_register(struct phy_device *phy); void phy_device_free(struct phy_device *phydev); #else +static inline +struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode) +{ + return NULL; +} + +static inline struct phy_device *device_phy_find_device(struct device *dev) +{ + return NULL; +} + +static inline +struct fwnode_handle *fwnode_get_phy_node(struct fwnode_handle *fwnode) +{ + return NULL; +} + static inline struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45) { -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Calvin Johnson <calvin.johnson@oss.nxp.com> To: Grant Likely <grant.likely@arm.com>, "Rafael J . Wysocki" <rafael@kernel.org>, Jeremy Linton <jeremy.linton@arm.com>, Andrew Lunn <andrew@lunn.ch>, Andy Shevchenko <andy.shevchenko@gmail.com>, Florian Fainelli <f.fainelli@gmail.com>, Russell King - ARM Linux admin <linux@armlinux.org.uk>, Cristi Sovaiala <cristian.sovaiala@nxp.com>, Florin Laurentiu Chiculita <florinlaurentiu.chiculita@nxp.com>, Ioana Ciornei <ioana.ciornei@nxp.com>, Madalin Bucur <madalin.bucur@oss.nxp.com>, Heikki Krogerus <heikki.krogerus@linux.intel.com>, Marcin Wojtas <mw@semihalf.com>, Pieter Jansen Van Vuuren <pieter.jansenvv@bamboosystems.io>, Jon <jon@solid-run.com> Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Calvin Johnson <calvin.johnson@oss.nxp.com>, Diana Madalina Craciun <diana.craciun@nxp.com>, linux-acpi@vger.kernel.org, linux.cj@gmail.com, Jakub Kicinski <kuba@kernel.org>, Heiner Kallweit <hkallweit1@gmail.com>, "David S. Miller" <davem@davemloft.net>, linux-arm-kernel@lists.infradead.org, Laurentiu Tudor <laurentiu.tudor@nxp.com> Subject: [net-next PATCH v2 02/14] net: phy: Introduce phy related fwnode functions Date: Tue, 15 Dec 2020 22:13:03 +0530 [thread overview] Message-ID: <20201215164315.3666-3-calvin.johnson@oss.nxp.com> (raw) In-Reply-To: <20201215164315.3666-1-calvin.johnson@oss.nxp.com> Define fwnode_phy_find_device() to iterate an mdiobus and find the phy device of the provided phy fwnode. Additionally define device_phy_find_device() to find phy device of provided device. Define fwnode_get_phy_node() to get phy_node using named reference. Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com> --- Changes in v2: - use reverse christmas tree ordering for local variables drivers/net/phy/phy_device.c | 64 ++++++++++++++++++++++++++++++++++++ include/linux/phy.h | 20 +++++++++++ 2 files changed, 84 insertions(+) diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 80c2e646c093..c153273606c1 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -9,6 +9,7 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#include <linux/acpi.h> #include <linux/bitmap.h> #include <linux/delay.h> #include <linux/errno.h> @@ -2829,6 +2830,69 @@ static bool phy_drv_supports_irq(struct phy_driver *phydrv) return phydrv->config_intr && phydrv->handle_interrupt; } +/** + * fwnode_phy_find_device - Find phy_device on the mdiobus for the provided + * phy_fwnode. + * @phy_fwnode: Pointer to the phy's fwnode. + * + * If successful, returns a pointer to the phy_device with the embedded + * struct device refcount incremented by one, or NULL on failure. + */ +struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode) +{ + struct mdio_device *mdiodev; + struct device *d; + + if (!phy_fwnode) + return NULL; + + d = bus_find_device_by_fwnode(&mdio_bus_type, phy_fwnode); + if (d) { + mdiodev = to_mdio_device(d); + if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY) + return to_phy_device(d); + put_device(d); + } + + return NULL; +} +EXPORT_SYMBOL(fwnode_phy_find_device); + +/** + * device_phy_find_device - For the given device, get the phy_device + * @dev: Pointer to the given device + * + * Refer return conditions of fwnode_phy_find_device(). + */ +struct phy_device *device_phy_find_device(struct device *dev) +{ + return fwnode_phy_find_device(dev_fwnode(dev)); +} +EXPORT_SYMBOL_GPL(device_phy_find_device); + +/** + * fwnode_get_phy_node - Get the phy_node using the named reference. + * @fwnode: Pointer to fwnode from which phy_node has to be obtained. + * + * Refer return conditions of fwnode_find_reference(). + * For ACPI, only "phy-handle" is supported. DT supports all the three + * named references to the phy node. + */ +struct fwnode_handle *fwnode_get_phy_node(struct fwnode_handle *fwnode) +{ + struct fwnode_handle *phy_node; + + /* Only phy-handle is used for ACPI */ + phy_node = fwnode_find_reference(fwnode, "phy-handle", 0); + if (is_acpi_node(fwnode) || !IS_ERR(phy_node)) + return phy_node; + phy_node = fwnode_find_reference(fwnode, "phy", 0); + if (IS_ERR(phy_node)) + phy_node = fwnode_find_reference(fwnode, "phy-device", 0); + return phy_node; +} +EXPORT_SYMBOL_GPL(fwnode_get_phy_node); + /** * phy_probe - probe and init a PHY device * @dev: device to probe and init diff --git a/include/linux/phy.h b/include/linux/phy.h index 381a95732b6a..7790a9a56d0f 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -1341,10 +1341,30 @@ struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id, bool is_c45, struct phy_c45_device_ids *c45_ids); #if IS_ENABLED(CONFIG_PHYLIB) +struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode); +struct phy_device *device_phy_find_device(struct device *dev); +struct fwnode_handle *fwnode_get_phy_node(struct fwnode_handle *fwnode); struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45); int phy_device_register(struct phy_device *phy); void phy_device_free(struct phy_device *phydev); #else +static inline +struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode) +{ + return NULL; +} + +static inline struct phy_device *device_phy_find_device(struct device *dev) +{ + return NULL; +} + +static inline +struct fwnode_handle *fwnode_get_phy_node(struct fwnode_handle *fwnode) +{ + return NULL; +} + static inline struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45) { -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-12-15 17:00 UTC|newest] Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-12-15 16:43 [net-next PATCH v2 00/14] ACPI support for dpaa2 driver Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson 2020-12-15 16:43 ` [net-next PATCH v2 01/14] Documentation: ACPI: DSD: Document MDIO PHY Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson [this message] 2020-12-15 16:43 ` [net-next PATCH v2 02/14] net: phy: Introduce phy related fwnode functions Calvin Johnson 2020-12-15 17:23 ` Andy Shevchenko 2020-12-15 17:23 ` Andy Shevchenko 2020-12-17 7:32 ` Calvin Johnson 2020-12-17 7:32 ` Calvin Johnson 2020-12-15 16:43 ` [net-next PATCH v2 03/14] of: mdio: Refactor of_phy_find_device() Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson 2020-12-15 16:43 ` [net-next PATCH v2 04/14] net: phy: Introduce fwnode_get_phy_id() Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson 2020-12-15 17:28 ` Andy Shevchenko 2020-12-15 17:28 ` Andy Shevchenko 2020-12-17 8:28 ` Calvin Johnson 2020-12-17 8:28 ` Calvin Johnson 2020-12-17 9:44 ` Andy Shevchenko 2020-12-17 9:44 ` Andy Shevchenko 2020-12-15 16:43 ` [net-next PATCH v2 05/14] of: mdio: Refactor of_get_phy_id() Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson 2020-12-15 16:43 ` [net-next PATCH v2 06/14] net: mdiobus: Introduce fwnode_mdiobus_register_phy() Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson 2020-12-15 17:33 ` Andy Shevchenko 2020-12-15 17:33 ` Andy Shevchenko 2020-12-18 5:34 ` Calvin Johnson 2020-12-18 5:34 ` Calvin Johnson 2020-12-18 15:35 ` Andy Shevchenko 2020-12-18 15:35 ` Andy Shevchenko 2020-12-15 16:43 ` [net-next PATCH v2 07/14] of: mdio: Refactor of_mdiobus_register_phy() Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson 2020-12-15 16:43 ` [net-next PATCH v2 08/14] net: mdiobus: Introduce fwnode_mdiobus_register() Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson 2020-12-15 17:53 ` Andy Shevchenko 2020-12-15 17:53 ` Andy Shevchenko 2020-12-18 5:40 ` Calvin Johnson 2020-12-18 5:40 ` Calvin Johnson 2020-12-18 15:36 ` Andy Shevchenko 2020-12-18 15:36 ` Andy Shevchenko 2020-12-15 19:26 ` kernel test robot 2020-12-15 16:43 ` [net-next PATCH v2 09/14] net/fsl: Use fwnode_mdiobus_register() Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson 2020-12-15 17:55 ` Andy Shevchenko 2020-12-15 17:55 ` Andy Shevchenko 2020-12-18 5:48 ` Calvin Johnson 2020-12-18 5:48 ` Calvin Johnson 2020-12-15 16:43 ` [net-next PATCH v2 10/14] device property: Introduce fwnode_get_id() Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson 2020-12-15 17:00 ` Laurent Pinchart 2020-12-15 17:00 ` Laurent Pinchart 2020-12-15 17:49 ` Andy Shevchenko 2020-12-15 17:49 ` Andy Shevchenko 2020-12-18 6:09 ` Calvin Johnson 2020-12-18 6:09 ` Calvin Johnson 2020-12-15 17:45 ` Andy Shevchenko 2020-12-15 17:45 ` Andy Shevchenko 2020-12-18 6:12 ` Calvin Johnson 2020-12-18 6:12 ` Calvin Johnson 2020-12-15 19:26 ` kernel test robot 2020-12-15 16:43 ` [net-next PATCH v2 11/14] phylink: introduce phylink_fwnode_phy_connect() Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson 2020-12-15 16:43 ` [net-next PATCH v2 12/14] net: phylink: Refactor phylink_of_phy_connect() Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson 2020-12-15 16:43 ` [net-next PATCH v2 13/14] net: phy: Introduce fwnode_mdio_find_device() Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson 2020-12-15 16:43 ` [net-next PATCH v2 14/14] net: dpaa2-mac: Add ACPI support for DPAA2 MAC driver Calvin Johnson 2020-12-15 16:43 ` Calvin Johnson
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=20201215164315.3666-3-calvin.johnson@oss.nxp.com \ --to=calvin.johnson@oss.nxp.com \ --cc=andrew@lunn.ch \ --cc=andy.shevchenko@gmail.com \ --cc=cristian.sovaiala@nxp.com \ --cc=davem@davemloft.net \ --cc=diana.craciun@nxp.com \ --cc=f.fainelli@gmail.com \ --cc=florinlaurentiu.chiculita@nxp.com \ --cc=grant.likely@arm.com \ --cc=heikki.krogerus@linux.intel.com \ --cc=hkallweit1@gmail.com \ --cc=ioana.ciornei@nxp.com \ --cc=jeremy.linton@arm.com \ --cc=jon@solid-run.com \ --cc=kuba@kernel.org \ --cc=laurentiu.tudor@nxp.com \ --cc=linux-acpi@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux.cj@gmail.com \ --cc=linux@armlinux.org.uk \ --cc=madalin.bucur@oss.nxp.com \ --cc=mw@semihalf.com \ --cc=netdev@vger.kernel.org \ --cc=pieter.jansenvv@bamboosystems.io \ --cc=rafael@kernel.org \ /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.