Initialize controller if needed for this clock pin.
155 {
156
157 if (ctrl.isInitialized) {
158 if (!ctrl.assignedClockPins.empty() &&
159 ctrl.assignedClockPins[0] == clockPin &&
160 ctrl.configuredDataPin == dataPin &&
161 ctrl.configuredClockSpeedHz == clockSpeedHz) {
162 return true;
163 }
164 ctrl.controller->end();
165 ctrl.isInitialized = false;
166 ctrl.assignedClockPins.clear();
167 }
168
169
170 u8 lanes = ctrl.controller->getLaneCount();
171
172 if (lanes == 1) {
173 SpiHw1::Config config;
174 config.bus_num =
static_cast<fl::u8>(ctrl.controller->getBusId());
175 config.clock_pin = clockPin;
176 config.data_pin = dataPin;
177 config.clock_speed_hz = clockSpeedHz;
178 config.max_transfer_sz = 65536;
179
180 if (!ctrl.controller->begin(&config)) {
181 FL_WARN(
"SpiChannelEngineAdapter: Failed to initialize " << ctrl.name);
182 return false;
183 }
184 } else {
185
186 FL_WARN(
"SpiChannelEngineAdapter: Multi-lane init not yet implemented");
187 return false;
188 }
189
190 ctrl.isInitialized = true;
191 ctrl.configuredDataPin = dataPin;
192 ctrl.configuredClockSpeedHz = clockSpeedHz;
193 ctrl.assignedClockPins.push_back(clockPin);
194
195 FL_DBG(
"SpiChannelEngineAdapter: Initialized " << ctrl.name <<
" with clock pin " << clockPin);
196
197 return true;
198}