/*
 * In boot loader, mddi is powered on already.
 * So, we just detect panel here, setting different power function for each
 * panel. Then we did not have to detect panel in each time mddi_client_power
 * or panel_power is called.
 *
 * jay: Nov 20, 08'
 */
int __init heroc_init_panel(void)
{
	int panel, rc;
	struct panel_data *config = &eid_client_data.panel_conf;

	if (!machine_is_heroc())
		return -1;

	B(KERN_INFO "%s: enter.\n", __func__);

	vreg_lcm_2v6 = vreg_get(0, "synt");
	if (IS_ERR(vreg_lcm_2v6))
		return PTR_ERR(vreg_lcm_2v6);

	vreg_lcm_2v85 = vreg_get(0, "gp5");
	if (IS_ERR(vreg_lcm_2v85))
		return PTR_ERR(vreg_lcm_2v85);

	panel = heroc_panel_detect();

	if (panel == PANEL_HEROC_EID_BOTTOM ||
	    panel == PANEL_EIDII ||
	    panel == PANEL_HEROC_TPO) {
		printk(KERN_INFO "%s: init %s panel\n", __func__,
			panel == PANEL_HEROC_TPO ? "TPO" : "EID");
		config->panel_id = panel;
		config->caps = MSMFB_CAP_CABC;
		if (panel == PANEL_HEROC_EID_BOTTOM || panel == PANEL_EIDII)
			config->pwm = pwm_eid;
		else
			config->pwm = pwm_tpo;
		config->shrink = 1;
		config->min_level = 3;
	} else {
		printk(KERN_ERR "unknown panel type!\n");
		return -EIO;
	}

	rc = platform_device_register(&msm_device_mdp);
	if (rc)
		return rc;

	rc = config_vsync();
	if (rc)
		return rc;

	msm_device_mddi0.dev.platform_data = &heroc_pdata;
	rc = platform_device_register(&msm_device_mddi0);
	if (rc)
		return rc;
	
	led_trigger_register_simple("lcd-backlight-gate", &heroc_lcd_backlight);
	if (IS_ERR(heroc_lcd_backlight))
		printk(KERN_ERR "%s: backlight registration failed!\n", __func__);

	return 0;
}
static int __init heroc_wifi_init(void)
{
	int ret;
	int rc = 0;
	if (!machine_is_heroc())
		return 0;


#ifdef CONFIG_WIFI_MEM_PREALLOC
	rc = heroc_init_wifi_mem();
	if (rc) {
		printk(KERN_CRIT "%s: WiFi memory init failure (%d)\n",
		       __func__, rc);
	}
#endif

	ret = platform_device_register(&wifi_ctrl_dev);
	return ret;
}