void __init *mrfl_pmic_ccsm_platform_data(void *info)
{
	struct sfi_device_table_entry *entry = info;
	static struct pmic_platform_data pmic_pdata;
	struct platform_device *pdev = NULL;
	int ret;

	pdev = platform_device_alloc(entry->name, -1);
	if (!pdev) {
		pr_err("Out of memory for SFI platform dev %s\n", entry->name);
		goto out;
	}
	pdev->dev.platform_data = &pmic_pdata;
	ret = platform_device_add(pdev);
	if (ret) {
		pr_err("Failed to add adc platform device\n");
		platform_device_put(pdev);
		goto out;
	}
	install_irq_resource(pdev, entry->irq);
#ifdef CONFIG_BQ24261_CHARGER
	pmic_pdata.cc_to_reg = bq24261_cc_to_reg;
	pmic_pdata.cv_to_reg = bq24261_cv_to_reg;
#endif
	register_rpmsg_service("rpmsg_pmic_ccsm", RPROC_SCU,
				RP_PMIC_CCSM);
out:
	return &pmic_pdata;
}
void __init *mrfl_thermal_platform_data(void *info)
{
	struct platform_device *pdev;
	struct sfi_device_table_entry *entry = info;

	pr_err("inside mrfl_thermal_platform_data\n");

	pdev = platform_device_alloc(MRFL_THERM_DEV_NAME, -1);
	if (!pdev) {
		pr_err("out of memory for SFI platform dev %s\n",
			MRFL_THERM_DEV_NAME);
		return NULL;
	}

	if (platform_device_add(pdev)) {
		pr_err("failed to add thermal platform device\n");
		platform_device_put(pdev);
		return NULL;
	}

	install_irq_resource(pdev, entry->irq);
	register_rpmsg_service("rpmsg_mrfl_thermal", RPROC_SCU,
				RP_BCOVE_THERMAL);

	return 0;
}
void __init *mrfl_ocd_platform_data(void *info)
{
	struct sfi_device_table_entry *entry = info;
	struct platform_device *pdev;

	pdev = platform_device_alloc(MRFL_OCD_DEV_NAME, -1);
	if (!pdev) {
		pr_err("out of memory for SFI platform dev %s\n",
			MRFL_OCD_DEV_NAME);
		return NULL;
	}

	if (platform_device_add(pdev)) {
		pr_err("failed to add merrifield ocd platform device\n");
		platform_device_put(pdev);
		return NULL;
	}

	install_irq_resource(pdev, entry->irq);
	ocd_data.bcu_config_data = &get_bcu_config;
	pdev->dev.platform_data	= &ocd_data;
	register_rpmsg_service("rpmsg_mrfl_ocd", RPROC_SCU, RP_MRFL_OCD);

	return &ocd_data;
}
void __init *bcove_adc_platform_data(void *info)
{
	struct platform_device *pdev = NULL;
	struct sfi_device_table_entry *entry = info;
	int ret;

	pdev = platform_device_alloc(BCOVE_ADC_DEV_NAME, -1);

	if (!pdev) {
		pr_err("out of memory for SFI platform dev %s\n",
					BCOVE_ADC_DEV_NAME);
		goto out;
	}

	if (INTEL_MID_BOARD(1, PHONE, MRFL) ||
		INTEL_MID_BOARD(1, TABLET, MRFL)) {
		bcove_adc_pdata.channel_num = BCOVE_GPADC_CH_NUM;
		bcove_adc_pdata.intr = GPADC_SRAM_INTR_ADDR;
		bcove_adc_pdata.intr_mask = MBATTEMP | MSYSTEMP | MBATT
			| MVIBATT | MCCTICK;
		bcove_adc_pdata.gpadc_iio_maps = basincove_iio_maps;
		bcove_adc_pdata.gpadc_regmaps = basincove_gpadc_regmaps;
		bcove_adc_pdata.gpadc_regs = &basincove_gpadc_regs;
		bcove_adc_pdata.gpadc_channels = basincove_adc_channels;
	} else if (INTEL_MID_BOARD(1, PHONE, MOFD) ||
		INTEL_MID_BOARD(1, TABLET, MOFD)) {
		bcove_adc_pdata.channel_num = SCOVE_GPADC_CH_NUM;
		bcove_adc_pdata.intr = GPADC_SRAM_INTR_ADDR;
		bcove_adc_pdata.intr_mask = MUSBID | MPEAK | MBATTEMP
			| MSYSTEMP | MBATT | MVIBATT | MGPMEAS | MCCTICK;
		bcove_adc_pdata.gpadc_iio_maps = shadycove_iio_maps;
		bcove_adc_pdata.gpadc_regmaps = shadycove_gpadc_regmaps;
		bcove_adc_pdata.gpadc_regs = &shadycove_gpadc_regs;
		bcove_adc_pdata.gpadc_channels = shadycove_adc_channels;
	}

	pdev->dev.platform_data = &bcove_adc_pdata;

	ret = platform_device_add(pdev);
	if (ret) {
		pr_err("failed to add bcove adc platform device\n");
		platform_device_put(pdev);
		goto out;
	}

	install_irq_resource(pdev, entry->irq);

	register_rpmsg_service("rpmsg_bcove_adc", RPROC_SCU,
				RP_BCOVE_ADC);
out:
	return &bcove_adc_pdata;
}