From 0f3f80a1ccfbce547f3d7bc11077cbdd82a0fd29 Mon Sep 17 00:00:00 2001
From: Sandeep Mistry <s.mistry@arduino.cc>
Date: Thu, 21 Jan 2016 14:20:00 -0500
Subject: [PATCH] Only update pull-up value in digitalWrite if pin direction is
 not output

---
 cores/arduino/wiring_digital.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c
index 966d72bd..769bcaf7 100644
--- a/cores/arduino/wiring_digital.c
+++ b/cores/arduino/wiring_digital.c
@@ -82,8 +82,10 @@ void digitalWrite( uint32_t ulPin, uint32_t ulVal )
     return ;
   }
 
-  // Enable pull-up resistor
-  PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg=(uint8_t)(PORT_PINCFG_PULLEN) ;
+  if ( (PORT->Group[g_APinDescription[ulPin].ulPort].DIRSET.reg & (1ul << g_APinDescription[ulPin].ulPin)) == 0 ) {
+    // the pin is not an output, disable pull-up if val is LOW, otherwise enable pull-up
+    PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].bit.PULLEN = (ulVal != LOW) ;
+  }
 
   switch ( ulVal )
   {
-- 
GitLab