diff options
author | Stephan Gerhold <stephan@gerhold.net> | 2020-01-17 16:34:28 +0100 |
---|---|---|
committer | Maxime Ripard <maxime@cerno.tech> | 2020-02-12 18:32:54 +0100 |
commit | e6980a727154b793adb218fbc7b4d6af52a7e364 (patch) | |
tree | 58a26439682312847d2ffc5c7e690c94c78e57c2 /drivers/gpu/drm/drm_modes.c | |
parent | b50f4f940b736b63df1d8a0ddcd28f0a580233eb (diff) | |
download | lwn-e6980a727154b793adb218fbc7b4d6af52a7e364.tar.gz lwn-e6980a727154b793adb218fbc7b4d6af52a7e364.zip |
drm/modes: Make sure to parse valid rotation value from cmdline
A rotation value should have exactly one rotation angle.
At the moment there is no validation for this when parsing video=
parameters from the command line. This causes problems later on
when we try to combine the command line rotation with the panel
orientation.
To make sure that we generate a valid rotation value:
- Set DRM_MODE_ROTATE_0 by default (if no rotate= option is set)
- Validate that there is exactly one rotation angle set
(i.e. specifying the rotate= option multiple times is invalid)
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20200117153429.54700-2-stephan@gerhold.net
Diffstat (limited to 'drivers/gpu/drm/drm_modes.c')
-rw-r--r-- | drivers/gpu/drm/drm_modes.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index 10336b144c72..d4d64518e11b 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c @@ -1698,6 +1698,13 @@ static int drm_mode_parse_cmdline_options(const char *str, if (rotation && freestanding) return -EINVAL; + if (!(rotation & DRM_MODE_ROTATE_MASK)) + rotation |= DRM_MODE_ROTATE_0; + + /* Make sure there is exactly one rotation defined */ + if (!is_power_of_2(rotation & DRM_MODE_ROTATE_MASK)) + return -EINVAL; + mode->rotation_reflection = rotation; return 0; |