All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gerhard Uttenthaler <uttenthaler@ems-wuensche.com>
To: linux-can@vger.kernel.org
Cc: wg@grandegger.com, mkl@pengutronix.de,
	Gerhard Uttenthaler <uttenthaler@ems-wuensche.com>
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	[thread overview]
Message-ID: <20201112180346.29070-8-uttenthaler@ems-wuensche.com> (raw)
In-Reply-To: <20201112180346.29070-1-uttenthaler@ems-wuensche.com>

Added support for listen only mode for CPC-USB/ARM7

Signed-off-by: Gerhard Uttenthaler <uttenthaler@ems-wuensche.com>
---
 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

  parent reply	other threads:[~2020-11-12 18:04 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-12 18:03 [PATCH v2 00/16] Add support for CPC-USB/FD CAN FD interface Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 01/16] can: ems_usb: Fixed warnings and comments Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 02/16] can: ems_usb: Added CPC_ClearCmdQueue routine Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 03/16] can: ems_usb: Fixed non C99 style initialization Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 04/16] can: ems_usb: Added CAN FD message representation Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 05/16] can: ems_usb: Added CAN FD initialization struct Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 06/16] can: ems_usb: Made RX_BUFFER_SIZE, ems_usb_write_mode and ems_usb_probe device dependent Gerhard Uttenthaler
2020-11-12 18:03 ` Gerhard Uttenthaler [this message]
2020-11-12 18:03 ` [PATCH v2 08/16] can: ems_usb: Modified ems_usb_read_bulk_callback to handle also CPC-USB/FD Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 09/16] can: ems_usb: Added CAN controller initialization for CAN FD Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 10/16] can: ems_usb: Added receive routine for CAN FD messages Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 11/16] can: ems_usb: Added ems_usb_write_mode_fd Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 12/16] can: ems_usb: Fixed ems_usb_start_xmit for CAN FD Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 13/16] can: ems_usb: Made CAN error reporting CAN controller dependent Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 14/16] can: ems_usb: Made structs packed Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 15/16] can: ems_usb: Added error reporting for CPC-USB/FD Gerhard Uttenthaler
2020-11-12 18:03 ` [PATCH v2 16/16] can: ems_usb: Enable CPC-USB/FD support Gerhard Uttenthaler
2020-11-26 17:49 ` [PATCH v2 00/16] Add support for CPC-USB/FD CAN FD interface Gerhard Uttenthaler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201112180346.29070-8-uttenthaler@ems-wuensche.com \
    --to=uttenthaler@ems-wuensche.com \
    --cc=linux-can@vger.kernel.org \
    --cc=mkl@pengutronix.de \
    --cc=wg@grandegger.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.