}
static bool
-verify_drm_device (struct udev_device *device)
+verify_drm_device (ply_device_manager_t *manager,
+ struct udev_device *device)
{
/*
* Simple-framebuffer devices driven by simpledrm lack information
if (!syspath_is_simpledrm (udev_device_get_syspath (device)))
return true; /* Not a SimpleDRM device */
- /*
- * With nomodeset, no native drivers will load, so SimpleDRM devices
- * should be used immediately.
- */
- if (ply_kernel_command_line_has_argument ("nomodeset"))
- return true;
-
- /*
- * Some firmwares leave the panel black at boot. Allow enabling SimpleDRM
- * use from the cmdline to show something to the user ASAP.
- */
- if (ply_kernel_command_line_has_argument ("plymouth.use-simpledrm"))
- return true;
-
- return false;
+ return manager->flags & PLY_DEVICE_MANAGER_FLAGS_USE_SIMPLEDRM;
}
static bool
ply_trace ("device subsystem is %s", subsystem);
if (strcmp (subsystem, SUBSYSTEM_DRM) == 0) {
- if (!manager->device_timeout_elapsed && !verify_drm_device (device)) {
+ if (!manager->device_timeout_elapsed &&
+ !verify_drm_device (manager, device)) {
ply_trace ("ignoring since we only handle SimpleDRM devices after timeout");
return false;
}
PLY_DEVICE_MANAGER_FLAGS_IGNORE_SERIAL_CONSOLES = 1 << 0,
PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV = 1 << 1,
PLY_DEVICE_MANAGER_FLAGS_SKIP_RENDERERS = 1 << 2,
- PLY_DEVICE_MANAGER_FLAGS_FORCE_FRAME_BUFFER = 1 << 3
+ PLY_DEVICE_MANAGER_FLAGS_FORCE_FRAME_BUFFER = 1 << 3,
+ PLY_DEVICE_MANAGER_FLAGS_USE_SIMPLEDRM = 1 << 4,
} ply_device_manager_flags_t;
typedef struct _ply_device_manager ply_device_manager_t;
double splash_delay;
double device_timeout;
int device_scale;
+ int use_simpledrm;
uint32_t no_boot_log : 1;
uint32_t showing_details : 1;
if (state->device_scale == -1)
state->device_scale = ply_key_file_get_ulong (key_file, "Daemon", "DeviceScale", -1);
+ if (state->use_simpledrm == -1)
+ state->use_simpledrm = ply_key_file_get_ulong (key_file, "Daemon", "UseSimpledrm", -1);
+
settings_loaded = true;
out:
free (splash_string);
if (state->device_scale == -1)
state->device_scale = ply_kernel_command_line_get_ulong ("plymouth.force-scale=", -1);
+
+ if (state->use_simpledrm == -1)
+ state->use_simpledrm = ply_kernel_command_line_get_ulong ("plymouth.use-simpledrm=", -1);
+
+ if (state->use_simpledrm == -1) {
+ if (ply_kernel_command_line_has_argument ("plymouth.use-simpledrm"))
+ state->use_simpledrm = 1;
+ else if (ply_kernel_command_line_has_argument ("nomodeset"))
+ state->use_simpledrm = 1;
+ }
}
static void
state.splash_delay = NAN;
state.device_timeout = NAN;
state.device_scale = -1;
+ state.use_simpledrm = -1;
ply_progress_load_cache (state.progress,
get_cache_file_for_mode (state.mode));
if (state.device_scale != -1)
ply_set_device_scale (state.device_scale);
+ if (state.use_simpledrm >= 1)
+ device_manager_flags |= PLY_DEVICE_MANAGER_FLAGS_USE_SIMPLEDRM;
+
load_devices (&state, device_manager_flags);
ply_trace ("entering event loop");