Fix SPI pin matching check #826
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This looks up the SPI module corresponding to each of pins passed and
then uses
pinmap_merge_peripheral()to merge this in a single pin. Ifnot all pins map to the same SPI module, this should abort.
The
pinmap_merge_peripheralfunction returns NP to indicate a mismatchbetween the passed peripherals. However, when one of the arguments is
already NP, this is not propagated into the function result, instead the
other argument is simplly returned.
In this case, the merging happens in two levels: First MISO and MOSI are
merged, then SCK and SS are merged and finally the merged results are
again merged. That means that if MISO and MISO mismatch, but SCK and SS
match (or the other way around), the NP returned due to the mismatch is
ignored and the final result is not NP, so no error is raised.
This changes the code to also check the intermediate merge results for
NP, to properly detect mismatches.
Note that the actual error message produced using
core_debug()is disabled by default (which might need some additional work to somehow elegantly enable that), but this will at least make sure that the check in the code is correct.