Unified module parameters style to new one for 2.6.x kernels.
authorppisa <ppisa>
Mon, 5 Jun 2006 00:55:45 +0000 (00:55 +0000)
committerppisa <ppisa>
Mon, 5 Jun 2006 00:55:45 +0000 (00:55 +0000)
Old one style left for 2.4 kernels.
This prevents error:
  Ignoring new-style parameters in presence of obsolete ones.
Base board frequency specification moved to main.c and parameter
unified under name "clockfreq".

lincan/README
lincan/include/main.h
lincan/src/bfadcan.c
lincan/src/main.c
lincan/src/setup.c
lincan/src/tscan1.c

index 00f8768..7c6509e 100644 (file)
@@ -276,7 +276,7 @@ options can be one of:
 - extended=[1|0], configures the driver to use extended message format.
 - pelican=[1|0], configures the driver to set the CAN chips into pelican mode.
 - baudrate=<nr>, sets the baudrate of the device(s)
-- clock_freq=<nr>, the frequency of the CAN quartz
+- clockfreq=<nr>, the frequency of the CAN quartz
 - stdmask=<nr>, sets the standard mask of the device
 - extmask=<nr>, sets the extended mask of the device
 - mo15mask=<nr>, sets the mask for message object 15 (i82527 only)
index 99a493d..7baf67b 100644 (file)
@@ -379,9 +379,10 @@ extern int major;
 extern int minor[MAX_TOT_CHIPS];
 extern int extended;
 extern int baudrate[MAX_TOT_CHIPS];
-extern char *hw[MAX_HW_CARDS];
 extern int irq[MAX_IRQ];
+extern char *hw[MAX_HW_CARDS];
 extern unsigned long io[MAX_HW_CARDS];
+extern long clockfreq[MAX_HW_CARDS];
 extern int processlocal;
 
 extern struct canhardware_t *hardware_p;
index f6d831b..f04fe9f 100644 (file)
@@ -23,8 +23,7 @@
 #define __NO_VERSION__
 #include <linux/module.h>
 
-long clock_freq;
-MODULE_PARM(clock_freq,"i");
+#define CAN_BFAD_CLOCKFREQ 20000000
 
 /* cli and sti are not allowed in 2.5.5x SMP kernels */
 #ifdef WINDOWED_ACCESS
@@ -197,7 +196,8 @@ int bfadcan_init_chip_data(struct candevice_t *candev, int chipnr)
        unsigned int id1, id2;
        sja1000p_fill_chipspecops(candev->chip[chipnr]);
        candev->chip[chipnr]->chip_base_addr=candev->io_addr;
-       candev->chip[chipnr]->clock = clock_freq;
+       if(candev->chip[chipnr]->clock<=0)
+               candev->chip[chipnr]->clock = CAN_BFAD_CLOCKFREQ;
        candev->chip[chipnr]->sja_cdr_reg = sjaCDR_CBP | sjaCDR_CLK_OFF;
        candev->chip[chipnr]->sja_ocr_reg = sjaOCR_MODE_NORMAL | sjaOCR_TX0_LH;
        id1 = inb(0xe284);
index 0bbf365..2a55355 100644 (file)
@@ -84,6 +84,7 @@ int baudrate[MAX_TOT_CHIPS];
 char *hw[MAX_HW_CARDS]={NULL,};
 int irq[MAX_IRQ]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
 unsigned long io[MAX_HW_CARDS]={-1,-1,-1,-1,-1,-1,-1,-1};
+long clockfreq[MAX_HW_CARDS];
 int stdmask=0;
 int extmask=0;
 int mo15mask=0;
@@ -94,6 +95,7 @@ unsigned int baudrate_specified;
 unsigned int hw_specified;
 unsigned int irq_specified;
 unsigned int io_specified;
+unsigned int clockfreq_specified;
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0))
 /* Module parameters, some must be supplied at module loading time */
@@ -106,6 +108,7 @@ MODULE_PARM(baudrate, "1-" __MODULE_STRING(MAX_TOT_CHIPS_STR)"i");
 MODULE_PARM(hw, "1-" __MODULE_STRING(MAX_HW_CARDS)"s");
 MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_IRQ)"i");
 MODULE_PARM(io, "1-" __MODULE_STRING(MAX_HW_CARDS)"i");
