]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - board/karo/tx6/pmic.c
karo: tx6: rework PMIC code to allow for different configs for same chip
[karo-tx-uboot.git] / board / karo / tx6 / pmic.c
index 2743dadd3232a1bd341bfeca2a33fe8b213b81fc..6e5b84c6d88573bca2c2a8f682accc6bf594b43f 100644 (file)
@@ -14,7 +14,6 @@
  * GNU General Public License for more details.
  *
  */
-
 #include <common.h>
 #include <errno.h>
 #include <i2c.h>
@@ -23,7 +22,7 @@
 
 static struct {
        uchar addr;
-       int (*init)(uchar addr);
+       pmic_setup_func *init;
 } i2c_addrs[] = {
 #ifdef CONFIG_LTC3676
        { 0x3c, ltc3676_pmic_setup, },
@@ -36,15 +35,23 @@ static struct {
 #endif
 };
 
-int tx6_pmic_init(void)
+int tx6_pmic_init(int addr, struct pmic_regs *regs, size_t num_regs)
 {
        int ret = -ENODEV;
        int i;
 
+       debug("Probing for I2C dev 0x%02x\n", addr);
        for (i = 0; i < ARRAY_SIZE(i2c_addrs); i++) {
-               ret = i2c_probe(i2c_addrs[i].addr);
+               u8 i2c_addr = i2c_addrs[i].addr;
+
+               if (i2c_addr != addr)
+                       continue;
+
+               debug("Probing for I2C dev 0x%02x\n", i2c_addr);
+               ret = i2c_probe(i2c_addr);
                if (ret == 0) {
-                       i2c_addrs[i].init(i2c_addrs[i].addr);
+                       debug("Initializing PMIC at I2C addr 0x%02x\n", i2c_addr);
+                       ret = i2c_addrs[i].init(i2c_addr, regs, num_regs);
                        break;
                }
        }