MLK-16879-2 can: flexcan: allow user to disable can fd mode from device tree
authorDong Aisheng <aisheng.dong@nxp.com>
Fri, 15 Dec 2017 10:38:15 +0000 (18:38 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Tue, 20 Mar 2018 19:51:47 +0000 (14:51 -0500)
Normally CAN FD capable device must work on FD mode as it has different
statically claimed bittiming capability.
This patch provides users to disable CAN FD capability if users want
to only work at normal mode.

Acked-by: Jason Liu <jason.hui.liu@nxp.com>
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
Documentation/devicetree/bindings/net/can/fsl-flexcan.txt
drivers/net/can/flexcan.c

index 00ff7d6..797e5ed 100644 (file)
@@ -27,6 +27,7 @@ Optional properties:
 - trx_en_gpio : enable gpio
 - trx_stby_gpio : standby gpio
 - trx_nerr_gpio : NERR gpio
+- disable-fd-mode : disable CAN FD mode support. Valid since i.MX8 series.
 
 Example:
 
index 90b6c69..278f53c 100644 (file)
@@ -1518,6 +1518,7 @@ static int flexcan_probe(struct platform_device *pdev)
 {
        const struct of_device_id *of_id;
        const struct flexcan_devtype_data *devtype_data;
+       struct device_node *np = pdev->dev.of_node;
        struct net_device *dev;
        struct flexcan_priv *priv;
        struct regulator *reg_xceiver;
@@ -1613,13 +1614,15 @@ static int flexcan_probe(struct platform_device *pdev)
        }
 
        if (priv->devtype_data->quirks & FLEXCAN_QUIRK_SUPPORT_CANFD) {
-               priv->can.ctrlmode_supported |= CAN_CTRLMODE_FD;
-               priv->can.bittiming_const = &flexcan_fd_bittiming_const;
-               if (!(priv->devtype_data->quirks &
-                     FLEXCAN_QUIRK_DISABLE_RX_FIFO)) {
-                       dev_err(&pdev->dev, "canfd mode can't work on fifo mode\n");
-                       err = -EINVAL;
-                       goto failed_register;
+               if (!(of_find_property(np, "disable-fd-mode", NULL))) {
+                       priv->can.ctrlmode_supported |= CAN_CTRLMODE_FD;
+                       priv->can.bittiming_const = &flexcan_fd_bittiming_const;
+                       if (!(priv->devtype_data->quirks &
+                             FLEXCAN_QUIRK_DISABLE_RX_FIFO)) {
+                               dev_err(&pdev->dev, "canfd mode can't work on fifo mode\n");
+                               err = -EINVAL;
+                               goto failed_register;
+                       }
                }
        }