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