From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 05650C56202 for ; Thu, 12 Nov 2020 18:04:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AD1B922201 for ; Thu, 12 Nov 2020 18:04:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726397AbgKLSEr (ORCPT ); Thu, 12 Nov 2020 13:04:47 -0500 Received: from mail3.ems-wuensche.com ([81.169.186.156]:46574 "EHLO mail3.ems-wuensche.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726096AbgKLSEr (ORCPT ); Thu, 12 Nov 2020 13:04:47 -0500 Received: from localhost (unknown [127.0.0.1]) by h2257714.serverkompetenz.net (Postfix) with ESMTP id E3756FF9D1 for ; Thu, 12 Nov 2020 18:04:45 +0000 (UTC) X-Virus-Scanned: amavisd-new at h2257714.serverkompetenz.net Received: from mail3.ems-wuensche.com ([81.169.186.156]) by localhost (h2257714.serverkompetenz.net [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id SugehyBbklRM for ; Thu, 12 Nov 2020 19:04:44 +0100 (CET) From: Gerhard Uttenthaler To: linux-can@vger.kernel.org Cc: wg@grandegger.com, mkl@pengutronix.de, Gerhard Uttenthaler Subject: [PATCH v2 07/16] can: ems_usb: Added listen only mode for CPC-USB/ARM7 Date: Thu, 12 Nov 2020 19:03:37 +0100 Message-Id: <20201112180346.29070-8-uttenthaler@ems-wuensche.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20201112180346.29070-1-uttenthaler@ems-wuensche.com> References: <20201112180346.29070-1-uttenthaler@ems-wuensche.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-can@vger.kernel.org Added support for listen only mode for CPC-USB/ARM7 Signed-off-by: Gerhard Uttenthaler --- drivers/net/can/usb/ems_usb.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c index 3eb3698d5ae6..0e8d1b75ef8d 100644 --- a/drivers/net/can/usb/ems_usb.c +++ b/drivers/net/can/usb/ems_usb.c @@ -81,6 +81,7 @@ MODULE_LICENSE("GPL v2"); /* Mode register NXP LPC2119/SJA1000 CAN Controller */ #define SJA1000_MOD_NORMAL 0x00 #define SJA1000_MOD_RM 0x01 +#define SJA1000_MOD_LOM 0x02 /* ECC register NXP LPC2119/SJA1000 CAN Controller */ #define SJA1000_ECC_SEG 0x1F @@ -600,13 +601,23 @@ static int ems_usb_write_mode_arm7(struct ems_usb *dev, u32 mode) struct cpc_sja1000_params *sja1000 = &dev->active_params.msg.can_params.cc_params.sja1000; - if (mode == CPC_USB_RESET_MODE) + if (mode == CPC_USB_RESET_MODE) { sja1000->mode |= SJA1000_MOD_RM; - else if (mode == CPC_USB_RUN_MODE) + } else if (mode == CPC_USB_RUN_MODE) { sja1000->mode &= ~SJA1000_MOD_RM; - else + if (dev->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) + sja1000->mode |= SJA1000_MOD_LOM; + else + sja1000->mode &= ~SJA1000_MOD_LOM; + + if (dev->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) + sja1000->btr1 |= 0x80; + else + sja1000->btr1 &= ~0x80; + } else { return -EINVAL; + } return ems_usb_command_msg(dev, &dev->active_params); } @@ -978,14 +989,13 @@ static int ems_usb_set_bittiming_arm7(struct net_device *netdev) { struct ems_usb *dev = netdev_priv(netdev); struct can_bittiming *bt = &dev->can.bittiming; - u8 btr0, btr1; + struct cpc_sja1000_params *sja1000 = + &dev->active_params.msg.can_params.cc_params.sja1000; int err; - btr0 = ((bt->brp - 1) & 0x3f) | (((bt->sjw - 1) & 0x3) << 6); - btr1 = ((bt->prop_seg + bt->phase_seg1 - 1) & 0xf) | + sja1000->btr0 = ((bt->brp - 1) & 0x3f) | (((bt->sjw - 1) & 0x3) << 6); + sja1000->btr1 = ((bt->prop_seg + bt->phase_seg1 - 1) & 0xf) | (((bt->phase_seg2 - 1) & 0x7) << 4); - if (dev->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) - btr1 |= 0x80; /* If the command queue in the device is full with incoming commands * a reinitialization would not be possible before the queue is cleared. @@ -994,10 +1004,8 @@ static int ems_usb_set_bittiming_arm7(struct net_device *netdev) if (err) return err; - netdev_info(netdev, "setting BTR0=0x%02x BTR1=0x%02x\n", btr0, btr1); - - dev->active_params.msg.can_params.cc_params.sja1000.btr0 = btr0; - dev->active_params.msg.can_params.cc_params.sja1000.btr1 = btr1; + netdev_info(netdev, "Setting BTR0=0x%02x BTR1=0x%02x\n", sja1000->btr0, + sja1000->btr1); return ems_usb_command_msg(dev, &dev->active_params); } @@ -1061,7 +1069,8 @@ static int ems_usb_probe(struct usb_interface *intf, dev->can.bittiming_const = &ems_usb_bittiming_const_arm7; dev->can.do_set_bittiming = ems_usb_set_bittiming_arm7; dev->can.do_set_mode = ems_usb_set_mode; - dev->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES; + dev->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES | + CAN_CTRLMODE_LISTENONLY; init_params_sja1000(&dev->active_params); dev->ems_usb_write_mode = ems_usb_write_mode_arm7; dev->bulk_rd_buf_size = CPC_USB_ARM7_RX_BUFFER_SIZE; -- 2.26.2 -- EMS Dr. Thomas Wuensche e.K. Sonnenhang 3 85304 Ilmmuenster HR Ingolstadt, HRA 170106 Phone: +49-8441-490260 Fax : +49-8441-81860 http://www.ems-wuensche.com