From f9c8150b2f519c6dadf907106e8268a7a70ce7cb Mon Sep 17 00:00:00 2001
From: Martino Facchin <m.facchin@arduino.cc>
Date: Tue, 4 Jul 2017 17:45:42 +0200
Subject: [PATCH] TEST: disable battery charging if no battery is connected at
 startup

This helps removing the flicker, but if the battery is connected AFTER connecting the USB it will be unavailable.
A complete power cycle needs to be performed to recover charging/battery functionality.
---
 variants/mkrgsm1400/variant.cpp | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/variants/mkrgsm1400/variant.cpp b/variants/mkrgsm1400/variant.cpp
index f7de31ed..f0068d5d 100644
--- a/variants/mkrgsm1400/variant.cpp
+++ b/variants/mkrgsm1400/variant.cpp
@@ -173,7 +173,7 @@ SERCOM sercom5(SERCOM5);
 
 #define PMIC_ADDRESS  0x6B
 #define PMIC_REG02    0x02
-#define PMIC_REG00    0x00
+#define PMIC_REG07    0x07
 #define INPUT_CURRENT_LIMIT_0A1 (0x0)
 #define INPUT_CURRENT_LIMIT_0A9 (0x3)
 #define INPUT_CURRENT_LIMIT_1A5 (0x5)
@@ -194,9 +194,24 @@ static inline void set_pmic_safe_defaults() {
   PERIPH_WIRE.disableWIRE();
 }
 
+static inline void disable_battery_charging() {
+  PERIPH_WIRE.initMasterWIRE(100000);
+  PERIPH_WIRE.enableWIRE();
+  pinPeripheral(PIN_WIRE_SDA, g_APinDescription[PIN_WIRE_SDA].ulPinType);
+  pinPeripheral(PIN_WIRE_SCL, g_APinDescription[PIN_WIRE_SCL].ulPinType);
+
+  PERIPH_WIRE.startTransmissionWIRE( PMIC_ADDRESS, WIRE_WRITE_FLAG );
+  PERIPH_WIRE.sendDataMasterWIRE(PMIC_REG07);
+  PERIPH_WIRE.sendDataMasterWIRE(1 << 5 | 0x0B);
+  PERIPH_WIRE.prepareCommandBitsWire(WIRE_MASTER_ACT_STOP);
+
+  PERIPH_WIRE.disableWIRE();
+}
+
 #else
 
 static inline void set_pmic_safe_defaults() {}
+static inline void disable_battery_charging() {}
 
 #endif
 
@@ -209,6 +224,10 @@ void initVariant() {
   digitalWrite(31, HIGH);
   delay(100);
   digitalWrite(31, LOW);
+  pinMode(32, INPUT_PULLDOWN);
+  if (analogRead(32) < 800) {
+    disable_battery_charging();
+  }
 }
 
 // Serial1
-- 
GitLab