[PATCH 1/7] board: ge: bx50v3: fix crystal bit

Sebastian Reichel sebastian.reichel at collabora.com
Fri Apr 23 16:15:07 CEST 2021


The DA9063 enables the CRYSTAL bit by default, but there is no
crystal populated on the BA16 system on module. Without explicitly
clearing the CRYSTAL bit the system runs unstable and sometimes
reboots unexpectedly.

Signed-off-by: Sebastian Reichel <sebastian.reichel at collabora.com>
---
 board/ge/bx50v3/bx50v3.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/board/ge/bx50v3/bx50v3.c b/board/ge/bx50v3/bx50v3.c
index 6aced4086bdd..6a4e0e601d0a 100644
--- a/board/ge/bx50v3/bx50v3.c
+++ b/board/ge/bx50v3/bx50v3.c
@@ -31,6 +31,7 @@
 #include <asm/arch/sys_proto.h>
 #include <power/regulator.h>
 #include <power/da9063_pmic.h>
+#include <power/pmic.h>
 #include <input.h>
 #include <pwm.h>
 #include <version.h>
@@ -533,6 +534,29 @@ static const struct boot_mode board_boot_modes[] = {
 };
 #endif
 
+
+/*
+ * The SoM used by these boards has XTAL not connected despite datasheet
+ * suggesting connecting unused XTAL pins to ground. Without explicitly
+ * clearing the CRYSTAL bit the system runs unstable and sometimes reboots
+ * unexpectedly.
+ */
+static void pmic_crystal_fix(void)
+{
+	struct udevice *pmic;
+	static const uint EN_32K_CRYSTAL = (1 << 3);
+
+	if (pmic_get("pmic at 58", &pmic)) {
+		puts("failed to get device for PMIC\n");
+		return;
+	}
+
+	if (pmic_clrsetbits(pmic, DA9063_REG_EN_32K, EN_32K_CRYSTAL, 0) < 0) {
+		puts("failed to clear CRYSTAL bit\n");
+		return;
+	}
+}
+
 void pmic_init(void)
 {
 	struct udevice *reg;
@@ -546,6 +570,8 @@ void pmic_init(void)
 		"bperi",
 	};
 
+	pmic_crystal_fix();
+
 	for (i = 0; i < ARRAY_SIZE(bucks); i++) {
 		ret = regulator_get_by_devname(bucks[i], &reg);
 		if (reg < 0) {
-- 
2.30.2



More information about the U-Boot mailing list