From 831bbd76da80cf5c7986262e39c872dfc0262a95 Mon Sep 17 00:00:00 2001 From: Erik Gilling Date: Mon, 18 Oct 2010 15:38:22 -0700 Subject: [PATCH] video: tegra: add hdmi switch_dev for hotplug notifications Change-Id: I0454179633835d35367bc5c28513319e3aa6a069 Signed-off-by: Erik Gilling --- drivers/video/tegra/dc/hdmi.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/video/tegra/dc/hdmi.c b/drivers/video/tegra/dc/hdmi.c index 9a2af8bfa324..4be656e35125 100644 --- a/drivers/video/tegra/dc/hdmi.c +++ b/drivers/video/tegra/dc/hdmi.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -52,6 +53,8 @@ struct tegra_dc_hdmi_data { struct clk *disp1_clk; struct clk *disp2_clk; + + struct switch_dev hpd_switch; }; const struct fb_videomode tegra_dc_hdmi_supported_modes[] = { @@ -431,12 +434,12 @@ static bool tegra_dc_hdmi_detect(struct tegra_dc *dc) int err; if (!tegra_dc_hdmi_hpd(dc)) - return false; + goto fail; err = tegra_edid_get_monspecs(hdmi->edid, &specs); if (err < 0) { dev_err(&dc->ndev->dev, "error reading edid\n"); - return false; + goto fail; } /* monitors like to lie about these but they are still useful for @@ -446,8 +449,13 @@ static bool tegra_dc_hdmi_detect(struct tegra_dc *dc) dc->out->v_size = specs.max_y * 1000; tegra_fb_update_monspecs(dc->fb, &specs, tegra_dc_hdmi_mode_filter); + switch_set_state(&hdmi->hpd_switch, 1); dev_info(&dc->ndev->dev, "display detected\n"); return true; + +fail: + switch_set_state(&hdmi->hpd_switch, 0); + return false; } @@ -557,6 +565,9 @@ static int tegra_dc_hdmi_init(struct tegra_dc *dc) hdmi->disp1_clk = disp1_clk; hdmi->disp2_clk = disp2_clk; + hdmi->hpd_switch.name = "hdmi"; + switch_dev_register(&hdmi->hpd_switch); + dc->out->depth = 24; tegra_dc_set_outdata(dc, hdmi); @@ -587,6 +598,7 @@ static void tegra_dc_hdmi_destroy(struct tegra_dc *dc) free_irq(gpio_to_irq(dc->out->hotplug_gpio), dc); cancel_delayed_work_sync(&hdmi->work); + switch_dev_unregister(&hdmi->hpd_switch); iounmap(hdmi->base); release_resource(hdmi->base_res); clk_put(hdmi->clk); -- 2.34.1