lkml.org 
[lkml]   [2018]   [Nov]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6/6] can: m_can: Add support for transceiver as phy
    Date
    Add support for implementing the transceiver device as a phy. Instead
    of a child node, the max_bitrate information is obtained by getting a
    phy attribute. Fallback to the legacy API if no phy node is found.

    Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
    ---
    drivers/net/can/m_can/m_can.c | 23 ++++++++++++++++++++++-
    1 file changed, 22 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
    index 9b449400376b..ed6d84acea20 100644
    --- a/drivers/net/can/m_can/m_can.c
    +++ b/drivers/net/can/m_can/m_can.c
    @@ -26,6 +26,7 @@
    #include <linux/pm_runtime.h>
    #include <linux/iopoll.h>
    #include <linux/can/dev.h>
    +#include <linux/phy/phy.h>
    #include <linux/pinctrl/consumer.h>

    /* napi related */
    @@ -1582,6 +1583,7 @@ static int m_can_plat_probe(struct platform_device *pdev)
    struct device_node *np;
    u32 mram_config_vals[MRAM_CFG_LEN];
    u32 tx_fifo_size;
    + struct phy *transceiver;

    np = pdev->dev.of_node;

    @@ -1671,7 +1673,26 @@ static int m_can_plat_probe(struct platform_device *pdev)

    devm_can_led_init(dev);

    - of_can_transceiver(dev);
    + transceiver = devm_phy_optional_get(&pdev->dev, "can_transceiver");
    + if (IS_ERR(transceiver)) {
    + ret = PTR_ERR(transceiver);
    + dev_err(&pdev->dev, "Couldn't get phy. err=%d\n", ret);
    + return ret;
    + }
    +
    + if (!transceiver) {
    + dev_warn(&pdev->dev, "No transceiver phy. Falling back to legacy API\n");
    + of_can_transceiver(dev);
    + } else {
    + ret = phy_power_on(transceiver);
    + if (ret) {
    + dev_err(&pdev->dev, "phy_power_on err:%d\n", ret);
    + return ret;
    + }
    + priv->can.bitrate_max = phy_get_max_bitrate(transceiver);
    + if (!priv->can.bitrate_max)
    + dev_warn(&pdev->dev, "Invalid value for transceiver max bitrate. Ignoring bitrate limit\n");
    + }

    dev_info(&pdev->dev, "%s device registered (irq=%d, version=%d)\n",
    KBUILD_MODNAME, dev->irq, priv->version);
    --
    2.18.0
    \
     
     \ /
      Last update: 2018-11-02 20:25    [W:2.260 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site