+MODULE_PARM(clockfreq, "1-" __MODULE_STRING(MAX_HW_CARDS)"i");
 MODULE_PARM(stdmask, "1i");
 MODULE_PARM(extmask, "1i");
 MODULE_PARM(mo15mask, "1i");
@@ -119,7 +122,8 @@ module_param(pelican, int, 0);
 module_param_array(baudrate, int, &baudrate_specified, 0);
 module_param_array(hw, charp, &hw_specified, 0);
 module_param_array(irq, int, &irq_specified, 0);
-module_param_array(io, int, &io_specified, 0);
+module_param_array(io, ulong, &io_specified, 0);
+module_param_array(clockfreq, long, &clockfreq_specified, 0);
 module_param(stdmask, int, 0);
 module_param(extmask, int, 0);
 module_param(mo15mask, int, 0);
@@ -135,6 +139,7 @@ MODULE_PARM_DESC(baudrate,"baudrate for each channel in step of 1kHz");
 MODULE_PARM_DESC(hw,"list of boards types to initialize - virtual,pip5,...");
 MODULE_PARM_DESC(irq,"list of iterrupt signal numbers, most ISA has one per chip, no value for PCI or virtual");
 MODULE_PARM_DESC(io,"IO address for each board, use 0 for PCI or virtual");
+MODULE_PARM_DESC(clockfreq,"base board clock source frequency in step of 1kHz");
 MODULE_PARM_DESC(stdmask,"default standard mask for i82527 chips");
 MODULE_PARM_DESC(extmask,"default extended mask for i82527 chips");
 MODULE_PARM_DESC(mo15mask,"mask for communication object 15 of i82527 chips");
index ac83789..bce1226 100644 (file)
@@ -16,7 +16,7 @@
 
 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_chip_struct(struct candevice_t *candev, int chipnr, int irq, long baudrate, long clock);
 int init_obj_struct(struct candevice_t *candev, struct canchip_t *hostchip, int objnr);
 
 /**
@@ -187,6 +187,7 @@ int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p)
        int chipnr;
        long bd;
        int irqsig=-1;
+       long clock;
        
        candev=(struct candevice_t *)can_checked_malloc(sizeof(struct candevice_t));
        if (candev==NULL)
@@ -202,6 +203,7 @@ int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p)
        candev->hwname=hw[card];
        candev->io_addr=io[card];
        candev->dev_base_addr=io[card];
+       clock=clockfreq[card];
 
        candev->hwspecops=(struct hwspecops_t *)can_checked_malloc(sizeof(struct hwspecops_t));
        if (candev->hwspecops==NULL)
@@ -224,7 +226,7 @@ int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p)
                bd=baudrate[*chan_param_idx_p+chipnr];
                if(!bd) bd=baudrate[0];
        
-               if ((ret=init_chip_struct(candev, chipnr, irqsig, bd*1000)))
+               if ((ret=init_chip_struct(candev, chipnr, irqsig, bd*1000, clock*1000)))
                        goto error_chip;
        }
        
@@ -270,6 +272,7 @@ int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p)
  * @chipnr: index of the chip in the corresponding device/board structure
  * @irq: chip IRQ number or (-1) if not appropriate
  * @baudrate: baudrate in the units of 1Bd
+ * @clock: optional chip base clock frequency in 1Hz step
  *
  * Chip structure is allocated and chip specific operations are filled by 
  * call to board specific init_chip_data() which calls chip specific
@@ -278,7 +281,7 @@ int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p)
  *
  * Return Value: returns negative number in the case of fail
  */
