# SPDX-License-Identifier: GPL-2.0-only
-menu "CAN Device Drivers"
+
+menuconfig CAN_DEV
+       tristate "CAN Device Drivers"
+       default y
+       help
+         Controller Area Network (CAN) is serial communications protocol up to
+         1Mbit/s for its original release (now known as Classical CAN) and up
+         to 8Mbit/s for the more recent CAN with Flexible Data-Rate
+         (CAN-FD). The CAN bus was originally mainly for automotive, but is now
+         widely used in marine (NMEA2000), industrial, and medical
+         applications. More information on the CAN network protocol family
+         PF_CAN is contained in <Documentation/networking/can.rst>.
+
+         This section contains all the CAN(-FD) device drivers including the
+         virtual ones. If you own such devices or plan to use the virtual CAN
+         interfaces to develop applications, say Y here.
+
+         To compile as a module, choose M here: the module will be called
+         can-dev.
+
+if CAN_DEV
 
 config CAN_VCAN
        tristate "Virtual Local CAN Interface (vcan)"
          also be built as a module. If so, the module will be called slcan.
 
 config CAN_NETLINK
-       tristate "CAN device drivers with Netlink support"
+       bool "CAN device drivers with Netlink support"
        default y
        help
          Enables the common framework for CAN device drivers. This is the
          as bittiming validation, support of CAN error states, device restart
          and others.
 
+         The additional features selected by this option will be added to the
+         can-dev module.
+
          This is required by all platform and hardware CAN drivers. If you
          plan to use such devices or if unsure, say Y.
 
          a problem with CAN support and want to see more of what is going
          on.
 
-endmenu
+endif #CAN_DEV
 
 # SPDX-License-Identifier: GPL-2.0
 
-obj-$(CONFIG_CAN_NETLINK) += can-dev.o
-can-dev-y                      += bittiming.o
-can-dev-y                      += dev.o
-can-dev-y                      += length.o
-can-dev-y                      += netlink.o
-can-dev-y                      += rx-offload.o
-can-dev-y                       += skb.o
+obj-$(CONFIG_CAN_DEV) += can-dev.o
+
+can-dev-y += skb.o
+
+can-dev-$(CONFIG_CAN_NETLINK) += bittiming.o
+can-dev-$(CONFIG_CAN_NETLINK) += dev.o
+can-dev-$(CONFIG_CAN_NETLINK) += length.o
+can-dev-$(CONFIG_CAN_NETLINK) += netlink.o
+can-dev-$(CONFIG_CAN_NETLINK) += rx-offload.o
 
  * Copyright (C) 2008-2009 Wolfgang Grandegger <wg@grandegger.com>
  */
 
-#include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/slab.h>
 #include <linux/netdevice.h>
 #include <linux/gpio/consumer.h>
 #include <linux/of.h>
 
-#define MOD_DESC "CAN device driver interface"
-
-MODULE_DESCRIPTION(MOD_DESC);
-MODULE_LICENSE("GPL v2");
-MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>");
-
 static void can_update_state_error_stats(struct net_device *dev,
                                         enum can_state new_state)
 {
 
        err = can_netlink_register();
        if (!err)
-               pr_info(MOD_DESC "\n");
+               pr_info("CAN device driver interface\n");
 
        return err;
 }
 
  */
 
 #include <linux/can/dev.h>
+#include <linux/module.h>
+
+#define MOD_DESC "CAN device driver interface"
+
+MODULE_DESCRIPTION(MOD_DESC);
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>");
 
 /* Local echo of CAN messages
  *