Module Name:    src
Committed By:   tnn
Date:           Sun May 14 11:39:17 UTC 2017

Modified Files:
        src/sys/dev/i2c: axp20x.c

Log Message:
define control register and associated bits for RTC supercap charger


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/i2c/axp20x.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/i2c/axp20x.c
diff -u src/sys/dev/i2c/axp20x.c:1.4 src/sys/dev/i2c/axp20x.c:1.5
--- src/sys/dev/i2c/axp20x.c:1.4	Thu Oct 15 13:48:57 2015
+++ src/sys/dev/i2c/axp20x.c	Sun May 14 11:39:17 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: axp20x.c,v 1.4 2015/10/15 13:48:57 bouyer Exp $ */
+/* $NetBSD: axp20x.c,v 1.5 2017/05/14 11:39:17 tnn Exp $ */
 
 /*-
  * Copyright (c) 2014 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: axp20x.c,v 1.4 2015/10/15 13:48:57 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: axp20x.c,v 1.5 2017/05/14 11:39:17 tnn Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -99,6 +99,33 @@ static int ldo4_mvV[] = {
 #define AXP_LDO3_VOLT_MASK		__BITS(0,6)
 #define AXP_LDO3_VOLT_SHIFT		0
 
+#define AXP_BKUP_CTRL			0x35
+#define AXP_BKUP_CTRL_ENABLE		__BIT(7)
+#define AXP_BKUP_CTRL_VOLT_MASK		__BITS(5,6)
+#define AXP_BKUP_CTRL_VOLT_SHIFT	5
+#define AXP_BKUP_CTRL_VOLT_3V1		0
+#define AXP_BKUP_CTRL_VOLT_3V0		1
+#define AXP_BKUP_CTRL_VOLT_3V6		2
+#define AXP_BKUP_CTRL_VOLT_2V5		3
+static int bkup_volt[] = {
+	3100,
+	3000,
+	3600,
+	2500
+};
+#define AXP_BKUP_CTRL_CURR_MASK		__BITS(0,1)
+#define AXP_BKUP_CTRL_CURR_SHIFT	0
+#define AXP_BKUP_CTRL_CURR_50U		0
+#define AXP_BKUP_CTRL_CURR_100U		1
+#define AXP_BKUP_CTRL_CURR_200U		2
+#define AXP_BKUP_CTRL_CURR_400U		3
+static int bkup_curr[] = {
+	50,
+	100,
+	200,
+	400
+};
+
 #define AXP_ACV_MON_REG		0x56	/* 2 bytes */
 #define AXP_ACI_MON_REG		0x58	/* 2 bytes */
 #define AXP_VBUSV_MON_REG	0x5a	/* 2 bytes */
@@ -347,6 +374,18 @@ axp20x_attach(device_t parent, device_t 
 			    (int)(700 + (value & AXP_LDO3_VOLT_MASK) * 25));
 		}
 	}
+
+	if (axp20x_read(sc, AXP_BKUP_CTRL, &value, 1, I2C_F_POLL) == 0) {
+		if (value & AXP_BKUP_CTRL_ENABLE) {
+			aprint_verbose_dev(sc->sc_dev,
+			    "RTC supercap charger enabled: %dmV at %duA\n",
+			    bkup_volt[(value & AXP_BKUP_CTRL_VOLT_MASK) >>
+			    AXP_BKUP_CTRL_VOLT_SHIFT],
+			    bkup_curr[(value & AXP_BKUP_CTRL_CURR_MASK) >>
+			    AXP_BKUP_CTRL_CURR_SHIFT]
+			);
+		}
+	}
 }
 
 static void

Reply via email to