linux-can-fixes-for-4.7-20160620
-----BEGIN PGP SIGNATURE----- iQEcBAABCgAGBQJXZ5/IAAoJED07qiWsqSVq0YYH+wVIlPYnFXNHvi0W7vkQMmgJ b56315mWYCkZ6I2vU3VSvh3W0Q64Q9eIBnDUEMOJVeQNseG52S0t8qgikWFZMKv7 RJsdR2w8TgqV+DDCQZVF6lOyWDXf4jwW4Az5hBEdGoIKm7YDhxPc7dzVhwEzkePG tLl/TdFtLL2JpZZXEJKLK/cjQMnuz0eMq8BGkGDhhDDwExkIj4X31iittcVWEVdt ZPNo8/IfzwzWhonQRrZ6usEWIcl6VmedICddx38HFcCA8EshyzgekC5GkKPvxwhE eCuIV3dFMlCrqXR4mf4gDlX18MwWrPQOADC9pbdL6Vc6guEYY9vj5jFT/zuAZWE= =89oI -----END PGP SIGNATURE----- Merge tag 'linux-can-fixes-for-4.7-20160620' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can Marc Kleine-Budde says: ==================== pull-request: can 2016-06-20 this is a pull request of 3 patches for the upcoming linux-4.7 release. The first patch is by Thor Thayer for the c_can/d_can driver. It fixes the registar access on Altera Cyclone devices, which caused CAN frames to have 0x0 in the first two bytes incorrectly. Wolfgang Grandegger's patch for the at91 driver fixes a hanging driver under high bus load situations. A patch for the gs_usb driver by Maximilian Schneider adds support for the bytewerk.org candleLight interface. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
6b65ca06e1
|
@ -712,9 +712,10 @@ static int at91_poll_rx(struct net_device *dev, int quota)
|
|||
|
||||
/* upper group completed, look again in lower */
|
||||
if (priv->rx_next > get_mb_rx_low_last(priv) &&
|
||||
quota > 0 && mb > get_mb_rx_last(priv)) {
|
||||
mb > get_mb_rx_last(priv)) {
|
||||
priv->rx_next = get_mb_rx_first(priv);
|
||||
goto again;
|
||||
if (quota > 0)
|
||||
goto again;
|
||||
}
|
||||
|
||||
return received;
|
||||
|
|
|
@ -332,9 +332,23 @@ static void c_can_setup_tx_object(struct net_device *dev, int iface,
|
|||
|
||||
priv->write_reg(priv, C_CAN_IFACE(MSGCTRL_REG, iface), ctrl);
|
||||
|
||||
for (i = 0; i < frame->can_dlc; i += 2) {
|
||||
priv->write_reg(priv, C_CAN_IFACE(DATA1_REG, iface) + i / 2,
|
||||
frame->data[i] | (frame->data[i + 1] << 8));
|
||||
if (priv->type == BOSCH_D_CAN) {
|
||||
u32 data = 0, dreg = C_CAN_IFACE(DATA1_REG, iface);
|
||||
|
||||
for (i = 0; i < frame->can_dlc; i += 4, dreg += 2) {
|
||||
data = (u32)frame->data[i];
|
||||
data |= (u32)frame->data[i + 1] << 8;
|
||||
data |= (u32)frame->data[i + 2] << 16;
|
||||
data |= (u32)frame->data[i + 3] << 24;
|
||||
priv->write_reg32(priv, dreg, data);
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < frame->can_dlc; i += 2) {
|
||||
priv->write_reg(priv,
|
||||
C_CAN_IFACE(DATA1_REG, iface) + i / 2,
|
||||
frame->data[i] |
|
||||
(frame->data[i + 1] << 8));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -402,10 +416,20 @@ static int c_can_read_msg_object(struct net_device *dev, int iface, u32 ctrl)
|
|||
} else {
|
||||
int i, dreg = C_CAN_IFACE(DATA1_REG, iface);
|
||||
|
||||
for (i = 0; i < frame->can_dlc; i += 2, dreg ++) {
|
||||
data = priv->read_reg(priv, dreg);
|
||||
frame->data[i] = data;
|
||||
frame->data[i + 1] = data >> 8;
|
||||
if (priv->type == BOSCH_D_CAN) {
|
||||
for (i = 0; i < frame->can_dlc; i += 4, dreg += 2) {
|
||||
data = priv->read_reg32(priv, dreg);
|
||||
frame->data[i] = data;
|
||||
frame->data[i + 1] = data >> 8;
|
||||
frame->data[i + 2] = data >> 16;
|
||||
frame->data[i + 3] = data >> 24;
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < frame->can_dlc; i += 2, dreg++) {
|
||||
data = priv->read_reg(priv, dreg);
|
||||
frame->data[i] = data;
|
||||
frame->data[i + 1] = data >> 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,8 @@ config CAN_ESD_USB2
|
|||
config CAN_GS_USB
|
||||
tristate "Geschwister Schneider UG interfaces"
|
||||
---help---
|
||||
This driver supports the Geschwister Schneider USB/CAN devices.
|
||||
This driver supports the Geschwister Schneider and bytewerk.org
|
||||
candleLight USB CAN interfaces USB/CAN devices
|
||||
If unsure choose N,
|
||||
choose Y for built in support,
|
||||
M to compile as module (module will be named: gs_usb).
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
/* CAN driver for Geschwister Schneider USB/CAN devices.
|
||||
/* CAN driver for Geschwister Schneider USB/CAN devices
|
||||
* and bytewerk.org candleLight USB CAN interfaces.
|
||||
*
|
||||
* Copyright (C) 2013 Geschwister Schneider Technologie-,
|
||||
* Copyright (C) 2013-2016 Geschwister Schneider Technologie-,
|
||||
* Entwicklungs- und Vertriebs UG (Haftungsbeschränkt).
|
||||
* Copyright (C) 2016 Hubert Denkmair
|
||||
*
|
||||
* Many thanks to all socketcan devs!
|
||||
*
|
||||
|
@ -29,6 +31,9 @@
|
|||
#define USB_GSUSB_1_VENDOR_ID 0x1d50
|
||||
#define USB_GSUSB_1_PRODUCT_ID 0x606f
|
||||
|
||||
#define USB_CANDLELIGHT_VENDOR_ID 0x1209
|
||||
#define USB_CANDLELIGHT_PRODUCT_ID 0x2323
|
||||
|
||||
#define GSUSB_ENDPOINT_IN 1
|
||||
#define GSUSB_ENDPOINT_OUT 2
|
||||
|
||||
|
@ -952,6 +957,8 @@ static void gs_usb_disconnect(struct usb_interface *intf)
|
|||
static const struct usb_device_id gs_usb_table[] = {
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(USB_GSUSB_1_VENDOR_ID,
|
||||
USB_GSUSB_1_PRODUCT_ID, 0) },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(USB_CANDLELIGHT_VENDOR_ID,
|
||||
USB_CANDLELIGHT_PRODUCT_ID, 0) },
|
||||
{} /* Terminating entry */
|
||||
};
|
||||
|
||||
|
@ -969,5 +976,6 @@ module_usb_driver(gs_usb_driver);
|
|||
MODULE_AUTHOR("Maximilian Schneider <mws@schneidersoft.net>");
|
||||
MODULE_DESCRIPTION(
|
||||
"Socket CAN device driver for Geschwister Schneider Technologie-, "
|
||||
"Entwicklungs- und Vertriebs UG. USB2.0 to CAN interfaces.");
|
||||
"Entwicklungs- und Vertriebs UG. USB2.0 to CAN interfaces\n"
|
||||
"and bytewerk.org candleLight USB CAN interfaces.");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
|
Loading…
Reference in New Issue