lkml.org 
[lkml]   [2022]   [Jul]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[net-next: PATCH v3 1/8] net: phy: fixed_phy: switch to fwnode_ API
    Date
    This patch allows to use fixed_phy driver and its helper
    functions without Device Tree dependency, by swtiching from
    of_ to fwnode_ API.

    Signed-off-by: Marcin Wojtas <mw@semihalf.com>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    ---
    include/linux/phy_fixed.h | 6 +--
    drivers/net/mdio/of_mdio.c | 2 +-
    drivers/net/phy/fixed_phy.c | 39 +++++++-------------
    3 files changed, 18 insertions(+), 29 deletions(-)

    diff --git a/include/linux/phy_fixed.h b/include/linux/phy_fixed.h
    index 52bc8e487ef7..e3a03494f218 100644
    --- a/include/linux/phy_fixed.h
    +++ b/include/linux/phy_fixed.h
    @@ -10,7 +10,7 @@ struct fixed_phy_status {
    int asym_pause;
    };

    -struct device_node;
    +struct fwnode_handle;
    struct gpio_desc;

    #if IS_ENABLED(CONFIG_FIXED_PHY)
    @@ -19,7 +19,7 @@ extern int fixed_phy_add(unsigned int irq, int phy_id,
    struct fixed_phy_status *status);
    extern struct phy_device *fixed_phy_register(unsigned int irq,
    struct fixed_phy_status *status,
    - struct device_node *np);
    + struct fwnode_handle *fwnode);

    extern struct phy_device *
    fixed_phy_register_with_gpiod(unsigned int irq,
    @@ -38,7 +38,7 @@ static inline int fixed_phy_add(unsigned int irq, int phy_id,
    }
    static inline struct phy_device *fixed_phy_register(unsigned int irq,
    struct fixed_phy_status *status,
    - struct device_node *np)
    + struct fwnode_handle *fwnode)
    {
    return ERR_PTR(-ENODEV);
    }
    diff --git a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c
    index 9e3c815a070f..d755fe1ecdda 100644
    --- a/drivers/net/mdio/of_mdio.c
    +++ b/drivers/net/mdio/of_mdio.c
    @@ -421,7 +421,7 @@ int of_phy_register_fixed_link(struct device_node *np)
    return -ENODEV;

    register_phy:
    - return PTR_ERR_OR_ZERO(fixed_phy_register(PHY_POLL, &status, np));
    + return PTR_ERR_OR_ZERO(fixed_phy_register(PHY_POLL, &status, of_fwnode_handle(np)));
    }
    EXPORT_SYMBOL(of_phy_register_fixed_link);

    diff --git a/drivers/net/phy/fixed_phy.c b/drivers/net/phy/fixed_phy.c
    index aef739c20ac4..e59d186f78e6 100644
    --- a/drivers/net/phy/fixed_phy.c
    +++ b/drivers/net/phy/fixed_phy.c
    @@ -15,9 +15,9 @@
    #include <linux/mii.h>
    #include <linux/phy.h>
    #include <linux/phy_fixed.h>
    +#include <linux/property.h>
    #include <linux/err.h>
    #include <linux/slab.h>
    -#include <linux/of.h>
    #include <linux/gpio/consumer.h>
    #include <linux/idr.h>
    #include <linux/netdevice.h>
    @@ -186,16 +186,12 @@ static void fixed_phy_del(int phy_addr)
    }
    }

    -#ifdef CONFIG_OF_GPIO
    -static struct gpio_desc *fixed_phy_get_gpiod(struct device_node *np)
    +static struct gpio_desc *fixed_phy_get_gpiod(struct fwnode_handle *fwnode)
    {
    - struct device_node *fixed_link_node;
    + struct fwnode_handle *fixed_link_node;
    struct gpio_desc *gpiod;

    - if (!np)
    - return NULL;
    -
    - fixed_link_node = of_get_child_by_name(np, "fixed-link");
    + fixed_link_node = fwnode_get_named_child_node(fwnode, "fixed-link");
    if (!fixed_link_node)
    return NULL;

    @@ -204,28 +200,21 @@ static struct gpio_desc *fixed_phy_get_gpiod(struct device_node *np)
    * Linux device associated with it, we simply have obtain
    * the GPIO descriptor from the device tree like this.
    */
    - gpiod = fwnode_gpiod_get_index(of_fwnode_handle(fixed_link_node),
    - "link", 0, GPIOD_IN, "mdio");
    + gpiod = fwnode_gpiod_get_index(fixed_link_node, "link", 0, GPIOD_IN, "mdio");
    if (IS_ERR(gpiod) && PTR_ERR(gpiod) != -EPROBE_DEFER) {
    if (PTR_ERR(gpiod) != -ENOENT)
    pr_err("error getting GPIO for fixed link %pOF, proceed without\n",
    fixed_link_node);
    gpiod = NULL;
    }
    - of_node_put(fixed_link_node);
    + fwnode_handle_put(fixed_link_node);

    return gpiod;
    }
    -#else
    -static struct gpio_desc *fixed_phy_get_gpiod(struct device_node *np)
    -{
    - return NULL;
    -}
    -#endif

    static struct phy_device *__fixed_phy_register(unsigned int irq,
    struct fixed_phy_status *status,
    - struct device_node *np,
    + struct fwnode_handle *fwnode,
    struct gpio_desc *gpiod)
    {
    struct fixed_mdio_bus *fmb = &platform_fmb;
    @@ -238,7 +227,7 @@ static struct phy_device *__fixed_phy_register(unsigned int irq,

    /* Check if we have a GPIO associated with this fixed phy */
    if (!gpiod) {
    - gpiod = fixed_phy_get_gpiod(np);
    + gpiod = fixed_phy_get_gpiod(fwnode);
    if (IS_ERR(gpiod))
    return ERR_CAST(gpiod);
    }
    @@ -269,8 +258,8 @@ static struct phy_device *__fixed_phy_register(unsigned int irq,
    phy->asym_pause = status->asym_pause;
    }

    - of_node_get(np);
    - phy->mdio.dev.of_node = np;
    + fwnode_handle_get(fwnode);
    + device_set_node(&phy->mdio.dev, fwnode);
    phy->is_pseudo_fixed_link = true;

    switch (status->speed) {
    @@ -299,7 +288,7 @@ static struct phy_device *__fixed_phy_register(unsigned int irq,
    ret = phy_device_register(phy);
    if (ret) {
    phy_device_free(phy);
    - of_node_put(np);
    + fwnode_handle_put(fwnode);
    fixed_phy_del(phy_addr);
    return ERR_PTR(ret);
    }
    @@ -309,9 +298,9 @@ static struct phy_device *__fixed_phy_register(unsigned int irq,

    struct phy_device *fixed_phy_register(unsigned int irq,
    struct fixed_phy_status *status,
    - struct device_node *np)
    + struct fwnode_handle *fwnode)
    {
    - return __fixed_phy_register(irq, status, np, NULL);
    + return __fixed_phy_register(irq, status, fwnode, NULL);
    }
    EXPORT_SYMBOL_GPL(fixed_phy_register);

    @@ -327,7 +316,7 @@ EXPORT_SYMBOL_GPL(fixed_phy_register_with_gpiod);
    void fixed_phy_unregister(struct phy_device *phy)
    {
    phy_device_remove(phy);
    - of_node_put(phy->mdio.dev.of_node);
    + fwnode_handle_put(dev_fwnode(&phy->mdio.dev));
    fixed_phy_del(phy->mdio.addr);
    }
    EXPORT_SYMBOL_GPL(fixed_phy_unregister);
    --
    2.29.0
    \
     
     \ /
      Last update: 2022-07-27 08:44    [W:5.851 / U:0.284 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site