|
@@ -17,8 +17,11 @@
|
|
|
#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,19 +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);
|
|
|
-
|
|
|
/*
|
|
|
* PWM-input control mask:
|
|
|
*
|