@@ -103,14 +103,6 @@ void can_init(can_data_t *channel, const struct board_channel_config *channel_co
103103 filter -> fa1r = 0x1 ; // Enable filter bank 0
104104}
105105
106- void can_set_bittiming (can_data_t * channel , const struct gs_device_bittiming * timing )
107- {
108- channel -> btr = FIELD_PREP (CAN_BTR_SJW , timing -> sjw - 1 ) |
109- FIELD_PREP (CAN_BTR_TS2 , timing -> phase_seg2 - 1 ) |
110- FIELD_PREP (CAN_BTR_TS1 , timing -> prop_seg + timing -> phase_seg1 - 1 ) |
111- FIELD_PREP (CAN_BTR_BRP , timing -> brp - 1 );
112- }
113-
114106#ifdef CONFIG_CAN_FILTER
115107void can_set_filter (can_data_t * channel , const struct gs_device_filter * filter )
116108{
@@ -160,7 +152,10 @@ void can_drv_enable(struct can_channel *channel)
160152 mcr |= CAN_MCR_NART ;
161153 }
162154
163- uint32_t btr = channel -> btr ;
155+ uint32_t btr = FIELD_PREP (CAN_BTR_SJW , channel -> bittiming .sjw - 1 ) |
156+ FIELD_PREP (CAN_BTR_TS2 , channel -> bittiming .phase_seg2 - 1 ) |
157+ FIELD_PREP (CAN_BTR_TS1 , channel -> bittiming .prop_seg + channel -> bittiming .phase_seg1 - 1 ) |
158+ FIELD_PREP (CAN_BTR_BRP , channel -> bittiming .brp - 1 );
164159
165160 if (feature & GS_CAN_FEATURE_LISTEN_ONLY ) {
166161 btr |= CAN_MODE_SILENT ;
@@ -302,28 +297,28 @@ bool can_send(can_data_t *channel, struct gs_host_frame *frame)
302297 }
303298}
304299
305- bool can_drv_bus_error_pending (const uint32_t reg_esr )
300+ bool can_drv_bus_error_pending (const struct can_channel * channel )
306301{
302+ const uint32_t reg_esr = channel -> reg_status .esr ;
307303 const uint8_t lec = FIELD_GET (CAN_ESR_LEC , reg_esr );
308304
309305 return can_is_lec_error (lec );
310306}
311307
312- uint32_t can_drv_read_reg_status (const struct can_channel * channel )
308+ void can_drv_read_reg_status (struct can_channel * channel )
313309{
314- const uint32_t reg_esr = channel -> instance -> ESR ;
310+ channel -> reg_status . esr = channel -> instance -> ESR ;
315311
316- if (can_drv_bus_error_pending (reg_esr )) {
312+ if (can_drv_bus_error_pending (channel )) {
317313 /* mark as handled by software */
318314 channel -> instance -> ESR |= FIELD_PREP (CAN_ESR_LEC , CAN_LEC_SOFTWARE );
319315 }
320-
321- return reg_esr ;
322316}
323317
324- bool can_drv_handle_bus_error (const struct can_channel __maybe_unused * channel , struct gs_host_frame * frame ,
325- const uint32_t reg_esr )
318+ bool can_drv_handle_bus_error (const struct can_channel * channel , struct gs_host_frame * frame )
326319{
320+ const uint32_t reg_esr = channel -> reg_status .esr ;
321+
327322 const uint8_t tx_err = FIELD_GET (CAN_ESR_TEC , reg_esr );
328323 const uint8_t rx_err = FIELD_GET (CAN_ESR_REC , reg_esr );
329324
@@ -341,8 +336,10 @@ bool can_drv_handle_bus_error(const struct can_channel __maybe_unused *channel,
341336 return true;
342337}
343338
344- enum gs_can_state can_drv_get_state (const uint32_t reg_esr )
339+ enum gs_can_state can_drv_get_state (const struct can_channel * channel )
345340{
341+ const uint32_t reg_esr = channel -> reg_status .esr ;
342+
346343 if (!(reg_esr & (CAN_ESR_BOFF | CAN_ESR_EPVF | CAN_ESR_EWGF ))) {
347344 return GS_CAN_STATE_ERROR_ACTIVE ;
348345 }
@@ -358,25 +355,24 @@ enum gs_can_state can_drv_get_state(const uint32_t reg_esr)
358355 return GS_CAN_STATE_ERROR_WARNING ;
359356}
360357
361- void can_drv_get_device_state (const struct can_channel __maybe_unused * channel , struct gs_device_state * state ,
362- const uint32_t reg_esr )
358+ void can_drv_get_device_state (const struct can_channel * channel , struct gs_device_state * state )
363359{
364- state -> state = can_drv_get_state (reg_esr );
360+ const uint32_t reg_esr = channel -> reg_status .esr ;
361+
362+ state -> state = can_drv_get_state (channel );
365363 state -> rxerr = FIELD_GET (CAN_ESR_REC , reg_esr );
366364 state -> txerr = FIELD_GET (CAN_ESR_TEC , reg_esr );
367365}
368366
369- void can_drv_handle_state_change (const struct can_channel __maybe_unused * channel , struct gs_host_frame * frame ,
370- const uint32_t reg_esr )
367+ void can_drv_handle_state_change (const struct can_channel * channel , struct gs_host_frame * frame )
371368{
372- enum gs_can_state tx_state , rx_state ;
373- uint8_t tx_err , rx_err ;
369+ const uint32_t reg_esr = channel -> reg_status .esr ;
374370
375- tx_err = FIELD_GET (CAN_ESR_TEC , reg_esr );
376- rx_err = FIELD_GET (CAN_ESR_REC , reg_esr );
371+ const uint8_t tx_err = FIELD_GET (CAN_ESR_TEC , reg_esr );
372+ const uint8_t rx_err = FIELD_GET (CAN_ESR_REC , reg_esr );
377373
378- tx_state = can_err_to_state (tx_err );
379- rx_state = can_err_to_state (rx_err );
374+ const enum gs_can_state tx_state = can_err_to_state (tx_err );
375+ const enum gs_can_state rx_state = can_err_to_state (rx_err );
380376
381377 if (tx_state >= rx_state ) {
382378 frame -> classic_can -> data [1 ] |= gs_can_tx_state_to_frame (tx_state );
0 commit comments