@@ -26,10 +26,13 @@
#include <linux/module.h>
#include <video/omapdss.h>
#include <linux/slab.h>
+#include <linux/platform_device.h>
#include "dss.h"
static struct {
+ struct omap_dss_device dssdev;
+
/* This protects the panel ops, mainly when accessing the HDMI IP. */
struct mutex lock;
#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
@@ -38,8 +41,9 @@ static struct {
#endif
} hdmi;
+static struct omap_dss_driver hdmi_driver;
-static int hdmi_panel_probe(struct omap_dss_device *dssdev)
+static int hdmi_panel_probe(struct platform_device *pdev)
{
/* Initialize default timings to VGA in DVI mode */
const struct omap_video_timings default_timings = {
@@ -59,9 +63,22 @@ static int hdmi_panel_probe(struct omap_dss_device *dssdev)
.interlace = false,
};
+ struct omap_dss_hdmi_data *pdata = dev_get_platdata(&pdev->dev);
+ struct omap_dss_device *dssdev = &hdmi.dssdev;
+ int r;
+
DSSDBG("ENTER hdmi_panel_probe\n");
dssdev->panel.timings = default_timings;
+ dssdev->driver = &hdmi_driver;
+ dssdev->name = "hdmi";
+ dssdev->panel_dev = &pdev->dev;
+
+ /*
+ * XXX for now, the hdmi panel's platform data contains the gpios for
+ * the tpd level shifter chip, so we pass this data to the hdmi driver.
+ */
+ dssdev->data = pdata;
DSSDBG("hdmi_panel_probe x_res= %d y_res = %d\n",
dssdev->panel.timings.x_res,
@@ -69,12 +86,19 @@ static int hdmi_panel_probe(struct omap_dss_device *dssdev)
omapdss_hdmi_display_set_timing(dssdev, &dssdev->panel.timings);
+ r = omap_hdmi_register_panel(dssdev);
+ if (r) {
+ DSSERR("Failed to register panel\n");
+ return r;
+ }
+
return 0;
}
-static void hdmi_panel_remove(struct omap_dss_device *dssdev)
+static int hdmi_panel_remove(struct platform_device *pdev)
{
-
+ omap_hdmi_free_panel(&hdmi.dssdev);
+ return 0;
}
#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
@@ -375,8 +399,6 @@ err:
}
static struct omap_dss_driver hdmi_driver = {
- .probe = hdmi_panel_probe,
- .remove = hdmi_panel_remove,
.enable = hdmi_panel_enable,
.disable = hdmi_panel_disable,
.get_timings = hdmi_get_timings,
@@ -384,15 +406,21 @@ static struct omap_dss_driver hdmi_driver = {
.check_timings = hdmi_check_timings,
.read_edid = hdmi_read_edid,
.detect = hdmi_detect,
+ .get_resolution = omapdss_default_get_resolution,
.audio_enable = hdmi_panel_audio_enable,
.audio_disable = hdmi_panel_audio_disable,
.audio_start = hdmi_panel_audio_start,
.audio_stop = hdmi_panel_audio_stop,
.audio_supported = hdmi_panel_audio_supported,
.audio_config = hdmi_panel_audio_config,
- .driver = {
- .name = "hdmi_panel",
- .owner = THIS_MODULE,
+};
+
+static struct platform_driver hdmi_panel_platform_driver = {
+ .probe = hdmi_panel_probe,
+ .remove = hdmi_panel_remove,
+ .driver = {
+ .name = "hdmi_panel",
+ .owner = THIS_MODULE,
},
};
@@ -404,11 +432,11 @@ int hdmi_panel_init(void)
spin_lock_init(&hdmi.audio_lock);
#endif
- return omap_dss_register_driver(&hdmi_driver);
+ return platform_driver_register(&hdmi_panel_platform_driver);
}
void hdmi_panel_exit(void)
{
- omap_dss_unregister_driver(&hdmi_driver);
+ platform_driver_unregister(&hdmi_panel_platform_driver);
}
Convert HDMI driver from omap_dss_driver to a platform driver. The driver uses the new panel support from omapdss. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> --- drivers/video/omap2/dss/hdmi_panel.c | 48 +++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 10 deletions(-)