31
31
#ifdef MICROPY_HW_NEOPIXEL
32
32
bool neopixel_in_use ;
33
33
#endif
34
-
35
- #define GPIO_PORT_COUNT (IOMUXC_SW_PAD_CTL_PAD_COUNT / 32 + 1)
34
+ #ifdef MICROPY_HW_APA102_MOSI
35
+ bool apa102_sck_in_use ;
36
+ bool apa102_mosi_in_use ;
37
+ #endif
36
38
37
39
STATIC bool claimed_pins [IOMUXC_SW_PAD_CTL_PAD_COUNT ];
38
40
STATIC bool never_reset_pins [IOMUXC_SW_PAD_CTL_PAD_COUNT ];
@@ -55,6 +57,10 @@ void reset_all_pins(void) {
55
57
#ifdef MICROPY_HW_NEOPIXEL
56
58
neopixel_in_use = false;
57
59
#endif
60
+ #ifdef MICROPY_HW_APA102_MOSI
61
+ apa102_sck_in_use = false;
62
+ apa102_mosi_in_use = false;
63
+ #endif
58
64
}
59
65
60
66
// Since i.MX pins need extra register and reset information to reset properly,
@@ -72,6 +78,17 @@ void common_hal_reset_pin(const mcu_pin_obj_t* pin) {
72
78
return ;
73
79
}
74
80
#endif
81
+ #ifdef MICROPY_HW_APA102_MOSI
82
+ if (pin -> mux_idx == MICROPY_HW_APA102_MOSI -> mux_idx ||
83
+ pin -> mux_idx == MICROPY_HW_APA102_SCK -> mux_idx ) {
84
+ apa102_mosi_in_use = apa102_mosi_in_use && pin -> mux_idx != MICROPY_HW_APA102_MOSI -> mux_idx ;
85
+ apa102_sck_in_use = apa102_sck_in_use && pin -> mux_idx != MICROPY_HW_APA102_SCK -> mux_idx ;
86
+ if (!apa102_sck_in_use && !apa102_mosi_in_use ) {
87
+ rgb_led_status_init ();
88
+ }
89
+ return ;
90
+ }
91
+ #endif
75
92
}
76
93
77
94
void common_hal_never_reset_pin (const mcu_pin_obj_t * pin ) {
@@ -84,6 +101,14 @@ bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t* pin) {
84
101
return !neopixel_in_use ;
85
102
}
86
103
#endif
104
+ #ifdef MICROPY_HW_APA102_MOSI
105
+ if (pin == MICROPY_HW_APA102_MOSI ) {
106
+ return !apa102_mosi_in_use ;
107
+ }
108
+ if (pin == MICROPY_HW_APA102_SCK ) {
109
+ return !apa102_sck_in_use ;
110
+ }
111
+ #endif
87
112
88
113
return !claimed_pins [pin -> mux_idx ];
89
114
}
@@ -100,6 +125,14 @@ void common_hal_mcu_pin_claim(const mcu_pin_obj_t* pin) {
100
125
neopixel_in_use = true;
101
126
}
102
127
#endif
128
+ #ifdef MICROPY_HW_APA102_MOSI
129
+ if (pin == MICROPY_HW_APA102_MOSI ) {
130
+ apa102_mosi_in_use = true;
131
+ }
132
+ if (pin == MICROPY_HW_APA102_SCK ) {
133
+ apa102_sck_in_use = true;
134
+ }
135
+ #endif
103
136
}
104
137
105
138
void claim_pin (const mcu_pin_obj_t * pin ) {
0 commit comments