bcm27xx: update patches from RPi foundation
[oweals/openwrt.git] / target / linux / bcm27xx / patches-5.4 / 950-0254-drm-vc4-Support-the-VEC-in-FKMS.patch
1 From 11a567f1e76ca017f1963027655454b56ab81875 Mon Sep 17 00:00:00 2001
2 From: Dave Stevenson <dave.stevenson@raspberrypi.org>
3 Date: Fri, 24 May 2019 17:59:01 +0100
4 Subject: [PATCH] drm/vc4: Support the VEC in FKMS
5
6 Extends the DPI/DSI support to also report the VEC output
7 which supports interlacing too.
8
9 Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
10 ---
11  drivers/gpu/drm/vc4/vc4_firmware_kms.c | 16 +++++++++++++++-
12  1 file changed, 15 insertions(+), 1 deletion(-)
13
14 --- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c
15 +++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c
16 @@ -128,6 +128,7 @@ struct set_timings {
17  #define  TIMINGS_FLAGS_H_SYNC_NEG      0
18  #define  TIMINGS_FLAGS_V_SYNC_POS      BIT(1)
19  #define  TIMINGS_FLAGS_V_SYNC_NEG      0
20 +#define  TIMINGS_FLAGS_INTERLACE       BIT(2)
21  
22  #define TIMINGS_FLAGS_ASPECT_MASK      GENMASK(7, 4)
23  #define TIMINGS_FLAGS_ASPECT_NONE      (0 << 4)
24 @@ -1043,6 +1044,12 @@ static int vc4_fkms_lcd_connector_get_mo
25                         fw_mode.flags |= DRM_MODE_FLAG_PVSYNC;
26                 else
27                         fw_mode.flags |= DRM_MODE_FLAG_NVSYNC;
28 +               if (mb.timings.flags & TIMINGS_FLAGS_V_SYNC_POS)
29 +                       fw_mode.flags |= DRM_MODE_FLAG_PVSYNC;
30 +               else
31 +                       fw_mode.flags |= DRM_MODE_FLAG_NVSYNC;
32 +               if (mb.timings.flags & TIMINGS_FLAGS_INTERLACE)
33 +                       fw_mode.flags |= DRM_MODE_FLAG_INTERLACE;
34  
35                 mode = drm_mode_duplicate(connector->dev,
36                                           &fw_mode);
37 @@ -1127,17 +1134,24 @@ vc4_fkms_connector_init(struct drm_devic
38                                    DRM_MODE_CONNECTOR_DSI);
39                 drm_connector_helper_add(connector,
40                                          &vc4_fkms_lcd_conn_helper_funcs);
41 +               connector->interlace_allowed = 0;
42 +       } else if (fkms_connector->display_type == DRM_MODE_ENCODER_TVDAC) {
43 +               drm_connector_init(dev, connector, &vc4_fkms_connector_funcs,
44 +                                  DRM_MODE_CONNECTOR_Composite);
45 +               drm_connector_helper_add(connector,
46 +                                        &vc4_fkms_lcd_conn_helper_funcs);
47 +               connector->interlace_allowed = 1;
48         } else {
49                 drm_connector_init(dev, connector, &vc4_fkms_connector_funcs,
50                                    DRM_MODE_CONNECTOR_HDMIA);
51                 drm_connector_helper_add(connector,
52                                          &vc4_fkms_connector_helper_funcs);
53 +               connector->interlace_allowed = 0;
54         }
55  
56         connector->polled = (DRM_CONNECTOR_POLL_CONNECT |
57                              DRM_CONNECTOR_POLL_DISCONNECT);
58  
59 -       connector->interlace_allowed = 0;
60         connector->doublescan_allowed = 0;
61  
62         drm_connector_attach_encoder(connector, encoder);