summaryrefslogtreecommitdiff
path: root/drivers/video/mxc_hdmi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/mxc_hdmi.c')
-rw-r--r--drivers/video/mxc_hdmi.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/video/mxc_hdmi.c b/drivers/video/mxc_hdmi.c
index 34fb1b282173..9c9620c67f1d 100644
--- a/drivers/video/mxc_hdmi.c
+++ b/drivers/video/mxc_hdmi.c
@@ -52,6 +52,7 @@
#include <linux/console.h>
#include <linux/types.h>
+#include <linux/switch.h>
#include <mach/mxc_edid.h>
#include "mxc/mxc_dispdrv.h"
@@ -187,6 +188,8 @@ struct mxc_hdmi {
bool requesting_vga_for_initialization;
struct hdmi_phy_reg_config phy_config;
+ struct switch_dev sdev_audio;
+ struct switch_dev sdev_display;
};
struct i2c_client *hdmi_i2c;
@@ -1733,6 +1736,10 @@ static void mxc_hdmi_cable_connected(struct mxc_hdmi *hdmi)
/* HDMI Initialization Steps D, E, F */
switch (edid_status) {
case HDMI_EDID_SUCCESS:
+ /* centimeter to millimeter */
+ hdmi->fbi->var.width = hdmi->fbi->monspecs.max_x * 10;
+ hdmi->fbi->var.height = hdmi->fbi->monspecs.max_y * 10;
+
mxc_hdmi_edid_rebuild_modelist(hdmi);
break;
@@ -1816,9 +1823,15 @@ static void hotplug_worker(struct work_struct *work)
#endif
hdmi_set_cable_state(1);
+ switch_set_state(&hdmi->sdev_audio, 1);
+ switch_set_state(&hdmi->sdev_display, 1);
+
} else if (!(phy_int_pol & HDMI_PHY_HPD)) {
/* Plugout event */
dev_dbg(&hdmi->pdev->dev, "EVENT=plugout\n");
+ switch_set_state(&hdmi->sdev_audio, 0);
+ switch_set_state(&hdmi->sdev_display, 0);
+
hdmi_set_cable_state(0);
mxc_hdmi_abort_stream();
mxc_hdmi_cable_disconnected(hdmi);
@@ -2430,10 +2443,18 @@ static int __devinit mxc_hdmi_probe(struct platform_device *pdev)
ret = (int)hdmi->disp_mxc_hdmi;
goto edispdrv;
}
+
+ hdmi->sdev_audio.name = "hdmi_audio";
+ hdmi->sdev_display.name = "hdmi";
+ switch_dev_register(&hdmi->sdev_audio);
+ switch_dev_register(&hdmi->sdev_display);
+
mxc_dispdrv_setdata(hdmi->disp_mxc_hdmi, hdmi);
platform_set_drvdata(pdev, hdmi);
+ mxc_dispdrv_setdev(hdmi->disp_mxc_hdmi, &pdev->dev);
+
return 0;
edispdrv:
platform_device_put(hdmi->core_pdev);
@@ -2450,6 +2471,9 @@ static int mxc_hdmi_remove(struct platform_device *pdev)
fb_unregister_client(&hdmi->nb);
+ switch_dev_unregister(&hdmi->sdev_audio);
+ switch_dev_unregister(&hdmi->sdev_display);
+
mxc_dispdrv_puthandle(hdmi->disp_mxc_hdmi);
mxc_dispdrv_unregister(hdmi->disp_mxc_hdmi);
/* No new work will be scheduled, wait for running ISR */