]> rtime.felk.cvut.cz Git - lincan.git/commitdiff
Changed filling of the chip specific operations.
authorppisa <ppisa>
Thu, 17 Jun 2004 17:28:24 +0000 (17:28 +0000)
committerppisa <ppisa>
Thu, 17 Jun 2004 17:28:24 +0000 (17:28 +0000)
This enables simpler fine tuning for specific boards
which needs modified functions.
ENS CPC-PCI requires special interrupt handling for example.

29 files changed:
lincan/include/c_can.h
lincan/include/constants.h
lincan/include/i82527.h
lincan/include/sja1000.h
lincan/include/sja1000p.h
lincan/src/aim104.c
lincan/src/bfadcan.c
lincan/src/c_can.c
lincan/src/cc_can104.c
lincan/src/ems_cpcpci.c
lincan/src/hms30c7202_can.c
lincan/src/i82527.c
lincan/src/kv_pcican.c
lincan/src/m437.c
lincan/src/msmcan.c
lincan/src/nsi.c
lincan/src/pc_i03.c
lincan/src/pccan.c
lincan/src/pcccan.c
lincan/src/pcm3680.c
lincan/src/pikronisa.c
lincan/src/pip.c
lincan/src/setup.c
lincan/src/sja1000.c
lincan/src/sja1000p.c
lincan/src/smartcan.c
lincan/src/ssv.c
lincan/src/template.c
lincan/src/unican.c

index 57a68ca48a620762756818e44ba6a834b840bdcf..772213a2eef01ee86ba466c67affd7d1c0511df1 100644 (file)
@@ -72,6 +72,8 @@ void c_can_irq_sync_activities(struct chip_t *chip, struct msgobj_t *obj);
 
 can_irqreturn_t c_can_irq_handler(int irq, void *dev_id, struct pt_regs *regs);
 
 
 can_irqreturn_t c_can_irq_handler(int irq, void *dev_id, struct pt_regs *regs);
 
+int c_can_fill_chipspecops(struct chip_t *chip);
+
 /* BasicCAN mode address map */
 #define CCCR      0x0000       /* Control Register */
 #define CCSR           0x0004  /* Status Register */
 /* BasicCAN mode address map */
 #define CCCR      0x0000       /* Control Register */
 #define CCSR           0x0004  /* Status Register */
index 9788c7a070ad46e9184a84a6ce6322d3c87e78ce..d5c66d90d37e6dd16600f59e77574c60ed0629f4 100644 (file)
@@ -18,8 +18,8 @@
 
 /* Version of the driver */
 #define CAN_DRV_VER_MAJOR 0
 
 /* Version of the driver */
 #define CAN_DRV_VER_MAJOR 0
-#define CAN_DRV_VER_MINOR 2
-#define CAN_DRV_VER_PATCH 2
+#define CAN_DRV_VER_MINOR 3
+#define CAN_DRV_VER_PATCH 0
 #define CAN_DRV_VER ((CAN_DRV_VER_MAJOR<<16) | (CAN_DRV_VER_MINOR<<8) | CAN_DRV_VER_PATCH)
 
 /* Default driver major number, see /usr/src/linux/Documentation/devices.txt */
 #define CAN_DRV_VER ((CAN_DRV_VER_MAJOR<<16) | (CAN_DRV_VER_MINOR<<8) | CAN_DRV_VER_PATCH)
 
 /* Default driver major number, see /usr/src/linux/Documentation/devices.txt */
index cb8be71860e7a3d278f28f7c7148cdf442c28473..2b9816279fffdfd71e92e55ce722b7590c42140d 100644 (file)
@@ -32,6 +32,8 @@ int i82527_start_chip(struct chip_t *chip);
 int i82527_stop_chip(struct chip_t *chip);
 int i82527_check_tx_stat(struct chip_t *chip);
 can_irqreturn_t i82527_irq_handler(int irq, void *dev_id, struct pt_regs *regs);
 int i82527_stop_chip(struct chip_t *chip);
 int i82527_check_tx_stat(struct chip_t *chip);
 can_irqreturn_t i82527_irq_handler(int irq, void *dev_id, struct pt_regs *regs);
+int i82527_fill_chipspecops(struct chip_t *chip);
+
 
 #define MSG_OFFSET(object) ((object)*0x10)
 
 
 #define MSG_OFFSET(object) ((object)*0x10)
 
