rk3036 hdmi: support uboot display logo
authorhjc <hjc@rock-chips.com>
Fri, 26 Sep 2014 08:01:07 +0000 (16:01 +0800)
committerhjc <hjc@rock-chips.com>
Fri, 26 Sep 2014 11:31:24 +0000 (19:31 +0800)
arch/arm/boot/dts/rk3128-box.dts
drivers/video/rockchip/hdmi/chips/rk3036/rk3036_hdmi_hw.c
drivers/video/rockchip/hdmi/rk_hdmi.h
drivers/video/rockchip/hdmi/rk_hdmi_task.c

index d71b76e77aadf6321b8b3598b865643988d58086..4bfd4993fcbd2fbd53b71b3e061547ee8593e20a 100755 (executable)
 
 &fb {
        rockchip,disp-mode = <NO_DUAL>;
+       rockchip,uboot-logo-on = <0>;
 };
 
 &lcdc {
index 4fd7ada73849770a595b74f76e314b5cb0012762..df65daa3c4cbbec4ea3b063149141e8e59815937 100755 (executable)
@@ -721,6 +721,10 @@ void rk3036_hdmi_control_output(struct hdmi *hdmi_drv, int enable)
        struct rk_hdmi_device *hdmi_dev = container_of(hdmi_drv,
                                                       struct rk_hdmi_device,
                                                       driver);
+       if (hdmi_drv->uboot_logo) {
+               hdmi_drv->uboot_logo = 0;
+               return;
+       }
 
        if (enable) {
                if (hdmi_drv->pwr_mode == LOWER_PWR)
@@ -801,6 +805,7 @@ static int rk3036_hdmi_debug(struct hdmi *hdmi_drv,int cmd)
        switch(cmd) {
        case 0:
                printk("%s[%d]:cmd=%d\n",__func__,__LINE__,cmd);
+               rk3036_hdmi_irq(hdmi_drv);
                break;
        case 1:
                printk("%s[%d]:cmd=%d\n",__func__,__LINE__,cmd);
@@ -830,9 +835,10 @@ int rk3036_hdmi_initial(struct hdmi *hdmi_drv)
        hdmi_drv->insert    = rk3036_hdmi_insert;
        hdmi_drv->ops = &hdmi_drv_ops;
 
-       rk3036_hdmi_reset_pclk();
-       rk3036_hdmi_reset(hdmi_drv);
-
+       if (!hdmi_drv->uboot_logo) {
+               rk3036_hdmi_reset_pclk();
+               rk3036_hdmi_reset(hdmi_drv);
+       }
        if (hdmi_drv->hdcp_power_on_cb)
                rc = hdmi_drv->hdcp_power_on_cb();
 
index d962ff83f33d21298da2de93a461a01fa0c8c733..ff5bb3d9553b3201ba9487d2eff092cde188014c 100755 (executable)
@@ -363,6 +363,8 @@ struct hdmi {
        int yscale;             /* y directoon scale value */
        int tmdsclk;            /* TDMS Clock frequency */
        int pixclock;           /* Pixel Clcok frequency */
+       int uboot_logo;
+       int uboot_vic;
 
        struct list_head pwrlist_head;
 
index 0728b04125b01edd54fab4e29c05e0ebe8202211..49ca854ef940a2c0f30312ce14a57ad2251c4250 100755 (executable)
@@ -9,7 +9,7 @@
 #define HDMI_MAX_ID 1
 
 static char *envp[] = { "INTERFACE=HDMI", NULL };
-
+static int uboot_vic;
 static void hdmi_sys_show_state(struct hdmi *hdmi)
 {
        switch (hdmi->state) {
@@ -48,13 +48,22 @@ static void hdmi_sys_show_state(struct hdmi *hdmi)
 
 int hdmi_sys_init(struct hdmi *hdmi)
 {
-       hdmi->hotplug = HDMI_HPD_REMOVED;
-       hdmi->state = HDMI_SLEEP;
-       hdmi->enable = HDMI_ENABLE;
+       hdmi->uboot_logo = support_uboot_display();
+       printk("%s,uboot-logo=%d,uboot_vic=%d\n",__func__,hdmi->uboot_logo,uboot_vic);
+       if (hdmi->uboot_logo) {
+               hdmi->hotplug = HDMI_HPD_ACTIVED;
+               hdmi->state = PLAY_BACK;
+               hdmi->enable = HDMI_ENABLE;
+               hdmi->display = HDMI_DISABLE;
+               hdmi->vic = uboot_vic;
+       } else {
+               hdmi->hotplug = HDMI_HPD_REMOVED;
+               hdmi->state = HDMI_SLEEP;
+               hdmi->enable = HDMI_ENABLE;
+               hdmi->display = HDMI_DISABLE;
+               hdmi->vic = HDMI_VIDEO_DEFAULT_MODE;
+       }
        hdmi->autoconfig = HDMI_AUTO_CONFIGURE;
-       hdmi->display = HDMI_DISABLE;
-
-       hdmi->vic = HDMI_VIDEO_DEFAULT_MODE;
        hdmi->audio.channel = HDMI_AUDIO_DEFAULT_CHANNEL;
        hdmi->audio.rate = HDMI_AUDIO_DEFAULT_RATE;
        hdmi->audio.word_length = HDMI_AUDIO_DEFAULT_WORD_LENGTH;
@@ -211,6 +220,10 @@ void hdmi_work(struct work_struct *work)
                hdmi->hotplug = hotplug;
        } else if (hotplug == HDMI_HPD_REMOVED) {
                hdmi_sys_sleep(hdmi);
+       } else if (hotplug == HDMI_HPD_ACTIVED) {
+               if (hdmi->insert)
+                       hdmi->insert(hdmi);
+               hdmi->state = READ_PARSE_EDID;
        }
        do {
                hdmi_sys_show_state(hdmi);
@@ -239,6 +252,9 @@ void hdmi_work(struct work_struct *work)
 #endif
                                rockchip_set_system_status(SYS_STATUS_HDMI);
                        }
+                       if (hdmi->uboot_logo) {
+                               hdmi->state = CONFIG_AUDIO;
+                       }
                        break;
                case SYSTEM_CONFIG:
                        if (hdmi->remove)
@@ -296,7 +312,17 @@ void hdmi_work(struct work_struct *work)
        } while ((hdmi->state != state_last ||
                 (rc != HDMI_ERROR_SUCESS)) &&
                 trytimes < HDMI_MAX_TRY_TIMES);
-
        hdmi_dbg(hdmi->dev, "[%s] done\n", __func__);
        mutex_unlock(&work_mutex);
 }
+
+static int __init bootloader_setup(char *str)
+{
+       if(str) {
+               printk("hdmi init vic is %s\n", str);
+               sscanf(str, "%d", &uboot_vic);
+       }
+       /*uboot_vic = 16;*/
+       return 0;
+}
+early_param("hdmi.vic", bootloader_setup);