diff options
Diffstat (limited to 'drivers/net/can/sja1000/plx_pci.c')
| -rw-r--r-- | drivers/net/can/sja1000/plx_pci.c | 40 | 
1 files changed, 29 insertions, 11 deletions
diff --git a/drivers/net/can/sja1000/plx_pci.c b/drivers/net/can/sja1000/plx_pci.c index 8bc95982840..a042cdc260d 100644 --- a/drivers/net/can/sja1000/plx_pci.c +++ b/drivers/net/can/sja1000/plx_pci.c @@ -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); @@ -158,7 +162,7 @@ struct plx_pci_card_info {  	void (*reset_func)(struct pci_dev *pdev);  }; -static struct plx_pci_card_info plx_pci_card_info_adlink __devinitdata = { +static struct plx_pci_card_info plx_pci_card_info_adlink = {  	"Adlink PCI-7841/cPCI-7841", 2,  	PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,  	{1, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x80, 0x80} }, @@ -166,7 +170,7 @@ static struct plx_pci_card_info plx_pci_card_info_adlink __devinitdata = {  	/* based on PLX9052 */  }; -static struct plx_pci_card_info plx_pci_card_info_adlink_se __devinitdata = { +static struct plx_pci_card_info plx_pci_card_info_adlink_se = {  	"Adlink PCI-7841/cPCI-7841 SE", 2,  	PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,  	{0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x80, 0x80} }, @@ -174,7 +178,7 @@ static struct plx_pci_card_info plx_pci_card_info_adlink_se __devinitdata = {  	/* based on PLX9052 */  }; -static struct plx_pci_card_info plx_pci_card_info_esd200 __devinitdata = { +static struct plx_pci_card_info plx_pci_card_info_esd200 = {  	"esd CAN-PCI/CPCI/PCI104/200", 2,  	PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,  	{0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x100, 0x80} }, @@ -182,7 +186,7 @@ static struct plx_pci_card_info plx_pci_card_info_esd200 __devinitdata = {  	/* based on PLX9030/9050 */  }; -static struct plx_pci_card_info plx_pci_card_info_esd266 __devinitdata = { +static struct plx_pci_card_info plx_pci_card_info_esd266 = {  	"esd CAN-PCI/PMC/266", 2,  	PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,  	{0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x100, 0x80} }, @@ -190,7 +194,7 @@ static struct plx_pci_card_info plx_pci_card_info_esd266 __devinitdata = {  	/* based on PLX9056 */  }; -static struct plx_pci_card_info plx_pci_card_info_esd2000 __devinitdata = { +static struct plx_pci_card_info plx_pci_card_info_esd2000 = {  	"esd CAN-PCIe/2000", 2,  	PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,  	{0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x100, 0x80} }, @@ -198,7 +202,7 @@ static struct plx_pci_card_info plx_pci_card_info_esd2000 __devinitdata = {  	/* based on PEX8311 */  }; -static struct plx_pci_card_info plx_pci_card_info_ixxat __devinitdata = { +static struct plx_pci_card_info plx_pci_card_info_ixxat = {  	"IXXAT PC-I 04/PCI", 2,  	PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,  	{0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x200, 0x80} }, @@ -206,7 +210,7 @@ static struct plx_pci_card_info plx_pci_card_info_ixxat __devinitdata = {  	/* based on PLX9050 */  }; -static struct plx_pci_card_info plx_pci_card_info_marathon __devinitdata = { +static struct plx_pci_card_info plx_pci_card_info_marathon = {  	"Marathon CAN-bus-PCI", 2,  	PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,  	{0, 0x00, 0x00}, { {2, 0x00, 0x00}, {4, 0x00, 0x00} }, @@ -214,7 +218,7 @@ static struct plx_pci_card_info plx_pci_card_info_marathon __devinitdata = {  	/* based on PLX9052 */  }; -static struct plx_pci_card_info plx_pci_card_info_tews __devinitdata = { +static struct plx_pci_card_info plx_pci_card_info_tews = {  	"TEWS TECHNOLOGIES TPMC810", 2,  	PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,  	{0, 0x00, 0x00}, { {2, 0x000, 0x80}, {2, 0x100, 0x80} }, @@ -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 = { +	"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); @@ -465,8 +484,8 @@ static void plx_pci_del_card(struct pci_dev *pdev)   * Probe PLX90xx based device for the SJA1000 chips and register each   * available CAN channel to SJA1000 Socket-CAN subsystem.   */ -static int __devinit plx_pci_add_card(struct pci_dev *pdev, -				      const struct pci_device_id *ent) +static int plx_pci_add_card(struct pci_dev *pdev, +			    const struct pci_device_id *ent)  {  	struct sja1000_priv *priv;  	struct net_device *dev; @@ -489,7 +508,6 @@ static int __devinit plx_pci_add_card(struct pci_dev *pdev,  	/* Allocate card structures to hold addresses, ... */  	card = kzalloc(sizeof(*card), GFP_KERNEL);  	if (!card) { -		dev_err(&pdev->dev, "Unable to allocate memory\n");  		pci_disable_device(pdev);  		return -ENOMEM;  	}  |