index bb6dd11d9a4d8a46b6d7e103683761c721eed9f7..16dc20c824b0f8b296d1bdb982a5603cf4617c19 100644 (file)
@@ -24,6 +24,7 @@ int sja1000_set_btregs(struct chip_t *chip, unsigned short btr0,
 int sja1000_start_chip(struct chip_t *chip);
 int sja1000_stop_chip(struct chip_t *chip);
 can_irqreturn_t sja1000_irq_handler(int irq, void *dev_id, struct pt_regs *regs);
 int sja1000_start_chip(struct chip_t *chip);
 int sja1000_stop_chip(struct chip_t *chip);
 can_irqreturn_t sja1000_irq_handler(int irq, void *dev_id, struct pt_regs *regs);
+int sja1000_fill_chipspecops(struct chip_t *chip);
 
 /* BasicCAN mode address map */
 #define SJACR          0x00    /* Control register */
 
 /* BasicCAN mode address map */
 #define SJACR          0x00    /* Control register */
index 1d57aa8b65feafb07ca64b0123a5e9b0e70f7ac0..9ec11e3efd4d430efc81d34705fc16f2a4924b4f 100644 (file)
@@ -18,6 +18,7 @@ int sja1000p_pre_write_config(struct chip_t *chip, struct msgobj_t *obj,
                struct canmsg_t *msg);
 int sja1000p_send_msg(struct chip_t *chip, struct msgobj_t *obj,
                struct canmsg_t *msg);
                struct canmsg_t *msg);
 int sja1000p_send_msg(struct chip_t *chip, struct msgobj_t *obj,
                struct canmsg_t *msg);
+int sja1000p_fill_chipspecops(struct chip_t *chip);
 
 /* PeliCAN mode */
 enum SJA1000_PeliCAN_regs {
 
 /* PeliCAN mode */
 enum SJA1000_PeliCAN_regs {
index 8e0fe8f343e34bbce73b56a244676ff4a72604f3..d406f76316f49cf45e77e58acb9a00cf803b17a4 100644 (file)
@@ -129,7 +129,6 @@ int aim104_init_hw_data(struct candevice_t *candev)
        return 0;
 }
 
        return 0;
 }
 
-#define CHIP_TYPE "sja1000"
 /**
  * template_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
 /**
  * template_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
@@ -161,7 +160,7 @@ int aim104_init_hw_data(struct candevice_t *candev)
  */
 int aim104_init_chip_data(struct candevice_t *candev, int chipnr)
 {
  */
 int aim104_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       candev->chip[chipnr]->chip_type=CHIP_TYPE;
+       sja1000_fill_chipspecops(candev->chip[chipnr]);
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->flags = 0;
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->flags = 0;
index 2f6555937e7c6c6f206971221e461dd7f85d84ef..d91603cc45ff61d6efeb20b72e6830b885fe973e 100644 (file)
@@ -161,7 +161,6 @@ int bfadcan_init_hw_data(struct candevice_t *candev)
        return 0;
 }
 
        return 0;
 }
 
