On 11/6/20 6:01 PM, Gerhard Uttenthaler wrote: > Signed-off-by: Gerhard Uttenthaler <uttenthaler@xxxxxxxxxxxxxxxx> > --- > drivers/net/can/usb/ems_usb.c | 39 ++++++++++++++++++++++------------- > 1 file changed, 25 insertions(+), 14 deletions(-) > > diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c > index a3943042b8c8..66418e5af87d 100644 > --- a/drivers/net/can/usb/ems_usb.c > +++ b/drivers/net/can/usb/ems_usb.c > @@ -85,6 +85,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 > @@ -604,13 +605,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); > } > @@ -653,7 +664,9 @@ static int ems_usb_start(struct ems_usb *dev) > break; > } > > - buf = usb_alloc_coherent(dev->udev, dev->bulk_rd_buf_size, GFP_KERNEL, > + buf = usb_alloc_coherent(dev->udev, > + dev->bulk_rd_buf_size, > + GFP_KERNEL, > &urb->transfer_dma); unrelated, please move the the previous patch > if (!buf) { > netdev_err(netdev, "No memory left for USB buffer\n"); > @@ -963,18 +976,16 @@ 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; > > - 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; > - > - 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, "Set bit timing for CPC-USB/ARM7\n"); > + netdev_info(netdev, "BTR0=0x%02x, BTR1=0x%02x\n", > + sja1000->btr0, sja1000->btr1); One line of netdev_info should be enough... > > return ems_usb_command_msg(dev, &dev->active_params); > } > @@ -1039,7 +1050,7 @@ 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 = 64; > Marc -- Pengutronix e.K. | Marc Kleine-Budde | Embedded Linux | https://www.pengutronix.de | Vertretung West/Dortmund | Phone: +49-231-2826-924 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Attachment:
signature.asc
Description: OpenPGP digital signature