Skip to content

Commit 2ee6ebf

Browse files
drivers: can: native_linux: use CiA recommeded configurations ranges
Use the CAN clock and configuration ranges recommended by CAN in Automation (CiA). Signed-off-by: Henrik Brix Andersen <[email protected]>
1 parent 4cc9739 commit 2ee6ebf

File tree

1 file changed

+27
-22
lines changed

1 file changed

+27
-22
lines changed

drivers/can/can_native_linux.c

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <zephyr/net/net_pkt.h>
1919
#include <zephyr/net/socketcan.h>
2020
#include <zephyr/net/socketcan_utils.h>
21+
#include <zephyr/sys/util.h>
2122

2223
#include "can_native_linux_adapt.h"
2324
#include "nsi_host_trampolines.h"
@@ -386,8 +387,10 @@ static void can_native_linux_set_state_change_callback(const struct device *dev,
386387

387388
static int can_native_linux_get_core_clock(const struct device *dev, uint32_t *rate)
388389
{
389-
/* Return 16MHz as an realistic value for the testcases */
390-
*rate = 16000000;
390+
ARG_UNUSED(dev);
391+
392+
/* Recommended CAN clock from CiA 601-3 */
393+
*rate = MHZ(80);
391394

392395
return 0;
393396
}
@@ -412,35 +415,37 @@ static DEVICE_API(can, can_native_linux_driver_api) = {
412415
.set_state_change_callback = can_native_linux_set_state_change_callback,
413416
.get_core_clock = can_native_linux_get_core_clock,
414417
.get_max_filters = can_native_linux_get_max_filters,
418+
/* Recommended configuration ranges from CiA 601-2 */
415419
.timing_min = {
416-
.sjw = 0x1,
417-
.prop_seg = 0x01,
418-
.phase_seg1 = 0x01,
419-
.phase_seg2 = 0x01,
420-
.prescaler = 0x01
420+
.sjw = 1,
421+
.prop_seg = 0,
422+
.phase_seg1 = 2,
423+
.phase_seg2 = 2,
424+
.prescaler = 1
421425
},
422426
.timing_max = {
423-
.sjw = 0x0F,
424-
.prop_seg = 0x0F,
425-
.phase_seg1 = 0x0F,
426-
.phase_seg2 = 0x0F,
427-
.prescaler = 0xFFFF
427+
.sjw = 128,
428+
.prop_seg = 0,
429+
.phase_seg1 = 256,
430+
.phase_seg2 = 128,
431+
.prescaler = 32
428432
},
429433
#ifdef CONFIG_CAN_FD_MODE
430434
.set_timing_data = can_native_linux_set_timing_data,
435+
/* Recommended configuration ranges from CiA 601-2 */
431436
.timing_data_min = {
432-
.sjw = 0x1,
433-
.prop_seg = 0x01,
434-
.phase_seg1 = 0x01,
435-
.phase_seg2 = 0x01,
436-
.prescaler = 0x01
437+
.sjw = 1,
438+
.prop_seg = 0,
439+
.phase_seg1 = 1,
440+
.phase_seg2 = 1,
441+
.prescaler = 1
437442
},
438443
.timing_data_max = {
439-
.sjw = 0x0F,
440-
.prop_seg = 0x0F,
441-
.phase_seg1 = 0x0F,
442-
.phase_seg2 = 0x0F,
443-
.prescaler = 0xFFFF
444+
.sjw = 16,
445+
.prop_seg = 0,
446+
.phase_seg1 = 32,
447+
.phase_seg2 = 16,
448+
.prescaler = 32
444449
},
445450
#endif /* CONFIG_CAN_FD_MODE */
446451
};

0 commit comments

Comments
 (0)