mirror of
https://gitlab.freedesktop.org/plymouth/plymouth.git
synced 2026-05-07 08:28:03 +02:00
Merge branch 'simpledrm-enumeration' into 'main'
ply-device-manager: Treat SimpleDRM drm devices as fbdev devices Closes #167 See merge request plymouth/plymouth!163
This commit is contained in:
commit
9ae5b7e760
3 changed files with 49 additions and 0 deletions
|
|
@ -405,6 +405,40 @@ on_drm_udev_add_or_change (ply_device_manager_t *manager,
|
|||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
verify_drm_device (struct udev_device *device)
|
||||
{
|
||||
const char *id_path;
|
||||
|
||||
/*
|
||||
* Simple-framebuffer devices driven by simpledrm lack information
|
||||
* like panel-rotation info and physical size, causing the splash
|
||||
* to briefly render on its side / without HiDPI scaling, switching
|
||||
* to the correct rendering when the native driver loads.
|
||||
* To avoid this treat simpledrm devices as fbdev devices and only
|
||||
* use them after the timeout.
|
||||
*/
|
||||
id_path = udev_device_get_property_value (device, "ID_PATH");
|
||||
if (!ply_string_has_prefix (id_path, "platform-simple-framebuffer"))
|
||||
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;
|
||||
}
|
||||
|
||||
static bool
|
||||
verify_add_or_change (ply_device_manager_t *manager,
|
||||
const char *action,
|
||||
|
|
@ -423,6 +457,11 @@ verify_add_or_change (ply_device_manager_t *manager,
|
|||
ply_trace ("ignoring since we're already using text splash for local console");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!verify_drm_device (device)) {
|
||||
ply_trace ("ignoring since we only handle SimpleDRM devices after timeout");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
ply_trace ("ignoring since we only handle subsystem %s devices after timeout", subsystem);
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -459,6 +459,15 @@ ply_free_string_array (char **array)
|
|||
free (array);
|
||||
}
|
||||
|
||||
bool
|
||||
ply_string_has_prefix (const char *str, const char *prefix)
|
||||
{
|
||||
if (str == NULL || prefix == NULL)
|
||||
return false;
|
||||
|
||||
return strncmp (str, prefix, strlen (prefix)) == 0;
|
||||
}
|
||||
|
||||
double
|
||||
ply_get_timestamp (void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ bool ply_fd_has_data (int fd);
|
|||
bool ply_set_fd_as_blocking (int fd);
|
||||
char **ply_copy_string_array (const char *const *array);
|
||||
void ply_free_string_array (char **array);
|
||||
bool ply_string_has_prefix (const char *str, const char *prefix);
|
||||
double ply_get_timestamp (void);
|
||||
|
||||
void ply_save_errno (void);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue