drivers: can: sjw == 0 in can_set_timing should not change sjw
If the supplied sjw in the timing parameters is zero, the sjw parameter should not be changed. This fixes the uninitialized swj in can_set_bitrate. Signed-off-by: Alexander Wachter <alexander@wachter.cloud>
This commit is contained in:
parent
6910d4d482
commit
5e0ca9b41e
6 changed files with 44 additions and 14 deletions
|
@ -371,15 +371,16 @@ int can_stm32_set_timing(const struct device *dev,
|
|||
goto done;
|
||||
}
|
||||
|
||||
can->BTR &= ~(CAN_BTR_BRP_Msk | CAN_BTR_TS1_Msk |
|
||||
CAN_BTR_TS2_Msk | CAN_BTR_SJW_Msk);
|
||||
|
||||
can->BTR |=
|
||||
can->BTR = (can->BTR & ~(CAN_BTR_BRP_Msk | CAN_BTR_TS1_Msk | CAN_BTR_TS2_Msk)) |
|
||||
(((timing->phase_seg1 - 1) << CAN_BTR_TS1_Pos) & CAN_BTR_TS1_Msk) |
|
||||
(((timing->phase_seg2 - 1) << CAN_BTR_TS2_Pos) & CAN_BTR_TS2_Msk) |
|
||||
(((timing->sjw - 1) << CAN_BTR_SJW_Pos) & CAN_BTR_SJW_Msk) |
|
||||
(((timing->prescaler - 1) << CAN_BTR_BRP_Pos) & CAN_BTR_BRP_Msk);
|
||||
|
||||
if (timing->sjw != CAN_SJW_NO_CHANGE) {
|
||||
can->BTR = (can->BTR & ~CAN_BTR_SJW_Msk) |
|
||||
(((timing->sjw - 1) << CAN_BTR_SJW_Pos) & CAN_BTR_SJW_Msk);
|
||||
}
|
||||
|
||||
ret = can_leave_init_mode(can);
|
||||
if (ret) {
|
||||
LOG_ERR("Failed to leave init mode");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue