priv->open_time = jiffies;
 
-       clrbits8(®s->canctl1, MSCAN_LISTEN);
+       if (ctrlmode.flags & CAN_CTRLMODE_LISTENONLY)
+               setbits8(®s->canctl1, MSCAN_LISTEN);
+       else
+               clrbits8(®s->canctl1, MSCAN_LISTEN);
 
        ret = mscan_start(dev);
        if (ret)
        priv->can.bittiming_const = &mscan_bittiming_const;
        priv->can.do_set_bittiming = mscan_do_set_bittiming;
        priv->can.do_set_mode = mscan_do_set_mode;
-       priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES;
+       priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES |
+               CAN_CTRLMODE_LISTENONLY;
 
        for (i = 0; i < TX_QUEUE_SIZE; i++) {
                priv->tx_queue[i].id = i;