aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2017-01-08 18:13:13 -0500
committerDave Airlie <airlied@redhat.com>2017-01-08 18:13:13 -0500
commit90e5d2d45776451e58989361a182c067008d5941 (patch)
tree19e75092d593f6c2b79cb949e54cca985ac9b8d7
parent13fe46b589c216f3a0c8e142282125c782a175f5 (diff)
parent5db60ea93d4fbf146c8f7ca286b8b2a091761460 (diff)
Merge tag 'meson-drm-fixes-for-4.10' of git://people.freedesktop.org/~narmstrong/linux into drm-fixes
- plan atomic check oops fix - fix CVBS init when HDMI is configured by bootloader - fix CVBS VDAC disable * tag 'meson-drm-fixes-for-4.10' of git://people.freedesktop.org/~narmstrong/linux: drm/meson: Fix CVBS VDAC disable drm/meson: Fix CVBS initialization when HDMI is configured by bootloader drm/meson: Fix plane atomic check when no crtc for the plane
-rw-r--r--drivers/gpu/drm/meson/meson_plane.c3
-rw-r--r--drivers/gpu/drm/meson/meson_venc.c19
-rw-r--r--drivers/gpu/drm/meson/meson_venc_cvbs.c2
3 files changed, 23 insertions, 1 deletions
diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c
index 4942ca090b46..7890e30eb584 100644
--- a/drivers/gpu/drm/meson/meson_plane.c
+++ b/drivers/gpu/drm/meson/meson_plane.c
@@ -51,6 +51,9 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
51 struct drm_crtc_state *crtc_state; 51 struct drm_crtc_state *crtc_state;
52 struct drm_rect clip = { 0, }; 52 struct drm_rect clip = { 0, };
53 53
54 if (!state->crtc)
55 return 0;
56
54 crtc_state = drm_atomic_get_crtc_state(state->state, state->crtc); 57 crtc_state = drm_atomic_get_crtc_state(state->state, state->crtc);
55 if (IS_ERR(crtc_state)) 58 if (IS_ERR(crtc_state))
56 return PTR_ERR(crtc_state); 59 return PTR_ERR(crtc_state);
diff --git a/drivers/gpu/drm/meson/meson_venc.c b/drivers/gpu/drm/meson/meson_venc.c
index d836b2274531..f7c870172220 100644
--- a/drivers/gpu/drm/meson/meson_venc.c
+++ b/drivers/gpu/drm/meson/meson_venc.c
@@ -38,6 +38,11 @@
38 * - TV Panel encoding via ENCT 38 * - TV Panel encoding via ENCT
39 */ 39 */
40 40
41/* HHI Registers */
42#define HHI_VDAC_CNTL0 0x2F4 /* 0xbd offset in data sheet */
43#define HHI_VDAC_CNTL1 0x2F8 /* 0xbe offset in data sheet */
44#define HHI_HDMI_PHY_CNTL0 0x3a0 /* 0xe8 offset in data sheet */
45
41struct meson_cvbs_enci_mode meson_cvbs_enci_pal = { 46struct meson_cvbs_enci_mode meson_cvbs_enci_pal = {
42 .mode_tag = MESON_VENC_MODE_CVBS_PAL, 47 .mode_tag = MESON_VENC_MODE_CVBS_PAL,
43 .hso_begin = 3, 48 .hso_begin = 3,
@@ -242,6 +247,20 @@ void meson_venc_disable_vsync(struct meson_drm *priv)
242 247
243void meson_venc_init(struct meson_drm *priv) 248void meson_venc_init(struct meson_drm *priv)
244{ 249{
250 /* Disable CVBS VDAC */
251 regmap_write(priv->hhi, HHI_VDAC_CNTL0, 0);
252 regmap_write(priv->hhi, HHI_VDAC_CNTL1, 8);
253
254 /* Power Down Dacs */
255 writel_relaxed(0xff, priv->io_base + _REG(VENC_VDAC_SETTING));
256
257 /* Disable HDMI PHY */
258 regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, 0);
259
260 /* Disable HDMI */
261 writel_bits_relaxed(0x3, 0,
262 priv->io_base + _REG(VPU_HDMI_SETTING));
263
245 /* Disable all encoders */ 264 /* Disable all encoders */
246 writel_relaxed(0, priv->io_base + _REG(ENCI_VIDEO_EN)); 265 writel_relaxed(0, priv->io_base + _REG(ENCI_VIDEO_EN));
247 writel_relaxed(0, priv->io_base + _REG(ENCP_VIDEO_EN)); 266 writel_relaxed(0, priv->io_base + _REG(ENCP_VIDEO_EN));
diff --git a/drivers/gpu/drm/meson/meson_venc_cvbs.c b/drivers/gpu/drm/meson/meson_venc_cvbs.c
index c809c085fd78..a2bcc70a03ef 100644
--- a/drivers/gpu/drm/meson/meson_venc_cvbs.c
+++ b/drivers/gpu/drm/meson/meson_venc_cvbs.c
@@ -167,7 +167,7 @@ static void meson_venc_cvbs_encoder_disable(struct drm_encoder *encoder)
167 167
168 /* Disable CVBS VDAC */ 168 /* Disable CVBS VDAC */
169 regmap_write(priv->hhi, HHI_VDAC_CNTL0, 0); 169 regmap_write(priv->hhi, HHI_VDAC_CNTL0, 0);
170 regmap_write(priv->hhi, HHI_VDAC_CNTL1, 0); 170 regmap_write(priv->hhi, HHI_VDAC_CNTL1, 8);
171} 171}
172 172
173static void meson_venc_cvbs_encoder_enable(struct drm_encoder *encoder) 173static void meson_venc_cvbs_encoder_enable(struct drm_encoder *encoder)