int __init atlantis_regulator_init(void)
{
	struct board_info board_info;
	void __iomem *pmc = IO_ADDRESS(TEGRA_PMC_BASE);
	u32 pmc_ctrl;
	int i;
	bool wdt_disable;

	/* configure the power management controller to trigger PMU
	 * interrupts when high */
	pmc_ctrl = readl(pmc + PMC_CTRL);
	writel(pmc_ctrl & ~PMC_CTRL_INTR_LOW, pmc + PMC_CTRL);

	tegra_get_board_info(&board_info);
	for (i = 0; i < PALMAS_NUM_REGS ; i++) {
		pmic_platform.reg_data[i] = atlantis_reg_data[i];
		pmic_platform.reg_init[i] = atlantis_reg_init[i];
	}

	reg_init_data_ldo5.tracking_regulator = PALMAS_REG_SMPS6;
	/* Enable full constraints to disable unused rails */
	regulator_has_full_constraints();

	/* Set LDO11 startup time to 600us */
	reg_idata_ldo11.constraints.startup_delay = 600;

	if (((board_info.fab != BOARD_FAB_A00) ||
		 (board_info.board_id == BOARD_E1740)))
			reg_idata_regen7.num_consumer_supplies = 0;

	if (board_info.sku == BOARD_SKU_110) {
		pmic_platform.reg_data[PALMAS_REG_SMPS12] = NULL;
		pmic_platform.reg_init[PALMAS_REG_SMPS12] = NULL;

		lp8755_regulator_init();
	} else if (board_info.sku == BOARD_SKU_100 ||
		 board_info.board_id == BOARD_E1740) {
		reg_init_data_smps12.roof_floor = PALMAS_EXT_CONTROL_ENABLE1;
	} else if (board_info.sku == BOARD_SKU_120) {
		pmic_platform.reg_data[PALMAS_REG_SMPS12] =
				atlantis_reg_data[PALMAS_REG_SMPS6];
		pmic_platform.reg_data[PALMAS_REG_SMPS12]->constraints.name =
				palmas_rails(smps12);
		pmic_platform.reg_init[PALMAS_REG_SMPS12] =
				atlantis_reg_init[PALMAS_REG_SMPS6];
		pmic_platform.reg_data[PALMAS_REG_SMPS6] = NULL;
		pmic_platform.reg_init[PALMAS_REG_SMPS6] = NULL;
		reg_init_data_ldo5.config_flags =
				PALMAS_REGULATOR_CONFIG_TRACKING_ENABLE;
		reg_init_data_ldo5.tracking_regulator = PALMAS_REG_SMPS12;

		lp8755_regulator_init();
	}

	platform_device_register(&power_supply_extcon_device);
	if (board_info.board_id == BOARD_E1670) {
		gadc_thermal_battery_pdata.adc_temp_lookup =
				atlanties_ers_batt_temperature_table;
		gadc_thermal_battery_pdata.lookup_table_size =
				ARRAY_SIZE(atlanties_ers_batt_temperature_table);
		gadc_thermal_battery_pdata.first_index_temp = 119;
		gadc_thermal_battery_pdata.last_index_temp = -40;
	} else if (board_info.board_id == BOARD_E1740) {
		gadc_thermal_battery_pdata.adc_temp_lookup = atlantis_ffd_batt_temperature_table;
		gadc_thermal_battery_pdata.lookup_table_size = ARRAY_SIZE(atlantis_ffd_batt_temperature_table);
		gadc_thermal_battery_pdata.first_index_temp = 125;
		gadc_thermal_battery_pdata.last_index_temp = -40;
	}

	if (get_power_supply_type() == POWER_SUPPLY_TYPE_BATTERY) {
		palmas_pdata.battery_pdata->is_battery_present = true;
		palmas_pdata.charger_pdata->bcharger_pdata =
						&palmas_bcharger_pdata;
		platform_device_register(&gadc_thermal_battery);
	}

	wdt_disable = is_pmic_wdt_disabled_at_boot();
	if (wdt_disable)
		palmas_pdata.watchdog_timer_initial_period = 0;

	i2c_register_board_info(4, palma_device,
			ARRAY_SIZE(palma_device));

	return 0;
}
static int lp8755_probe(struct i2c_client *client,
			const struct i2c_device_id *id)
{
	int ret, icnt;
	struct lp8755_chip *pchip;
	struct lp8755_platform_data *pdata = client->dev.platform_data;

	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
		dev_err(&client->dev, "i2c functionality check fail.\n");
		return -EOPNOTSUPP;
	}

	pchip = devm_kzalloc(&client->dev,
			     sizeof(struct lp8755_chip), GFP_KERNEL);
	if (!pchip)
		return -ENOMEM;

	pchip->dev = &client->dev;
	pchip->regmap = devm_regmap_init_i2c(client, &lp8755_regmap);
	if (IS_ERR(pchip->regmap)) {
		ret = PTR_ERR(pchip->regmap);
		dev_err(&client->dev, "fail to allocate regmap %d\n", ret);
		return ret;
	}
	i2c_set_clientdata(client, pchip);

	if (pdata != NULL) {
		pchip->pdata = pdata;
		pchip->mphase = pdata->mphase;
	} else {
		pchip->pdata = devm_kzalloc(pchip->dev,
					    sizeof(struct lp8755_platform_data),
					    GFP_KERNEL);
		if (!pchip->pdata)
			return -ENOMEM;
		ret = lp8755_init_data(pchip);
		if (ret < 0) {
			dev_err(&client->dev, "fail to initialize chip\n");
			return ret;
		}
	}

	ret = lp8755_regulator_init(pchip);
	if (ret < 0) {
		dev_err(&client->dev, "fail to initialize regulators\n");
		goto err_regulator;
	}

	pchip->irq = client->irq;
	ret = lp8755_int_config(pchip);
	if (ret < 0) {
		dev_err(&client->dev, "fail to irq config\n");
		goto err_irq;
	}

	return ret;

err_irq:
	for (icnt = 0; icnt < mphase_buck[pchip->mphase].nreg; icnt++)
		regulator_unregister(pchip->rdev[icnt]);

err_regulator:
	/* output disable */
	for (icnt = 0; icnt < LP8755_BUCK_MAX; icnt++)
		lp8755_write(pchip, icnt, 0x00);

	return ret;
}