From: wolf Date: Tue, 7 Oct 2008 07:36:50 +0000 (+0000) Subject: Fix problems with calculating bit-timing parameters X-Git-Url: http://rtime.felk.cvut.cz/gitweb/socketcan-devel.git/commitdiff_plain/173a878ad810433ce29312ffdcb4bbea00ab6ef6 Fix problems with calculating bit-timing parameters 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 git-svn-id: svn://svn.berlios.de//socketcan/trunk@832 030b6a49-0b11-0410-94ab-b0dab22257f2 --- diff --git a/kernel/2.6/drivers/net/can/dev.c b/kernel/2.6/drivers/net/can/dev.c index 98564df..94f3944 100644 --- a/kernel/2.6/drivers/net/can/dev.c +++ b/kernel/2.6/drivers/net/can/dev.c @@ -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;