]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/gpu/drm/meson/meson_venc_cvbs.c
Merge tag 'powerpc-4.12-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc...
[karo-tx-linux.git] / drivers / gpu / drm / meson / meson_venc_cvbs.c
index a96fcb40f2c7d6b59c25d1d89711c38db7b45288..00775b397dbac3ee7f2a3ffa416b8ac55d247ce5 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "meson_venc_cvbs.h"
 #include "meson_venc.h"
+#include "meson_vclk.h"
 #include "meson_registers.h"
 
 /* HHI VDAC Registers */
@@ -194,14 +195,20 @@ static void meson_venc_cvbs_encoder_mode_set(struct drm_encoder *encoder,
 {
        struct meson_venc_cvbs *meson_venc_cvbs =
                                        encoder_to_meson_venc_cvbs(encoder);
+       struct meson_drm *priv = meson_venc_cvbs->priv;
        int i;
 
        for (i = 0; i < MESON_CVBS_MODES_COUNT; ++i) {
                struct meson_cvbs_mode *meson_mode = &meson_cvbs_modes[i];
 
                if (drm_mode_equal(mode, &meson_mode->mode)) {
-                       meson_venci_cvbs_mode_set(meson_venc_cvbs->priv,
+                       meson_venci_cvbs_mode_set(priv,
                                                  meson_mode->enci);
+
+                       /* Setup 27MHz vclk2 for ENCI and VDAC */
+                       meson_vclk_setup(priv, MESON_VCLK_TARGET_CVBS,
+                                        MESON_VCLK_CVBS, MESON_VCLK_CVBS,
+                                        MESON_VCLK_CVBS, true);
                        break;
                }
        }
@@ -217,25 +224,14 @@ static const struct drm_encoder_helper_funcs
 
 static bool meson_venc_cvbs_connector_is_available(struct meson_drm *priv)
 {
-       struct device_node *ep, *remote;
+       struct device_node *remote;
 
-       /* CVBS VDAC output is on the first port, first endpoint */
-       ep = of_graph_get_endpoint_by_regs(priv->dev->of_node, 0, 0);
-       if (!ep)
+       remote = of_graph_get_remote_node(priv->dev->of_node, 0, 0);
+       if (!remote)
                return false;
 
-
-       /* If the endpoint node exists, consider it enabled */
-       remote = of_graph_get_remote_port(ep);
-       if (remote) {
-               of_node_put(ep);
-               return true;
-       }
-
-       of_node_put(ep);
        of_node_put(remote);
-
-       return false;
+       return true;
 }
 
 int meson_venc_cvbs_create(struct meson_drm *priv)