Commit 6e1a1282 authored by Russell King (Oracle)'s avatar Russell King (Oracle) Committed by Jakub Kicinski
Browse files

net: pcs: lynx: add lynx_pcs_create_fwnode()



Add a helper to create a lynx PCS from a fwnode handle.

Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent b3b984dc
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -353,6 +353,35 @@ struct phylink_pcs *lynx_pcs_create_mdiodev(struct mii_bus *bus, int addr)
}
EXPORT_SYMBOL(lynx_pcs_create_mdiodev);

struct phylink_pcs *lynx_pcs_create_fwnode(struct fwnode_handle *node)
{
	struct mdio_device *mdio;
	struct phylink_pcs *pcs;

	mdio = fwnode_mdio_find_device(node);
	if (!mdio)
		return ERR_PTR(-EPROBE_DEFER);

	pcs = lynx_pcs_create(mdio);

	/* Convert failure to create the PCS to an error pointer, so this
	 * function has a consistent return value strategy.
	 */
	if (!pcs)
		pcs = ERR_PTR(-ENOMEM);

	/* lynx_create() has taken a refcount on the mdiodev if it was
	 * successful. If lynx_create() fails, this will free the mdio
	 * device here. In any case, we don't need to hold our reference
	 * anymore, and putting it here will allow mdio_device_put() in
	 * lynx_destroy() to automatically free the mdio device.
	 */
	mdio_device_put(mdio);

	return pcs;
}
EXPORT_SYMBOL_GPL(lynx_pcs_create_fwnode);

void lynx_pcs_destroy(struct phylink_pcs *pcs)
{
	struct lynx_pcs *lynx = phylink_pcs_to_lynx(pcs);
+1 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@

struct phylink_pcs *lynx_pcs_create(struct mdio_device *mdio);
struct phylink_pcs *lynx_pcs_create_mdiodev(struct mii_bus *bus, int addr);
struct phylink_pcs *lynx_pcs_create_fwnode(struct fwnode_handle *node);

void lynx_pcs_destroy(struct phylink_pcs *pcs);