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; 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; hdmi.ls_oe_gpio = priv->ls_oe_gpio; hdmi.hpd_gpio = priv->hpd_gpio; dssdev->channel = OMAP_DSS_CHANNEL_DIGIT; r = hdmi_init_display(dssdev); if (r) { DSSERR("device %s init failed: %d\n", dssdev->name, r); dss_put_device(dssdev); return; } r = omapdss_output_set_device(&hdmi.output, dssdev); if (r) { DSSERR("failed to connect output to new device: %s\n", dssdev->name); dss_put_device(dssdev); return; } r = dss_add_device(dssdev); if (r) { DSSERR("device %s register failed: %d\n", dssdev->name, r); omapdss_output_unset_device(&hdmi.output); hdmi_uninit_display(dssdev); dss_put_device(dssdev); return; } }
void dss_init_device(struct platform_device *pdev, struct omap_dss_device *dssdev) { struct device_attribute *attr; int i; int r; switch (dssdev->type) { #ifdef CONFIG_OMAP2_DSS_DPI case OMAP_DISPLAY_TYPE_DPI: r = dpi_init_display(dssdev); break; #endif #ifdef CONFIG_OMAP2_DSS_RFBI case OMAP_DISPLAY_TYPE_DBI: r = rfbi_init_display(dssdev); break; #endif #ifdef CONFIG_OMAP2_DSS_VENC case OMAP_DISPLAY_TYPE_VENC: r = venc_init_display(dssdev); break; #endif #ifdef CONFIG_OMAP2_DSS_SDI case OMAP_DISPLAY_TYPE_SDI: r = sdi_init_display(dssdev); break; #endif #ifdef CONFIG_OMAP2_DSS_DSI case OMAP_DISPLAY_TYPE_DSI: r = dsi_init_display(dssdev); break; #endif case OMAP_DISPLAY_TYPE_HDMI: r = hdmi_init_display(dssdev); break; default: DSSERR("Support for display '%s' not compiled in.\n", dssdev->name); return; } if (r) { DSSERR("failed to init display %s\n", dssdev->name); return; } BLOCKING_INIT_NOTIFIER_HEAD(&dssdev->state_notifiers); /* create device sysfs files */ i = 0; while ((attr = display_sysfs_attrs[i++]) != NULL) { r = device_create_file(&dssdev->dev, attr); if (r) DSSERR("failed to create sysfs file\n"); } /* create display? sysfs links */ r = sysfs_create_link(&pdev->dev.kobj, &dssdev->dev.kobj, dev_name(&dssdev->dev)); if (r) DSSERR("failed to create sysfs display link\n"); }
void dss_init_device(struct platform_device *pdev, struct omap_dss_device *dssdev) { struct device_attribute *attr; int i; int r; switch (dssdev->type) { case OMAP_DISPLAY_TYPE_DPI: #ifdef CONFIG_OMAP2_DSS_RFBI case OMAP_DISPLAY_TYPE_DBI: #endif #ifdef CONFIG_OMAP2_DSS_SDI case OMAP_DISPLAY_TYPE_SDI: #endif #ifdef CONFIG_OMAP2_DSS_DSI case OMAP_DISPLAY_TYPE_DSI: #endif #ifdef CONFIG_OMAP2_DSS_VENC case OMAP_DISPLAY_TYPE_VENC: #endif #ifdef CONFIG_SIL9022 case OMAP_DISPLAY_TYPE_HDMI: #endif break; default: DSSERR("Support for display '%s' not compiled in.\n", dssdev->name); return; } dssdev->get_resolution = default_get_resolution; dssdev->get_recommended_bpp = default_get_recommended_bpp; dssdev->wait_vsync = default_wait_vsync; switch (dssdev->type) { case OMAP_DISPLAY_TYPE_DPI: r = dpi_init_display(dssdev); break; #ifdef CONFIG_OMAP2_DSS_RFBI case OMAP_DISPLAY_TYPE_DBI: r = rfbi_init_display(dssdev); break; #endif #ifdef CONFIG_OMAP2_DSS_VENC case OMAP_DISPLAY_TYPE_VENC: r = venc_init_display(dssdev); break; #endif #ifdef CONFIG_OMAP2_DSS_SDI case OMAP_DISPLAY_TYPE_SDI: r = sdi_init_display(dssdev); break; #endif #ifdef CONFIG_OMAP2_DSS_DSI case OMAP_DISPLAY_TYPE_DSI: r = dsi_init_display(dssdev); break; #endif #ifdef CONFIG_SIL9022 case OMAP_DISPLAY_TYPE_HDMI: r = hdmi_init_display(dssdev); break; #endif default: BUG(); } if (r) { DSSERR("failed to init display %s\n", dssdev->name); return; } /* create device sysfs files */ i = 0; while ((attr = display_sysfs_attrs[i++]) != NULL) { r = device_create_file(&dssdev->dev, attr); if (r) DSSERR("failed to create sysfs file\n"); } /* create display? sysfs links */ r = sysfs_create_link(&pdev->dev.kobj, &dssdev->dev.kobj, dev_name(&dssdev->dev)); if (r) DSSERR("failed to create sysfs display link\n"); }