-/* pikronisa.c
+/* gensja1000mm.c
* Linux CAN-bus device driver.
* Written by Arnaud Westenberg email:arnaud@wanadoo.nl
* Rewritten for new CAN queues by Pavel Pisa - OCERA team member
#include "../include/can.h"
#include "../include/can_sysdep.h"
#include "../include/main.h"
-#include "../include/pikronisa.h"
+#include "../include/gensja1000mm.h"
#include "../include/sja1000p.h"
/*
#define IO_RANGE 0x100
/**
- * pikronisa_request_io: - reserve io or memory range for can board
+ * gensja1000mm_request_io: - reserve io or memory range for can board
* @candev: pointer to candevice/board which asks for io. Field @io_addr
* of @candev is used in most cases to define start of the range
*
- * The function pikronisa_request_io() is used to reserve the io-memory. If your
+ * The function gensja1000mm_request_io() is used to reserve the io-memory. If your
* hardware uses a dedicated memory range as hardware control registers you
* will have to add the code to reserve this memory as well.
* %IO_RANGE is the io-memory range that gets reserved, please adjust according
* your hardware. Example: #define IO_RANGE 0x100 for i82527 chips or
* #define IO_RANGE 0x20 for sja1000 chips in basic CAN mode.
* Return Value: The function returns zero on success or %-ENODEV on failure
- * File: src/pikronisa.c
+ * File: src/gensja1000mm.c
*/
-int pikronisa_request_io(struct candevice_t *candev)
+int gensja1000mm_request_io(struct candevice_t *candev)
{
can_ioptr_t remap_addr;
- if (!can_request_mem_region(candev->io_addr,IO_RANGE,DEVICE_NAME " - pikronisa")) {
+ if (!can_request_mem_region(candev->io_addr,IO_RANGE,DEVICE_NAME)) {
CANMSG("Unable to request IO-memory: 0x%lx\n",candev->io_addr);
return -ENODEV;
}
}
/**
- * pikronisa_elease_io - free reserved io memory range
+ * gensja1000mm_elease_io - free reserved io memory range
* @candev: pointer to candevice/board which releases io
*
- * The function pikronisa_release_io() is used to free reserved io-memory.
+ * The function gensja1000mm_release_io() is used to free reserved io-memory.
* In case you have reserved more io memory, don't forget to free it here.
* IO_RANGE is the io-memory range that gets released, please adjust according
* your hardware. Example: #define IO_RANGE 0x100 for i82527 chips or
* #define IO_RANGE 0x20 for sja1000 chips in basic CAN mode.
* Return Value: The function always returns zero
- * File: src/pikronisa.c
+ * File: src/gensja1000mm.c
*/
-int pikronisa_release_io(struct candevice_t *candev)
+int gensja1000mm_release_io(struct candevice_t *candev)
{
/* release I/O memory mapping */
iounmap(candev->dev_base_addr);
}
/**
- * pikronisa_reset - hardware reset routine
+ * gensja1000mm_reset - hardware reset routine
* @candev: Pointer to candevice/board structure
*
- * The function pikronisa_reset() is used to give a hardware reset. This is
+ * The function gensja1000mm_reset() is used to give a hardware reset. This is
* rather hardware specific so I haven't included example code. Don't forget to
* check the reset status of the chip before returning.
* Return Value: The function returns zero on success or %-ENODEV on failure
- * File: src/pikronisa.c
+ * File: src/gensja1000mm.c
*/
-int pikronisa_reset(struct candevice_t *candev)
+int gensja1000mm_reset(struct candevice_t *candev)
{
int i;
struct canchip_t *chip=candev->chip[0];
unsigned cdr;
- pikronisa_write_register(sjaMOD_RM, chip->chip_base_addr+SJAMOD);
+ gensja1000mm_write_register(sjaMOD_RM, chip->chip_base_addr+SJAMOD);
udelay(1000);
- cdr=pikronisa_read_register(chip->chip_base_addr+SJACDR);
- pikronisa_write_register(cdr|sjaCDR_PELICAN, chip->chip_base_addr+SJACDR);
+ cdr=gensja1000mm_read_register(chip->chip_base_addr+SJACDR);
+ gensja1000mm_write_register(cdr|sjaCDR_PELICAN, chip->chip_base_addr+SJACDR);
- pikronisa_write_register(0, chip->chip_base_addr+SJAIER);
+ gensja1000mm_write_register(0, chip->chip_base_addr+SJAIER);
i=20;
- pikronisa_write_register(0, chip->chip_base_addr+SJAMOD);
- while (pikronisa_read_register(chip->chip_base_addr+SJAMOD)&sjaMOD_RM){
+ gensja1000mm_write_register(0, chip->chip_base_addr+SJAMOD);
+ while (gensja1000mm_read_register(chip->chip_base_addr+SJAMOD)&sjaMOD_RM){
if(!i--) return -ENODEV;
udelay(1000);
- pikronisa_write_register(0, chip->chip_base_addr+SJAMOD);
+ gensja1000mm_write_register(0, chip->chip_base_addr+SJAMOD);
}
- cdr=pikronisa_read_register(chip->chip_base_addr+SJACDR);
- pikronisa_write_register(cdr|sjaCDR_PELICAN, chip->chip_base_addr+SJACDR);
+ cdr=gensja1000mm_read_register(chip->chip_base_addr+SJACDR);
+ gensja1000mm_write_register(cdr|sjaCDR_PELICAN, chip->chip_base_addr+SJACDR);
- pikronisa_write_register(0, chip->chip_base_addr+SJAIER);
+ gensja1000mm_write_register(0, chip->chip_base_addr+SJAIER);
return 0;
}
#define NR_SJA1000 1
/**
- * pikronisa_init_hw_data - Initialize hardware cards
+ * gensja1000mm_init_hw_data - Initialize hardware cards
* @candev: Pointer to candevice/board structure
*
- * The function pikronisa_init_hw_data() is used to initialize the hardware
+ * The function gensja1000mm_init_hw_data() is used to initialize the hardware
* structure containing information about the installed CAN-board.
* %RESET_ADDR represents the io-address of the hardware reset register.
* %NR_82527 represents the number of intel 82527 chips on the board.
* The flags entry can currently only be %CANDEV_PROGRAMMABLE_IRQ to indicate that
* the hardware uses programmable interrupts.
* Return Value: The function always returns zero
- * File: src/pikronisa.c
+ * File: src/gensja1000mm.c
*/
-int pikronisa_init_hw_data(struct candevice_t *candev)
+int gensja1000mm_init_hw_data(struct candevice_t *candev)
{
candev->res_addr=RESET_ADDR;
candev->nr_82527_chips=0;
}
/**
- * pikronisa_init_chip_data - Initialize chips
+ * gensja1000mm_init_chip_data - Initialize chips
* @candev: Pointer to candevice/board structure
* @chipnr: Number of the CAN chip on the hardware card
*
- * The function pikronisa_init_chip_data() is used to initialize the hardware
+ * The function gensja1000mm_init_chip_data() is used to initialize the hardware
* structure containing information about the CAN chips.
* %CHIP_TYPE represents the type of CAN chip. %CHIP_TYPE can be "i82527" or
* "sja1000".
* register. Options defined in the %i82527.h file:
* %iCPU_CEN, %iCPU_MUX, %iCPU_SLP, %iCPU_PWD, %iCPU_DMC, %iCPU_DSC, %iCPU_RST.
* Return Value: The function always returns zero
- * File: src/pikronisa.c
+ * File: src/gensja1000mm.c
*/
-int pikronisa_init_chip_data(struct candevice_t *candev, int chipnr)
+int gensja1000mm_init_chip_data(struct candevice_t *candev, int chipnr)
{
/*sja1000_fill_chipspecops(candev->chip[chipnr]);*/
sja1000p_fill_chipspecops(candev->chip[chipnr]);
candev->chip[chipnr]->chip_base_addr=candev->dev_base_addr;
- candev->chip[chipnr]->clock = 24000000;
+ if(candev->chip[chipnr]->clock<=0)
+ candev->chip[chipnr]->clock = 16000000;
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;
}
/**
- * pikronisa_init_obj_data - Initialize message buffers
+ * gensja1000mm_init_obj_data - Initialize message buffers
* @chip: Pointer to chip specific structure
* @objnr: Number of the message buffer
*
- * The function pikronisa_init_obj_data() is used to initialize the hardware
+ * The function gensja1000mm_init_obj_data() is used to initialize the hardware
* structure containing information about the different message objects on the
* CAN chip. In case of the sja1000 there's only one message object but on the
* i82527 chip there are 15.
* base address.
* Unless the hardware uses a segmented memory map, flags can be set zero.
* Return Value: The function always returns zero
- * File: src/pikronisa.c
+ * File: src/gensja1000mm.c
*/
-int pikronisa_init_obj_data(struct canchip_t *chip, int objnr)
+int gensja1000mm_init_obj_data(struct canchip_t *chip, int objnr)
{
chip->msgobj[objnr]->obj_base_addr=chip->chip_base_addr;
return 0;
}
/**
- * pikronisa_program_irq - program interrupts
+ * gensja1000mm_program_irq - program interrupts
* @candev: Pointer to candevice/board structure
*
- * The function pikronisa_program_irq() is used for hardware that uses
+ * The function gensja1000mm_program_irq() is used for hardware that uses
* programmable interrupts. If your hardware doesn't use programmable interrupts
* you should not set the @candevices_t->flags entry to %CANDEV_PROGRAMMABLE_IRQ and
* leave this function unedited. Again this function is hardware specific so
* there's no example code.
* Return value: The function returns zero on success or %-ENODEV on failure
- * File: src/pikronisa.c
+ * File: src/gensja1000mm.c
*/
-int pikronisa_program_irq(struct candevice_t *candev)
+int gensja1000mm_program_irq(struct candevice_t *candev)
{
return 0;
}
/**
- * pikronisa_write_register - Low level write register routine
+ * gensja1000mm_write_register - Low level write register routine
* @data: data to be written
* @address: memory address to write to
*
- * The function pikronisa_write_register() is used to write to hardware registers
+ * The function gensja1000mm_write_register() is used to write to hardware registers
* on the CAN chip. You should only have to edit this function if your hardware
* uses some specific write process.
* Return Value: The function does not return a value
- * File: src/pikronisa.c
+ * File: src/gensja1000mm.c
*/
-void pikronisa_write_register(unsigned data, can_ioptr_t address)
+void gensja1000mm_write_register(unsigned data, can_ioptr_t address)
{
- /*DEBUGMSG("pikronisa_write_register: addr=0x%lx data=0x%x",
+ /*DEBUGMSG("gensja1000mm_write_register: addr=0x%lx data=0x%x",
address,data);*/
can_writeb(data,address);
}
/**
- * pikronisa_read_register - Low level read register routine
+ * gensja1000mm_read_register - Low level read register routine
* @address: memory address to read from
*
- * The function pikronisa_read_register() is used to read from hardware registers
+ * The function gensja1000mm_read_register() is used to read from hardware registers
* on the CAN chip. You should only have to edit this function if your hardware
* uses some specific read process.
* Return Value: The function returns the value stored in @address
- * File: src/pikronisa.c
+ * File: src/gensja1000mm.c
*/
-unsigned pikronisa_read_register(can_ioptr_t address)
+unsigned gensja1000mm_read_register(can_ioptr_t address)
{
return can_readb(address);
}
/* !!! Don't change this function !!! */
-int pikronisa_register(struct hwspecops_t *hwspecops)
+int gensja1000mm_register(struct hwspecops_t *hwspecops)
{
- hwspecops->request_io = pikronisa_request_io;
- hwspecops->release_io = pikronisa_release_io;
- hwspecops->reset = pikronisa_reset;
- hwspecops->init_hw_data = pikronisa_init_hw_data;
- hwspecops->init_chip_data = pikronisa_init_chip_data;
- hwspecops->init_obj_data = pikronisa_init_obj_data;
- hwspecops->write_register = pikronisa_write_register;
- hwspecops->read_register = pikronisa_read_register;
- hwspecops->program_irq = pikronisa_program_irq;
+ hwspecops->request_io = gensja1000mm_request_io;
+ hwspecops->release_io = gensja1000mm_release_io;
+ hwspecops->reset = gensja1000mm_reset;
+ hwspecops->init_hw_data = gensja1000mm_init_hw_data;
+ hwspecops->init_chip_data = gensja1000mm_init_chip_data;
+ hwspecops->init_obj_data = gensja1000mm_init_obj_data;
+ hwspecops->write_register = gensja1000mm_write_register;
+ hwspecops->read_register = gensja1000mm_read_register;
+ hwspecops->program_irq = gensja1000mm_program_irq;
return 0;
}