]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
can: slcan: add support for listen-only mode
authorDario Binacchi <dario.binacchi@amarulasolutions.com>
Thu, 28 Jul 2022 07:02:53 +0000 (09:02 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Thu, 28 Jul 2022 07:14:42 +0000 (09:14 +0200)
For non-legacy, i.e. ip based configuration, add support for listen-only
mode. If listen-only is requested send a listen-only ("L\r") command
instead of an open ("O\r") command to the adapter.

Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Link: https://lore.kernel.org/all/20220728070254.267974-7-dario.binacchi@amarulasolutions.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/slcan/slcan-core.c

index 740d82d68ca42f5b811f04fa4107cf090eb4b557..5c7dffc1ada25f8be3f978aa5fd61b7f4904f4b0 100644 (file)
@@ -727,10 +727,20 @@ static int slcan_netdev_open(struct net_device *dev)
                        }
                }
 
-               err = slcan_transmit_cmd(sl, "O\r");
-               if (err) {
-                       netdev_err(dev, "failed to send open command 'O\\r'\n");
-                       goto cmd_transmit_failed;
+               if (sl->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) {
+                       err = slcan_transmit_cmd(sl, "L\r");
+                       if (err) {
+                               netdev_err(dev,
+                                          "failed to send listen-only command 'L\\r'\n");
+                               goto cmd_transmit_failed;
+                       }
+               } else {
+                       err = slcan_transmit_cmd(sl, "O\r");
+                       if (err) {
+                               netdev_err(dev,
+                                          "failed to send open command 'O\\r'\n");
+                               goto cmd_transmit_failed;
+                       }
                }
        }
 
@@ -817,6 +827,7 @@ static int slcan_open(struct tty_struct *tty)
        /* Configure CAN metadata */
        sl->can.bitrate_const = slcan_bitrate_const;
        sl->can.bitrate_const_cnt = ARRAY_SIZE(slcan_bitrate_const);
+       sl->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY;
 
        /* Configure netdev interface */
        sl->dev = dev;