MLK-17638 video: imx8m_hdmi: Checks HDMI FW before enabling video output
authorYe Li <ye.li@nxp.com>
Wed, 28 Feb 2018 13:23:49 +0000 (05:23 -0800)
committerYe Li <ye.li@nxp.com>
Wed, 28 Feb 2018 13:31:43 +0000 (05:31 -0800)
Checks whether the HDMI FW is running before initialize the HDMI display.
So that for cases like mfgtool and imx-boot image without HDMI FW, the
u-boot won't be blocked.

Signed-off-by: Ye Li <ye.li@nxp.com>
arch/arm/cpu/armv8/imx8m/video_common.c
drivers/video/imx/imx8_hdmi.c
include/imx8_hdmi.h

index ee7c844..690ebb3 100644 (file)
@@ -656,6 +656,7 @@ void *video_hw_init(void)
 {
        void *fb;
        int encoding = 1;
+       int ret;
 
        debug("%s()\n", __func__);
 
@@ -680,7 +681,11 @@ void *video_hw_init(void)
 
        imx8m_create_color_bar((void *)((uint64_t) fb), &gmode);
 
-       imx8_hdmi_enable(encoding, &gmode); /* may change gmode */
+       ret = imx8_hdmi_enable(encoding, &gmode); /* may change gmode */
+       if (ret) {
+               printf("HDMI enable failed!\n");
+               return NULL;
+       }
 
        /* start dccs */
        imx8m_display_init((uint64_t) fb, encoding, &gmode);
index 7db0df7..00244f3 100644 (file)
@@ -166,9 +166,12 @@ static int imx8_hdmi_init(int vic,
        cdn_api_init();
        debug("CDN_API_Init completed\n");
 
-       ret = cdn_api_checkalive_blocking();
+       ret = cdn_api_checkalive();
        debug("CDN_API_CheckAlive returned ret = %d\n", ret);
 
+       if (ret)
+               return -EPERM;
+
        ret = cdn_api_general_test_echo_ext_blocking(echo_msg,
                                                     echo_resp,
                                                     sizeof(echo_msg),
@@ -244,7 +247,7 @@ static int imx8_hdmi_init(int vic,
        return 0;
 }
 
-void imx8_hdmi_enable(int encoding,
+int imx8_hdmi_enable(int encoding,
                      struct video_mode_settings *vms)
 {
        int vic = 0;
@@ -261,7 +264,7 @@ void imx8_hdmi_enable(int encoding,
                vic = 0; /* 480p60 */
 
        imx8_hdmi_set_vic_mode(vic, vms);
-       imx8_hdmi_init(vic, encoding, g_color_depth, use_phy_pixel_clk);
+       return imx8_hdmi_init(vic, encoding, g_color_depth, use_phy_pixel_clk);
 }
 
 void imx8_hdmi_disable(void)
index 741f86d..eb1253c 100644 (file)
@@ -7,7 +7,7 @@
 #ifndef __IMX8_HDMI_H__
 #define __IMX8_HDMI_H__
 
-void imx8_hdmi_enable(int encoding, struct video_mode_settings *vms);
+int imx8_hdmi_enable(int encoding, struct video_mode_settings *vms);
 void imx8_hdmi_disable(void);
 
 #endif /* __IMX8_HDMI_H__*/