drivers: can: stm32: fix filter mode set
Bits are actually shifted by filter number instead of bank number. This results in wrong mode and filter_index calculation. Fix shifting of mode bits by using bank_number instead of filter_number. Signed-off-by: Alexander Wachter <alexander.wachter@student.tugraz.at>
This commit is contained in:
parent
2de06b4b3c
commit
bc6186571e
1 changed files with 6 additions and 6 deletions
|
@ -571,15 +571,15 @@ static void can_stm32_set_filter_bank(int filter_nr,
|
||||||
|
|
||||||
static inline void can_stm32_set_mode_scale(enum can_filter_type filter_type,
|
static inline void can_stm32_set_mode_scale(enum can_filter_type filter_type,
|
||||||
u32_t *mode_reg, u32_t *scale_reg,
|
u32_t *mode_reg, u32_t *scale_reg,
|
||||||
int filter_nr)
|
int bank_nr)
|
||||||
{
|
{
|
||||||
u32_t mode_reg_bit = (filter_type & 0x01) << filter_nr;
|
u32_t mode_reg_bit = (filter_type & 0x01) << bank_nr;
|
||||||
u32_t scale_reg_bit = (filter_type >> 1) << filter_nr;
|
u32_t scale_reg_bit = (filter_type >> 1) << bank_nr;
|
||||||
|
|
||||||
*mode_reg &= ~(1 << filter_nr);
|
*mode_reg &= ~(1 << bank_nr);
|
||||||
*mode_reg |= mode_reg_bit;
|
*mode_reg |= mode_reg_bit;
|
||||||
|
|
||||||
*scale_reg &= ~(1 << filter_nr);
|
*scale_reg &= ~(1 << bank_nr);
|
||||||
*scale_reg |= scale_reg_bit;
|
*scale_reg |= scale_reg_bit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -699,7 +699,7 @@ static inline int can_stm32_set_filter(const struct zcan_filter *filter,
|
||||||
u32_t scale_reg = can->FS1R;
|
u32_t scale_reg = can->FS1R;
|
||||||
|
|
||||||
can_stm32_set_mode_scale(filter_type, &mode_reg, &scale_reg,
|
can_stm32_set_mode_scale(filter_type, &mode_reg, &scale_reg,
|
||||||
filter_nr);
|
bank_nr);
|
||||||
|
|
||||||
shift_width = filter_in_bank[filter_type] - filter_in_bank[bank_mode];
|
shift_width = filter_in_bank[filter_type] - filter_in_bank[bank_mode];
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue