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

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
pull/372/head
Marc Kleine-Budde 2022-02-21 23:17:34 +01:00
parent cfc3030080
commit a7062893da
1 changed files with 16 additions and 12 deletions

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;
} }