diff options
author | Álvaro Fernández Rojas <noltari@gmail.com> | 2021-02-18 18:04:33 +0100 |
---|---|---|
committer | Álvaro Fernández Rojas <noltari@gmail.com> | 2021-02-18 23:42:32 +0100 |
commit | f07e572f6447465d8938679533d604e402b0f066 (patch) | |
tree | cb333bd2a67e59e7c07659514850a0fd55fc825e /target/linux/bcm27xx/patches-5.4/950-0576-drm-vc4-hdmi-Add-container_of-macros-for-encoders-an.patch | |
parent | 5d3a6fd970619dfc55f8259035c3027d7613a2a6 (diff) | |
download | upstream-f07e572f6447465d8938679533d604e402b0f066.tar.gz upstream-f07e572f6447465d8938679533d604e402b0f066.tar.bz2 upstream-f07e572f6447465d8938679533d604e402b0f066.zip |
bcm27xx: import latest patches from the RPi foundation
bcm2708: boot tested on RPi B+ v1.2
bcm2709: boot tested on RPi 3B v1.2 and RPi 4B v1.1 4G
bcm2710: boot tested on RPi 3B v1.2
bcm2711: boot tested on RPi 4B v1.1 4G
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0576-drm-vc4-hdmi-Add-container_of-macros-for-encoders-an.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.4/950-0576-drm-vc4-hdmi-Add-container_of-macros-for-encoders-an.patch | 151 |
1 files changed, 0 insertions, 151 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0576-drm-vc4-hdmi-Add-container_of-macros-for-encoders-an.patch b/target/linux/bcm27xx/patches-5.4/950-0576-drm-vc4-hdmi-Add-container_of-macros-for-encoders-an.patch deleted file mode 100644 index 1d70ca851c..0000000000 --- a/target/linux/bcm27xx/patches-5.4/950-0576-drm-vc4-hdmi-Add-container_of-macros-for-encoders-an.patch +++ /dev/null @@ -1,151 +0,0 @@ -From fe19f02dbfd020df9b028cf2c580417c4edc31b3 Mon Sep 17 00:00:00 2001 -From: Maxime Ripard <maxime@cerno.tech> -Date: Mon, 6 Jan 2020 18:45:46 +0100 -Subject: [PATCH] drm/vc4: hdmi: Add container_of macros for encoders - and connectors - -Whenever the code needs to access the vc4_hdmi structure from a DRM -connector or encoder, it first accesses the drm_device associated to the -connector, then retrieve the drm_dev private data which gives it a -pointer to our vc4_dev, and will finally follow the vc4_hdmi pointer in -that structure. - -That will also give us some trouble when having multiple controllers, -but now that we have our encoder and connector structures that are part -of vc4_hdmi, we can simply call container_of on the DRM connector or -encoder and retrieve the vc4_hdmi structure directly. - -Signed-off-by: Maxime Ripard <maxime@cerno.tech> ---- - drivers/gpu/drm/vc4/vc4_hdmi.c | 41 ++++++++++------------------------ - drivers/gpu/drm/vc4/vc4_hdmi.h | 16 +++++++++++++ - 2 files changed, 28 insertions(+), 29 deletions(-) - ---- a/drivers/gpu/drm/vc4/vc4_hdmi.c -+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c -@@ -120,9 +120,7 @@ static int vc4_hdmi_debugfs_regs(struct - static enum drm_connector_status - vc4_hdmi_connector_detect(struct drm_connector *connector, bool force) - { -- struct drm_device *dev = connector->dev; -- struct vc4_dev *vc4 = to_vc4_dev(dev); -- struct vc4_hdmi *vc4_hdmi = vc4->hdmi; -+ struct vc4_hdmi *vc4_hdmi = connector_to_vc4_hdmi(connector); - - if (vc4_hdmi->hpd_gpio) { - if (gpio_get_value_cansleep(vc4_hdmi->hpd_gpio) ^ -@@ -149,17 +147,13 @@ static void vc4_hdmi_connector_destroy(s - - static int vc4_hdmi_connector_get_modes(struct drm_connector *connector) - { -- struct vc4_hdmi_connector *vc4_connector = -- to_vc4_hdmi_connector(connector); -- struct drm_encoder *encoder = vc4_connector->encoder; -- struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder); -- struct drm_device *dev = connector->dev; -- struct vc4_dev *vc4 = to_vc4_dev(dev); -+ struct vc4_hdmi *vc4_hdmi = connector_to_vc4_hdmi(connector); -+ struct vc4_hdmi_encoder *vc4_encoder = &vc4_hdmi->encoder; - int ret = 0; - struct edid *edid; - -- edid = drm_get_edid(connector, vc4->hdmi->ddc); -- cec_s_phys_addr_from_edid(vc4->hdmi->cec_adap, edid); -+ edid = drm_get_edid(connector, vc4_hdmi->ddc); -+ cec_s_phys_addr_from_edid(vc4_hdmi->cec_adap, edid); - if (!edid) - return -ENODEV; - -@@ -235,9 +229,7 @@ static const struct drm_encoder_funcs vc - static int vc4_hdmi_stop_packet(struct drm_encoder *encoder, - enum hdmi_infoframe_type type) - { -- struct drm_device *dev = encoder->dev; -- struct vc4_dev *vc4 = to_vc4_dev(dev); -- struct vc4_hdmi *vc4_hdmi = vc4->hdmi; -+ struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); - u32 packet_id = type - 0x80; - - HDMI_WRITE(VC4_HDMI_RAM_PACKET_CONFIG, -@@ -250,9 +242,7 @@ static int vc4_hdmi_stop_packet(struct d - static void vc4_hdmi_write_infoframe(struct drm_encoder *encoder, - union hdmi_infoframe *frame) - { -- struct drm_device *dev = encoder->dev; -- struct vc4_dev *vc4 = to_vc4_dev(dev); -- struct vc4_hdmi *vc4_hdmi = vc4->hdmi; -+ struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); - u32 packet_id = frame->any.type - 0x80; - u32 packet_reg = VC4_HDMI_RAM_PACKET(packet_id); - uint8_t buffer[VC4_HDMI_PACKET_STRIDE]; -@@ -298,9 +288,8 @@ static void vc4_hdmi_write_infoframe(str - - static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder) - { -+ struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); - struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder); -- struct vc4_dev *vc4 = encoder->dev->dev_private; -- struct vc4_hdmi *vc4_hdmi = vc4->hdmi; - struct drm_connector *connector = &vc4_hdmi->connector.base; - struct drm_connector_state *cstate = connector->state; - struct drm_crtc *crtc = encoder->crtc; -@@ -347,9 +336,7 @@ static void vc4_hdmi_set_spd_infoframe(s - - static void vc4_hdmi_set_audio_infoframe(struct drm_encoder *encoder) - { -- struct drm_device *drm = encoder->dev; -- struct vc4_dev *vc4 = drm->dev_private; -- struct vc4_hdmi *vc4_hdmi = vc4->hdmi; -+ struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); - union hdmi_infoframe frame; - int ret; - -@@ -371,9 +358,7 @@ static void vc4_hdmi_set_infoframes(stru - - static void vc4_hdmi_encoder_disable(struct drm_encoder *encoder) - { -- struct drm_device *dev = encoder->dev; -- struct vc4_dev *vc4 = to_vc4_dev(dev); -- struct vc4_hdmi *vc4_hdmi = vc4->hdmi; -+ struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); - int ret; - - HDMI_WRITE(VC4_HDMI_RAM_PACKET_CONFIG, 0); -@@ -392,10 +377,8 @@ static void vc4_hdmi_encoder_disable(str - static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder) - { - struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode; -- struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder); -- struct drm_device *dev = encoder->dev; -- struct vc4_dev *vc4 = to_vc4_dev(dev); -- struct vc4_hdmi *vc4_hdmi = vc4->hdmi; -+ struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); -+ struct vc4_hdmi_encoder *vc4_encoder = &vc4_hdmi->encoder; - bool debug_dump_regs = false; - bool hsync_pos = mode->flags & DRM_MODE_FLAG_PHSYNC; - bool vsync_pos = mode->flags & DRM_MODE_FLAG_PVSYNC; ---- a/drivers/gpu/drm/vc4/vc4_hdmi.h -+++ b/drivers/gpu/drm/vc4/vc4_hdmi.h -@@ -78,6 +78,22 @@ struct vc4_hdmi { - struct debugfs_regset32 hd_regset; - }; - -+static inline struct vc4_hdmi * -+connector_to_vc4_hdmi(struct drm_connector *connector) -+{ -+ struct vc4_hdmi_connector *_connector = to_vc4_hdmi_connector(connector); -+ -+ return container_of(_connector, struct vc4_hdmi, connector); -+} -+ -+static inline struct vc4_hdmi * -+encoder_to_vc4_hdmi(struct drm_encoder *encoder) -+{ -+ struct vc4_hdmi_encoder *_encoder = to_vc4_hdmi_encoder(encoder); -+ -+ return container_of(_encoder, struct vc4_hdmi, encoder); -+} -+ - #define HDMI_READ(offset) readl(vc4_hdmi->hdmicore_regs + offset) - #define HDMI_WRITE(offset, val) writel(val, vc4_hdmi->hdmicore_regs + offset) - #define HD_READ(offset) readl(vc4_hdmi->hd_regs + offset) |