From: Ing. Jan Kriz Date: Mon, 18 Apr 2011 08:26:17 +0000 (+0200) Subject: Merge branch 'can-usb1' into spican1 X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/commitdiff_plain/1fe7542840b9210e6dcbc492034f48e9357913d2?hp=-c Merge branch 'can-usb1' into spican1 Conflicts: lincan/src/finish.c --- 1fe7542840b9210e6dcbc492034f48e9357913d2 diff --combined lincan/include/main.h index 582d895,22fb92f..23accfb --- a/lincan/include/main.h +++ b/lincan/include/main.h @@@ -106,7 -106,6 +106,7 @@@ struct candevice_t int nr_all_chips; int nr_82527_chips; int nr_sja1000_chips; + int nr_mcp2515_chips; can_spinlock_t device_lock; struct canchip_t *chip[MAX_HW_CHIPS]; @@@ -186,20 -185,13 +186,20 @@@ struct canchip_t int chip_idx; /* chip index in candevice_t.chip[] */ int chip_irq; can_ioptr_t chip_base_addr; - unsigned int flags; + uint16_t flags; long clock; /* Chip clock in Hz */ long baudrate; void (*write_register)(unsigned data, can_ioptr_t address); unsigned (*read_register)(can_ioptr_t address); + /* SPI / mcp2515 specific */ + int (*spi_acquire_bus)(struct candevice_t *candev, short channel, int block); + void (*spi_release_bus)(struct candevice_t *candev, short channel); + int (*spi_transfer)(struct candevice_t *candev, void *tx, void *rx, uint16_t len); + short spi_channel; + + void *chip_data; unsigned short sja_cdr_reg; /* sja1000 only! */ @@@ -338,9 -330,6 +338,9 @@@ struct hwspecops_t int (*program_irq)(struct candevice_t *candev); void (*write_register)(unsigned data, can_ioptr_t address); unsigned (*read_register)(can_ioptr_t address); + int (*spi_acquire_bus)(struct candevice_t *candev, short channel, int block); + void (*spi_release_bus)(struct candevice_t *candev, short channel); + int (*spi_transfer)(struct candevice_t *candev, void *tx, void *rx, uint16_t len); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)) void (*release_device)(struct kref *refcount); @@@ -373,7 -362,6 +373,7 @@@ * @stop_chip: stops chip message processing * @irq_handler: interrupt service routine * @irq_accept: optional fast irq accept routine responsible for blocking further interrupts + * @get_info: retrieve chp-specifc info for display in proc fs */ struct chipspecops_t { int (*chip_config)(struct canchip_t *chip); @@@ -406,8 -394,6 +406,8 @@@ int (*stop_chip)(struct canchip_t *chip); int (*irq_handler)(int irq, struct canchip_t *chip); int (*irq_accept)(int irq, struct canchip_t *chip); + int (*reset_chip)(struct canchip_t *chip); + int (*get_info)(struct canchip_t *chip, char *buf); }; struct mem_addr { @@@ -503,23 -489,6 +503,23 @@@ extern inline unsigned can_read_reg(con return chip->read_register(address_to_read); } +extern inline int can_spi_transfer(struct canchip_t *chip, void *tx, void *rx, uint16_t len) +{ + return chip->spi_transfer(chip->hostdevice, tx, rx, len); +} + +extern inline int can_spi_acquire_bus(struct canchip_t *chip, int block) +{ + return chip->spi_acquire_bus(chip->hostdevice, chip->spi_channel, block); +} + +extern inline void can_spi_release_bus(struct canchip_t *chip) +{ + chip->spi_release_bus(chip->hostdevice, chip->spi_channel); +} + + + extern inline void canobj_write_reg(const struct canchip_t *chip, const struct msgobj_t *obj, unsigned char data, unsigned reg_offs) {