From cb38aaa3a361d60f7389158a374e7cc175c71a19 Mon Sep 17 00:00:00 2001
From: bridystone <github@breidenstein.info>
Date: Tue, 7 Jul 2020 20:16:05 +0200
Subject: [PATCH 1/2] additional check for turnOffPWM

---
 cores/arduino/wiring_digital.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c
index 0d51d57d..86aadbaa 100644
--- a/cores/arduino/wiring_digital.c
+++ b/cores/arduino/wiring_digital.c
@@ -103,6 +103,10 @@ static void turnOffPWM(uint8_t pin)
 
 	/* TCA0 */
 	case TIMERA0:
+		// check, if TCA is set to Port B (default megaavr-PWM ports)
+		// see variants/nona4809/variant.c line 13
+		if (!(PORTMUX_TCAROUTEA == PORTMUX_TCA0_PORTB_gc))
+			return;
 		/* Bit position will give output channel */
 		bit_pos = digitalPinToBitPosition(pin);
 
@@ -113,7 +117,15 @@ static void turnOffPWM(uint8_t pin)
 
 	/* TCB - only one output */
 	case TIMERB0:
+		// check, if TCB0 is set to alternate mode PF4 (Pin D6) (default megaavr-PWM)
+		// see variants/nona4809/variant.c line 31
+		if ((pin == 6) && ((PORTMUX_TCBROUTEA & PORTMUX_TCB0_bm) != PORTMUX_TCB0_bm))
+			return;
 	case TIMERB1:
+		// check, if TCB1 is set to alternate mode PF5 (Pin D3) (default megaavr-PWM)
+		// see variants/nona4809/variant.c line 36
+		if ((pin == 3) && ((PORTMUX_TCBROUTEA & PORTMUX_TCB1_bm) != PORTMUX_TCB1_bm))
+			return;
 	case TIMERB2:
 	case TIMERB3:
 

From dfb2462101be632b8a45d995fcfa90e2beb0bff0 Mon Sep 17 00:00:00 2001
From: Jens Breidenstein <github@breidenstein.info>
Date: Wed, 1 Dec 2021 07:54:16 +0100
Subject: [PATCH 2/2] better coding style

replace return; with break;
---
 cores/arduino/wiring_digital.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c
index 86aadbaa..e22bdb4d 100644
--- a/cores/arduino/wiring_digital.c
+++ b/cores/arduino/wiring_digital.c
@@ -106,7 +106,7 @@ static void turnOffPWM(uint8_t pin)
 		// check, if TCA is set to Port B (default megaavr-PWM ports)
 		// see variants/nona4809/variant.c line 13
 		if (!(PORTMUX_TCAROUTEA == PORTMUX_TCA0_PORTB_gc))
-			return;
+			break;
 		/* Bit position will give output channel */
 		bit_pos = digitalPinToBitPosition(pin);
 
@@ -120,12 +120,12 @@ static void turnOffPWM(uint8_t pin)
 		// check, if TCB0 is set to alternate mode PF4 (Pin D6) (default megaavr-PWM)
 		// see variants/nona4809/variant.c line 31
 		if ((pin == 6) && ((PORTMUX_TCBROUTEA & PORTMUX_TCB0_bm) != PORTMUX_TCB0_bm))
-			return;
+			break;
 	case TIMERB1:
 		// check, if TCB1 is set to alternate mode PF5 (Pin D3) (default megaavr-PWM)
 		// see variants/nona4809/variant.c line 36
 		if ((pin == 3) && ((PORTMUX_TCBROUTEA & PORTMUX_TCB1_bm) != PORTMUX_TCB1_bm))
-			return;
+			break;
 	case TIMERB2:
 	case TIMERB3: