From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wolfgang Grandegger Subject: Re: [PATCH net-next] candev: allow SJW user setting for bittiming calculation Date: Thu, 22 Sep 2011 13:00:19 +0200 Message-ID: <4E7B1543.2000603@grandegger.com> References: <4E7B0CE4.3070402@hartkopp.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: SocketCAN Core Mailing List , Linux Netdev List , Píša@mail.berlios.de, David Miller , Pavel-XecQL68PM4x789tOGE2Ojw@public.gmane.org To: Oliver Hartkopp Return-path: In-Reply-To: <4E7B0CE4.3070402-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: socketcan-core-bounces-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org Errors-To: socketcan-core-bounces-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org List-Id: netdev.vger.kernel.org Hi Oliver, On 09/22/2011 12:24 PM, Oliver Hartkopp wrote: > This patch adds support for SJW user settings to not set the synchronization > jump width (SJW) to 1 in any case when using the in-kernel bittiming > calculation. > > The ip-tool from iproute2 already supports to pass the user defined SJW > value. The given SJW value is sanitized with the controller specific sjw_max > and the calculated tseg2 value. As the SJW can have values up to 4 providing > this value will lead to the maximum possible SJW automatically. A higher SJW > allows higher controller oscillator tolerances. > > Signed-off-by: Oliver Hartkopp > > --- > > diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c > index 9bf1116..25695bd 100644 > --- a/drivers/net/can/dev.c > +++ b/drivers/net/can/dev.c > @@ -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; > + } > + Hm, bt->sjw is always 0 when can_calc_bittiming() is called!? Or have I missed something. Wolfgang,