All of lore.kernel.org
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime@cerno.tech>
To: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>,
	Eric Anholt <eric@anholt.net>
Cc: dri-devel@lists.freedesktop.org,
	linux-rpi-kernel@lists.infradead.org,
	bcm-kernel-feedback-list@broadcom.com,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	Dave Stevenson <dave.stevenson@raspberrypi.com>,
	Tim Gover <tim.gover@raspberrypi.com>,
	Phil Elwell <phil@raspberrypi.com>,
	Maxime Ripard <maxime@cerno.tech>,
	Chanwoo Choi <cw00.choi@samsung.com>,
	Hoegeun Kwon <hoegeun.kwon@samsung.com>,
	Stefan Wahren <stefan.wahren@i2se.com>
Subject: [PATCH v5 40/80] drm/vc4: hdmi: rework connectors and encoders
Date: Thu,  3 Sep 2020 10:01:12 +0200	[thread overview]
Message-ID: <93b418d63c876355af2b3d3afebe31a256268623.1599120059.git-series.maxime@cerno.tech> (raw)
In-Reply-To: <cover.dddc064d8bb83e46744336af67dcb13139e5747d.1599120059.git-series.maxime@cerno.tech>

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.

Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Tested-by: Chanwoo Choi <cw00.choi@samsung.com>
Tested-by: Hoegeun Kwon <hoegeun.kwon@samsung.com>
Tested-by: Stefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/gpu/drm/vc4/vc4_hdmi.c | 87 ++++++++++++++++-------------------
 drivers/gpu/drm/vc4/vc4_hdmi.h | 64 +++++++++++++-------------
 2 files changed, 72 insertions(+), 79 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 5c4d2fee6b86..9a0612a87fb8 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -191,20 +191,15 @@ static const struct drm_connector_helper_funcs vc4_hdmi_connector_helper_funcs =
 	.get_modes = vc4_hdmi_connector_get_modes,
 };
 
