f07e572f64
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>
196 lines
5.2 KiB
Diff
196 lines
5.2 KiB
Diff
From 13bb65d33681b0095214033a5e80186faa325854 Mon Sep 17 00:00:00 2001
|
|
From: Maxime Ripard <maxime@cerno.tech>
|
|
Date: Wed, 18 Dec 2019 18:35:12 +0100
|
|
Subject: [PATCH] drm/vc4: hdmi: Move structure to header
|
|
|
|
We will need to share the vc4_hdmi and related structures with multiple
|
|
files, so let's create a header for it.
|
|
|
|
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|
---
|
|
drivers/gpu/drm/vc4/vc4_hdmi.c | 76 +-----------------------------
|
|
drivers/gpu/drm/vc4/vc4_hdmi.h | 86 ++++++++++++++++++++++++++++++++++
|
|
2 files changed, 87 insertions(+), 75 deletions(-)
|
|
create mode 100644 drivers/gpu/drm/vc4/vc4_hdmi.h
|
|
|
|
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
|
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
|
@@ -48,87 +48,13 @@
|
|
#include <sound/soc.h>
|
|
#include "media/cec.h"
|
|
#include "vc4_drv.h"
|
|
+#include "vc4_hdmi.h"
|
|
#include "vc4_regs.h"
|
|
|
|
#define HSM_CLOCK_FREQ 163682864
|
|
#define CEC_CLOCK_FREQ 40000
|
|
#define CEC_CLOCK_DIV (HSM_CLOCK_FREQ / CEC_CLOCK_FREQ)
|
|
|
|
-/* HDMI audio information */
|
|
-struct vc4_hdmi_audio {
|
|
- struct snd_soc_card card;
|
|
- struct snd_soc_dai_link link;
|
|
- struct snd_soc_dai_link_component cpu;
|
|
- struct snd_soc_dai_link_component codec;
|
|
- struct snd_soc_dai_link_component platform;
|
|
- int samplerate;
|
|
- int channels;
|
|
- struct snd_dmaengine_dai_dma_data dma_data;
|
|
- struct snd_pcm_substream *substream;
|
|
-};
|
|
-
|
|
-/* General HDMI hardware state. */
|
|
-struct vc4_hdmi {
|
|
- struct platform_device *pdev;
|
|
-
|
|
- struct drm_encoder *encoder;
|
|
- struct drm_connector *connector;
|
|
-
|
|
- struct vc4_hdmi_audio audio;
|
|
-
|
|
- struct i2c_adapter *ddc;
|
|
- void __iomem *hdmicore_regs;
|
|
- void __iomem *hd_regs;
|
|
- int hpd_gpio;
|
|
- bool hpd_active_low;
|
|
-
|
|
- struct cec_adapter *cec_adap;
|
|
- struct cec_msg cec_rx_msg;
|
|
- bool cec_tx_ok;
|
|
- bool cec_irq_was_rx;
|
|
-
|
|
- struct clk *pixel_clock;
|
|
- struct clk *hsm_clock;
|
|
-
|
|
- struct debugfs_regset32 hdmi_regset;
|
|
- struct debugfs_regset32 hd_regset;
|
|
-};
|
|
-
|
|
-#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)
|
|
-#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);
|
|
-}
|
|
-
|
|
static const struct debugfs_reg32 hdmi_regs[] = {
|
|
VC4_REG32(VC4_HDMI_CORE_REV),
|
|
VC4_REG32(VC4_HDMI_SW_RESET_CONTROL),
|
|
--- /dev/null
|
|
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
|
|
@@ -0,0 +1,86 @@
|
|
+#ifndef _VC4_HDMI_H_
|
|
+#define _VC4_HDMI_H_
|
|
+
|
|
+#include <drm/drm_connector.h>
|
|
+#include <media/cec.h>
|
|
+#include <sound/dmaengine_pcm.h>
|
|
+#include <sound/soc.h>
|
|
+
|
|
+#include "vc4_drv.h"
|
|
+
|
|
+/* HDMI audio information */
|
|
+struct vc4_hdmi_audio {
|
|
+ struct snd_soc_card card;
|
|
+ struct snd_soc_dai_link link;
|
|
+ struct snd_soc_dai_link_component cpu;
|
|
+ struct snd_soc_dai_link_component codec;
|
|
+ struct snd_soc_dai_link_component platform;
|
|
+ int samplerate;
|
|
+ int channels;
|
|
+ struct snd_dmaengine_dai_dma_data dma_data;
|
|
+ struct snd_pcm_substream *substream;
|
|
+};
|
|
+
|
|
+/* General HDMI hardware state. */
|
|
+struct vc4_hdmi {
|
|
+ struct platform_device *pdev;
|
|
+
|
|
+ struct drm_encoder *encoder;
|
|
+ struct drm_connector *connector;
|
|
+
|
|
+ struct vc4_hdmi_audio audio;
|
|
+
|
|
+ struct i2c_adapter *ddc;
|
|
+ void __iomem *hdmicore_regs;
|
|
+ void __iomem *hd_regs;
|
|
+ int hpd_gpio;
|
|
+ bool hpd_active_low;
|
|
+
|
|
+ struct cec_adapter *cec_adap;
|
|
+ struct cec_msg cec_rx_msg;
|
|
+ bool cec_tx_ok;
|
|
+ bool cec_irq_was_rx;
|
|
+
|
|
+ struct clk *pixel_clock;
|
|
+ struct clk *hsm_clock;
|
|
+
|
|
+ struct debugfs_regset32 hdmi_regset;
|
|
+ struct debugfs_regset32 hd_regset;
|
|
+};
|
|
+
|
|
+#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)
|
|
+#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_ */
|