void __init msm8960_init_fb(void)
{
	uint32_t soc_platform_version = socinfo_get_version();


	if (SOCINFO_VERSION_MAJOR(soc_platform_version) >= 3)
		mdp_pdata.mdp_rev = MDP_REV_43;

	if (cpu_is_msm8960ab())
		mdp_pdata.mdp_rev = MDP_REV_44;

	sony_viskan_add_lcd_device();
#ifdef CONFIG_FB_MSM_HDMI_MSM_PANEL
	platform_device_register(&hdmi_msm_device);
#endif
	platform_device_register(&msm_fb_device);
#ifdef CONFIG_FB_MSM_WRITEBACK_MSM_PANEL
	platform_device_register(&wfd_device);
#endif
	msm_fb_register_device("mdp", &mdp_pdata);
#ifdef CONFIG_FB_MSM_MIPI_DSI_VENDOR_DET
	if (sony_viskan_is_dric_det() == LCD_VENDOR_SAMSUNG)
		mipi_dsi_pdata.dsi_power_save = s6d6aa0_lcd_power;
	else
		mipi_dsi_pdata.dsi_power_save = r63306_lcd_power;
#endif /* CONFIG_FB_MSM_MIPI_DSI_VENDOR_DET */
	msm_fb_register_device("mipi_dsi", &mipi_dsi_pdata);
#ifdef CONFIG_MSM_BUS_SCALING
	msm_fb_register_device("dtv", &dtv_pdata);
#endif
}
void __init sony_viskan_add_lcd_device(void)
{
	int rc;
	struct lcd_panel_platform_data *pdata;

	pdata = kmalloc(sizeof(struct lcd_panel_platform_data), GFP_KERNEL);

	pdata->default_panels = default_panel_ids;
	pdata->panels = panel_ids;
	pdata->lcd_power = lcd_power;
	pdata->lcd_reset = lcd_reset;

#ifdef CONFIG_FB_MSM_MIPI_DSI_VENDOR_DET
	if (sony_viskan_is_dric_det() == LCD_VENDOR_SAMSUNG) {
		sony_viskan_lcd_device.name = MIPI_DSI_SAMSUNG_NAME;
		pdata->default_panels = default_panel_ids_s6d6aa0;
		pdata->panels = panel_ids_s6d6aa0;
	} else {
		sony_viskan_lcd_device.name = MIPI_DSI_RENESAS_NAME;
		pdata->default_panels = default_panel_ids_r63306;
		pdata->panels = panel_ids_r63306;
	}
#endif /* CONFIG_FB_MSM_MIPI_DSI_VENDOR_DET */

	sony_viskan_lcd_device.dev.platform_data = pdata;
	rc = platform_device_register(&sony_viskan_lcd_device);
	if (rc)
		dev_err(&sony_viskan_lcd_device.dev,
			"%s: platform_device_register() failed = %d\n",
			__func__, rc);

}
void __init mipi_dsi_panel_add_device(void)
{
    int rc;
    struct panel_platform_data *pdata;

    pdata = kmalloc(sizeof(struct panel_platform_data), GFP_KERNEL);
#ifndef CONFIG_FB_MSM_MIPI_DSI_VENDOR_DET
#ifdef CONFIG_FB_MSM_MIPI_DSI_RENESAS_R63306
    default_panel_ids = default_panel_ids_r63306;
    panel_ids = panel_ids_r63306;
    mipi_dsi_pdata.dsi_power_save = r63306_lcd_power;
    pdata->vreg_power = r63306_vreg_power;
    pdata->ic_vendor = NVRW_DRV_RENESAS;
#endif /*CONFIG_FB_MSM_MIPI_DSI_RENESAS_R63306*/
#ifdef CONFIG_FB_MSM_MIPI_DSI_SAMSUNG_S6D6AA0
    default_panel_ids = default_panel_ids_s6d6aa0;
    panel_ids = panel_ids_s6d6aa0;
    mipi_dsi_pdata.dsi_power_save = s6d6aa0_lcd_power;
    pdata->vreg_power = s6d6aa0_vreg_power;
    pdata->ic_vendor = NVRW_DRV_SAMSUNG;
#endif /*CONFIG_FB_MSM_MIPI_DSI_SAMSUNG_S6D6AA0*/
#ifdef CONFIG_FB_MSM_MIPI_DSI_NOVATEK_NT35565
    default_panel_ids = default_panel_ids_nt35565;
    panel_ids = panel_ids_nt35565;
    mipi_dsi_pdata.dsi_power_save = nt35565_lcd_power;
#endif /*CONFIG_FB_MSM_MIPI_DSI_NOVATEK_NT35565*/
#else /*CONFIG_FB_MSM_MIPI_DSI_VENDOR_DET*/
    if (sony_viskan_is_dric_det() == LCD_VENDOR_SAMSUNG) {
#ifdef CONFIG_FB_MSM_MIPI_DSI_SAMSUNG_S6D6AA0
        default_panel_ids = default_panel_ids_s6d6aa0;
        panel_ids = panel_ids_s6d6aa0;
        mipi_dsi_pdata.dsi_power_save = s6d6aa0_lcd_power;
        pdata->vreg_power = s6d6aa0_vreg_power;
        pdata->ic_vendor = NVRW_DRV_SAMSUNG;
#endif
    } else {
#ifdef CONFIG_FB_MSM_MIPI_DSI_RENESAS_R63306
        default_panel_ids = default_panel_ids_r63306;
        panel_ids = panel_ids_r63306;
        mipi_dsi_pdata.dsi_power_save = r63306_lcd_power;
        pdata->vreg_power = r63306_vreg_power;
        pdata->ic_vendor = NVRW_DRV_RENESAS;
#endif
    }
#endif /* CONFIG_FB_MSM_MIPI_DSI_VENDOR_DET */

    pdata->default_panels = default_panel_ids;
    pdata->panels = panel_ids;
    pdata->platform_power = lcd_power;
    pdata->platform_reset = lcd_reset;

    mipi_dsi_panel_device.dev.platform_data = pdata;
    rc = platform_device_register(&mipi_dsi_panel_device);
    if (rc)
        dev_err(&mipi_dsi_panel_device.dev,
                "%s: platform_device_register() failed = %d\n",
                __func__, rc);

}