summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgab-k <[email protected]>2026-03-07 21:53:01 +0100
committergab-k <[email protected]>2026-03-07 21:53:01 +0100
commit11a3c3b712eb97e5c05ed3df20dcde9451fe158d (patch)
treefd3c2bf7a940afb3f35318c379bc2d226b5c8f8c
parentda307fa85b4002c875284bb82d7db1ca1bc7347d (diff)
Fix ep_ctrl_mask() corrupting opposite direction's ENDPTCTRL bits
-rw-r--r--src/portable/chipidea/ci_hs/dcd_ci_hs.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/portable/chipidea/ci_hs/dcd_ci_hs.c b/src/portable/chipidea/ci_hs/dcd_ci_hs.c
index b9f6a8a7b..9ed75ffd9 100644
--- a/src/portable/chipidea/ci_hs/dcd_ci_hs.c
+++ b/src/portable/chipidea/ci_hs/dcd_ci_hs.c
@@ -388,7 +388,7 @@ TU_ATTR_ALWAYS_INLINE static inline void ep_ctrl_mask(volatile uint32_t *epctrl,
uint32_t or_mask) {
uint32_t value = *epctrl;
if (and_mask != 0) {
- value &= (dir == TUSB_DIR_OUT) ? and_mask : (and_mask << 16u);
+ value &= (dir == TUSB_DIR_OUT) ? (and_mask | 0xFFFF0000u) : ((and_mask << 16u) | 0x0000FFFFu);
}
if (or_mask != 0) {
value |= (dir == TUSB_DIR_OUT) ? or_mask : (or_mask << 16u);