コード例 #1
0
static void platform_clvp_init_chrg_params(
		struct bq24192_platform_data *pdata)
{
	if (msic_battery_check())
		pdata->sfi_tabl_present = true;
	else
		pdata->sfi_tabl_present = false;

	pdata->throttle_states = bq24192_throttle_states;
	pdata->supplied_to = bq24192_supplied_to;
	pdata->num_throttle_states = ARRAY_SIZE(bq24192_throttle_states);
	pdata->num_supplicants = ARRAY_SIZE(bq24192_supplied_to);
	pdata->supported_cables = POWER_SUPPLY_CHARGER_TYPE_USB;
	pdata->init_platform_data = initialize_platform_data;
	pdata->get_irq_number = platform_get_irq_number;
	pdata->drive_vbus = platform_drive_vbus;
	pdata->get_battery_pack_temp = NULL;
	pdata->query_otg = NULL;
	pdata->free_platform_data = platform_free_data;
	pdata->slave_mode = 0;
	pdata->max_cc = 1216;	/* 1216 mA */
	pdata->max_cv = 4200;	/* 4200 mV */
	pdata->max_temp = 60;	/* 60 DegC */
	pdata->min_temp = 0;	/* 0 DegC */

#ifndef CONFIG_ACPI
	register_rpmsg_service("rpmsg_bq24192", RPROC_SCU,
				RP_BQ24192);
	/* WA for pmic rpmsg service registration
	   for power source detection driver */
	register_rpmsg_service("rpmsg_pmic_charger", RPROC_SCU,
				RP_PMIC_CHARGER);
#endif
}
コード例 #2
0
void __init *msic_thermal_platform_data(void)
{
	struct platform_device *pdev;

	pdev = platform_device_alloc(MSIC_THERM_DEV_NAME, -1);
	if (!pdev) {
		pr_err("out of memory for SFI platform dev %s\n",
			MSIC_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;
	}

	if (INTEL_MID_BOARD(1, PHONE, CLVTP) ||
			(INTEL_MID_BOARD(1, TABLET, CLVT)))
		pdev->dev.platform_data = &pdata[ctp_thermal];
	else if (INTEL_MID_BOARD(2, PHONE, MFLD, LEX, ENG) ||
			(INTEL_MID_BOARD(2, PHONE, MFLD, LEX, PRO)))
		pdev->dev.platform_data = &pdata[lex_thermal];
	else
		pdev->dev.platform_data = &pdata[mfld_thermal];

	register_rpmsg_service("rpmsg_mid_thermal", RPROC_SCU, RP_MSIC_THERMAL);

	return 0;
}
コード例 #3
0
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;
}
コード例 #4
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;
}
コード例 #5
0
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;
}
コード例 #6
0
void *ctp_audio_platform_data(void *info)
{
	struct platform_device *pdev;
	int ret;
	struct sfi_device_table_entry *pentry = info;
	char name[SFI_NAME_LEN+1];
	printk("ctp_audio_platform_data \n");
	ctp_audio_pdata.codec_gpio_hsdet = get_gpio_by_name("gpio_plugdet");
	ctp_audio_pdata.codec_gpio_button = get_gpio_by_name("CODEC_INT_N");
	/* ctp_audio_pdata.codec_gpio_dmic = GPIO_DMIC_1_EN; */

	/*FIXME: hard-code GPIO info before IFWI ready */
	ctp_audio_pdata.codec_gpio_hsdet = 34;
	ctp_audio_pdata.codec_gpio_button = 32;
	ret = add_sst_platform_device();
	if (ret < 0)
		return NULL;

	pdev = platform_device_alloc("hdmi-audio", -1);
	if (!pdev) {
		pr_err("failed to allocate hdmi-audio platform device\n");
		return NULL;
	}

	ret = platform_device_add(pdev);
	if (ret) {
		pr_err("failed to add hdmi-audio platform device\n");
		platform_device_put(pdev);
		return NULL;
	}

	/* DEV names from IFWI is not properly terminated.
	This causes id comparision to fail.
	Make a copy of name and make sure null terminated */
	memset(name, 0, sizeof(name));
	strncpy(name, pentry->name, SFI_NAME_LEN);
	pdev = platform_device_alloc(name, -1);
	if (!pdev) {
		pr_err("failed to allocate clvcs_audio platform device\n");
		return NULL;
	}

	ret = platform_device_add(pdev);
	if (ret) {
		pr_err("failed to add clvcs_audio platform device\n");
		platform_device_put(pdev);
		return NULL;
	}
	if (platform_device_add_data(pdev, &ctp_audio_pdata,
			sizeof(struct ctp_audio_platform_data))) {
		pr_err("failed to add ctp_audio platform data\n");
		platform_device_put(pdev);
		return NULL;
	}

	register_rpmsg_service("rpmsg_msic_clv_audio", RPROC_SCU,
				RP_MSIC_CLV_AUDIO);
	return NULL;
}
コード例 #7
0
void __init *msic_gpio_platform_data(void *info)
{
	struct platform_device *pdev = NULL;
	struct sfi_device_table_entry *entry = info;
	static struct intel_msic_gpio_pdata msic_gpio_pdata;
	int ret;
	int gpio;
	struct resource res;

	pdev = platform_device_alloc(MSIC_GPIO_DEVICE_NAME, -1);

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

	gpio = get_gpio_by_name("msic_gpio_base");

	if (gpio < 0)
		return NULL;

	/* Basincove PMIC GPIO has total 8 GPIO pins,
	 * GPIO[5:2,0] support 1.8V, GPIO[7:6,1] support 1.8V and 3.3V,
	 * We group GPIO[5:2] to low voltage and GPIO[7:6] to
	 * high voltage. Because the CTL registers are contiguous,
	 * this grouping method doesn't affect the driver usage but
	 * easy for the driver sharing among multiple platforms.
	 */
	msic_gpio_pdata.ngpio_lv = 6;
	msic_gpio_pdata.ngpio_hv = 2;
	msic_gpio_pdata.gpio0_lv_ctlo = 0x7E;
	msic_gpio_pdata.gpio0_lv_ctli = 0x8E;
	msic_gpio_pdata.gpio0_hv_ctlo = 0x84;
	msic_gpio_pdata.gpio0_hv_ctli = 0x94;

	msic_gpio_pdata.can_sleep = 1;
	msic_gpio_pdata.gpio_base = gpio;

	pdev->dev.platform_data = &msic_gpio_pdata;

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

	res.name = "IRQ",
	res.flags = IORESOURCE_IRQ,
	res.start = entry->irq;
	platform_device_add_resources(pdev, &res, 1);

	register_rpmsg_service("rpmsg_msic_gpio", RPROC_SCU, RP_MSIC_GPIO);

	return &msic_gpio_pdata;
}
コード例 #8
0
void *merfld_audio_platform_data(void *info)
{
	struct platform_device *pdev;
	int ret;

	pr_debug("in %s\n", __func__);

	ret = add_sst_platform_device();
	if (ret < 0) {
		pr_err("%s failed to sst_platform device\n", __func__);
		return NULL;
	}

	pdev = platform_device_alloc("hdmi-audio", -1);
	if (!pdev) {
		pr_err("failed to allocate hdmi-audio platform device\n");
		return NULL;
	}

	ret = platform_device_add(pdev);
	if (ret) {
		pr_err("failed to add hdmi-audio platform device\n");
		platform_device_put(pdev);
		return NULL;
	}

	/* request the gpios for audio */
	mrfld_audio_pdata.codec_gpio = get_gpio_by_name("audiocodec_int");
	mrfld_audio_pdata.codec_rst = get_gpio_by_name("audiocodec_rst");

	pdev = platform_device_alloc("mrfld_lm49453", -1);
	if (!pdev) {
		pr_err("failed to allocate mrfld_lm49453 platform device\n");
		return NULL;
	}

	ret = platform_device_add(pdev);
	if (ret) {
		pr_err("failed to add mrfld_lm49453 platform device\n");
		platform_device_put(pdev);
		return NULL;
	}
	if (platform_device_add_data(pdev, &mrfld_audio_pdata,
				     sizeof(mrfld_audio_pdata))) {
		pr_err("failed to add mrfld_lm49453 platform data\n");
		platform_device_put(pdev);
		return NULL;
	}

	register_rpmsg_service("rpmsg_msic_mrfld_audio", RPROC_SCU,
				RP_MSIC_MRFLD_AUDIO);

	return NULL;
}
コード例 #9
0
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;
}
コード例 #10
0
void *merfld_wm8958_audio_platform_data(void *info)
{
	struct platform_device *pdev;
	int ret;

	ret = add_sst_platform_device();
	if (ret < 0) {
		pr_err("%s failed to sst_platform device\n", __func__);
		return NULL;
	}

	pdev = platform_device_alloc("hdmi-audio", -1);
	if (!pdev) {
		pr_err("failed to allocate hdmi-audio platform device\n");
		return NULL;
	}

	ret = platform_device_add(pdev);
	if (ret) {
		pr_err("failed to add hdmi-audio platform device\n");
		platform_device_put(pdev);
		return NULL;
	}

	pdev = platform_device_alloc("mrfld_wm8958", -1);
	if (!pdev) {
		pr_err("failed to allocate mrfld_wm8958 platform device\n");
		return NULL;
	}

	ret = platform_device_add(pdev);
	if (ret) {
		pr_err("failed to add mrfld_wm8958 platform device\n");
		platform_device_put(pdev);
		return NULL;
	}
	if (platform_device_add_data(pdev, &mrfld_audio_pdata,
				     sizeof(mrfld_audio_pdata))) {
		pr_err("failed to add mrfld_wm8958 platform data\n");
		platform_device_put(pdev);
		return NULL;
	}

	register_rpmsg_service("rpmsg_mrfld_wm8958_audio", RPROC_SCU,
				RP_MSIC_MRFLD_AUDIO);

	return NULL;
}
コード例 #11
0
static int __init intel_scu_flis_init(void)
{
	int ret;
	struct platform_device *pdev = NULL;
	static struct intel_scu_flis_platform_data flis_pdata;

	if (INTEL_MID_BOARD(1, PHONE, CLVTP) ||
		INTEL_MID_BOARD(1, TABLET, CLVT)) {
		flis_pdata.pin_t = ctp_pin_table;
		flis_pdata.pin_num = CTP_PIN_NUM;
	} else {
		/* currently runtime flis config is supported on CLV only */
		return -EINVAL;
	}

	pdev = platform_device_alloc(FLIS_DEVICE_NAME, -1);
	if (!pdev) {
		pr_err("out of memory for platform dev %s\n", FLIS_DEVICE_NAME);
		ret = -EINVAL;
		goto out;
	}

	pdev->dev.platform_data = &flis_pdata;

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

	register_rpmsg_service("rpmsg_flis", RPROC_SCU, RP_FLIS_ACCESS);

	pr_info("intel_scu_flis platform device created\n");
out:
	return ret;
}
コード例 #12
0
static int __init fugu_led_init(void)
{
	register_rpmsg_service("rpmsg_fugu_led", RPROC_SCU,
				RP_PMIC_ACCESS);
	return 0;
}