X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/01c7fc7cdf8ffbeebacd2e6d482988fa285ef3a3:/lincan/src/pikronisa.c..99ed90d6d898c39a78a78fb65c9df21716f5f6c6:/lincan/src/gensja1000mm.c diff --git a/lincan/src/pikronisa.c b/lincan/src/gensja1000mm.c similarity index 68% rename from lincan/src/pikronisa.c rename to lincan/src/gensja1000mm.c index 2a4fd22..100a267 100644 --- a/lincan/src/pikronisa.c +++ b/lincan/src/gensja1000mm.c @@ -1,4 +1,4 @@ -/* 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 @@ -10,7 +10,7 @@ #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" /* @@ -21,24 +21,24 @@ #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; } @@ -54,18 +54,18 @@ int pikronisa_request_io(struct candevice_t *candev) } /** - * 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); @@ -75,41 +75,41 @@ int pikronisa_release_io(struct candevice_t *candev) } /** - * 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; } @@ -119,10 +119,10 @@ int pikronisa_reset(struct candevice_t *candev) #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. @@ -130,9 +130,9 @@ int pikronisa_reset(struct candevice_t *candev) * 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; @@ -144,11 +144,11 @@ int pikronisa_init_hw_data(struct candevice_t *candev) } /** - * 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". @@ -173,15 +173,16 @@ int pikronisa_init_hw_data(struct candevice_t *candev) * 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; @@ -191,11 +192,11 @@ int pikronisa_init_chip_data(struct candevice_t *candev, int chipnr) } /** - * 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. @@ -205,75 +206,75 @@ int pikronisa_init_chip_data(struct candevice_t *candev, int chipnr) * 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; }