-#define CHIP_TYPE "sja1000p"
 /**
  * bfadcan_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
 /**
  * bfadcan_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
@@ -197,7 +196,7 @@ int bfadcan_init_hw_data(struct candevice_t *candev)
 int bfadcan_init_chip_data(struct candevice_t *candev, int chipnr)
 {
        unsigned int id1, id2;
 int bfadcan_init_chip_data(struct candevice_t *candev, int chipnr)
 {
        unsigned int id1, id2;
-       candev->chip[chipnr]->chip_type=CHIP_TYPE;
+       sja1000p_fill_chipspecops(candev->chip[chipnr]);
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = clock_freq;
        candev->chip[chipnr]->int_cpu_reg = iCPU_DSC;
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = clock_freq;
        candev->chip[chipnr]->int_cpu_reg = iCPU_DSC;
@@ -210,7 +209,7 @@ int bfadcan_init_chip_data(struct candevice_t *candev, int chipnr)
        id2 = inb(0xe285);
 
 
        id2 = inb(0xe285);
 
 
-       CANMSG("can driver ver lincan-0.2, at %04lx, CPLD v%d.%d.%d.%d\n",
+       CANMSG("can driver ver lincan-0.3, at %04lx, CPLD v%d.%d.%d.%d\n",
                                        candev->chip[chipnr]->chip_base_addr,
                                                        id1>>4, id1&0x0f, id2>>4, id2&0x0f);
 
                                        candev->chip[chipnr]->chip_base_addr,
                                                        id1>>4, id1&0x0f, id2>>4, id2&0x0f);
 
index d179b18d6d318b507f7fafbbdddd9e9bdb6b258e..bb1ee0bce2b21547154e26aac1a8f916e2ab2a24 100644 (file)
@@ -912,33 +912,10 @@ int c_can_register(struct chipspecops_t *chipspecops)
        return 0;
 }
 
        return 0;
 }
 
-/*int c_can_register(struct chip_t *pchip)
+int c_can_fill_chipspecops(struct chip_t *chip)
 {
 {
-   DEBUGMSG("(c%d)call c_can_register\n", pchip->chip_idx);
-
-   // Validate pointer
-   if ( NULL == pchip ) return -1;
-
-   pchip->chip_config = c_can_chip_config;
-   pchip->set_baud_rate = c_can_baud_rate;
-   pchip->set_mask = c_can_mask;
-   pchip->set_use_mask = c_can_use_mask;
-   //pchip->set_message15_mask = c_can_extended_mask;
-   pchip->clear_objects = c_can_clear_objects;
-   pchip->config_irqs = c_can_config_irqs;
-   pchip->pre_read_config = c_can_pre_read_config;
-   //pchip->pre_write_config = c_can_pre_write_config;
-   pchip->send_msg = c_can_send_msg;
-   pchip->check_tx_stat = c_can_check_tx_stat;
-   pchip->remote_request = c_can_remote_request;
-   pchip->enable_configuration = c_can_enable_configuration;
-   pchip->disable_configuration = c_can_disable_configuration;
-   pchip->set_btregs = c_can_set_btregs;
-   pchip->start_chip = c_can_start_chip;
-   pchip->stop_chip = c_can_stop_chip;
-   pchip->register_dump = c_can_registerdump;
-
-   DEBUGMSG("-> ok\n");
-   return 0;
+       chip->chip_type="c_can";
+       chip->max_objects = 32;
+       c_can_register(chip->chipspecops);
+       return 0;
 }
 }
-*/
index 9df4b71ea6d2c94a7d5a87e306c4b5cd02fd1665..92a69948299e8ecbde1c76c49d6e28498cab4203 100644 (file)
@@ -109,7 +109,6 @@ int cc104_init_hw_data(struct candevice_t *candev)
        return 0;
 }
 
        return 0;
 }
 
-#define CHIP_TYPE "sja1000"
 /**
  * template_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
 /**
  * template_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
@@ -141,7 +140,7 @@ int cc104_init_hw_data(struct candevice_t *candev)
  */
 int cc104_init_chip_data(struct candevice_t *candev, int chipnr)
 {
  */
 int cc104_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       candev->chip[chipnr]->chip_type=CHIP_TYPE;
+       sja1000_fill_chipspecops(candev->chip[chipnr]);
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->flags = 0;
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->flags = 0;
index 7f1bee43d467b6a727c6c5f40f6bbad3eb40ee1d..0fa28979a247643c27b154bf18751d7a5ad81934 100644 (file)
@@ -236,13 +236,13 @@ int ems_cpcpci_init_hw_data(struct candevice_t *candev)
 
 int ems_cpcpci_init_chip_data(struct candevice_t *candev, int chipnr)
 {
 
 int ems_cpcpci_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-
        if(candev->sysdevptr.pcidev==NULL)
                return -ENODEV;
        
        if(candev->sysdevptr.pcidev==NULL)
                return -ENODEV;
        
+       sja1000p_fill_chipspecops(candev->chip[chipnr]);
+
        candev->chip[chipnr]->chip_irq=candev->sysdevptr.pcidev->irq;
 
        candev->chip[chipnr]->chip_irq=candev->sysdevptr.pcidev->irq;
 
-       candev->chip[chipnr]->chip_type="sja1000p";
        candev->chip[chipnr]->chip_base_addr = candev->io_addr+
                        0x400 + chipnr*EMS_CPCPCI_BYTES_PER_CIRCUIT;
        candev->chip[chipnr]->flags = 0;
        candev->chip[chipnr]->chip_base_addr = candev->io_addr+
                        0x400 + chipnr*EMS_CPCPCI_BYTES_PER_CIRCUIT;
        candev->chip[chipnr]->flags = 0;
index ee99cb698419472055c3349a041cc3d182d4d33a..4661c3ac743f335f7aad7ea054a9c350cc3120e9 100644 (file)
@@ -294,20 +294,20 @@ int hms30c7202_init_hw_data(struct candevice_t *candev)
  */
 int hms30c7202_init_chip_data(struct candevice_t *candev, int chipnr)
 {
  */
 int hms30c7202_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       candev->chip[chipnr]->chip_type=CHIP_TYPE;
+       // Register chip operations
+       c_can_fill_chipspecops(candev->chip[chipnr]);
+       /* override chip provided default value */
+       candev->chip[chipnr]->max_objects = NR_MSGOBJ;
+
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        
        candev->chip[chipnr]->clock = 16000000;
        
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        
        candev->chip[chipnr]->clock = 16000000;
        
-       candev->chip[chipnr]->max_objects = NR_MSGOBJ;
-       
        /*candev->chip[chipnr]->int_clk_reg = 0x0;
        candev->chip[chipnr]->int_bus_reg = 0x0;
        candev->chip[chipnr]->sja_cdr_reg = 0x0;
        candev->chip[chipnr]->sja_ocr_reg = 0x0;*/
        
        /*candev->chip[chipnr]->int_clk_reg = 0x0;
        candev->chip[chipnr]->int_bus_reg = 0x0;
        candev->chip[chipnr]->sja_cdr_reg = 0x0;
        candev->chip[chipnr]->sja_ocr_reg = 0x0;*/
        
-       // Register chip operations
-       c_can_register(candev->chip[chipnr]->chipspecops);
 
        return 0;
 }
 
        return 0;
 }
index f71a16af82e84279d70b3715bb9891cd97d3606e..443124a6436987dd31636bcdd7f9d2350951ecbe 100644 (file)
@@ -744,3 +744,11 @@ int i82527_register(struct chipspecops_t *chipspecops)
        chipspecops->irq_handler = i82527_irq_handler;
        return 0;
 }
        chipspecops->irq_handler = i82527_irq_handler;
        return 0;
 }
