Merge branches 'acpi_pad', 'acpica', 'apei-bugzilla-43282', 'battery', 'cpuidle-coupl...
[firefly-linux-kernel-4.4.55.git] / drivers / mfd / lm3533-ctrlbank.c
index c2732a37c65a9f929949d70d8d71abe6e923fb47..a4cb7a5220a7dc4922dc990a1af7f2c973332e11 100644 (file)
 #include <linux/mfd/lm3533.h>
 
 
+#define LM3533_MAX_CURRENT_MIN         5000
+#define LM3533_MAX_CURRENT_MAX         29800
+#define LM3533_MAX_CURRENT_STEP                800
+
 #define LM3533_BRIGHTNESS_MAX          255
-#define LM3533_MAX_CURRENT_MAX         31
 #define LM3533_PWM_MAX                 0x3f
 
 #define LM3533_REG_PWM_BASE            0x14
@@ -65,6 +68,31 @@ int lm3533_ctrlbank_disable(struct lm3533_ctrlbank *cb)
 }
 EXPORT_SYMBOL_GPL(lm3533_ctrlbank_disable);
 
+/*
+ * Full-scale current.
+ *
+ * imax                5000 - 29800 uA (800 uA step)
+ */
+int lm3533_ctrlbank_set_max_current(struct lm3533_ctrlbank *cb, u16 imax)
+{
+       u8 reg;
+       u8 val;
+       int ret;
+
+       if (imax < LM3533_MAX_CURRENT_MIN || imax > LM3533_MAX_CURRENT_MAX)
+               return -EINVAL;
+
+       val = (imax - LM3533_MAX_CURRENT_MIN) / LM3533_MAX_CURRENT_STEP;
+
+       reg = lm3533_ctrlbank_get_reg(cb, LM3533_REG_MAX_CURRENT_BASE);
+       ret = lm3533_write(cb->lm3533, reg, val);
+       if (ret)
+               dev_err(cb->dev, "failed to set max current\n");
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(lm3533_ctrlbank_set_max_current);
+
 #define lm3533_ctrlbank_set(_name, _NAME)                              \
 int lm3533_ctrlbank_set_##_name(struct lm3533_ctrlbank *cb, u8 val)    \
 {                                                                      \
@@ -101,20 +129,6 @@ EXPORT_SYMBOL_GPL(lm3533_ctrlbank_get_##_name);
 lm3533_ctrlbank_set(brightness, BRIGHTNESS);
 lm3533_ctrlbank_get(brightness, BRIGHTNESS);
 
-/*
- * Full scale current.
- *
- * Imax = 5 + val * 0.8 mA, e.g.:
- *
- *    0 - 5 mA
- *     ...
- *   19 - 20.2 mA (default)
- *     ...
- *   31 - 29.8 mA
- */
-lm3533_ctrlbank_set(max_current, MAX_CURRENT);
-lm3533_ctrlbank_get(max_current, MAX_CURRENT);
-
 /*
  * PWM-input control mask:
  *