]> rtime.felk.cvut.cz Git - socketcan-devel.git/commitdiff
Fix problems with calculating bit-timing parameters
authorwolf <wolf@030b6a49-0b11-0410-94ab-b0dab22257f2>
Tue, 7 Oct 2008 07:36:50 +0000 (07:36 +0000)
committerwolf <wolf@030b6a49-0b11-0410-94ab-b0dab22257f2>
Tue, 7 Oct 2008 07:36:50 +0000 (07:36 +0000)
This patch fixes a bug resulting in a badly matching sample point.
Furthermore, it temporarily fixes the problems with prog_seg being
0 on AT91 and MPC2510 CAN controllers. A proper fix using min/max
values for prog_seg, phase_seg1 and phase_seg2 is on the to-do
list.

Signed-off-by: Wolfgang Grandegger <wg@grandegger.com>
git-svn-id: svn://svn.berlios.de//socketcan/trunk@832 030b6a49-0b11-0410-94ab-b0dab22257f2

kernel/2.6/drivers/net/can/dev.c

index 98564df71e33a0c5e7a6961cbbf48f0993185784..94f39446f5efcecb6fcebba3a6f814f1679147a7 100644 (file)
@@ -120,14 +120,13 @@ static int can_calc_bittiming(struct net_device *dev)
                        break;
        }
 
-       if (!spt)
-               spt = can_update_spt(btc, sampl_pt, best_tseg, &tseg1, &tseg2);
+       spt = can_update_spt(btc, sampl_pt, best_tseg, &tseg1, &tseg2);
 
        v64 = (u64)best_brp * 1000000000UL;
        do_div(v64, bt->clock);
        bt->tq = (u32)v64;
-       bt->prop_seg = 0;
-       bt->phase_seg1 = tseg1;
+       bt->prop_seg = tseg1 / 2;
+       bt->phase_seg1 = tseg1 - bt->prop_seg;
        bt->phase_seg2 = tseg2;
        bt->sjw = 1;
        bt->brp = best_brp;