Import old BD71837 driver from 4.9.51-imx

- This has some special customizations, so hang on to the old one.

Change-Id: Ida418b9772ccdbbf74c90bddd45c1539c2aa8668
diff --git a/drivers/regulator/bd71837-regulator.c b/drivers/regulator/bd71837-regulator.c
index 0052f02..9099e0f 100644
--- a/drivers/regulator/bd71837-regulator.c
+++ b/drivers/regulator/bd71837-regulator.c
@@ -101,6 +101,8 @@ static struct regulator_ops bd71837_fixed_regulator_ops = {
 };
 
 static struct regulator_ops bd71837_buck_regulator_ops = {
+	.enable = regulator_enable_regmap,
+	.disable = regulator_disable_regmap,
 	.is_enabled = regulator_is_enabled_regmap,
 	.list_voltage = regulator_list_voltage_linear_range,
 	.set_voltage_sel = regulator_set_voltage_sel_regmap,
@@ -109,6 +111,8 @@ static struct regulator_ops bd71837_buck_regulator_ops = {
 };
 
 static struct regulator_ops bd71837_buck1234_regulator_ops = {
+	.enable = regulator_enable_regmap,
+	.disable = regulator_disable_regmap,
 	.is_enabled = regulator_is_enabled_regmap,
 	.list_voltage = regulator_list_voltage_linear_range,
 	.set_voltage_sel = regulator_set_voltage_sel_regmap,
@@ -234,7 +238,9 @@ static const struct regulator_desc bd71837_regulators[] = {
 		.vsel_reg = BD71837_REG_BUCK1_VOLT_RUN,
 		.vsel_mask = BUCK1_RUN_MASK,
 		.enable_reg = BD71837_REG_BUCK1_CTRL,
-		.enable_mask = BUCK1_SEL|BUCK1_EN,
+		.enable_mask = BUCK1_SEL,
+		.enable_is_inverted = 1,
+		.enable_time  = 500,
 		.owner = THIS_MODULE,
 	},
 	{
@@ -248,7 +254,9 @@ static const struct regulator_desc bd71837_regulators[] = {
 		.vsel_reg = BD71837_REG_BUCK2_VOLT_RUN,
 		.vsel_mask = BUCK2_RUN_MASK,
 		.enable_reg = BD71837_REG_BUCK2_CTRL,
-		.enable_mask = BUCK2_SEL|BUCK2_EN,
+		.enable_mask = BUCK2_SEL,
+		.enable_is_inverted = 1,
+		.enable_time  = 500,
 		.owner = THIS_MODULE,
 	},
 	{
@@ -262,7 +270,9 @@ static const struct regulator_desc bd71837_regulators[] = {
 		.vsel_reg = BD71837_REG_BUCK3_VOLT_RUN,
 		.vsel_mask = BUCK3_RUN_MASK,
 		.enable_reg = BD71837_REG_BUCK3_CTRL,
-		.enable_mask = BUCK3_SEL|BUCK3_EN,
+		.enable_mask = BUCK3_SEL,
+		.enable_is_inverted = 1,
+		.enable_time  = 500,
 		.owner = THIS_MODULE,
 	},
 	{
@@ -276,7 +286,9 @@ static const struct regulator_desc bd71837_regulators[] = {
 		.vsel_reg = BD71837_REG_BUCK4_VOLT_RUN,
 		.vsel_mask = BUCK4_RUN_MASK,
 		.enable_reg = BD71837_REG_BUCK4_CTRL,
-		.enable_mask = BUCK4_SEL|BUCK4_EN,
+		.enable_mask = BUCK4_SEL,
+		.enable_is_inverted = 1,
+		.enable_time  = 500,
 		.owner = THIS_MODULE,
 	},
 	{
@@ -290,7 +302,8 @@ static const struct regulator_desc bd71837_regulators[] = {
 		.vsel_reg = BD71837_REG_BUCK5_VOLT,
 		.vsel_mask = BUCK5_MASK,
 		.enable_reg = BD71837_REG_BUCK5_CTRL,
-		.enable_mask = BUCK5_SEL|BUCK5_EN,
+		.enable_mask = BUCK5_SEL,
+		.enable_is_inverted = 1,
 		.owner = THIS_MODULE,
 	},
 	{
@@ -304,7 +317,8 @@ static const struct regulator_desc bd71837_regulators[] = {
 		.vsel_reg = BD71837_REG_BUCK6_VOLT,
 		.vsel_mask = BUCK6_MASK,
 		.enable_reg = BD71837_REG_BUCK6_CTRL,
-		.enable_mask = BUCK6_SEL|BUCK6_EN,
+		.enable_mask = BUCK6_SEL,
+		.enable_is_inverted = 1,
 		.owner = THIS_MODULE,
 	},
 	{
@@ -318,7 +332,8 @@ static const struct regulator_desc bd71837_regulators[] = {
 		.vsel_reg = BD71837_REG_BUCK7_VOLT,
 		.vsel_mask = BUCK7_MASK,
 		.enable_reg = BD71837_REG_BUCK7_CTRL,
-		.enable_mask = BUCK7_SEL|BUCK7_EN,
+		.enable_mask = BUCK7_SEL,
+		.enable_is_inverted = 1,
 		.owner = THIS_MODULE,
 	},
 	{
@@ -332,7 +347,8 @@ static const struct regulator_desc bd71837_regulators[] = {
 		.vsel_reg = BD71837_REG_BUCK8_VOLT,
 		.vsel_mask = BUCK8_MASK,
 		.enable_reg = BD71837_REG_BUCK8_CTRL,
-		.enable_mask = BUCK8_SEL|BUCK8_EN,
+		.enable_mask = BUCK8_SEL,
+		.enable_is_inverted = 1,
 		.owner = THIS_MODULE,
 	},
 	{
@@ -346,7 +362,8 @@ static const struct regulator_desc bd71837_regulators[] = {
 		.vsel_reg = BD71837_REG_LDO1_VOLT,
 		.vsel_mask = LDO1_MASK,
 		.enable_reg = BD71837_REG_LDO1_VOLT,
-		.enable_mask = LDO1_EN,
+		.enable_mask = LDO1_SEL,
+		.enable_is_inverted = 1,
 		.owner = THIS_MODULE,
 	},
 	/*
@@ -361,7 +378,8 @@ static const struct regulator_desc bd71837_regulators[] = {
 		.n_voltages = BD71837_LDO2_VOLTAGE_NUM,
 		.min_uV = 900000,
 		.enable_reg = BD71837_REG_LDO2_VOLT,
-		.enable_mask = LDO2_EN,
+		.enable_mask = LDO2_SEL,
+		.enable_is_inverted = 1,
 		.owner = THIS_MODULE,
 	},
 	{
@@ -375,7 +393,8 @@ static const struct regulator_desc bd71837_regulators[] = {
 		.vsel_reg = BD71837_REG_LDO3_VOLT,
 		.vsel_mask = LDO3_MASK,
 		.enable_reg = BD71837_REG_LDO3_VOLT,
-		.enable_mask = LDO3_EN,
+		.enable_mask = LDO3_SEL,
+		.enable_is_inverted = 1,
 		.owner = THIS_MODULE,
 	},
 	{
@@ -389,7 +408,8 @@ static const struct regulator_desc bd71837_regulators[] = {
 		.vsel_reg = BD71837_REG_LDO4_VOLT,
 		.vsel_mask = LDO4_MASK,
 		.enable_reg = BD71837_REG_LDO4_VOLT,
-		.enable_mask = LDO4_EN,
+		.enable_mask = LDO4_SEL,
+		.enable_is_inverted = 1,
 		.owner = THIS_MODULE,
 	},
 	{
@@ -699,8 +719,8 @@ static int bd71837_buck1234_dvs_init(struct bd71837_pmic *pmic)
 	u8 reg_run, reg_idle, reg_susp;
 	u8 reg_run_msk, reg_idle_msk, reg_susp_msk;
 
-	for (i = 0; i < BD71837_DVS_BUCK_NUM; i++, buck_dvs++) {
-		switch (i) {
+	for(i = 0; i < BD71837_DVS_BUCK_NUM; i++, buck_dvs++) {
+		switch(i) {
 		case 0:
 		default:
 			reg_run = BD71837_REG_BUCK1_VOLT_RUN;
@@ -731,37 +751,37 @@ static int bd71837_buck1234_dvs_init(struct bd71837_pmic *pmic)
 			break;
 		}
 
-		dev_dbg(pmic->dev, "Buck%d: DVS Run-Idle-Susp[%d - %d - %d].\n", i+1, buck_dvs->voltage[0], buck_dvs->voltage[1], buck_dvs->voltage[2]);
-		if (reg_run > 0) {
+		dev_info(pmic->dev, "Buck%d: DVS Run-Idle-Susp[%d - %d - %d].\n", i+1, buck_dvs->voltage[0], buck_dvs->voltage[1], buck_dvs->voltage[2]);
+		if(reg_run > 0) {
 			selector = regulator_map_voltage_iterate(pmic->rdev[i], buck_dvs->voltage[0], buck_dvs->voltage[0]);
-			if (selector < 0) {
-				dev_dbg(pmic->dev, "%s(): not found selector for Run voltage [%d]\n", __func__, buck_dvs->voltage[0]);
+			if(selector < 0) {
+				dev_err(pmic->dev, "%s(): not found selector for Run voltage [%d]\n", __func__, buck_dvs->voltage[0]);
 			} else {
 				val = (selector & reg_run_msk);
 				ret = bd71837_reg_write(bd71837, reg_run, val);
-				if (ret < 0)
+				if(ret < 0)
 					return ret;
 			}
 		}
-		if (reg_idle > 0) {
+		if(reg_idle > 0) {
 			selector = regulator_map_voltage_iterate(pmic->rdev[i], buck_dvs->voltage[1], buck_dvs->voltage[1]);
-			if (selector < 0) {
-				dev_dbg(pmic->dev, "%s(): not found selector for Idle voltage [%d]\n", __func__, buck_dvs->voltage[1]);
+			if(selector < 0) {
+				dev_err(pmic->dev, "%s(): not found selector for Idle voltage [%d]\n", __func__, buck_dvs->voltage[1]);
 			} else {
 				val = (selector & reg_idle_msk);
 				ret = bd71837_reg_write(bd71837, reg_idle, val);
-				if (ret < 0)
+				if(ret < 0)
 					return ret;
 			}
 		}
-		if (reg_susp > 0) {
+		if(reg_susp > 0) {
 			selector = regulator_map_voltage_iterate(pmic->rdev[i], buck_dvs->voltage[2], buck_dvs->voltage[2]);
-			if (selector < 0) {
-				dev_dbg(pmic->dev, "%s(): not found selector for Susp voltage [%d]\n", __func__, buck_dvs->voltage[2]);
+			if(selector < 0) {
+				dev_err(pmic->dev, "%s(): not found selector for Susp voltage [%d]\n", __func__, buck_dvs->voltage[2]);
 			} else {
 				val = (selector & reg_susp_msk);
 				ret = bd71837_reg_write(bd71837, reg_susp, val);
-				if (ret < 0)
+				if(ret < 0)
 					return ret;
 			}
 		}
@@ -788,25 +808,25 @@ static irqreturn_t bd71837_pmic_interrupt(int irq, void *pwrsys)
 	if (reg < 0)
 		return IRQ_NONE;
 
-	if (reg & IRQ_SWRST) {
+	if(reg & IRQ_SWRST) {
 		bd71837_debug(BD71837_DBG0, "IRQ_SWRST\n");
 	}
-	if (reg & IRQ_PWRON_S) {
+	if(reg & IRQ_PWRON_S) {
 		bd71837_debug(BD71837_DBG0, "IRQ_PWRON_S\n");
 	}
-	if (reg & IRQ_PWRON_L) {
+	if(reg & IRQ_PWRON_L) {
 		bd71837_debug(BD71837_DBG0, "IRQ_PWRON_L\n");
 	}
-	if (reg & IRQ_PWRON) {
+	if(reg & IRQ_PWRON) {
 		bd71837_debug(BD71837_DBG0, "IRQ_PWRON\n");
 	}
-	if (reg & IRQ_WDOG) {
+	if(reg & IRQ_WDOG) {
 		bd71837_debug(BD71837_DBG0, "IRQ_WDOG\n");
 	}
-	if (reg & IRQ_ON_REQ) {
+	if(reg & IRQ_ON_REQ) {
 		bd71837_debug(BD71837_DBG0, "IRQ_ON_REQ\n");
 	}
-	if (reg & IRQ_STBY_REQ) {
+	if(reg & IRQ_STBY_REQ) {
 		bd71837_debug(BD71837_DBG0, "IRQ_STBY_REQ\n");
 	}
 
@@ -861,6 +881,24 @@ static int bd71837_probe(struct platform_device *pdev)
 		dev_err(&pdev->dev, "Failed to write LOCK register(%d)\n", err);
 		goto err;
 	}
+	/* Enable LDO5 */
+	err = bd71837_set_bits(bd71837, BD71837_REG_LDO5_VOLT, LDO5_EN);
+	if (err != 0) {
+		dev_err(&pdev->dev, "Failed to enable LDO5 register(%d)\n", err);
+		goto err;
+	}
+	/* Enable LDO6 */
+	err = bd71837_set_bits(bd71837, BD71837_REG_LDO6_VOLT, LDO6_EN);
+	if (err != 0) {
+		dev_err(&pdev->dev, "Failed to enable LDO6 register(%d)\n", err);
+		goto err;
+	}
+	/* Enable LDO7 */
+	err = bd71837_set_bits(bd71837, BD71837_REG_LDO7_VOLT, LDO7_EN);
+	if (err != 0) {
+		dev_err(&pdev->dev, "Failed to enable LDO7 register(%d)\n", err);
+		goto err;
+	}
 
 	for (i = 0; i < BD71837_REGULATOR_CNT; i++) {
 		struct regulator_init_data *init_data;
@@ -869,19 +907,18 @@ static int bd71837_probe(struct platform_device *pdev)
 
 		desc = &pmic->descs[i];
 		desc->name = bd71837_matches[i].name;
-
+		
 		if (pdata) {
 			init_data = pdata->init_data[i];
 		} else {
-			init_data = bd71837_matches[i].init_data;
+			init_data = matches[i].init_data;
 		}
 
 		config.dev = pmic->dev;
 		config.init_data = init_data;
 		config.driver_data = pmic;
 		config.regmap = bd71837->regmap;
-		if (matches)
-			config.of_node = matches[i].of_node;
+		config.of_node = matches[i].of_node;
 		dev_info(config.dev, "regulator register name '%s'\n", desc->name);
 
 		rdev = regulator_register(desc, &config);
@@ -1003,13 +1040,13 @@ static char procfs_buffer[BD71837_BUF_SIZE];
  * This function is called then the /proc file is read
  *
  */
-static int onetime;
+static int onetime = 0;
 static ssize_t bd71837_proc_read (struct file *file, char __user *buffer, size_t count, loff_t *data)
 {
 	int ret = 0, error = 0;
-	if (onetime == 0) {
+	if(onetime==0) {
 		onetime = 1;
-		memset(procfs_buffer, 0, BD71837_BUF_SIZE);
+		memset( procfs_buffer, 0, BD71837_BUF_SIZE);
 		sprintf(procfs_buffer, "%s", BD71837_REV);
 		ret = strlen(procfs_buffer);
 		error = copy_to_user(buffer, procfs_buffer, strlen(procfs_buffer));
@@ -1017,7 +1054,7 @@ static ssize_t bd71837_proc_read (struct file *file, char __user *buffer, size_t
 		//Clear for next time
 		onetime = 0;
 	}
-	return (error != 0) ? 0 : ret;
+	return (error!=0)?0:ret;
 }
 
 static ssize_t bd71837_proc_write (struct file *file, const char __user *buffer, size_t count, loff_t *data)