+
+int i82527_fill_chipspecops(struct chip_t *chip)
+{
+       chip->chip_type="i82527";
+       chip->max_objects=15;
+       i82527_register(chip->chipspecops);
+       return 0;
+}
index c8836107f763f7ab24ed7939004e6d8654c7ad40..eb344b493014a5fdbf8651299384378860f0823e 100644 (file)
@@ -233,7 +233,7 @@ int kv_pcican_init_chip_data(struct candevice_t *candev, int chipnr)
        
        candev->chip[chipnr]->chip_irq=candev->sysdevptr.pcidev->irq;
 
        
        candev->chip[chipnr]->chip_irq=candev->sysdevptr.pcidev->irq;
 
-       candev->chip[chipnr]->chip_type="sja1000p";
+       sja1000p_fill_chipspecops(candev->chip[chipnr]);
        candev->chip[chipnr]->chip_base_addr=
                        candev->io_addr+chipnr*KV_PCICAN_BYTES_PER_CIRCUIT;
        candev->chip[chipnr]->flags = 0;
        candev->chip[chipnr]->chip_base_addr=
                        candev->io_addr+chipnr*KV_PCICAN_BYTES_PER_CIRCUIT;
        candev->chip[chipnr]->flags = 0;
index 7fd02ba6281fbe8d21de093240df5286e0e878f8..82c03eb61132c9871a6e6a6b5b5cb2d922169813 100644 (file)
@@ -163,7 +163,6 @@ int m437_init_hw_data(struct candevice_t *candev)
        return 0;
 }
 
        return 0;
 }
 
