can-calc-bit-timing: add can_fixup_bittiming to alg

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
Marc Kleine-Budde
2022-08-11 21:45:50 +02:00
parent cfc3030080
commit a7062893da
+16 -12
View File
@@ -143,6 +143,8 @@ struct calc_bittiming_const {
struct alg { struct alg {
int (*calc_bittiming)(struct net_device *dev, struct can_bittiming *bt, int (*calc_bittiming)(struct net_device *dev, struct can_bittiming *bt,
const struct can_bittiming_const *btc); const struct can_bittiming_const *btc);
int (*fixup_bittiming)(struct net_device *dev, struct can_bittiming *bt,
const struct can_bittiming_const *btc);
const char *name; const char *name;
}; };
@@ -1472,17 +1474,6 @@ static int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt,
#undef can_calc_bittiming #undef can_calc_bittiming
#undef can_update_spt #undef can_update_spt
static const struct alg alg_list[] = {
/* 1st will be default */
{
.calc_bittiming = can_calc_bittiming_v4_8,
.name = "v4.8",
}, {
.calc_bittiming = can_calc_bittiming_v3_18,
.name = "v3.18",
},
};
static int can_fixup_bittiming(struct net_device *dev, struct can_bittiming *bt, static int can_fixup_bittiming(struct net_device *dev, struct can_bittiming *bt,
const struct can_bittiming_const *btc) const struct can_bittiming_const *btc)
{ {
@@ -1523,6 +1514,19 @@ static int can_fixup_bittiming(struct net_device *dev, struct can_bittiming *bt,
return 0; return 0;
} }
static const struct alg alg_list[] = {
/* 1st will be default */
{
.calc_bittiming = can_calc_bittiming_v4_8,
.fixup_bittiming = can_fixup_bittiming,
.name = "v4.8",
}, {
.calc_bittiming = can_calc_bittiming_v3_18,
.fixup_bittiming = can_fixup_bittiming,
.name = "v3.18",
},
};
static __u32 get_cia_sample_point(__u32 bitrate) static __u32 get_cia_sample_point(__u32 bitrate)
{ {
__u32 sampl_pt; __u32 sampl_pt;
@@ -1575,7 +1579,7 @@ static void print_bittiming_one(const struct alg *alg,
if (ref_bt) { if (ref_bt) {
bt = *ref_bt; bt = *ref_bt;
if (can_fixup_bittiming(&dev, &bt, bittiming_const)) { if (alg->fixup_bittiming(&dev, &bt, bittiming_const)) {
printf("%8d ***parameters exceed controller's range***\n", bitrate_nominal); printf("%8d ***parameters exceed controller's range***\n", bitrate_nominal);
return; return;
} }