[PATCH v2 4/5] regulator: tps65090: Allow setting the overcurrent wait time

2014-04-16 Thread Doug Anderson
The tps65090 regulator allows you to specify how long you want it to
wait before detecting an overcurrent condition.  Allow specifying that
through the device tree (or through platform data).

Signed-off-by: Doug Anderson diand...@chromium.org
Signed-off-by: Simon Glass s...@chromium.org
Signed-off-by: Michael Spang sp...@chromium.org
Signed-off-by: Sean Paul seanp...@chromium.org
---
Changes in v2:
- Separated the overcurrent and retries changes into two patches.
- Now set overcurrent at probe time since it doesn't change.

 .../devicetree/bindings/regulator/tps65090.txt |  4 ++
 drivers/regulator/tps65090-regulator.c | 55 ++
 include/linux/mfd/tps65090.h   |  5 ++
 3 files changed, 64 insertions(+)

diff --git a/Documentation/devicetree/bindings/regulator/tps65090.txt 
b/Documentation/devicetree/bindings/regulator/tps65090.txt
index 313a60b..34098023 100644
--- a/Documentation/devicetree/bindings/regulator/tps65090.txt
+++ b/Documentation/devicetree/bindings/regulator/tps65090.txt
@@ -21,6 +21,10 @@ Optional properties:
   number should be provided. If it is externally controlled and no GPIO
   entry then driver will just configure this rails as external control
   and will not provide any enable/disable APIs.
+- ti,overcurrent-wait: This is applicable to FET registers, which have a
+  poorly defined overcurrent wait field.  If this property is present it
+  should be between 0 - 3.  If this property isn't present we won't touch the
+  overcurrent wait field and we'll leave it to the BIOS/EC to deal with.
 
 Each regulator is defined using the standard binding for regulators.
 
diff --git a/drivers/regulator/tps65090-regulator.c 
b/drivers/regulator/tps65090-regulator.c
index 2e92ef6..ca13a1a 100644
--- a/drivers/regulator/tps65090-regulator.c
+++ b/drivers/regulator/tps65090-regulator.c
@@ -28,15 +28,57 @@
 #include linux/regulator/of_regulator.h
 #include linux/mfd/tps65090.h
 
+#define CTRL_WT_BIT2 /* Regulator wait time 0 bit */
+
+#define MAX_OVERCURRENT_WAIT   3 /* Overcurrent wait must be = this */
+
+/**
+ * struct tps65090_regulator - Per-regulator data for a tps65090 regulator
+ *
+ * @dev: Pointer to our device.
+ * @desc: The struct regulator_desc for the regulator.
+ * @rdev: The struct regulator_dev for the regulator.
+ * @overcurrent_wait_valid: True if overcurrent_wait is valid.
+ * @overcurrent_wait: For FETs, the value to put in the WTFET bitfield.
+ */
+
 struct tps65090_regulator {
struct device   *dev;
struct regulator_desc   *desc;
struct regulator_dev*rdev;
+   boolovercurrent_wait_valid;
+   int overcurrent_wait;
 };
 
 static struct regulator_ops tps65090_ext_control_ops = {
 };
 
+/**
+ * tps65090_reg_set_overcurrent_wait - Setup overcurrent wait
+ *
+ * This will set the overcurrent wait time based on what's in the regulator
+ * info.
+ *
+ * @ri:Overall regulator data
+ * @rdev:  Regulator device
+ * @return 0 if no error, non-zero if there was an error writing the register.
+ */
+static int tps65090_reg_set_overcurrent_wait(struct tps65090_regulator *ri,
+struct regulator_dev *rdev)
+{
+   int ret;
+
+   ret = regmap_update_bits(rdev-regmap, rdev-desc-enable_reg,
+MAX_OVERCURRENT_WAIT  CTRL_WT_BIT,
+ri-overcurrent_wait  CTRL_WT_BIT);
+   if (ret) {
+   dev_err(rdev-dev, Error updating overcurrent wait %#x\n,
+   rdev-desc-enable_reg);
+   }
+
+   return ret;
+}
+
 static struct regulator_ops tps65090_reg_contol_ops = {
.enable = regulator_enable_regmap,
.disable= regulator_disable_regmap,
@@ -209,6 +251,11 @@ static struct tps65090_platform_data 
*tps65090_parse_dt_reg_data(
rpdata-gpio = of_get_named_gpio(np,
dcdc-ext-control-gpios, 0);
 
+   if (of_property_read_u32(tps65090_matches[idx].of_node,
+ti,overcurrent-wait,
+rpdata-overcurrent_wait) == 0)
+   rpdata-overcurrent_wait_valid = true;
+
tps65090_pdata-reg_pdata[idx] = rpdata;
}
return tps65090_pdata;
@@ -258,6 +305,8 @@ static int tps65090_regulator_probe(struct platform_device 
*pdev)
ri = pmic[num];
ri-dev = pdev-dev;
ri-desc = tps65090_regulator_desc[num];
+   ri-overcurrent_wait_valid = tps_pdata-overcurrent_wait_valid;
+   ri-overcurrent_wait = tps_pdata-overcurrent_wait;
 
/*
 * TPS5090 DCDC support the control from external digital input.
@@ -299,6 +348,12 @@ static int tps65090_regulator_probe(struct platform_device 
*pdev)
}
 

Re: [PATCH v2 4/5] regulator: tps65090: Allow setting the overcurrent wait time

2014-04-16 Thread Randy Dunlap
On 04/16/2014 11:25 AM, Doug Anderson wrote:
 diff --git a/drivers/regulator/tps65090-regulator.c 
 b/drivers/regulator/tps65090-regulator.c
 index 2e92ef6..ca13a1a 100644
 --- a/drivers/regulator/tps65090-regulator.c
 +++ b/drivers/regulator/tps65090-regulator.c
 @@ -28,15 +28,57 @@

 +/**
 + * tps65090_reg_set_overcurrent_wait - Setup overcurrent wait
 + *
 + * This will set the overcurrent wait time based on what's in the regulator
 + * info.
 + *
 + * @ri:  Overall regulator data
 + * @rdev:Regulator device
 + * @return 0 if no error, non-zero if there was an error writing the 
 register.

kernel-doc notation here should be:

 * Return: 0 if no error, non-zero if there was an error writing the register.

 + */
 +static int tps65090_reg_set_overcurrent_wait(struct tps65090_regulator *ri,
 +  struct regulator_dev *rdev)
 +{


-- 
~Randy
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 4/5] regulator: tps65090: Allow setting the overcurrent wait time

2014-04-16 Thread Doug Anderson
Randy,

On Wed, Apr 16, 2014 at 1:33 PM, Randy Dunlap rdun...@infradead.org wrote:
 On 04/16/2014 11:25 AM, Doug Anderson wrote:
 diff --git a/drivers/regulator/tps65090-regulator.c 
 b/drivers/regulator/tps65090-regulator.c
 index 2e92ef6..ca13a1a 100644
 --- a/drivers/regulator/tps65090-regulator.c
 +++ b/drivers/regulator/tps65090-regulator.c
 @@ -28,15 +28,57 @@

 +/**
 + * tps65090_reg_set_overcurrent_wait - Setup overcurrent wait
 + *
 + * This will set the overcurrent wait time based on what's in the regulator
 + * info.
 + *
 + * @ri:  Overall regulator data
 + * @rdev:Regulator device
 + * @return 0 if no error, non-zero if there was an error writing the 
 register.

 kernel-doc notation here should be:

  * Return: 0 if no error, non-zero if there was an error writing the register.

Done in v3.
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html