-int init_chip_struct(struct candevice_t *candev, int chipnr, int irq, long baudrate)
+int init_chip_struct(struct candevice_t *candev, int chipnr, int irq, long baudrate, long clock)
 {
        struct canchip_t *chip;
        int objnr;
@@ -302,6 +305,7 @@ int init_chip_struct(struct candevice_t *candev, int chipnr, int irq, long baudr
        chip->hostdevice=candev;
        chip->chip_irq=irq;
        chip->baudrate=baudrate;
+       chip->clock=clock;
        chip->flags=0x0;
 
        if(candev->hwspecops->init_chip_data(candev,chipnr)<0)
index 313f041..a48a93e 100644 (file)
 
 static CAN_DEFINE_SPINLOCK(ts7kv_win_lock);
 
-long clock[MAX_HW_CARDS]={-1,-1,-1,-1,-1,-1,-1,-1};
-MODULE_PARM(clock, "1-" __MODULE_STRING(MAX_HW_CARDS)"i");
-MODULE_PARM_DESC(clock,"clock frequency for each board in step of 1kHz");
-
-long tscanio[MAX_HW_CARDS]={-1,-1,-1,-1,-1,-1,-1,-1};
-MODULE_PARM(tscanio, "1-" __MODULE_STRING(MAX_HW_CARDS)"i");
-MODULE_PARM_DESC(tscanio,"TSCAN CAN controller IO address for each board");
+unsigned long tscanio[MAX_HW_CARDS]={-1,-1,-1,-1,-1,-1,-1,-1};
+unsigned int tscanio_specified;
 
 #if defined(TS7XXX_IO8_BASE)&&defined(TSXXX_BASE_IO)
 int tsxxx_base=TS7XXX_IO8_BASE+TSXXX_BASE_IO;
@@ -39,10 +34,18 @@ int tsxxx_base=TS7XXX_IO8_BASE;
 #else /*TS7XXX_IO8_BASE*/
 unsigned long tsxxx_base=0;
 #endif /*TS7XXX_IO8_BASE*/
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0))
+MODULE_PARM(tscanio, "1-" __MODULE_STRING(MAX_HW_CARDS)"i");
 MODULE_PARM(tsxxx_base, "1i");
+#else /* LINUX_VERSION_CODE >= 2,6,0 */
+module_param_array(tscanio, int, &tscanio_specified, 0);
+module_param(tsxxx_base, ulong, 0);
+#endif /* LINUX_VERSION_CODE >= 2,6,0 */
+
+MODULE_PARM_DESC(tscanio,"TSCAN CAN controller IO address for each board");
 MODULE_PARM_DESC(tsxxx_base,"The base of the ISA/8-bit IO space for TSxxx CAN peripherals in the system");
 
-unsigned short ts7kv_isused = 0x0;
 
 /**
  * tscan1_request_io: - reserve io or memory range for can board
@@ -457,16 +460,10 @@ int ts7kv_init_hw_data(struct candevice_t *candev)
  */
 int tscan1_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       unsigned long clk;
+       unsigned long default_clk = 16000 * 1000;
        int jmp;
        int irq = -1;
 
-       clk = clock[candev->candev_idx];
-       if(!clk || (clk == -1))
-               clk = 16000 * 1000;
-       else
-               clk *= 1000;
-
        /* unused reset address is used to store jumper setting */
        jmp = candev->res_addr;
 
@@ -483,7 +480,8 @@ int tscan1_init_chip_data(struct candevice_t *candev, int chipnr)
 
        sja1000p_fill_chipspecops(candev->chip[chipnr]);
 
-       candev->chip[chipnr]->clock = clk;
+       if(candev->chip[chipnr]->clock <= 0)
+               candev->chip[chipnr]->clock = default_clk;
        candev->chip[chipnr]->int_clk_reg = 0x0;
        candev->chip[chipnr]->int_bus_reg = 0x0;
        candev->chip[chipnr]->sja_cdr_reg = sjaCDR_CBP | sjaCDR_CLK_OFF;
@@ -499,16 +497,10 @@ int tscan1_init_chip_data(struct candevice_t *candev, int chipnr)
 
 int ts7kv_init_chip_data(struct candevice_t *candev, int chipnr)
 {
-       unsigned long clk;
+       unsigned long default_clk = 16000 * 1000;
        int jmp;
        int irq = -1;
 
-       clk = clock[candev->candev_idx];
-       if(!clk || (clk == -1))
-               clk = 24000 * 1000;
-       else
-               clk *= 1000;
-
        /* unused reset address is used to store jumper setting */
        jmp = candev->res_addr;
 
@@ -526,7 +518,8 @@ int ts7kv_init_chip_data(struct candevice_t *candev, int chipnr)
 
        sja1000p_fill_chipspecops(candev->chip[chipnr]);
 
-       candev->chip[chipnr]->clock = clk;
+       if(candev->chip[chipnr]->clock <= 0)
+               candev->chip[chipnr]->clock = default_clk;
        candev->chip[chipnr]->int_clk_reg = 0x0;
        candev->chip[chipnr]->int_bus_reg = 0x0;
        candev->chip[chipnr]->sja_cdr_reg = sjaCDR_CBP | sjaCDR_CLK_OFF;