int err;
 
        /* Check if the CAN device has bit-timing parameters */
-       if (priv->bittiming_const) {
+       if (!priv->bittiming_const)
+               return 0;
 
-               /* Non-expert mode? Check if the bitrate has been pre-defined */
-               if (!bt->tq)
-                       /* Determine bit-timing parameters */
-                       err = can_calc_bittiming(dev, bt);
-               else
-                       /* Check bit-timing params and calculate proper brp */
-                       err = can_fixup_bittiming(dev, bt);
-               if (err)
-                       return err;
-       }
+       /*
+        * Depending on the given can_bittiming parameter structure the CAN
+        * timing parameters are calculated based on the provided bitrate OR
+        * alternatively the CAN timing parameters (tq, prop_seg, etc.) are
+        * provided directly which are then checked and fixed up.
+        */
+       if (!bt->tq && bt->bitrate)
+               err = can_calc_bittiming(dev, bt);
+       else if (bt->tq && !bt->bitrate)
+               err = can_fixup_bittiming(dev, bt);
+       else
+               err = -EINVAL;
 
-       return 0;
+       return err;
 }
 
 /*
                if (dev->flags & IFF_UP)
                        return -EBUSY;
                memcpy(&bt, nla_data(data[IFLA_CAN_BITTIMING]), sizeof(bt));
-               if ((!bt.bitrate && !bt.tq) || (bt.bitrate && bt.tq))
-                       return -EINVAL;
                err = can_get_bittiming(dev, &bt);
                if (err)
                        return err;