Exemplo n.º 1
0
void gcdb_display_init(uint32_t rev, void *base)
{

	if (!oem_panel_select(&panelstruct, &(panel.panel_info),
				 &dsi_video_mode_phy_db)) {
		dprintf(CRITICAL, "Target panel init not found!\n");
		return;
	}

	init_platform_data();

	if (dsi_panel_init(&(panel.panel_info), &panelstruct)) {
		dprintf(CRITICAL, "DSI panel init failed!\n");
		return;
	}

	panel.panel_info.mipi.mdss_dsi_phy_db = &dsi_video_mode_phy_db;

	panel.pll_clk_func = mdss_dsi_panel_clock;
	panel.power_func = mdss_dsi_panel_power;
	panel.fb.base = base;
	panel.fb.width =  panel.panel_info.xres;
	panel.fb.height =  panel.panel_info.yres;
	panel.fb.stride =  panel.panel_info.xres;
	panel.fb.bpp =  panel.panel_info.bpp;
	panel.fb.format = panel.panel_info.mipi.dst_format;
	panel.mdp_rev = rev;

	if (msm_display_init(&panel)) {
		dprintf(CRITICAL, "Display init failed!\n");
		return;
	}

	display_enable = 1;
}
static int __devinit dsi_panel_probe(struct platform_device *pdev)
{
	int rc = 0;
	static struct dsi_panel_common_pdata vendor_pdata;
	static const char *panel_name;

	pr_debug("%s:%d, debug info id=%d", __func__, __LINE__, pdev->id);
	if (!pdev->dev.of_node)
		return -ENODEV;

	panel_name = of_get_property(pdev->dev.of_node, "label", NULL);
	if (!panel_name)
		pr_debug("%s:%d, panel name not specified\n",
						__func__, __LINE__);
	else
		pr_debug("%s: Panel Name = %s\n", __func__, panel_name);

	rc = dsi_panel_init();
	if (rc) {
		pr_err("dsi_panel_init failed %d\n", rc);
		goto dsi_panel_probe_error;

	}
	rc = dsi_panel_parse_dt(pdev, &vendor_pdata, &panel_private->bl_ctrl);
	if (rc) {
		pr_err("dsi_panel_parse_dt failed %d\n", rc);
		goto dsi_panel_probe_error;
	}

	vendor_pdata.on = dsi_panel_on;
	vendor_pdata.off = dsi_panel_off;
	vendor_pdata.reset = dsi_panel_reset;
	vendor_pdata.bl_fnc = dsi_panel_bl_ctrl;

	rc = dsi_panel_device_register_v2(pdev, &vendor_pdata,
					panel_private->bl_ctrl);

	if (rc) {
		pr_err("dsi_panel_device_register_v2 failed %d\n", rc);
		goto dsi_panel_probe_error;
	}

	return 0;
dsi_panel_probe_error:
	dsi_panel_deinit();
	return rc;
}
int gcdb_display_init(const char *panel_name, uint32_t rev, void *base)
{
	int ret = NO_ERROR;
	int pan_type;

	dsi_video_mode_phy_db.pll_type = DSI_PLL_TYPE_28NM;
	pan_type = oem_panel_select(panel_name, &panelstruct, &(panel.panel_info),
				 &dsi_video_mode_phy_db);

	if (pan_type == PANEL_TYPE_DSI) {
		target_dsi_phy_config(&dsi_video_mode_phy_db);
		mdss_dsi_set_pll_src();
		if (dsi_panel_init(&(panel.panel_info), &panelstruct)) {
			dprintf(CRITICAL, "DSI panel init failed!\n");
			ret = ERROR;
			goto error_gcdb_display_init;
		}

		panel.panel_info.mipi.mdss_dsi_phy_db = &dsi_video_mode_phy_db;
		panel.pll_clk_func = mdss_dsi_panel_clock;
		panel.dfps_func = mdss_dsi_mipi_dfps_config;
		panel.power_func = mdss_dsi_panel_power;
		panel.pre_init_func = mdss_dsi_panel_pre_init;
		panel.bl_func = mdss_dsi_bl_enable;
		panel.dsi2HDMI_config = mdss_dsi2HDMI_config;
		/*
		 * If dfps enabled, reserve fb memory to store pll
		 * codes and pass pll codes values to kernel.
		 */
		if (panel.panel_info.dfps.panel_dfps.enabled) {
			panel.panel_info.dfps.dfps_fb_base = base;
			base += DFPS_PLL_CODES_SIZE;
			dprintf(SPEW, "fb_base=0x%p!\n", base);
		}

		panel.fb.base = base;
		panel.fb.width =  panel.panel_info.xres;
		panel.fb.height =  panel.panel_info.yres;
		panel.fb.stride =  panel.panel_info.xres;
		panel.fb.bpp =  panel.panel_info.bpp;
		panel.fb.format = panel.panel_info.mipi.dst_format;
	} else if (pan_type == PANEL_TYPE_EDP) {
		mdss_edp_panel_init(&(panel.panel_info));
		/* prepare func is set up at edp_panel_init */
                panel.clk_func = mdss_edp_panel_clock;
                panel.power_func = mdss_edp_panel_power;
		panel.bl_func = mdss_edp_bl_enable;
                panel.fb.format = FB_FORMAT_RGB888;
	} else {
		dprintf(CRITICAL, "Target panel init not found!\n");
		ret = ERR_NOT_SUPPORTED;
		goto error_gcdb_display_init;

	}

	panel.fb.base = base;
	panel.mdp_rev = rev;

	ret = msm_display_init(&panel);

error_gcdb_display_init:
	display_enable = ret ? 0 : 1;
	return ret;
}