-#define CHIP_TYPE "i82527"
 /**
  * m437_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
 /**
  * m437_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
@@ -198,7 +197,7 @@ int m437_init_hw_data(struct candevice_t *candev)
  */
 int m437_init_chip_data(struct candevice_t *candev, int chipnr)
 {
  */
 int m437_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       candev->chip[chipnr]->chip_type=CHIP_TYPE;
+       i82527_fill_chipspecops(candev->chip[chipnr]);
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->int_cpu_reg = iCPU_DSC | iCPU_CEN;
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->int_cpu_reg = iCPU_DSC | iCPU_CEN;
index 573abaa67aa54b8abdcde7c433f4de2a548e6842..42513ad093b5aa148839f83de3f9dd01edd0ae21 100644 (file)
@@ -122,11 +122,10 @@ int msmcan_init_hw_data(struct candevice_t *candev)
  * argument supplied at module loading time.
  * The clock argument holds the chip clock value in Hz.
  */
  * argument supplied at module loading time.
  * The clock argument holds the chip clock value in Hz.
  */
-#define CHIP_TYPE "i82527"
 
 int msmcan_init_chip_data(struct candevice_t *candev, int chipnr)
 {
 
 int msmcan_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       candev->chip[chipnr]->chip_type=CHIP_TYPE;
+       i82527_fill_chipspecops(candev->chip[chipnr]);
        /* device uses indexed access */
        candev->chip[chipnr]->chip_base_addr=
            candev->io_addr << 16;
        /* device uses indexed access */
        candev->chip[chipnr]->chip_base_addr=
            candev->io_addr << 16;
index 99f1afa524cf851fcd68b7ef12194207b4c87778..455a3dc39711c8f1f0674a9df44e8508dbcd4815 100644 (file)
@@ -119,11 +119,10 @@ int nsi_init_hw_data(struct candevice_t *candev)
  * argument supplied at module loading time.
  * The clock argument holds the chip clock value in Hz.
  */
  * argument supplied at module loading time.
  * The clock argument holds the chip clock value in Hz.
  */
-#define CHIP_TYPE "i82527"
 
 int nsi_init_chip_data(struct candevice_t *candev, int chipnr)
 {
 
 int nsi_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       candev->chip[chipnr]->chip_type=CHIP_TYPE;
+       i82527_fill_chipspecops(candev->chip[chipnr]);
        candev->chip[chipnr]->chip_base_addr=
            candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->chip_base_addr=
            candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
index c01e548b8ba031535190ffb5c387d626c31a4977..18c9df8e881656f6526ab047274d0f01a966a127 100644 (file)
@@ -136,7 +136,6 @@ int pci03_init_hw_data(struct candevice_t *candev)
        return 0;
 }
 
        return 0;
 }
 
-#define CHIP_TYPE "sja1000"
 /**
  * pci03_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
 /**
  * pci03_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
@@ -168,8 +167,8 @@ int pci03_init_hw_data(struct candevice_t *candev)
  */
 int pci03_init_chip_data(struct candevice_t *candev, int chipnr)
 {
  */
 int pci03_init_chip_data(struct candevice_t *candev, int chipnr)
 {
+       sja1000_fill_chipspecops(candev->chip[chipnr]);
        pci03_base_addr = candev->io_addr;
        pci03_base_addr = candev->io_addr;
-       candev->chip[chipnr]->chip_type=CHIP_TYPE;
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->sja_cdr_reg = sjaCDR_CBP | sjaCDR_CLK_OFF;
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->sja_cdr_reg = sjaCDR_CBP | sjaCDR_CLK_OFF;
index 7205230a0d9fc677677dfdf28d154aff7cb2a483..4b23f9b59fcbf49776d6412740f2a8c48f131cb0 100644 (file)
@@ -248,7 +248,7 @@ int pccan_init_chip_data(struct candevice_t *candev, int chipnr)
 {
        if (!strcmp(candev->hwname,"pccan-q")) {
                if (chipnr<2) {
 {
        if (!strcmp(candev->hwname,"pccan-q")) {
                if (chipnr<2) {
-                       candev->chip[chipnr]->chip_type="i82527";
+                       i82527_fill_chipspecops(candev->chip[chipnr]);
                        candev->chip[chipnr]->flags = CHIP_SEGMENTED;
                        candev->chip[chipnr]->int_cpu_reg=iCPU_DSC;
                        candev->chip[chipnr]->int_clk_reg=iCLK_SL1;
                        candev->chip[chipnr]->flags = CHIP_SEGMENTED;
                        candev->chip[chipnr]->int_cpu_reg=iCPU_DSC;
                        candev->chip[chipnr]->int_clk_reg=iCLK_SL1;
@@ -257,7 +257,7 @@ int pccan_init_chip_data(struct candevice_t *candev, int chipnr)
                        candev->chip[chipnr]->sja_ocr_reg = 0;  
                }
                else{
                        candev->chip[chipnr]->sja_ocr_reg = 0;  
                }
                else{
-                       candev->chip[chipnr]->chip_type="sja1000";
+                       sja1000_fill_chipspecops(candev->chip[chipnr]);
                        candev->chip[chipnr]->flags = 0;
                        candev->chip[chipnr]->int_cpu_reg = 0;
                        candev->chip[chipnr]->int_clk_reg = 0;
                        candev->chip[chipnr]->flags = 0;
                        candev->chip[chipnr]->int_cpu_reg = 0;
                        candev->chip[chipnr]->int_clk_reg = 0;
@@ -270,7 +270,7 @@ int pccan_init_chip_data(struct candevice_t *candev, int chipnr)
                candev->chip[chipnr]->chip_base_addr=0x1000*chipnr+0x2000+candev->io_addr;
        }
        else {
                candev->chip[chipnr]->chip_base_addr=0x1000*chipnr+0x2000+candev->io_addr;
        }
        else {
-               candev->chip[chipnr]->chip_type="sja1000";
+               sja1000_fill_chipspecops(candev->chip[chipnr]);
                candev->chip[chipnr]->chip_base_addr=0x1000*chipnr+0x4000+candev->io_addr;
                candev->chip[chipnr]->flags = 0;
                candev->chip[chipnr]->int_cpu_reg = 0;
                candev->chip[chipnr]->chip_base_addr=0x1000*chipnr+0x4000+candev->io_addr;
                candev->chip[chipnr]->flags = 0;
                candev->chip[chipnr]->int_cpu_reg = 0;
index 8dbb485a98a86f716c470e6e3a11028ca6e66d9e..f83b1c55140cc92aa9d42eb6e565423edac35828 100644 (file)
@@ -152,7 +152,6 @@ int pcccan_init_hw_data(struct candevice_t *candev)
        return 0;
 }
 
        return 0;
 }
 
-#define CHIP_TYPE "i82527"
 /**
  * pcccan_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
 /**
  * pcccan_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
@@ -187,7 +186,7 @@ int pcccan_init_hw_data(struct candevice_t *candev)
  */
 int pcccan_init_chip_data(struct candevice_t *candev, int chipnr)
 {
  */
 int pcccan_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       candev->chip[chipnr]->chip_type=CHIP_TYPE;
+       i82527_fill_chipspecops(candev->chip[chipnr]);
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->int_cpu_reg = iCPU_DSC | iCPU_DMC;
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->int_cpu_reg = iCPU_DSC | iCPU_DMC;
index dc3c2745953a07c0b26d2950ff92f8f871c5a2b1..63e855675a8a3fee22f9eb5d7f51cd8305cbc666 100644 (file)
@@ -140,7 +140,6 @@ int pcm3680_init_hw_data(struct candevice_t *candev)
        return 0;
 }
 
        return 0;
 }
 
-#define CHIP_TYPE "sja1000p"
 /**
  * template_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
 /**
  * template_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
@@ -172,7 +171,7 @@ int pcm3680_init_hw_data(struct candevice_t *candev)
  */
 int pcm3680_init_chip_data(struct candevice_t *candev, int chipnr)
 {
  */
 int pcm3680_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       candev->chip[chipnr]->chip_type=CHIP_TYPE;
+       sja1000p_fill_chipspecops(candev->chip[chipnr]);
        candev->chip[chipnr]->chip_base_addr=
                        candev->io_addr + 0x200*chipnr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->chip_base_addr=
                        candev->io_addr + 0x200*chipnr;
        candev->chip[chipnr]->clock = 16000000;
index db0977fd864b0553a0b0da8b8dfee5731f05ff74..67f383f66dbeaf35a9c367d4ca50cae2ccb721ee 100644 (file)
@@ -144,9 +144,6 @@ int pikronisa_init_hw_data(struct candevice_t *candev)
        return 0;
 }
 
        return 0;
 }
 
-#define CHIP_TYPE "sja1000p"
-/* #define CHIP_TYPE "sja1000" */
-
 /**
  * pikronisa_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
 /**
  * pikronisa_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
@@ -181,7 +178,9 @@ int pikronisa_init_hw_data(struct candevice_t *candev)
  */
 int pikronisa_init_chip_data(struct candevice_t *candev, int chipnr)
 {
  */
 int pikronisa_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       candev->chip[chipnr]->chip_type=CHIP_TYPE;
+       /*sja1000_fill_chipspecops(candev->chip[chipnr]);*/
+       sja1000p_fill_chipspecops(candev->chip[chipnr]);
+
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 24000000;
        candev->chip[chipnr]->int_clk_reg = 0x0;
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 24000000;
        candev->chip[chipnr]->int_clk_reg = 0x0;
index 22a8393329ee4aa0d73ab96769a481f85537e8e5..5ca28f88d43cc865672a9f29f20b088a7cda10a8 100644 (file)
@@ -126,7 +126,7 @@ int pip_init_hw_data(struct candevice_t *candev)
 
 int pip_init_chip_data(struct candevice_t *candev, int chipnr)
 {
 
 int pip_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       candev->chip[chipnr]->chip_type="i82527";
+       i82527_fill_chipspecops(candev->chip[chipnr]);
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        if (!strcmp(candev->hwname,"pip5"))
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        if (!strcmp(candev->hwname,"pip5"))
index c5bb40abd910dc5a8c77a2425942fad4fc04506f..564b3c0ecd5995323dc54a0ea61ef93767b167bb 100644 (file)
 #include "../include/setup.h"
 #include "../include/finish.h"
 
 #include "../include/setup.h"
 #include "../include/finish.h"
 
-extern int sja1000_register(struct chipspecops_t *chipspecops);
-extern int sja1000p_register(struct chipspecops_t *chipspecops);
-extern int i82527_register(struct chipspecops_t *chipspecops);
-
 int init_hwspecops(struct candevice_t *candev, int *irqnum_p);
 int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p);
 int init_chip_struct(struct candevice_t *candev, int chipnr, int irq, long baudrate);
 int init_obj_struct(struct candevice_t *candev, struct chip_t *hostchip, int objnr);
 int init_hwspecops(struct candevice_t *candev, int *irqnum_p);
 int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p);
 int init_chip_struct(struct candevice_t *candev, int chipnr, int irq, long baudrate);
 int init_obj_struct(struct candevice_t *candev, struct chip_t *hostchip, int objnr);
-int init_chipspecops(struct candevice_t *candev, int chipnr);
 
 /**
  * can_checked_malloc - memory allocation with registering of requested blocks
 
 /**
  * can_checked_malloc - memory allocation with registering of requested blocks
@@ -442,8 +437,8 @@ int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p)
  * @baudrate: baudrate in the units of 1Bd
  *
  * Chip structure is allocated and chip specific operations are filled by 
  * @baudrate: baudrate in the units of 1Bd
  *
  * Chip structure is allocated and chip specific operations are filled by 
- * call to board specific init_chip_data() function and generic
- * init_chipspecops() function. The message objects are generated by 
+ * call to board specific init_chip_data() which calls chip specific
+ * fill_chipspecops(). The message objects are generated by 
  * calls to init_obj_struct() function.
  *
  * Return Value: returns negative number in the case of fail
  * calls to init_obj_struct() function.
  *
  * Return Value: returns negative number in the case of fail
@@ -474,9 +469,7 @@ int init_chip_struct(struct candevice_t *candev, int chipnr, int irq, long baudr
        chip->baudrate=baudrate;
        chip->flags=0x0;
 
        chip->baudrate=baudrate;
        chip->flags=0x0;
 
-       candev->hwspecops->init_chip_data(candev,chipnr);
-
-       if (init_chipspecops(candev,chipnr))
+       if(candev->hwspecops->init_chip_data(candev,chipnr)<0)
                return -ENODEV;
 
        for (objnr=0; objnr<chip->max_objects; objnr++) {
                return -ENODEV;
 
        for (objnr=0; objnr<chip->max_objects; objnr++) {
@@ -567,35 +560,6 @@ int init_hwspecops(struct candevice_t *candev, int *irqnum_p)
 }
 
 
 }
 
 
-/**
- * init_chipspecops - fills chip specific operations for board for known chip types
- * @candev: pointer to the corresponding CAN device/board
- * @chipnr: index of the chip in the device/board structure
- *
- * The function fills chip specific operations for next known generic chip
- * types "i82527", "sja1000", "sja1000p" (PeliCAN). Other non generic chip types
- * operations has to be initialized in the board specific init_chip_data() function.
- *
- * Return Value: returns negative number in the case of fail
- */
-int init_chipspecops(struct candevice_t *candev, int chipnr)
-{
-       if (!strcmp(candev->chip[chipnr]->chip_type,"i82527")) {
-               candev->chip[chipnr]->max_objects=15;
-               i82527_register(candev->chip[chipnr]->chipspecops);
-       } 
-       if (!strcmp(candev->chip[chipnr]->chip_type,"sja1000")) {
-               candev->chip[chipnr]->max_objects=1;
-               sja1000_register(candev->chip[chipnr]->chipspecops);
-       }
-       if (!strcmp(candev->chip[chipnr]->chip_type,"sja1000p")) {
-               candev->chip[chipnr]->max_objects=1;
-               sja1000p_register(candev->chip[chipnr]->chipspecops);
-       }
-
-       return 0;
-}
-
 #ifndef CAN_WITH_RTL
 
 /**
 #ifndef CAN_WITH_RTL
 
 /**
index 6a4318577a1fa056fff482f2cb3ce8b499963718..5b549c4d474ec226e9be14e2ba3e0949deb3127d 100644 (file)
@@ -491,3 +491,12 @@ int sja1000_register(struct chipspecops_t *chipspecops)
        chipspecops->irq_handler = sja1000_irq_handler;
        return 0;
 }
        chipspecops->irq_handler = sja1000_irq_handler;
        return 0;
 }
+
+int sja1000_fill_chipspecops(struct chip_t *chip)
+{
+       chip->chip_type="sja1000";
+       chip->max_objects=1;
+       sja1000_register(chip->chipspecops);
+       return 0;
+}
+
index d59b82b3a536dc209f36e205dabb7ef8a41baa15..dc151540fa5e6ba08cdf7a1b018af9078b847870 100644 (file)
@@ -738,3 +738,19 @@ int sja1000p_register(struct chipspecops_t *chipspecops)
        chipspecops->irq_handler=sja1000p_irq_handler;
        return 0;
 }
        chipspecops->irq_handler=sja1000p_irq_handler;
        return 0;
 }
+
+/**
+ * sja1000p_fill_chipspecops - fills chip specific operations
+ * @chip: pointer to chip representation structure
+ *
+ * The function fills chip specific operations for sja1000 (PeliCAN) chip.
+ *
+ * Return Value: returns negative number in the case of fail
+ */
+int sja1000p_fill_chipspecops(struct chip_t *chip)
+{
+       chip->chip_type="sja1000p";
+       chip->max_objects=1;
+       sja1000p_register(chip->chipspecops);
+       return 0;
+}
index 869f5a5fa1f6b9762a3d450b0481c26faa054517..f9123fe93a3846bb0e58762fcfb3bdbcf0ea28f8 100644 (file)
@@ -78,7 +78,7 @@ int smartcan_init_hw_data(struct candevice_t *candev)
 
 int smartcan_init_chip_data(struct candevice_t *candev, int chipnr)
 {
 
 int smartcan_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       candev->chip[chipnr]->chip_type="i82527";
+       i82527_fill_chipspecops(candev->chip[chipnr]);
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->int_cpu_reg = iCPU_DSC;
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->int_cpu_reg = iCPU_DSC;
index 145d8303f0b9528bf3f2ea93696914f5abe16879..7f147e116ac8247c014c5c74417116d7e59b2181 100644 (file)
@@ -133,11 +133,9 @@ int ssv_init_hw_data(struct candevice_t *candev)
  * argument supplied at module loading time.
  * The clock argument holds the chip clock value in Hz.
  */
  * argument supplied at module loading time.
  * The clock argument holds the chip clock value in Hz.
  */
-#define CHIP_TYPE "i82527"
-
 int ssv_init_chip_data(struct candevice_t *candev, int chipnr)
 {
 int ssv_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-    candev->chip[chipnr]->chip_type=CHIP_TYPE;
+    i82527_fill_chipspecops(candev->chip[chipnr]);
     candev->chip[chipnr]->chip_base_addr=
        candev->io_addr+0x100*chipnr;
     candev->chip[chipnr]->clock = 16000000;
     candev->chip[chipnr]->chip_base_addr=
        candev->io_addr+0x100*chipnr;
     candev->chip[chipnr]->clock = 16000000;
index d8ceaa435967a400f731b4b70a5e1b5d677d2685..5999366547955d0e6a555b78156a47f513d2b396 100644 (file)
@@ -114,7 +114,6 @@ int template_init_hw_data(struct candevice_t *candev)
        return 0;
 }
 
        return 0;
 }
 
-#define CHIP_TYPE "i82527"
 /**
  * template_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
 /**
  * template_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
@@ -149,7 +148,10 @@ int template_init_hw_data(struct candevice_t *candev)
  */
 int template_init_chip_data(struct candevice_t *candev, int chipnr)
 {
  */
 int template_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       candev->chip[chipnr]->chip_type=CHIP_TYPE;
+       i82527_fill_chipspecops(candev->chip[chipnr]);
+       /*sja1000_fill_chipspecops(candev->chip[chipnr]);*/
+       /*sja1000p_fill_chipspecops(candev->chip[chipnr]);*/
+       
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->int_cpu_reg = iCPU_DSC;
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
        candev->chip[chipnr]->clock = 16000000;
        candev->chip[chipnr]->int_cpu_reg = iCPU_DSC;
index fde7c00b5fd464662a1535ce9ea1669d11418688..f2c7ec60d1498d6b91c87a2f21ed6a116eee6f8c 100644 (file)
@@ -759,8 +759,6 @@ int unican_init_hw_data(struct candevice_t *candev)
        return 0;
 }
 
        return 0;
 }
 
-#define CHIP_TYPE "unican"
-
 /**
  * unican_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
 /**
  * unican_init_chip_data - Initialize chips
  * @candev: Pointer to candevice/board structure
@@ -772,7 +770,7 @@ int unican_init_hw_data(struct candevice_t *candev)
 int unican_init_chip_data(struct candevice_t *candev, int chipnr)
 {
        struct chip_t *chip = candev->chip[chipnr];
 int unican_init_chip_data(struct candevice_t *candev, int chipnr)
 {
        struct chip_t *chip = candev->chip[chipnr];
-       chip->chip_type = CHIP_TYPE;
+       chip->chip_type = "unican";
        chip->chip_base_addr = 0;
        chip->clock = 10000000;
        chip->int_clk_reg = 0x0;
        chip->chip_base_addr = 0;
        chip->clock = 10000000;
        chip->int_clk_reg = 0x0;