Re: [PATCH] can: mcba_usb: Fix termination command argument

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 24.11.22 10:50, Yasushi SHOJI wrote:
Hi,

On Thu, Nov 24, 2022 at 7:34 AM Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> wrote:

Let's take the original driver author into the loop.

On 24.11.2022 04:44:06, Yasushi SHOJI wrote:
Microchip USB Analyzer can be set with termination setting ON or OFF.
As I've observed, both with my oscilloscope and USB packet capture
below, you must send "0" to turn it ON, and "1" to turn it OFF.

Reverse the argument value to fix this.

These are the two commands sequence, ON then OFF.

No.     Time           Source                Destination           Protocol Length Info
       1 0.000000       host                  1.3.1                 USB      46     URB_BULK out

Frame 1: 46 bytes on wire (368 bits), 46 bytes captured (368 bits)
USB URB
Leftover Capture Data: a80000000000000000000000000000000000a8

No.     Time           Source                Destination           Protocol Length Info
       2 4.372547       host                  1.3.1                 USB      46     URB_BULK out

Frame 2: 46 bytes on wire (368 bits), 46 bytes captured (368 bits)
USB URB
Leftover Capture Data: a80100000000000000000000000000000000a9

Is this the USB data after applying the patch?

That's not from Linux.

Can you measure the resistance between CAN-H and CAN-L to verify that
your patch fixes the problem?

Sure.  The command I'm using on my Linux is:

     sudo ip link set can0 up type can bitrate 100000 termination X

where X is either 0 or 120.

With Debian Sid stock kernel: linux-image-6.0.0-4-amd64
   - termination 0: 135.4 Ohms
   - termination 120: 17.82 Ohms

With my patch on v6.1-rc6
   - termination 0: 22.20 Ohms
   - termination 120: 134.2 Ohms


Hugh!

What does "termination 0" mean here?

I assumed "termination 0" results in "termination off" (=> no termination => very high resistor value) but in fact it gets around 20 Ohms, which is a pretty heavy termination for a CAN bus.

Best regards,
Oliver


Signed-off-by: Yasushi SHOJI <yashi@xxxxxxxxxxxxxxx>
---
  drivers/net/can/usb/mcba_usb.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/can/usb/mcba_usb.c b/drivers/net/can/usb/mcba_usb.c
index 218b098b261d..67beff1a3876 100644
--- a/drivers/net/can/usb/mcba_usb.c
+++ b/drivers/net/can/usb/mcba_usb.c
@@ -785,9 +785,9 @@ static int mcba_set_termination(struct net_device *netdev, u16 term)
       };

       if (term == MCBA_TERMINATION_ENABLED)
-             usb_msg.termination = 1;
-     else
               usb_msg.termination = 0;
+     else
+             usb_msg.termination = 1;

       mcba_usb_xmit_cmd(priv, (struct mcba_usb_msg *)&usb_msg);

What about the static void mcba_usb_process_ka_usb() function? Do you
need to convert this, too?

Ah, yes. Thanks.
Attaching a compressed patch.

Let me know if I need to resend it as an email.

Best,
--
           yashi



[Index of Archives]     [Automotive Discussions]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]     [CAN Bus]

  Powered by Linux