Merge branch 'for-davem' of git://gitorious.org/linux-can/linux-can-next
Marc Kleine-Budde says: ==================== this pull request is for net-next, for the v3.8 release cycle. Muhammad Ghias added support another board to the plx_pci sja1000 driver. Matthias Fuchs improved the esd_usb2 driver with listen-only mode and CAN-USB/Micro support. Andreas Larsson contributed a driver for the GRHCAN CAN IP-Core ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
7213dde6c9
|
@ -0,0 +1,35 @@
|
|||
|
||||
What: /sys/class/net/<iface>/grcan/enable0
|
||||
Date: October 2012
|
||||
KernelVersion: 3.8
|
||||
Contact: Andreas Larsson <andreas@gaisler.com>
|
||||
Description:
|
||||
Hardware configuration of physical interface 0. This file reads
|
||||
and writes the "Enable 0" bit of the configuration register.
|
||||
Possible values: 0 or 1. See the GRCAN chapter of the GRLIB IP
|
||||
core library documentation for details. The default value is 0
|
||||
or set by the module parameter grcan.enable0 and can be read at
|
||||
/sys/module/grcan/parameters/enable0.
|
||||
|
||||
What: /sys/class/net/<iface>/grcan/enable1
|
||||
Date: October 2012
|
||||
KernelVersion: 3.8
|
||||
Contact: Andreas Larsson <andreas@gaisler.com>
|
||||
Description:
|
||||
Hardware configuration of physical interface 1. This file reads
|
||||
and writes the "Enable 1" bit of the configuration register.
|
||||
Possible values: 0 or 1. See the GRCAN chapter of the GRLIB IP
|
||||
core library documentation for details. The default value is 0
|
||||
or set by the module parameter grcan.enable1 and can be read at
|
||||
/sys/module/grcan/parameters/enable1.
|
||||
|
||||
What: /sys/class/net/<iface>/grcan/select
|
||||
Date: October 2012
|
||||
KernelVersion: 3.8
|
||||
Contact: Andreas Larsson <andreas@gaisler.com>
|
||||
Description:
|
||||
Configuration of which physical interface to be used. Possible
|
||||
values: 0 or 1. See the GRCAN chapter of the GRLIB IP core
|
||||
library documentation for details. The default value is 0 or is
|
||||
set by the module parameter grcan.select and can be read at
|
||||
/sys/module/grcan/parameters/select.
|
|
@ -0,0 +1,28 @@
|
|||
Aeroflex Gaisler GRCAN and GRHCAN CAN controllers.
|
||||
|
||||
The GRCAN and CRHCAN CAN controllers are available in the GRLIB VHDL IP core
|
||||
library.
|
||||
|
||||
Note: These properties are built from the AMBA plug&play in a Leon SPARC system
|
||||
(the ordinary environment for GRCAN and GRHCAN). There are no dts files for
|
||||
sparc.
|
||||
|
||||
Required properties:
|
||||
|
||||
- name : Should be "GAISLER_GRCAN", "01_03d", "GAISLER_GRHCAN" or "01_034"
|
||||
|
||||
- reg : Address and length of the register set for the device
|
||||
|
||||
- freq : Frequency of the external oscillator clock in Hz (the frequency of
|
||||
the amba bus in the ordinary case)
|
||||
|
||||
- interrupts : Interrupt number for this device
|
||||
|
||||
Optional properties:
|
||||
|
||||
- systemid : If not present or if the value of the least significant 16 bits
|
||||
of this 32-bit property is smaller than GRCAN_TXBUG_SAFE_GRLIB_VERSION
|
||||
a bug workaround is activated.
|
||||
|
||||
For further information look in the documentation for the GLIB IP core library:
|
||||
http://www.gaisler.com/products/grlib/grip.pdf
|
|
@ -905,6 +905,24 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||
gpt [EFI] Forces disk with valid GPT signature but
|
||||
invalid Protective MBR to be treated as GPT.
|
||||
|
||||
grcan.enable0= [HW] Configuration of physical interface 0. Determines
|
||||
the "Enable 0" bit of the configuration register.
|
||||
Format: 0 | 1
|
||||
Default: 0
|
||||
grcan.enable1= [HW] Configuration of physical interface 1. Determines
|
||||
the "Enable 0" bit of the configuration register.
|
||||
Format: 0 | 1
|
||||
Default: 0
|
||||
grcan.select= [HW] Select which physical interface to use.
|
||||
Format: 0 | 1
|
||||
Default: 0
|
||||
grcan.txsize= [HW] Sets the size of the tx buffer.
|
||||
Format: <unsigned int> such that (txsize & ~0x1fffc0) == 0.
|
||||
Default: 1024
|
||||
grcan.rxsize= [HW] Sets the size of the rx buffer.
|
||||
Format: <unsigned int> such that (rxsize & ~0x1fffc0) == 0.
|
||||
Default: 1024
|
||||
|
||||
hashdist= [KNL,NUMA] Large hashes allocated during boot
|
||||
are distributed across NUMA nodes. Defaults on
|
||||
for 64-bit NUMA, off otherwise.
|
||||
|
|
|
@ -110,6 +110,15 @@ config PCH_CAN
|
|||
is an IOH for x86 embedded processor (Intel Atom E6xx series).
|
||||
This driver can access CAN bus.
|
||||
|
||||
config CAN_GRCAN
|
||||
tristate "Aeroflex Gaisler GRCAN and GRHCAN CAN devices"
|
||||
depends on CAN_DEV && OF
|
||||
---help---
|
||||
Say Y here if you want to use Aeroflex Gaisler GRCAN or GRHCAN.
|
||||
Note that the driver supports little endian, even though little
|
||||
endian syntheses of the cores would need some modifications on
|
||||
the hardware level to work.
|
||||
|
||||
source "drivers/net/can/mscan/Kconfig"
|
||||
|
||||
source "drivers/net/can/sja1000/Kconfig"
|
||||
|
|
|
@ -22,5 +22,6 @@ obj-$(CONFIG_CAN_BFIN) += bfin_can.o
|
|||
obj-$(CONFIG_CAN_JANZ_ICAN3) += janz-ican3.o
|
||||
obj-$(CONFIG_CAN_FLEXCAN) += flexcan.o
|
||||
obj-$(CONFIG_PCH_CAN) += pch_can.o
|
||||
obj-$(CONFIG_CAN_GRCAN) += grcan.o
|
||||
|
||||
ccflags-$(CONFIG_CAN_DEBUG_DEVICES) := -DDEBUG
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1692,7 +1692,7 @@ static int ican3_get_berr_counter(const struct net_device *ndev,
|
|||
return ret;
|
||||
|
||||
ret = wait_for_completion_timeout(&mod->buserror_comp, HZ);
|
||||
if (ret <= 0) {
|
||||
if (ret == 0) {
|
||||
dev_info(mod->dev, "%s timed out\n", __func__);
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
@ -1718,7 +1718,7 @@ static ssize_t ican3_sysfs_show_term(struct device *dev,
|
|||
return ret;
|
||||
|
||||
ret = wait_for_completion_timeout(&mod->termination_comp, HZ);
|
||||
if (ret <= 0) {
|
||||
if (ret == 0) {
|
||||
dev_info(mod->dev, "%s timed out\n", __func__);
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
|
|
@ -93,6 +93,7 @@ config CAN_PLX_PCI
|
|||
- Marathon CAN-bus-PCI card (http://www.marathon.ru/)
|
||||
- TEWS TECHNOLOGIES TPMC810 card (http://www.tews.com/)
|
||||
- IXXAT Automation PC-I 04/PCI card (http://www.ixxat.com/)
|
||||
- Connect Tech Inc. CANpro/104-Plus Opto (CRG001) card (http://www.connecttech.com)
|
||||
|
||||
config CAN_TSCAN1
|
||||
tristate "TS-CAN1 PC104 boards"
|
||||
|
|
|
@ -44,6 +44,7 @@ MODULE_SUPPORTED_DEVICE("Adlink PCI-7841/cPCI-7841, "
|
|||
"esd CAN-PCI/CPCI/PCI104/200, "
|
||||
"esd CAN-PCI/PMC/266, "
|
||||
"esd CAN-PCIe/2000, "
|
||||
"Connect Tech Inc. CANpro/104-Plus Opto (CRG001), "
|
||||
"IXXAT PC-I 04/PCI")
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
||||
|
@ -131,6 +132,9 @@ struct plx_pci_card {
|
|||
#define TEWS_PCI_VENDOR_ID 0x1498
|
||||
#define TEWS_PCI_DEVICE_ID_TMPC810 0x032A
|
||||
|
||||
#define CTI_PCI_VENDOR_ID 0x12c4
|
||||
#define CTI_PCI_DEVICE_ID_CRG001 0x0900
|
||||
|
||||
static void plx_pci_reset_common(struct pci_dev *pdev);
|
||||
static void plx_pci_reset_marathon(struct pci_dev *pdev);
|
||||
static void plx9056_pci_reset_common(struct pci_dev *pdev);
|
||||
|
@ -222,6 +226,14 @@ static struct plx_pci_card_info plx_pci_card_info_tews __devinitdata = {
|
|||
/* based on PLX9030 */
|
||||
};
|
||||
|
||||
static struct plx_pci_card_info plx_pci_card_info_cti __devinitdata = {
|
||||
"Connect Tech Inc. CANpro/104-Plus Opto (CRG001)", 2,
|
||||
PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,
|
||||
{0, 0x00, 0x00}, { {2, 0x000, 0x80}, {2, 0x100, 0x80} },
|
||||
&plx_pci_reset_common
|
||||
/* based on PLX9030 */
|
||||
};
|
||||
|
||||
static DEFINE_PCI_DEVICE_TABLE(plx_pci_tbl) = {
|
||||
{
|
||||
/* Adlink PCI-7841/cPCI-7841 */
|
||||
|
@ -300,6 +312,13 @@ static DEFINE_PCI_DEVICE_TABLE(plx_pci_tbl) = {
|
|||
0, 0,
|
||||
(kernel_ulong_t)&plx_pci_card_info_tews
|
||||
},
|
||||
{
|
||||
/* Connect Tech Inc. CANpro/104-Plus Opto (CRG001) card */
|
||||
PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
|
||||
CTI_PCI_VENDOR_ID, CTI_PCI_DEVICE_ID_CRG001,
|
||||
0, 0,
|
||||
(kernel_ulong_t)&plx_pci_card_info_cti
|
||||
},
|
||||
{ 0,}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, plx_pci_tbl);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* CAN driver for esd CAN-USB/2
|
||||
* CAN driver for esd CAN-USB/2 and CAN-USB/Micro
|
||||
*
|
||||
* Copyright (C) 2010 Matthias Fuchs <matthias.fuchs@esd.eu>, esd gmbh
|
||||
* Copyright (C) 2010-2012 Matthias Fuchs <matthias.fuchs@esd.eu>, esd gmbh
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published
|
||||
|
@ -28,14 +28,16 @@
|
|||
#include <linux/can/error.h>
|
||||
|
||||
MODULE_AUTHOR("Matthias Fuchs <matthias.fuchs@esd.eu>");
|
||||
MODULE_DESCRIPTION("CAN driver for esd CAN-USB/2 interfaces");
|
||||
MODULE_DESCRIPTION("CAN driver for esd CAN-USB/2 and CAN-USB/Micro interfaces");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
||||
/* Define these values to match your devices */
|
||||
#define USB_ESDGMBH_VENDOR_ID 0x0ab4
|
||||
#define USB_CANUSB2_PRODUCT_ID 0x0010
|
||||
#define USB_CANUSBM_PRODUCT_ID 0x0011
|
||||
|
||||
#define ESD_USB2_CAN_CLOCK 60000000
|
||||
#define ESD_USBM_CAN_CLOCK 36000000
|
||||
#define ESD_USB2_MAX_NETS 2
|
||||
|
||||
/* USB2 commands */
|
||||
|
@ -69,6 +71,7 @@ MODULE_LICENSE("GPL v2");
|
|||
#define ESD_USB2_TSEG2_SHIFT 20
|
||||
#define ESD_USB2_SJW_MAX 4
|
||||
#define ESD_USB2_SJW_SHIFT 14
|
||||
#define ESD_USBM_SJW_SHIFT 24
|
||||
#define ESD_USB2_BRP_MIN 1
|
||||
#define ESD_USB2_BRP_MAX 1024
|
||||
#define ESD_USB2_BRP_INC 1
|
||||
|
@ -183,6 +186,7 @@ struct __attribute__ ((packed)) esd_usb2_msg {
|
|||
|
||||
static struct usb_device_id esd_usb2_table[] = {
|
||||
{USB_DEVICE(USB_ESDGMBH_VENDOR_ID, USB_CANUSB2_PRODUCT_ID)},
|
||||
{USB_DEVICE(USB_ESDGMBH_VENDOR_ID, USB_CANUSBM_PRODUCT_ID)},
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, esd_usb2_table);
|
||||
|
@ -889,11 +893,22 @@ static int esd_usb2_set_bittiming(struct net_device *netdev)
|
|||
struct can_bittiming *bt = &priv->can.bittiming;
|
||||
struct esd_usb2_msg msg;
|
||||
u32 canbtr;
|
||||
int sjw_shift;
|
||||
|
||||
canbtr = ESD_USB2_UBR;
|
||||
if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
|
||||
canbtr |= ESD_USB2_LOM;
|
||||
|
||||
canbtr |= (bt->brp - 1) & (ESD_USB2_BRP_MAX - 1);
|
||||
|
||||
if (le16_to_cpu(priv->usb2->udev->descriptor.idProduct) ==
|
||||
USB_CANUSBM_PRODUCT_ID)
|
||||
sjw_shift = ESD_USBM_SJW_SHIFT;
|
||||
else
|
||||
sjw_shift = ESD_USB2_SJW_SHIFT;
|
||||
|
||||
canbtr |= ((bt->sjw - 1) & (ESD_USB2_SJW_MAX - 1))
|
||||
<< ESD_USB2_SJW_SHIFT;
|
||||
<< sjw_shift;
|
||||
canbtr |= ((bt->prop_seg + bt->phase_seg1 - 1)
|
||||
& (ESD_USB2_TSEG1_MAX - 1))
|
||||
<< ESD_USB2_TSEG1_SHIFT;
|
||||
|
@ -971,12 +986,20 @@ static int esd_usb2_probe_one_net(struct usb_interface *intf, int index)
|
|||
priv->index = index;
|
||||
|
||||
priv->can.state = CAN_STATE_STOPPED;
|
||||
priv->can.clock.freq = ESD_USB2_CAN_CLOCK;
|
||||
priv->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY;
|
||||
|
||||
if (le16_to_cpu(dev->udev->descriptor.idProduct) ==
|
||||
USB_CANUSBM_PRODUCT_ID)
|
||||
priv->can.clock.freq = ESD_USBM_CAN_CLOCK;
|
||||
else {
|
||||
priv->can.clock.freq = ESD_USB2_CAN_CLOCK;
|
||||
priv->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES;
|
||||
}
|
||||
|
||||
priv->can.bittiming_const = &esd_usb2_bittiming_const;
|
||||
priv->can.do_set_bittiming = esd_usb2_set_bittiming;
|
||||
priv->can.do_set_mode = esd_usb2_set_mode;
|
||||
priv->can.do_get_berr_counter = esd_usb2_get_berr_counter;
|
||||
priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES;
|
||||
|
||||
netdev->flags |= IFF_ECHO; /* we support local echo */
|
||||
|
||||
|
|
Loading…
Reference in New Issue