aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.4/950-0566-drm-vc4-hdmi-rework-connectors-and-encoders.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0566-drm-vc4-hdmi-rework-connectors-and-encoders.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.4/950-0566-drm-vc4-hdmi-rework-connectors-and-encoders.patch348
1 files changed, 0 insertions, 348 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0566-drm-vc4-hdmi-rework-connectors-and-encoders.patch b/target/linux/bcm27xx/patches-5.4/950-0566-drm-vc4-hdmi-rework-connectors-and-encoders.patch
deleted file mode 100644
index ebe6432913..0000000000
--- a/target/linux/bcm27xx/patches-5.4/950-0566-drm-vc4-hdmi-rework-connectors-and-encoders.patch
+++ /dev/null
@@ -1,348 +0,0 @@
-From 50e7e810cf403c4b217c68c8ae2544d16f8063d1 Mon Sep 17 00:00:00 2001
-From: Maxime Ripard <maxime@cerno.tech>
-Date: Mon, 6 Jan 2020 17:17:29 +0100
-Subject: [PATCH] drm/vc4: hdmi: rework connectors and encoders
-
-the vc4_hdmi driver has some custom structures to hold the data it needs to
-associate with the drm_encoder and drm_connector structures.
-
-However, it allocates them separately from the vc4_hdmi structure which
-makes it more complicated than it needs to be.
-
-Move those structures to be contained by vc4_hdmi and update the code
-accordingly.
-
-Signed-off-by: Maxime Ripard <maxime@cerno.tech>
----
- drivers/gpu/drm/vc4/vc4_hdmi.c | 84 ++++++++++++++++------------------
- drivers/gpu/drm/vc4/vc4_hdmi.h | 64 +++++++++++++-------------
- 2 files changed, 71 insertions(+), 77 deletions(-)
-
---- a/drivers/gpu/drm/vc4/vc4_hdmi.c
-+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -190,19 +190,14 @@ static const struct drm_connector_helper
- .get_modes = vc4_hdmi_connector_get_modes,
- };
-
--static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev,
-- struct drm_encoder *encoder)
-+static int vc4_hdmi_connector_init(struct drm_device *dev,
-+ struct vc4_hdmi *vc4_hdmi)
- {
-- struct drm_connector *connector;
-- struct vc4_hdmi_connector *hdmi_connector;
-+ struct vc4_hdmi_connector *hdmi_connector = &vc4_hdmi->connector;
-+ struct drm_connector *connector = &hdmi_connector->base;
-+ struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
- int ret;
-
-- hdmi_connector = devm_kzalloc(dev->dev, sizeof(*hdmi_connector),
-- GFP_KERNEL);
-- if (!hdmi_connector)
-- return ERR_PTR(-ENOMEM);
-- connector = &hdmi_connector->base;
--
- hdmi_connector->encoder = encoder;
-
- drm_connector_init(dev, connector, &vc4_hdmi_connector_funcs,
-@@ -212,7 +207,7 @@ static struct drm_connector *vc4_hdmi_co
- /* Create and attach TV margin props to this connector. */
- ret = drm_mode_create_tv_margin_properties(dev);
- if (ret)
-- return ERR_PTR(ret);
-+ return ret;
-
- drm_connector_attach_tv_margin_properties(connector);
-
-@@ -224,7 +219,7 @@ static struct drm_connector *vc4_hdmi_co
-
- drm_connector_attach_encoder(connector, encoder);
-
-- return connector;
-+ return 0;
- }
-
- static void vc4_hdmi_encoder_destroy(struct drm_encoder *encoder)
-@@ -303,21 +298,22 @@ static void vc4_hdmi_set_avi_infoframe(s
- struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
- struct vc4_dev *vc4 = encoder->dev->dev_private;
- struct vc4_hdmi *hdmi = vc4->hdmi;
-- struct drm_connector_state *cstate = hdmi->connector->state;
-+ struct drm_connector *connector = &hdmi->connector.base;
-+ struct drm_connector_state *cstate = connector->state;
- struct drm_crtc *crtc = encoder->crtc;
- const struct drm_display_mode *mode = &crtc->state->adjusted_mode;
- union hdmi_infoframe frame;
- int ret;
-
- ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
-- hdmi->connector, mode);
-+ connector, mode);
- if (ret < 0) {
- DRM_ERROR("couldn't fill AVI infoframe\n");
- return;
- }
-
- drm_hdmi_avi_infoframe_quant_range(&frame.avi,
-- hdmi->connector, mode,
-+ connector, mode,
- vc4_encoder->limited_rgb_range ?
- HDMI_QUANTIZATION_RANGE_LIMITED :
- HDMI_QUANTIZATION_RANGE_FULL);
-@@ -636,7 +632,8 @@ static const struct drm_encoder_helper_f
- /* HDMI audio codec callbacks */
- static void vc4_hdmi_audio_set_mai_clock(struct vc4_hdmi *hdmi)
- {
-- struct drm_device *drm = hdmi->encoder->dev;
-+ struct drm_encoder *encoder = &hdmi->encoder.base.base;
-+ struct drm_device *drm = encoder->dev;
- struct vc4_dev *vc4 = to_vc4_dev(drm);
- u32 hsm_clock = clk_get_rate(hdmi->hsm_clock);
- unsigned long n, m;
-@@ -655,7 +652,7 @@ static void vc4_hdmi_audio_set_mai_clock
-
- static void vc4_hdmi_set_n_cts(struct vc4_hdmi *hdmi)
- {
-- struct drm_encoder *encoder = hdmi->encoder;
-+ struct drm_encoder *encoder = &hdmi->encoder.base.base;
- struct drm_crtc *crtc = encoder->crtc;
- struct drm_device *drm = encoder->dev;
- struct vc4_dev *vc4 = to_vc4_dev(drm);
-@@ -693,7 +690,8 @@ static int vc4_hdmi_audio_startup(struct
- struct snd_soc_dai *dai)
- {
- struct vc4_hdmi *hdmi = dai_to_hdmi(dai);
-- struct drm_encoder *encoder = hdmi->encoder;
-+ struct drm_encoder *encoder = &hdmi->encoder.base.base;
-+ struct drm_connector *connector = &hdmi->connector.base;
- struct vc4_dev *vc4 = to_vc4_dev(encoder->dev);
- int ret;
-
-@@ -710,8 +708,7 @@ static int vc4_hdmi_audio_startup(struct
- VC4_HDMI_RAM_PACKET_ENABLE))
- return -ENODEV;
-
-- ret = snd_pcm_hw_constraint_eld(substream->runtime,
-- hdmi->connector->eld);
-+ ret = snd_pcm_hw_constraint_eld(substream->runtime, connector->eld);
- if (ret)
- return ret;
-
-@@ -725,7 +722,7 @@ static int vc4_hdmi_audio_set_fmt(struct
-
- static void vc4_hdmi_audio_reset(struct vc4_hdmi *hdmi)
- {
-- struct drm_encoder *encoder = hdmi->encoder;
-+ struct drm_encoder *encoder = &hdmi->encoder.base.base;
- struct drm_device *drm = encoder->dev;
- struct device *dev = &hdmi->pdev->dev;
- struct vc4_dev *vc4 = to_vc4_dev(drm);
-@@ -759,7 +756,7 @@ static int vc4_hdmi_audio_hw_params(stru
- struct snd_soc_dai *dai)
- {
- struct vc4_hdmi *hdmi = dai_to_hdmi(dai);
-- struct drm_encoder *encoder = hdmi->encoder;
-+ struct drm_encoder *encoder = &hdmi->encoder.base.base;
- struct drm_device *drm = encoder->dev;
- struct device *dev = &hdmi->pdev->dev;
- struct vc4_dev *vc4 = to_vc4_dev(drm);
-@@ -832,7 +829,7 @@ static int vc4_hdmi_audio_trigger(struct
- struct snd_soc_dai *dai)
- {
- struct vc4_hdmi *hdmi = dai_to_hdmi(dai);
-- struct drm_encoder *encoder = hdmi->encoder;
-+ struct drm_encoder *encoder = &hdmi->encoder.base.base;
- struct drm_device *drm = encoder->dev;
- struct vc4_dev *vc4 = to_vc4_dev(drm);
-
-@@ -876,9 +873,10 @@ static int vc4_hdmi_audio_eld_ctl_info(s
- {
- struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
- struct vc4_hdmi *hdmi = snd_component_to_hdmi(component);
-+ struct drm_connector *connector = &hdmi->connector.base;
-
- uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
-- uinfo->count = sizeof(hdmi->connector->eld);
-+ uinfo->count = sizeof(connector->eld);
-
- return 0;
- }
-@@ -888,9 +886,10 @@ static int vc4_hdmi_audio_eld_ctl_get(st
- {
- struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
- struct vc4_hdmi *hdmi = snd_component_to_hdmi(component);
-+ struct drm_connector *connector = &hdmi->connector.base;
-
-- memcpy(ucontrol->value.bytes.data, hdmi->connector->eld,
-- sizeof(hdmi->connector->eld));
-+ memcpy(ucontrol->value.bytes.data, connector->eld,
-+ sizeof(connector->eld));
-
- return 0;
- }
-@@ -1231,7 +1230,7 @@ static int vc4_hdmi_bind(struct device *
- struct drm_device *drm = dev_get_drvdata(master);
- struct vc4_dev *vc4 = drm->dev_private;
- struct vc4_hdmi *hdmi;
-- struct vc4_hdmi_encoder *vc4_hdmi_encoder;
-+ struct drm_encoder *encoder;
- struct device_node *ddc_node;
- u32 value;
- int ret;
-@@ -1240,14 +1239,10 @@ static int vc4_hdmi_bind(struct device *
- if (!hdmi)
- return -ENOMEM;
-
-- vc4_hdmi_encoder = devm_kzalloc(dev, sizeof(*vc4_hdmi_encoder),
-- GFP_KERNEL);
-- if (!vc4_hdmi_encoder)
-- return -ENOMEM;
-- vc4_hdmi_encoder->base.type = VC4_ENCODER_TYPE_HDMI0;
-- hdmi->encoder = &vc4_hdmi_encoder->base.base;
--
- hdmi->pdev = pdev;
-+ encoder = &hdmi->encoder.base.base;
-+ encoder->base.type = VC4_ENCODER_TYPE_HDMI0;
-+
- hdmi->hdmicore_regs = vc4_ioremap_regs(pdev, 0);
- if (IS_ERR(hdmi->hdmicore_regs))
- return PTR_ERR(hdmi->hdmicore_regs);
-@@ -1333,15 +1328,14 @@ static int vc4_hdmi_bind(struct device *
- }
- pm_runtime_enable(dev);
-
-- drm_encoder_init(drm, hdmi->encoder, &vc4_hdmi_encoder_funcs,
-+ drm_encoder_init(drm, encoder, &vc4_hdmi_encoder_funcs,
- DRM_MODE_ENCODER_TMDS, NULL);
-- drm_encoder_helper_add(hdmi->encoder, &vc4_hdmi_encoder_helper_funcs);
-+ drm_encoder_helper_add(encoder, &vc4_hdmi_encoder_helper_funcs);
-
-- hdmi->connector = vc4_hdmi_connector_init(drm, hdmi->encoder);
-- if (IS_ERR(hdmi->connector)) {
-- ret = PTR_ERR(hdmi->connector);
-+ ret = vc4_hdmi_connector_init(drm, hdmi);
-+ if (ret)
- goto err_destroy_encoder;
-- }
-+
- #ifdef CONFIG_DRM_VC4_HDMI_CEC
- hdmi->cec_adap = cec_allocate_adapter(&vc4_hdmi_cec_adap_ops,
- vc4, "vc4",
-@@ -1351,7 +1345,7 @@ static int vc4_hdmi_bind(struct device *
- if (ret < 0)
- goto err_destroy_conn;
-
-- cec_fill_conn_info_from_drm(&conn_info, hdmi->connector);
-+ cec_fill_conn_info_from_drm(&conn_info, &hdmi->connector.base);
- cec_s_conn_info(hdmi->cec_adap, &conn_info);
-
- HDMI_WRITE(VC4_HDMI_CPU_MASK_SET, 0xffffffff);
-@@ -1388,10 +1382,10 @@ static int vc4_hdmi_bind(struct device *
- err_delete_cec_adap:
- cec_delete_adapter(hdmi->cec_adap);
- err_destroy_conn:
-- vc4_hdmi_connector_destroy(hdmi->connector);
-+ vc4_hdmi_connector_destroy(&hdmi->connector.base);
- #endif
- err_destroy_encoder:
-- vc4_hdmi_encoder_destroy(hdmi->encoder);
-+ vc4_hdmi_encoder_destroy(encoder);
- err_unprepare_hsm:
- clk_disable_unprepare(hdmi->hsm_clock);
- pm_runtime_disable(dev);
-@@ -1409,8 +1403,8 @@ static void vc4_hdmi_unbind(struct devic
- struct vc4_hdmi *hdmi = vc4->hdmi;
-
- cec_unregister_adapter(hdmi->cec_adap);
-- vc4_hdmi_connector_destroy(hdmi->connector);
-- vc4_hdmi_encoder_destroy(hdmi->encoder);
-+ vc4_hdmi_connector_destroy(&hdmi->connector.base);
-+ vc4_hdmi_encoder_destroy(&hdmi->encoder.base.base);
-
- clk_disable_unprepare(hdmi->hsm_clock);
- pm_runtime_disable(dev);
---- a/drivers/gpu/drm/vc4/vc4_hdmi.h
-+++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
-@@ -8,6 +8,36 @@
-
- #include "vc4_drv.h"
-
-+/* VC4 HDMI encoder KMS struct */
-+struct vc4_hdmi_encoder {
-+ struct vc4_encoder base;
-+ bool hdmi_monitor;
-+ bool limited_rgb_range;
-+};
-+
-+static inline struct vc4_hdmi_encoder *
-+to_vc4_hdmi_encoder(struct drm_encoder *encoder)
-+{
-+ return container_of(encoder, struct vc4_hdmi_encoder, base.base);
-+}
-+
-+/* VC4 HDMI connector KMS struct */
-+struct vc4_hdmi_connector {
-+ struct drm_connector base;
-+
-+ /* Since the connector is attached to just the one encoder,
-+ * this is the reference to it so we can do the best_encoder()
-+ * hook.
-+ */
-+ struct drm_encoder *encoder;
-+};
-+
-+static inline struct vc4_hdmi_connector *
-+to_vc4_hdmi_connector(struct drm_connector *connector)
-+{
-+ return container_of(connector, struct vc4_hdmi_connector, base);
-+}
-+
- /* HDMI audio information */
- struct vc4_hdmi_audio {
- struct snd_soc_card card;
-@@ -25,8 +55,8 @@ struct vc4_hdmi_audio {
- struct vc4_hdmi {
- struct platform_device *pdev;
-
-- struct drm_encoder *encoder;
-- struct drm_connector *connector;
-+ struct vc4_hdmi_encoder encoder;
-+ struct vc4_hdmi_connector connector;
-
- struct vc4_hdmi_audio audio;
-
-@@ -53,34 +83,4 @@ struct vc4_hdmi {
- #define HD_READ(offset) readl(vc4->hdmi->hd_regs + offset)
- #define HD_WRITE(offset, val) writel(val, vc4->hdmi->hd_regs + offset)
-
--/* VC4 HDMI encoder KMS struct */
--struct vc4_hdmi_encoder {
-- struct vc4_encoder base;
-- bool hdmi_monitor;
-- bool limited_rgb_range;
--};
--
--static inline struct vc4_hdmi_encoder *
--to_vc4_hdmi_encoder(struct drm_encoder *encoder)
--{
-- return container_of(encoder, struct vc4_hdmi_encoder, base.base);
--}
--
--/* VC4 HDMI connector KMS struct */
--struct vc4_hdmi_connector {
-- struct drm_connector base;
--
-- /* Since the connector is attached to just the one encoder,
-- * this is the reference to it so we can do the best_encoder()
-- * hook.
-- */
-- struct drm_encoder *encoder;
--};
--
--static inline struct vc4_hdmi_connector *
--to_vc4_hdmi_connector(struct drm_connector *connector)
--{
-- return container_of(connector, struct vc4_hdmi_connector, base);
--}
--
- #endif /* _VC4_HDMI_H_ */