-static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev,
-						     struct drm_encoder *encoder,
-						     struct i2c_adapter *ddc)
+static int vc4_hdmi_connector_init(struct drm_device *dev,
+				   struct vc4_hdmi *vc4_hdmi,
+				   struct i2c_adapter *ddc)
 {
-	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_with_ddc(dev, connector,
@@ -216,7 +211,7 @@ static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev,
 	/* 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);
 
@@ -228,7 +223,7 @@ static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev,
 
 	drm_connector_attach_encoder(connector, encoder);
 
-	return connector;
+	return 0;
 }
 
 static int vc4_hdmi_stop_packet(struct drm_encoder *encoder,
@@ -298,21 +293,22 @@ static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder)
 	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);
@@ -628,7 +624,8 @@ static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = {
 /* 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;
@@ -647,7 +644,7 @@ static void vc4_hdmi_audio_set_mai_clock(struct vc4_hdmi *hdmi)
 
 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);
@@ -685,7 +682,8 @@ static int vc4_hdmi_audio_startup(struct snd_pcm_substream *substream,
 				  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;
 
@@ -702,8 +700,7 @@ static int vc4_hdmi_audio_startup(struct snd_pcm_substream *substream,
 				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;
 
@@ -717,7 +714,7 @@ static int vc4_hdmi_audio_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
 
 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);
@@ -751,7 +748,7 @@ static int vc4_hdmi_audio_hw_params(struct snd_pcm_substream *substream,
 				    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);
@@ -824,7 +821,7 @@ static int vc4_hdmi_audio_trigger(struct snd_pcm_substream *substream, int cmd,
 				  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);
 
@@ -868,9 +865,10 @@ static int vc4_hdmi_audio_eld_ctl_info(struct snd_kcontrol *kcontrol,
 {
 	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;
 }
@@ -880,9 +878,10 @@ static int vc4_hdmi_audio_eld_ctl_get(struct snd_kcontrol *kcontrol,
 {
 	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;
 }
@@ -1220,7 +1219,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 	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;
@@ -1229,14 +1228,10 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 	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;
-
+	encoder = &hdmi->encoder.base.base;
+	hdmi->encoder.base.type = VC4_ENCODER_TYPE_HDMI0;
 	hdmi->pdev = pdev;
+
 	hdmi->hdmicore_regs = vc4_ioremap_regs(pdev, 0);
 	if (IS_ERR(hdmi->hdmicore_regs))
 		return PTR_ERR(hdmi->hdmicore_regs);
@@ -1324,15 +1319,13 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 	}
 	pm_runtime_enable(dev);
 
-	drm_simple_encoder_init(drm, hdmi->encoder, DRM_MODE_ENCODER_TMDS);
-	drm_encoder_helper_add(hdmi->encoder, &vc4_hdmi_encoder_helper_funcs);
+	drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
+	drm_encoder_helper_add(encoder, &vc4_hdmi_encoder_helper_funcs);
 
-	hdmi->connector =
-		vc4_hdmi_connector_init(drm, hdmi->encoder, hdmi->ddc);
-	if (IS_ERR(hdmi->connector)) {
-		ret = PTR_ERR(hdmi->connector);
+	ret = vc4_hdmi_connector_init(drm, hdmi, hdmi->ddc);
+	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",
@@ -1342,7 +1335,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 	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);
@@ -1379,10 +1372,10 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 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:
-	drm_encoder_cleanup(hdmi->encoder);
+	drm_encoder_cleanup(encoder);
 err_unprepare_hsm:
 	clk_disable_unprepare(hdmi->hsm_clock);
 	pm_runtime_disable(dev);
@@ -1400,8 +1393,8 @@ static void vc4_hdmi_unbind(struct device *dev, struct device *master,
 	struct vc4_hdmi *hdmi = vc4->hdmi;
 
 	cec_unregister_adapter(hdmi->cec_adap);
-	vc4_hdmi_connector_destroy(hdmi->connector);
-	drm_encoder_cleanup(hdmi->encoder);
+	vc4_hdmi_connector_destroy(&hdmi->connector.base);
+	drm_encoder_cleanup(&hdmi->encoder.base.base);
 
 	clk_disable_unprepare(hdmi->hsm_clock);
 	pm_runtime_disable(dev);
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.h b/drivers/gpu/drm/vc4/vc4_hdmi.h
index 5ec5d1f6b1e6..17079a39f1b1 100644
--- 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_ */
-- 
git-series 0.9.1

WARNING: multiple messages have this Message-ID (diff)
From: Maxime Ripard <maxime@cerno.tech>
To: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>,
	Eric Anholt <eric@anholt.net>
Cc: Stefan Wahren <stefan.wahren@i2se.com>,
	Tim Gover <tim.gover@raspberrypi.com>,
	Dave Stevenson <dave.stevenson@raspberrypi.com>,
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	Hoegeun Kwon <hoegeun.kwon@samsung.com>,
	Chanwoo Choi <cw00.choi@samsung.com>,
	bcm-kernel-feedback-list@broadcom.com,
	linux-rpi-kernel@lists.infradead.org,
	Phil Elwell <phil@raspberrypi.com>,
	linux-arm-kernel@lists.infradead.org,
	Maxime Ripard <maxime@cerno.tech>
Subject: [PATCH v5 40/80] drm/vc4: hdmi: rework connectors and encoders
Date: Thu,  3 Sep 2020 10:01:12 +0200	[thread overview]
Message-ID: <93b418d63c876355af2b3d3afebe31a256268623.1599120059.git-series.maxime@cerno.tech> (raw)
In-Reply-To: <cover.dddc064d8bb83e46744336af67dcb13139e5747d.1599120059.git-series.maxime@cerno.tech>

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.

Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Tested-by: Chanwoo Choi <cw00.choi@samsung.com>
Tested-by: Hoegeun Kwon <hoegeun.kwon@samsung.com>
Tested-by: Stefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/gpu/drm/vc4/vc4_hdmi.c | 87 ++++++++++++++++-------------------
 drivers/gpu/drm/vc4/vc4_hdmi.h | 64 +++++++++++++-------------
 2 files changed, 72 insertions(+), 79 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 5c4d2fee6b86..9a0612a87fb8 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -191,20 +191,15 @@ static const struct drm_connector_helper_funcs vc4_hdmi_connector_helper_funcs =
 	.get_modes = vc4_hdmi_connector_get_modes,
 };
 
-static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev,
-						     struct drm_encoder *encoder,
-						     struct i2c_adapter *ddc)
+static int vc4_hdmi_connector_init(struct drm_device *dev,
+				   struct vc4_hdmi *vc4_hdmi,
+				   struct i2c_adapter *ddc)
 {
-	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_with_ddc(dev, connector,
@@ -216,7 +211,7 @@ static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev,
 	/* 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);
 
@@ -228,7 +223,7 @@ static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev,
 
 	drm_connector_attach_encoder(connector, encoder);
 
-	return connector;
+	return 0;
 }
 
 static int vc4_hdmi_stop_packet(struct drm_encoder *encoder,
@@ -298,21 +293,22 @@ static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder)
 	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);
@@ -628,7 +624,8 @@ static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = {
 /* 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;
@@ -647,7 +644,7 @@ static void vc4_hdmi_audio_set_mai_clock(struct vc4_hdmi *hdmi)
 
 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);
@@ -685,7 +682,8 @@ static int vc4_hdmi_audio_startup(struct snd_pcm_substream *substream,
 				  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;
 
@@ -702,8 +700,7 @@ static int vc4_hdmi_audio_startup(struct snd_pcm_substream *substream,
 				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;
 
@@ -717,7 +714,7 @@ static int vc4_hdmi_audio_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
 
 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);
@@ -751,7 +748,7 @@ static int vc4_hdmi_audio_hw_params(struct snd_pcm_substream *substream,
 				    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);
@@ -824,7 +821,7 @@ static int vc4_hdmi_audio_trigger(struct snd_pcm_substream *substream, int cmd,
 				  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);
 
@@ -868,9 +865,10 @@ static int vc4_hdmi_audio_eld_ctl_info(struct snd_kcontrol *kcontrol,
 {
 	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;
 }
@@ -880,9 +878,10 @@ static int vc4_hdmi_audio_eld_ctl_get(struct snd_kcontrol *kcontrol,
 {
 	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;
 }
@@ -1220,7 +1219,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 	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;
@@ -1229,14 +1228,10 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 	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;
-
+	encoder = &hdmi->encoder.base.base;
+	hdmi->encoder.base.type = VC4_ENCODER_TYPE_HDMI0;
 	hdmi->pdev = pdev;
+
 	hdmi->hdmicore_regs = vc4_ioremap_regs(pdev, 0);
 	if (IS_ERR(hdmi->hdmicore_regs))
 		return PTR_ERR(hdmi->hdmicore_regs);
@@ -1324,15 +1319,13 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 	}
 	pm_runtime_enable(dev);
 
-	drm_simple_encoder_init(drm, hdmi->encoder, DRM_MODE_ENCODER_TMDS);
-	drm_encoder_helper_add(hdmi->encoder, &vc4_hdmi_encoder_helper_funcs);
+	drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
+	drm_encoder_helper_add(encoder, &vc4_hdmi_encoder_helper_funcs);
 
-	hdmi->connector =
-		vc4_hdmi_connector_init(drm, hdmi->encoder, hdmi->ddc);
-	if (IS_ERR(hdmi->connector)) {
-		ret = PTR_ERR(hdmi->connector);
+	ret = vc4_hdmi_connector_init(drm, hdmi, hdmi->ddc);
+	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",
@@ -1342,7 +1335,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 	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);
@@ -1379,10 +1372,10 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 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:
-	drm_encoder_cleanup(hdmi->encoder);
+	drm_encoder_cleanup(encoder);
 err_unprepare_hsm:
 	clk_disable_unprepare(hdmi->hsm_clock);
 	pm_runtime_disable(dev);
@@ -1400,8 +1393,8 @@ static void vc4_hdmi_unbind(struct device *dev, struct device *master,
 	struct vc4_hdmi *hdmi = vc4->hdmi;
 
 	cec_unregister_adapter(hdmi->cec_adap);
-	vc4_hdmi_connector_destroy(hdmi->connector);
-	drm_encoder_cleanup(hdmi->encoder);
+	vc4_hdmi_connector_destroy(&hdmi->connector.base);
+	drm_encoder_cleanup(&hdmi->encoder.base.base);
 
 	clk_disable_unprepare(hdmi->hsm_clock);
 	pm_runtime_disable(dev);
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.h b/drivers/gpu/drm/vc4/vc4_hdmi.h
index 5ec5d1f6b1e6..17079a39f1b1 100644
--- 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_ */
-- 
git-series 0.9.1

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Maxime Ripard <maxime@cerno.tech>
To: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>,
	Eric Anholt <eric@anholt.net>
Cc: Stefan Wahren <stefan.wahren@i2se.com>,
	Tim Gover <tim.gover@raspberrypi.com>,
	Dave Stevenson <dave.stevenson@raspberrypi.com>,
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	Hoegeun Kwon <hoegeun.kwon@samsung.com>,
	Chanwoo Choi <cw00.choi@samsung.com>,
	bcm-kernel-feedback-list@broadcom.com,
	linux-rpi-kernel@lists.infradead.org,
	Phil Elwell <phil@raspberrypi.com>,
	linux-arm-kernel@lists.infradead.org,
	Maxime Ripard <maxime@cerno.tech>
Subject: [PATCH v5 40/80] drm/vc4: hdmi: rework connectors and encoders
Date: Thu,  3 Sep 2020 10:01:12 +0200	[thread overview]
Message-ID: <93b418d63c876355af2b3d3afebe31a256268623.1599120059.git-series.maxime@cerno.tech> (raw)
In-Reply-To: <cover.dddc064d8bb83e46744336af67dcb13139e5747d.1599120059.git-series.maxime@cerno.tech>

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.

Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Tested-by: Chanwoo Choi <cw00.choi@samsung.com>
Tested-by: Hoegeun Kwon <hoegeun.kwon@samsung.com>
Tested-by: Stefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/gpu/drm/vc4/vc4_hdmi.c | 87 ++++++++++++++++-------------------
 drivers/gpu/drm/vc4/vc4_hdmi.h | 64 +++++++++++++-------------
 2 files changed, 72 insertions(+), 79 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 5c4d2fee6b86..9a0612a87fb8 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -191,20 +191,15 @@ static const struct drm_connector_helper_funcs vc4_hdmi_connector_helper_funcs =
 	.get_modes = vc4_hdmi_connector_get_modes,
 };
 
-static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev,
-						     struct drm_encoder *encoder,
-						     struct i2c_adapter *ddc)
+static int vc4_hdmi_connector_init(struct drm_device *dev,
+				   struct vc4_hdmi *vc4_hdmi,
+				   struct i2c_adapter *ddc)
 {
-	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_with_ddc(dev, connector,
@@ -216,7 +211,7 @@ static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev,
 	/* 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);
 
@@ -228,7 +223,7 @@ static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev,
 
 	drm_connector_attach_encoder(connector, encoder);
 
-	return connector;
+	return 0;
 }
 
 static int vc4_hdmi_stop_packet(struct drm_encoder *encoder,
@@ -298,21 +293,22 @@ static void vc4_hdmi_set_avi_infoframe(struct drm_encoder *encoder)
 	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);
@@ -628,7 +624,8 @@ static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = {
 /* 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;
@@ -647,7 +644,7 @@ static void vc4_hdmi_audio_set_mai_clock(struct vc4_hdmi *hdmi)
 
 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);
@@ -685,7 +682,8 @@ static int vc4_hdmi_audio_startup(struct snd_pcm_substream *substream,
 				  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;
 
@@ -702,8 +700,7 @@ static int vc4_hdmi_audio_startup(struct snd_pcm_substream *substream,
 				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;
 
@@ -717,7 +714,7 @@ static int vc4_hdmi_audio_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
 
 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);
@@ -751,7 +748,7 @@ static int vc4_hdmi_audio_hw_params(struct snd_pcm_substream *substream,
 				    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);
@@ -824,7 +821,7 @@ static int vc4_hdmi_audio_trigger(struct snd_pcm_substream *substream, int cmd,
 				  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);
 
@@ -868,9 +865,10 @@ static int vc4_hdmi_audio_eld_ctl_info(struct snd_kcontrol *kcontrol,
 {
 	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;
 }
@@ -880,9 +878,10 @@ static int vc4_hdmi_audio_eld_ctl_get(struct snd_kcontrol *kcontrol,
 {
 	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;
 }
@@ -1220,7 +1219,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 	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;
@@ -1229,14 +1228,10 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 	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;
-
+	encoder = &hdmi->encoder.base.base;
+	hdmi->encoder.base.type = VC4_ENCODER_TYPE_HDMI0;
 	hdmi->pdev = pdev;
+
 	hdmi->hdmicore_regs = vc4_ioremap_regs(pdev, 0);
 	if (IS_ERR(hdmi->hdmicore_regs))
 		return PTR_ERR(hdmi->hdmicore_regs);
@@ -1324,15 +1319,13 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 	}
 	pm_runtime_enable(dev);
 
-	drm_simple_encoder_init(drm, hdmi->encoder, DRM_MODE_ENCODER_TMDS);
-	drm_encoder_helper_add(hdmi->encoder, &vc4_hdmi_encoder_helper_funcs);
+	drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS);
+	drm_encoder_helper_add(encoder, &vc4_hdmi_encoder_helper_funcs);
 
-	hdmi->connector =
-		vc4_hdmi_connector_init(drm, hdmi->encoder, hdmi->ddc);
-	if (IS_ERR(hdmi->connector)) {
-		ret = PTR_ERR(hdmi->connector);
+	ret = vc4_hdmi_connector_init(drm, hdmi, hdmi->ddc);
+	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",
@@ -1342,7 +1335,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 	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);
@@ -1379,10 +1372,10 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 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:
-	drm_encoder_cleanup(hdmi->encoder);
+	drm_encoder_cleanup(encoder);
 err_unprepare_hsm:
 	clk_disable_unprepare(hdmi->hsm_clock);
 	pm_runtime_disable(dev);
@@ -1400,8 +1393,8 @@ static void vc4_hdmi_unbind(struct device *dev, struct device *master,
 	struct vc4_hdmi *hdmi = vc4->hdmi;
 
 	cec_unregister_adapter(hdmi->cec_adap);
-	vc4_hdmi_connector_destroy(hdmi->connector);
-	drm_encoder_cleanup(hdmi->encoder);
+	vc4_hdmi_connector_destroy(&hdmi->connector.base);
+	drm_encoder_cleanup(&hdmi->encoder.base.base);
 
 	clk_disable_unprepare(hdmi->hsm_clock);
 	pm_runtime_disable(dev);
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.h b/drivers/gpu/drm/vc4/vc4_hdmi.h
index 5ec5d1f6b1e6..17079a39f1b1 100644
--- 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_ */
-- 
git-series 0.9.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2020-09-03  8:05 UTC|newest]

Thread overview: 342+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20200904071259epcas1p3de4209531c0bc5ed6ea9ef19827b6ed5@epcas1p3.samsung.com>
2020-09-03  8:00 ` [PATCH v5 00/80] drm/vc4: Support BCM2711 Display Pipeline Maxime Ripard
2020-09-03  8:00   ` Maxime Ripard
2020-09-03  8:00   ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 01/80] dt-bindings: display: Add support for the BCM2711 HVS Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 02/80] drm/vc4: Add support for the BCM2711 HVS5 Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 03/80] drm/vc4: hvs: Boost the core clock during modeset Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 04/80] drm/vc4: plane: Change LBM alignment constraint on LBM Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 05/80] drm/vc4: plane: Optimize the LBM allocation size Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 06/80] drm/vc4: plane: Create more planes Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 07/80] drm/vc4: crtc: Deal with different number of pixel per clock Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 08/80] drm/vc4: crtc: Use a shared interrupt Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 09/80] drm/vc4: crtc: Move the cob allocation outside of bind Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 10/80] drm/vc4: crtc: Rename HVS channel to output Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 11/80] drm/vc4: crtc: Use local chan variable Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 12/80] drm/vc4: crtc: Enable and disable the PV in atomic_enable / disable Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 13/80] drm/vc4: kms: Convert to for_each_new_crtc_state Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-04 15:42     ` Dave Stevenson
2020-09-04 15:42       ` Dave Stevenson
2020-09-04 15:42       ` Dave Stevenson
2020-09-03  8:00   ` [PATCH v5 14/80] drm/vc4: crtc: Assign output to channel automatically Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 15/80] drm/vc4: crtc: Add FIFO depth to vc4_crtc_data Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 16/80] drm/vc4: crtc: Add function to compute FIFO level bits Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 17/80] drm/vc4: crtc: Rename HDMI encoder type to HDMI0 Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 18/80] drm/vc4: crtc: Add HDMI1 encoder type Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 19/80] drm/vc4: crtc: Disable color management for HVS5 Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 20/80] drm/vc4: crtc: Turn pixelvalve reset into a function Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 21/80] drm/vc4: crtc: Move PV dump to config_pv Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 22/80] drm/vc4: crtc: Move HVS init and close to a function Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 23/80] drm/vc4: crtc: Move the HVS gamma LUT setup to our init function Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 24/80] drm/vc4: hvs: Make sure our channel is reset Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 25/80] drm/vc4: crtc: Remove mode_set_nofb Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 26/80] drm/vc4: crtc: Remove redundant pixelvalve reset Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00   ` [PATCH v5 27/80] drm/vc4: crtc: Move HVS channel init before the PV initialisation Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:00     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 28/80] drm/vc4: encoder: Add finer-grained encoder callbacks Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 29/80] drm/vc4: crtc: Add a delay after disabling the PixelValve output Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 30/80] drm/vc4: crtc: Clear the PixelValve FIFO on disable Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 31/80] drm/vc4: crtc: Clear the PixelValve FIFO during configuration Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 32/80] drm/vc4: hvs: Make the stop_channel function public Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 33/80] drm/vc4: hvs: Introduce a function to get the assigned FIFO Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 34/80] drm/vc4: crtc: Move the CRTC disable out Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 35/80] drm/vc4: drv: Disable the CRTC at boot time Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 36/80] dt-bindings: display: vc4: pv: Add BCM2711 pixel valves Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 37/80] drm/vc4: crtc: Add BCM2711 pixelvalves Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 38/80] drm/vc4: hdmi: Use debugfs private field Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 39/80] drm/vc4: hdmi: Move structure to header Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` Maxime Ripard [this message]
2020-09-03  8:01     ` [PATCH v5 40/80] drm/vc4: hdmi: rework connectors and encoders Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 41/80] drm/vc4: hdmi: Remove DDC argument to connector_init Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 42/80] drm/vc4: hdmi: Rename hdmi to vc4_hdmi Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 43/80] drm/vc4: hdmi: Move accessors " Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 44/80] drm/vc4: hdmi: Use local vc4_hdmi directly Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 45/80] drm/vc4: hdmi: Add container_of macros for encoders and connectors Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 46/80] drm/vc4: hdmi: Pass vc4_hdmi to CEC code Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 47/80] drm/vc4: hdmi: Retrieve the vc4_hdmi at unbind using our device Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 48/80] drm/vc4: hdmi: Remove vc4_dev hdmi pointer Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 49/80] drm/vc4: hdmi: Remove vc4_hdmi_connector Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 50/80] drm/vc4: hdmi: Introduce resource init and variant Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 51/80] drm/vc4: hdmi: Implement a register layout abstraction Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 52/80] drm/vc4: hdmi: Add reset callback Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 53/80] drm/vc4: hdmi: Add PHY init and disable function Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 54/80] drm/vc4: hdmi: Add PHY RNG enable / " Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 55/80] drm/vc4: hdmi: Add a CSC setup callback Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-04 15:45     ` Dave Stevenson
2020-09-04 15:45       ` Dave Stevenson
2020-09-04 15:45       ` Dave Stevenson
2020-09-03  8:01   ` [PATCH v5 56/80] drm/vc4: hdmi: Add a set_timings callback Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-04 15:46     ` Dave Stevenson
2020-09-04 15:46       ` Dave Stevenson
2020-09-04 15:46       ` Dave Stevenson
2020-09-03  8:01   ` [PATCH v5 57/80] drm/vc4: hdmi: Store the encoder type in the variant structure Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 58/80] drm/vc4: hdmi: Deal with multiple debugfs files Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 59/80] drm/vc4: hdmi: Move CEC init to its own function Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 60/80] drm/vc4: hdmi: Add CEC support flag Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 61/80] drm/vc4: hdmi: Remove unused CEC_CLOCK_DIV define Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 62/80] drm/vc4: hdmi: Rename drm_encoder pointer in mode_valid Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 63/80] drm/vc4: hdmi: Adjust HSM clock rate depending on pixel rate Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 64/80] drm/vc4: hdmi: Use clk_set_min_rate instead Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 65/80] drm/vc4: hdmi: Use reg-names to retrieve the HDMI audio registers Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 66/80] drm/vc4: hdmi: Reset audio infoframe on encoder_enable if previously streaming Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 67/80] drm/vc4: hdmi: Set the b-frame marker to the match ALSA's default Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 68/80] drm/vc4: hdmi: Add audio-related callbacks Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 69/80] drm/vc4: hdmi: Deal with multiple ALSA cards Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 70/80] drm/vc4: hdmi: Remove register dumps in enable Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 71/80] drm/vc4: hdmi: Always recenter the HDMI FIFO Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 72/80] drm/vc4: hdmi: Implement finer-grained hooks Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 73/80] drm/vc4: hdmi: Do the VID_CTL configuration at once Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 74/80] drm/vc4: hdmi: Switch to blank pixels when disabled Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 75/80] drm/vc4: hdmi: Add pixel BVB clock control Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-04  9:46     ` Dave Stevenson
2020-09-04  9:46       ` Dave Stevenson
2020-09-04  9:46       ` Dave Stevenson
2020-09-07 16:21       ` Maxime Ripard
2020-09-07 16:21         ` Maxime Ripard
2020-09-07 16:21         ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 76/80] drm/vc4: hdmi: Support the BCM2711 HDMI controllers Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 77/80] dt-bindings: display: vc4: hdmi: Add BCM2711 HDMI controllers bindings Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-07 11:54     ` Hoegeun Kwon
2020-09-07 11:54       ` Hoegeun Kwon
2020-09-07 11:54       ` Hoegeun Kwon
2020-09-03  8:01   ` [PATCH v5 78/80] dt-bindings: display: vc4: Document BCM2711 VC5 Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01   ` [PATCH v5 79/80] drm/vc4: drv: Support BCM2711 Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-04 15:51     ` Dave Stevenson
2020-09-04 15:51       ` Dave Stevenson
2020-09-04 15:51       ` Dave Stevenson
2020-09-03  8:01   ` [PATCH v5 80/80] ARM: dts: bcm2711: Enable the display pipeline Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-03  8:01     ` Maxime Ripard
2020-09-07 12:03     ` Hoegeun Kwon
2020-09-07 12:03       ` Hoegeun Kwon
2020-09-07 12:03       ` Hoegeun Kwon
2020-09-08 16:31     ` Nicolas Saenz Julienne
2020-09-08 16:31       ` Nicolas Saenz Julienne
2020-09-08 16:31       ` Nicolas Saenz Julienne
2020-09-29 22:15     ` Nathan Chancellor
2020-09-29 22:15       ` Nathan Chancellor
2020-09-29 22:15       ` Nathan Chancellor
2020-09-30 14:07       ` Maxime Ripard
2020-09-30 14:07         ` Maxime Ripard
2020-09-30 14:07         ` Maxime Ripard
2020-09-30 16:38         ` Nathan Chancellor
2020-09-30 16:38           ` Nathan Chancellor
2020-09-30 16:38           ` Nathan Chancellor
2020-09-30 16:52           ` Stefan Wahren
2020-09-30 16:52             ` Stefan Wahren
2020-09-30 16:52             ` Stefan Wahren
2020-10-01  6:48             ` Maxime Ripard
2020-10-01  6:48               ` Maxime Ripard
2020-10-01  6:48               ` Maxime Ripard
2020-10-01  8:54               ` Maxime Ripard
2020-10-01  8:54                 ` Maxime Ripard
2020-10-01  8:54                 ` Maxime Ripard
2020-10-01 10:15                 ` Tim Gover
2020-10-01 10:15                   ` Tim Gover
2020-10-01 10:15                   ` Tim Gover
2020-10-01 16:47                   ` Nicolas Saenz Julienne
2020-10-01 16:47                     ` Nicolas Saenz Julienne
2020-10-01 16:47                     ` Nicolas Saenz Julienne
2020-10-01 19:45                     ` Tim Gover
2020-10-01 19:45                       ` Tim Gover
2020-10-01 19:45                       ` Tim Gover
2020-10-02 15:19                   ` Maxime Ripard
2020-10-02 15:19                     ` Maxime Ripard
2020-10-02 15:19                     ` Maxime Ripard
2020-10-02 15:57                     ` Dave Stevenson
2020-10-02 15:57                       ` Dave Stevenson
2020-10-02 15:57                       ` Dave Stevenson
2020-10-06 15:26                       ` Maxime Ripard
2020-10-06 15:26                         ` Maxime Ripard
2020-10-06 15:26                         ` Maxime Ripard
2020-10-06 17:14                         ` Dave Stevenson
2020-10-06 17:14                           ` Dave Stevenson
2020-10-06 17:14                           ` Dave Stevenson
2020-10-08  9:35                           ` Nicolas Saenz Julienne
2020-10-08  9:35                             ` Nicolas Saenz Julienne
2020-10-08  9:35                             ` Nicolas Saenz Julienne
2020-10-01  9:22           ` Nicolas Saenz Julienne
2020-10-01  9:22             ` Nicolas Saenz Julienne
2020-10-01  9:22             ` Nicolas Saenz Julienne
2020-10-01  9:33             ` Maxime Ripard
2020-10-01  9:33               ` Maxime Ripard
2020-10-01  9:33               ` Maxime Ripard
2020-10-01 18:09             ` Nathan Chancellor
2020-10-01 18:09               ` Nathan Chancellor
2020-10-01 18:09               ` Nathan Chancellor
2020-09-07 11:49   ` [PATCH v5 00/80] drm/vc4: Support BCM2711 Display Pipeline Hoegeun Kwon
2020-09-07 11:49     ` Hoegeun Kwon
2020-09-07 11:49     ` Hoegeun Kwon
2020-09-08 12:00     ` Maxime Ripard
2020-09-08 12:00       ` Maxime Ripard
2020-09-08 12:00       ` Maxime Ripard
2020-09-14 10:14       ` Hoegeun Kwon
2020-09-14 10:14         ` Hoegeun Kwon
2020-09-14 10:14         ` Hoegeun Kwon
2020-09-16 16:57         ` Maxime Ripard
2020-09-16 16:57           ` Maxime Ripard
2020-09-16 16:57           ` Maxime Ripard
2020-10-08 11:27           ` Maxime Ripard
2020-10-08 11:27             ` Maxime Ripard
2020-10-08 11:27             ` Maxime Ripard
2020-09-07 16:22   ` Maxime Ripard
2020-09-07 16:22     ` Maxime Ripard
2020-09-07 16:22     ` Maxime Ripard
2020-09-07 18:21     ` Nicolas Saenz Julienne
2020-09-07 18:21       ` Nicolas Saenz Julienne
2020-09-07 18:21       ` Nicolas Saenz Julienne

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=93b418d63c876355af2b3d3afebe31a256268623.1599120059.git-series.maxime@cerno.tech \
    --to=maxime@cerno.tech \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=cw00.choi@samsung.com \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=eric@anholt.net \
    --cc=hoegeun.kwon@samsung.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rpi-kernel@lists.infradead.org \
    --cc=nsaenzjulienne@suse.de \
    --cc=phil@raspberrypi.com \
    --cc=stefan.wahren@i2se.com \
    --cc=tim.gover@raspberrypi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.