mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 06:00:43 +00:00
sunxi: video: Add hpd option
Allow the user to specify hpd=0 as option in the video-mode env. variable, if hpd is set to 0 then the hdmi output will be brought up even if no cable is connected. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Acked-by: Ian Campbell <ijc@hellion.org.uk> Acked-by: Anatolij Gustschin <agust@denx.de>
This commit is contained in:
parent
5f33993b7e
commit
518cef20f8
1 changed files with 17 additions and 9 deletions
|
@ -53,10 +53,16 @@ static int sunxi_hdmi_hpd_detect(void)
|
|||
|
||||
udelay(1000);
|
||||
|
||||
if (readl(&hdmi->hpd) & SUNXI_HDMI_HPD_DETECT)
|
||||
return 1;
|
||||
return (readl(&hdmi->hpd) & SUNXI_HDMI_HPD_DETECT) ? 1 : 0;
|
||||
}
|
||||
|
||||
static void sunxi_hdmi_shutdown(void)
|
||||
{
|
||||
struct sunxi_ccm_reg * const ccm =
|
||||
(struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
|
||||
struct sunxi_hdmi_reg * const hdmi =
|
||||
(struct sunxi_hdmi_reg *)SUNXI_HDMI_BASE;
|
||||
|
||||
/* No need to keep these running */
|
||||
clrbits_le32(&hdmi->ctrl, SUNXI_HDMI_CTRL_ENABLE);
|
||||
clrbits_le32(&ccm->hdmi_clk_cfg, CCM_HDMI_CTRL_GATE);
|
||||
clrbits_le32(&ccm->ahb_gate1, 1 << AHB_GATE_OFFSET_HDMI);
|
||||
|
@ -64,8 +70,6 @@ static int sunxi_hdmi_hpd_detect(void)
|
|||
clrbits_le32(&ccm->ahb_reset1_cfg, 1 << AHB_RESET_OFFSET_HDMI);
|
||||
#endif
|
||||
clock_set_pll3(0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -361,7 +365,7 @@ void *video_hw_init(void)
|
|||
const struct ctfb_res_modes *mode;
|
||||
const char *options;
|
||||
unsigned int depth;
|
||||
int ret;
|
||||
int ret, hpd;
|
||||
|
||||
memset(&sunxi_display, 0, sizeof(struct sunxi_display));
|
||||
|
||||
|
@ -370,12 +374,16 @@ void *video_hw_init(void)
|
|||
gd->fb_base = gd->ram_top;
|
||||
|
||||
video_get_ctfb_res_modes(RES_MODE_1024x768, 24, &mode, &depth, &options);
|
||||
hpd = video_get_option_int(options, "hpd", 1);
|
||||
|
||||
/* Always call hdp_detect, as it also enables various clocks, etc. */
|
||||
ret = sunxi_hdmi_hpd_detect();
|
||||
if (!ret)
|
||||
if (hpd && !ret) {
|
||||
sunxi_hdmi_shutdown();
|
||||
return NULL;
|
||||
|
||||
printf("HDMI connected.\n");
|
||||
}
|
||||
if (ret)
|
||||
printf("HDMI connected: ");
|
||||
|
||||
if (mode->vmode != FB_VMODE_NONINTERLACED) {
|
||||
printf("Only non-interlaced modes supported, falling back to 1024x768\n");
|
||||
|
|
Loading…
Reference in a new issue