probe: revert pins to Hi-Z when PORT_OFF is called

Alternative implementation of #146
Fixes #146
diff --git a/src/probe.c b/src/probe.c
index bba6b31..ce79857 100644
--- a/src/probe.c
+++ b/src/probe.c
@@ -171,7 +171,7 @@
     pio_remove_program(pio0, &probe_program, probe.offset);
 
     probe_assert_reset(1);	// de-assert nRESET
-
+    probe_gpio_deinit();
     probe.initted = 0;
   }
 }
diff --git a/src/probe.pio b/src/probe.pio
index 79e4be8..5636c0c 100644
--- a/src/probe.pio
+++ b/src/probe.pio
@@ -86,6 +86,19 @@
     gpio_pull_up(PROBE_PIN_SWDIO);
 }
 
+// DAP interface says all pins have to be High-Z when disabled
+static inline void probe_gpio_deinit()
+{
+#if defined(PROBE_PIN_RESET)
+	gpio_deinit(PROBE_PIN_RESET);
+	gpio_disable_pulls(PROBE_PIN_RESET);
+#endif
+	gpio_deinit(PROBE_PIN_SWCLK);
+	gpio_disable_pulls(PROBE_PIN_SWCLK);
+	gpio_deinit(PROBE_PIN_SWDIO);
+	gpio_disable_pulls(PROBE_PIN_SWDIO);
+}
+
 static inline void probe_sm_init(pio_sm_config* sm_config) {
 
     // Set SWCLK as a sideset pin
diff --git a/src/probe_oen.pio b/src/probe_oen.pio
index 2057705..e997340 100644
--- a/src/probe_oen.pio
+++ b/src/probe_oen.pio
@@ -63,6 +63,21 @@
     gpio_pull_up(PROBE_PIN_SWDIOEN);
 }
 
+// DAP interface says all pins have to be High-Z when disabled
+static inline void probe_gpio_deinit()
+{
+#if defined(PROBE_PIN_RESET)
+	gpio_deinit(PROBE_PIN_RESET);
+	gpio_disable_pulls(PROBE_PIN_RESET);
+#endif
+	gpio_deinit(PROBE_PIN_SWCLK);
+	gpio_disable_pulls(PROBE_PIN_SWCLK);
+// Note for SWDIOEN - make sure the driver output enable is removed before removing drive - leave pull-up enabled
+	gpio_deinit(PROBE_PIN_SWDIOEN);
+	gpio_deinit(PROBE_PIN_SWDIO);
+	gpio_disable_pulls(PROBE_PIN_SWDIO);
+}
+
 static inline void probe_sm_init(pio_sm_config* sm_config) {
 
     // Set SWDIOEN and SWCLK as sideset pins