static struct list_head g_smscore_registry;
 static struct mutex g_smscore_registrylock;
 
-static int default_mode = 4;
+static int default_mode = DEVICE_MODE_NONE;
 
 module_param(default_mode, int, 0644);
 MODULE_PARM_DESC(default_mode, "default firmware id (device mode)");
  */
 int smscore_start_device(struct smscore_device_t *coredev)
 {
-       int rc = smscore_set_device_mode(
-                       coredev, smscore_registry_getmode(coredev->devpath));
+       int rc;
+       int board_id = smscore_get_board_id(coredev);
+       int mode = smscore_registry_getmode(coredev->devpath);
+
+       /* Device is initialized as DEVICE_MODE_NONE */
+       if (board_id != SMS_BOARD_UNKNOWN && mode == DEVICE_MODE_NONE)
+               mode = sms_get_board(board_id)->default_mode;
+
+       rc = smscore_set_device_mode(coredev, mode);
        if (rc < 0) {
                sms_info("set device mode faile , rc %d", rc);
                return rc;
 
        type = smscore_registry_gettype(coredev->devpath);
 
+       /* Prevent looking outside the smscore_fw_lkup table */
+       if (type <= SMS_UNKNOWN_TYPE || type >= SMS_NUM_OF_DEVICE_TYPES)
+               return NULL;
+       if (mode <= DEVICE_MODE_NONE || mode >= DEVICE_MODE_MAX)
+               return NULL;
+
        if ((board_id == SMS_BOARD_UNKNOWN) || (lookup == 1)) {
                sms_debug("trying to get fw name from lookup table mode %d type %d",
                          mode, type);
 
        sms_debug("set device mode to %d", mode);
        if (coredev->device_flags & SMS_DEVICE_FAMILY2) {
-               if (mode < DEVICE_MODE_DVBT || mode >= DEVICE_MODE_RAW_TUNER) {
+               if (mode <= DEVICE_MODE_NONE || mode >= DEVICE_MODE_MAX) {
                        sms_err("invalid mode specified %d", mode);
                        return -EINVAL;
                }
                                sms_err("device init failed, rc %d.", rc);
                }
        } else {
-               if (mode < DEVICE_MODE_DVBT || mode > DEVICE_MODE_MAX) {
+               if (mode <= DEVICE_MODE_NONE || mode >= DEVICE_MODE_MAX) {
                        sms_err("invalid mode specified %d", mode);
                        return -EINVAL;
                }