diff options
Diffstat (limited to 'drivers/video/omap2/dss/hdmi.c')
-rw-r--r-- | drivers/video/omap2/dss/hdmi.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c index 3b10e18efa22..23daf7dcf54a 100644 --- a/drivers/video/omap2/dss/hdmi.c +++ b/drivers/video/omap2/dss/hdmi.c @@ -931,15 +931,22 @@ static struct omap_dss_device * __init hdmi_find_dssdev(struct platform_device * static void __init hdmi_probe_pdata(struct platform_device *pdev) { + struct omap_dss_device *plat_dssdev; struct omap_dss_device *dssdev; struct omap_dss_hdmi_data *priv; int r; - dssdev = hdmi_find_dssdev(pdev); + plat_dssdev = hdmi_find_dssdev(pdev); + if (!plat_dssdev) + return; + + dssdev = dss_alloc_and_init_device(&pdev->dev); if (!dssdev) return; + dss_copy_device_pdata(dssdev, plat_dssdev); + priv = dssdev->data; hdmi.ct_cp_hpd_gpio = priv->ct_cp_hpd_gpio; @@ -951,12 +958,14 @@ static void __init hdmi_probe_pdata(struct platform_device *pdev) r = hdmi_init_display(dssdev); if (r) { DSSERR("device %s init failed: %d\n", dssdev->name, r); + dss_put_device(dssdev); return; } - r = omap_dss_register_device(dssdev, &pdev->dev); + r = dss_add_device(dssdev); if (r) { DSSERR("device %s register failed: %d\n", dssdev->name, r); + dss_put_device(dssdev); return; } } @@ -1020,7 +1029,7 @@ static int __exit omapdss_hdmihw_remove(struct platform_device *pdev) { device_for_each_child(&pdev->dev, NULL, hdmi_remove_child); - omap_dss_unregister_child_devices(&pdev->dev); + dss_unregister_child_devices(&pdev->dev); hdmi_panel_exit(); |