summaryrefslogtreecommitdiff
path: root/driver/led/lm3630a.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/led/lm3630a.c')
-rw-r--r--driver/led/lm3630a.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/driver/led/lm3630a.c b/driver/led/lm3630a.c
index 932afcf644..b65294c543 100644
--- a/driver/led/lm3630a.c
+++ b/driver/led/lm3630a.c
@@ -7,6 +7,8 @@
#include "i2c.h"
#include "lm3630a.h"
+#include "timer.h"
+
/* 8-bit I2C address */
#define LM3630A_I2C_ADDR (0x36 << 1)
@@ -28,12 +30,10 @@ int lm3630a_poweron(void)
/* Sample PWM every 8 periods. */
ret |= lm3630a_write(LM3630A_REG_FILTER_STRENGTH, 0x3);
- /* Enable feedback and PWM for banks A & B. */
+ /* Enable feedback and PWM for banks A. */
ret |= lm3630a_write(LM3630A_REG_CONFIG,
LM3630A_CFG_BIT_FB_EN_A |
- LM3630A_CFG_BIT_FB_EN_B |
- LM3630A_CFG_BIT_PWM_EN_A |
- LM3630A_CFG_BIT_PWM_EN_B);
+ LM3630A_CFG_BIT_PWM_EN_A);
/* 24V, 800mA overcurrent protection, 500kHz boost frequency. */
ret |= lm3630a_write(LM3630A_REG_BOOST_CONTROL,
@@ -43,21 +43,20 @@ int lm3630a_poweron(void)
/* Limit current to 24.5mA */
ret |= lm3630a_write(LM3630A_REG_A_CURRENT, 0x1a);
- ret |= lm3630a_write(LM3630A_REG_B_CURRENT, 0x1a);
- /* Enable both banks, put in linear mode, and connect LED2 to bank A. */
+ /* Enable bank A, put in linear mode, and connect LED2 to bank A. */
ret |= lm3630a_write(LM3630A_REG_CONTROL,
LM3630A_CTRL_BIT_LINEAR_A |
- LM3630A_CTRL_BIT_LINEAR_B |
LM3630A_CTRL_BIT_LED_EN_A |
- LM3630A_CTRL_BIT_LED_EN_B |
LM3630A_CTRL_BIT_LED2_ON_A);
/*
* Set full brightness so that PWM will control. This needs to happen
* after setting the control register, because enabling the banks
- * resets the value to 0.
+ * resets the value to 0 (the short sleep prevents a race between the
+ * chip resetting the value to 0 and our command).
*/
+ usleep(100);
ret |= lm3630a_write(LM3630A_REG_A_BRIGHTNESS, 0xff);
return ret;