Skip to content

Commit d5298df

Browse files
hartkoppmarckleinebudde
authored andcommitted
can: move sanity check for bitrate and tq into can_get_bittiming
This patch moves a sanity check in order to have a second user for CAN FD. Also simplify the return value generation in can_get_bittiming() as only correct return values of can_[calc|fixup]_bittiming() lead to a return value of zero. Signed-off-by: Oliver Hartkopp <[email protected]> Acked-by: Stephane Grosjean <[email protected]> Signed-off-by: Marc Kleine-Budde <[email protected]>
1 parent b30749f commit d5298df

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

drivers/net/can/dev.c

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -260,20 +260,23 @@ static int can_get_bittiming(struct net_device *dev, struct can_bittiming *bt)
260260
int err;
261261

262262
/* Check if the CAN device has bit-timing parameters */
263-
if (priv->bittiming_const) {
263+
if (!priv->bittiming_const)
264+
return 0;
264265

265-
/* Non-expert mode? Check if the bitrate has been pre-defined */
266-
if (!bt->tq)
267-
/* Determine bit-timing parameters */
268-
err = can_calc_bittiming(dev, bt);
269-
else
270-
/* Check bit-timing params and calculate proper brp */
271-
err = can_fixup_bittiming(dev, bt);
272-
if (err)
273-
return err;
274-
}
266+
/*
267+
* Depending on the given can_bittiming parameter structure the CAN
268+
* timing parameters are calculated based on the provided bitrate OR
269+
* alternatively the CAN timing parameters (tq, prop_seg, etc.) are
270+
* provided directly which are then checked and fixed up.
271+
*/
272+
if (!bt->tq && bt->bitrate)
273+
err = can_calc_bittiming(dev, bt);
274+
else if (bt->tq && !bt->bitrate)
275+
err = can_fixup_bittiming(dev, bt);
276+
else
277+
err = -EINVAL;
275278

276-
return 0;
279+
return err;
277280
}
278281

279282
/*
@@ -667,8 +670,6 @@ static int can_changelink(struct net_device *dev,
667670
if (dev->flags & IFF_UP)
668671
return -EBUSY;
669672
memcpy(&bt, nla_data(data[IFLA_CAN_BITTIMING]), sizeof(bt));
670-
if ((!bt.bitrate && !bt.tq) || (bt.bitrate && bt.tq))
671-
return -EINVAL;
672673
err = can_get_bittiming(dev, &bt);
673674
if (err)
674675
return err;

0 commit comments

Comments
 (0)