include/linux/can/transceiver.h was yet an older copy. Sorry. Update the include/linux directory. It's the same that has passed yet, but for the other directory. Is this still necessary? I lost it a bit.
Signed-off-by: Kurt Van Dijck <[email protected]> --- Index: include/linux/can/error.h =================================================================== --- include/linux/can/error.h (revision 1069) +++ include/linux/can/error.h (working copy) @@ -28,6 +28,7 @@ #define CAN_ERR_BUSOFF 0x00000040U /* bus off */ #define CAN_ERR_BUSERROR 0x00000080U /* bus error (may flood!) */ #define CAN_ERR_RESTARTED 0x00000100U /* controller restarted */ +#define CAN_ERR_TRANSCEIVER 0x00000200U /* transceiver alert */ /* arbitration lost in bit ... / data[0] */ #define CAN_ERR_LOSTARB_UNSPEC 0x00 /* unspecified */ @@ -78,18 +79,20 @@ #define CAN_ERR_PROT_LOC_INTERM 0x12 /* intermission */ /* error status of CAN-transceiver / data[4] */ -/* CANH CANL */ +/* CANL CANH */ #define CAN_ERR_TRX_UNSPEC 0x00 /* 0000 0000 */ #define CAN_ERR_TRX_CANH_NO_WIRE 0x04 /* 0000 0100 */ #define CAN_ERR_TRX_CANH_SHORT_TO_BAT 0x05 /* 0000 0101 */ #define CAN_ERR_TRX_CANH_SHORT_TO_VCC 0x06 /* 0000 0110 */ #define CAN_ERR_TRX_CANH_SHORT_TO_GND 0x07 /* 0000 0111 */ +#define CAN_ERR_TRX_CANL_SHORT_TO_CANH 0x08 /* 0000 1000 */ #define CAN_ERR_TRX_CANL_NO_WIRE 0x40 /* 0100 0000 */ #define CAN_ERR_TRX_CANL_SHORT_TO_BAT 0x50 /* 0101 0000 */ #define CAN_ERR_TRX_CANL_SHORT_TO_VCC 0x60 /* 0110 0000 */ #define CAN_ERR_TRX_CANL_SHORT_TO_GND 0x70 /* 0111 0000 */ -#define CAN_ERR_TRX_CANL_SHORT_TO_CANH 0x80 /* 1000 0000 */ +#define CAN_ERR_TRX_UNKNOWN_ERROR 0xF0 + /* controller specific additional information / data[5..7] */ #endif /* CAN_ERROR_H */ Index: include/linux/can/dev.h =================================================================== --- include/linux/can/dev.h (revision 1069) +++ include/linux/can/dev.h (working copy) @@ -55,6 +55,7 @@ unsigned int echo_skb_max; struct sk_buff **echo_skb; + struct can_transceiver *cantr; }; #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21) Index: include/linux/can/platform/tja1041.h =================================================================== --- include/linux/can/platform/tja1041.h (revision 0) +++ include/linux/can/platform/tja1041.h (revision 0) @@ -0,0 +1,18 @@ +#ifndef CAN_TRANSCEIVER_TJA1041_H +#define CAN_TRANSCEIVER_TJA1041_H + +/* + * TJA1041 interface + * only available as platform device (name 'tja1041') + */ +struct tja1041_platform_data { + /* gpio's */ + int stb; + int en; + int err; + + const char *match; +}; + +#endif /* CAN_TRANSCEIVER_TJA1041_H */ + Index: include/linux/can/platform/pca82c251.h =================================================================== --- include/linux/can/platform/pca82c251.h (revision 0) +++ include/linux/can/platform/pca82c251.h (revision 0) @@ -0,0 +1,22 @@ +#ifndef CAN_TRANSCEIVER_PCA82C251_H +#define CAN_TRANSCEIVER_PCA82C251_H + +/* + * PCA82C251 interface + * to make it available from outside platform_driver ('pca82c251') + */ +struct pca82c251_platform_data { + int gpio; + unsigned long slope_resistor; + const char *match; +}; + +/* + * some kind of 'manual' interface + */ +extern struct can_transceiver *pca82c251_create( + struct device *parent, const struct pca82c251_platform_data *pdata); +extern void pca82c251_destroy(struct can_transceiver *cantr); + +#endif /* CAN_TRANSCEIVER_PCA82C251_H */ + Index: include/linux/can/transceiver.h =================================================================== --- include/linux/can/transceiver.h (revision 0) +++ include/linux/can/transceiver.h (revision 0) @@ -0,0 +1,99 @@ +/* + * linux/can/transceiver.h + * + * Definitions for the CAN transceiver class device interface + * + * Copyright (C) 2009 Kurt Van Dijck <[email protected]> + * + * Send feedback to <[email protected]> + */ + +#include <linux/device.h> +#include <linux/netdevice.h> + +#ifndef CAN_TRANSCEIVER_H +#define CAN_TRANSCEIVER_H + +/* + * CAN transceiver modes + */ +#define CANTR_MODE_OFF 0 +#define CANTR_MODE_ON 1 + +/* + * CAN transceiver class device + */ +struct can_transceiver { + int id; + struct device dev; + int (*get_max_bitrate)(struct can_transceiver *); + /* returns any CAN_ERR_TRX_ constants, or 0 when OK */ + int (*get_state)(struct can_transceiver *); + /* mode is any CANTR_MODE_... */ + int (*set_mode)(struct can_transceiver *, int mode); + /* match_name & netdev are protected by the global cantr_lock */ + char *match_name; + struct net_device *netdev; + struct mutex lock; /* protects the next fields */ + int mode; +}; +#define to_can_transceiver(d) (container_of((d), struct can_transceiver, dev)) + +static inline void cantr_set_drvdata(struct can_transceiver *cantr, void *p) +{ + dev_set_drvdata(&cantr->dev, p); +} +static inline void *cantr_get_drvdata(struct can_transceiver *cantr) +{ + return dev_get_drvdata(&cantr->dev); +} + +/** + * can_transceiver_register - register w/ can_tranceiver class + * @cantr: the device to register + * @parent: the parent device + * + * Returns 0 on success + */ +extern int can_transceiver_register(struct can_transceiver *); + +/** + * can_transceiver_unregister - removes the can transceiver + * + * @cantr: the can transceiver class device to remove + */ +extern void can_transceiver_unregister(struct can_transceiver *); + +/** + * can_transceiver_set_match_name + * @cantr: the CAN transceiver to detach + * @name: the new name. may be 0. + * + * This function changes the name that the transceiver uses to match + * a net_device. Calling this function may change the associated + * net_device + */ +extern void can_transceiver_set_match_name(struct can_transceiver *, + const char *name); + +/* + * alert from can transceiver. + * the can transceiver core should do something with it + */ +extern void can_transceiver_alert(struct can_transceiver *cantr, int state); +/* + * utility functions + */ +extern int can_transceiver_set_mode(struct can_transceiver *cantr, int mode); +extern int can_transceiver_get_mode(struct can_transceiver *cantr); +extern int can_transceiver_get_max_bitrate(struct can_transceiver *cantr); +/** + * can_transceiver_get_state - get the current state of the transceiver + * @cantr: the can transceiver + * + * Returns: 0 for ready, -error for software failure, +num for hardware failure + */ +extern int can_transceiver_get_state(struct can_transceiver *cantr); + +#endif /* CAN_TRANSCEIVER_H */ + _______________________________________________ Socketcan-core mailing list [email protected] https://lists.berlios.de/mailman/listinfo/socketcan-core
