|
@@ -150,7 +150,19 @@ static int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt)
|
|
|
bt->prop_seg = tseg1 / 2;
|
|
|
bt->phase_seg1 = tseg1 - bt->prop_seg;
|
|
|
bt->phase_seg2 = tseg2;
|
|
|
- bt->sjw = 1;
|
|
|
+
|
|
|
+ /* check for sjw user settings */
|
|
|
+ if (!bt->sjw || !btc->sjw_max)
|
|
|
+ bt->sjw = 1;
|
|
|
+ else {
|
|
|
+ /* bt->sjw is at least 1 -> sanitize upper bound to sjw_max */
|
|
|
+ if (bt->sjw > btc->sjw_max)
|
|
|
+ bt->sjw = btc->sjw_max;
|
|
|
+ /* bt->sjw must not be higher than tseg2 */
|
|
|
+ if (tseg2 < bt->sjw)
|
|
|
+ bt->sjw = tseg2;
|
|
|
+ }
|
|
|
+
|
|
|
bt->brp = best_brp;
|
|
|
/* real bit-rate */
|
|
|
bt->bitrate = priv->clock.freq / (bt->brp * (tseg1 + tseg2 + 1));
|