@@ -286,21 +286,17 @@ static int mcp251xfd_reg_check_value_wtimeout(const struct device *dev, uint16_t
286
286
return 0 ;
287
287
}
288
288
289
- static int mcp251xfd_set_tdc (const struct device * dev , bool is_enabled , int tdc_offset )
289
+ static int mcp251xfd_set_tdc (const struct device * dev , bool is_enabled )
290
290
{
291
291
uint32_t * reg ;
292
292
uint32_t tmp ;
293
-
294
- if (is_enabled &&
295
- (tdc_offset < MCP251XFD_REG_TDC_TDCO_MIN || tdc_offset > MCP251XFD_REG_TDC_TDCO_MAX )) {
296
- return - EINVAL ;
297
- }
293
+ struct mcp251xfd_data * dev_data = dev -> data ;
298
294
299
295
reg = mcp251xfd_get_spi_buf_ptr (dev );
300
296
301
297
if (is_enabled ) {
302
298
tmp = FIELD_PREP (MCP251XFD_REG_TDC_TDCMOD_MASK , MCP251XFD_REG_TDC_TDCMOD_AUTO );
303
- tmp |= FIELD_PREP (MCP251XFD_REG_TDC_TDCO_MASK , tdc_offset );
299
+ tmp |= FIELD_PREP (MCP251XFD_REG_TDC_TDCO_MASK , dev_data -> tdco );
304
300
} else {
305
301
tmp = FIELD_PREP (MCP251XFD_REG_TDC_TDCMOD_MASK , MCP251XFD_REG_TDC_TDCMOD_DISABLED );
306
302
}
@@ -337,9 +333,9 @@ static int mcp251xfd_set_mode_internal(const struct device *dev, uint8_t request
337
333
if (requested_mode == MCP251XFD_REG_CON_MODE_CAN2_0 ||
338
334
requested_mode == MCP251XFD_REG_CON_MODE_EXT_LOOPBACK ||
339
335
requested_mode == MCP251XFD_REG_CON_MODE_INT_LOOPBACK ) {
340
- ret = mcp251xfd_set_tdc (dev , false, 0 );
336
+ ret = mcp251xfd_set_tdc (dev , false);
341
337
} else if (requested_mode == MCP251XFD_REG_CON_MODE_MIXED ) {
342
- ret = mcp251xfd_set_tdc (dev , true, dev_data -> tdco );
338
+ ret = mcp251xfd_set_tdc (dev , true);
343
339
}
344
340
345
341
if (ret < 0 ) {
@@ -470,7 +466,8 @@ static int mcp251xfd_set_timing_data(const struct device *dev, const struct can_
470
466
471
467
* reg = sys_cpu_to_le32 (tmp );
472
468
473
- dev_data -> tdco = timing -> prescaler * (timing -> prop_seg + timing -> phase_seg1 );
469
+ /* actual TDCO minimum is -64 but driver implementation only sets >= 0 values */
470
+ dev_data -> tdco = CAN_CALC_TDCO (timing , 0U , MCP251XFD_REG_TDC_TDCO_MAX );
474
471
475
472
ret = mcp251xfd_write (dev , MCP251XFD_REG_DBTCFG , MCP251XFD_REG_SIZE );
476
473
if (ret < 0 ) {
@@ -1638,7 +1635,7 @@ static int mcp251xfd_init(const struct device *dev)
1638
1635
goto done ;
1639
1636
}
1640
1637
1641
- ret = mcp251xfd_set_tdc (dev , false, 0 );
1638
+ ret = mcp251xfd_set_tdc (dev , false);
1642
1639
if (ret < 0 ) {
1643
1640
goto done ;
1644
1641
}
0 commit comments