diff options
-rwxr-xr-x | drivers/fims/can/fim_can.c | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/drivers/fims/can/fim_can.c b/drivers/fims/can/fim_can.c index d7336f6c885b..f48b2d709565 100755 --- a/drivers/fims/can/fim_can.c +++ b/drivers/fims/can/fim_can.c @@ -1013,28 +1013,22 @@ static int fim_can_xmit(struct sk_buff *skb, struct net_device *dev) fim_can_dump_frame(&frame, "START"); /* Check for the extended ID (18 bits length) */ - if (id & CAN_EFF_FLAG) - fim_can_frame_write(&frame, id, 18); - else - fim_can_frame_write(&frame, id, 11); - + if (id & CAN_EFF_FLAG) { + fim_can_frame_write(&frame, id >> 18, 11); + fim_can_frame_write(&frame, 1, 2); /* write IDE and RTS as recessive*/ + fim_can_frame_write(&frame, id, 18); /* write rest of ID*/ + fim_can_frame_write(&frame, (id & CAN_RTR_FLAG) != 0, 1); + fim_can_frame_write(&frame, 0, 2); /* write R0 and R1*/ + } else { + fim_can_frame_write(&frame, id, 11); + fim_can_frame_write(&frame, (id & CAN_RTR_FLAG) != 0, 1); + fim_can_frame_write(&frame, 0, 1); /* write IDE dominant for standard format*/ + fim_can_frame_write(&frame, 1, 1); /* write R0 recessive*/ + } fim_can_dump_frame(&frame, "ID"); - /* Check if we have a RTR message */ - if (id & CAN_RTR_FLAG) - fim_can_frame_write(&frame, 1, 1); - else - fim_can_frame_write(&frame, 0, 1); fim_can_dump_frame(&frame, "RTR"); - /* Write the identifier bit which is dominant in the standard frame */ - fim_can_frame_write(&frame, 0, 1); - fim_can_dump_frame(&frame, "IDE"); - - /* Write the R0 bit */ - fim_can_frame_write(&frame, 0, 1); - fim_can_dump_frame(&frame, "RESERVE"); - /* Write the control field (data length passed by the user) */ fim_can_frame_write(&frame, dlc, 4); fim_can_dump_frame(&frame, "CONTROL"); @@ -1067,7 +1061,7 @@ static int fim_can_xmit(struct sk_buff *skb, struct net_device *dev) * (see page 8, transmit message structure) */ frame.buffer[0] = FIM_CAN_CMD_TX; - frame.buffer[1] = ((id & CAN_EFF_FLAG) ? 18 : 11) + 1; + frame.buffer[1] = ((id & CAN_EFF_FLAG) ? 29 : 11) + 1; frame.buffer[2] = frame.stuffed; frame.buffer[3] = port->id++; frame.buffer[4] = port->max_retries; @@ -1223,7 +1217,7 @@ static void fim_can_rx_isr(struct fim_driver *driver, int irq, * upper layer driver about it. */ fim_can_check_error(dev, TRANSMIT_FAILURE); - printk(KERN_ERR "Reported transmit failure to upper layer\n"); + printk_debug("Reported transmit failure to upper layer\n"); } else { printk_debug("transmit successful\n"); |