#ifndef __MTS_IO_H #define __MTS_IO_H #include "mts_eeprom.h" #include #define DRIVER_VERSION "v2.1.0" #define DRIVER_AUTHOR "James Maki " #define DRIVER_DESC "MTS-IO Controller" #define DRIVER_NAME "mts-io" #define DEBUG 1 #define __log(level, name, format, args...) \ printk(level "[" name "] " DRIVER_NAME ":%s:%d: " format "\n" , \ __func__ , __LINE__ , ## args) #define log_emerg(format, ...) __log(KERN_EMERG, "EMERG", format , ## __VA_ARGS__) #define log_alert(format, ...) __log(KERN_ALERT, "ALERT", format , ## __VA_ARGS__) #define log_crit(format, ...) __log(KERN_CRIT, "CRIT", format , ## __VA_ARGS__) #define log_error(format, ...) __log(KERN_ERR, "ERROR", format , ## __VA_ARGS__) #define log_warning(format, ...) __log(KERN_WARNING, "WARNING", format , ## __VA_ARGS__) #define log_notice(format, ...) __log(KERN_NOTICE, "NOTICE", format , ## __VA_ARGS__) #define log_info(format, ...) __log(KERN_INFO, "INFO", format , ## __VA_ARGS__) #if DEBUG # define log_debug(format, ...) __log(KERN_DEBUG, "DEBUG", format , ## __VA_ARGS__) #else # define log_debug(format, ...) do {} while (0) #endif #define MTS_ATTR_MODE_RW S_IWUSR | S_IRUGO #define MTS_ATTR_MODE_RO S_IRUGO #define DEVICE_ATTR_MTS(mts_dev_name, mts_name, mts_show, mts_store) \ struct device_attribute mts_dev_name = { \ .attr = { .name = mts_name, .mode = MTS_ATTR_MODE_RW }, \ .show = mts_show, \ .store = mts_store, \ } #define DEVICE_ATTR_RO_MTS(mts_dev_name, mts_name, mts_show) \ struct device_attribute mts_dev_name = { \ .attr = { .name = mts_name, .mode = MTS_ATTR_MODE_RO }, \ .show = mts_show, \ } #define VENDOR_ID_MULTITECH "Multi-Tech Systems" #define PRODUCT_ID_MTCDP_E1_DK "MTCDP-E1-DK" #define PRODUCT_ID_MT100EOCG "MT100EOCG" #define PRODUCT_ID_MTR "MTR" #define PRODUCT_ID_MTCDT "MTCDT" #define PRODUCT_ID_MTCAP "MTCAP" #define PRODUCT_ID_MTCDTIP "MTCDTIP" #define PRODUCT_ID_MTCDTIPHP "MTCDTIPHP" #define PRODUCT_ID_MTAC_GPIOB "MTAC-GPIOB" #define PRODUCT_ID_MTAC_MFSER "MTAC-MFSER" #define PRODUCT_ID_MTAC_ETH "MTAC-ETH" #define PRODUCT_ID_MTAC_LORA "MTAC-LORA" #define PRODUCT_ID_MTHS "MTHS" #define PRODUCT_ID_MTAC_PULSE "MTAC-PULSE" /* Hardware version must be fewer characters than hw_version in struct mts_ap_eeprom_layout */ /* MTAC-LORA with native SPI or FTDI FT4222 */ #define HW_VERSION_MTAC_LORA_0_0 "MTAC-LORA-0.0" /* MTAC-LORA2 with FTDI FT232H */ #define HW_VERSION_MTAC_LORA_1_0 "MTAC-LORA-1.0" #define HW_VERSION_MTAC_LORA_1_1 "MTAC-LORA-1.1" #define HW_VERSION_MTAC_LORA_1_5 "MTAC-LORA-1.5" #define HW_VERSION_MTCBA2_2_0 "MTCBA2-2.0" #define HW_VERSION_MTCDP_0_0 "MTCDP-0.0" #define HW_VERSION_MTCDP_1_0 "MTCDP-1.0" #define HW_VERSION_MT100EOCG_0_0 "MT100EOCG-0.0" #define HW_VERSION_MTR_0_0 "MTR-0.0" #define HW_VERSION_MTR_0_1 "MTR-0.1" #define HW_VERSION_MTRV1_0_0 "MTRV1-0.0" #define HW_VERSION_MTRV1_0_1 "MTRV1-0.1" #define HW_VERSION_MTRV1_0_2 "MTRV1-0.2" // Cat M #define HW_VERSION_MTCDT_0_0 "MTCDT-0.0" #define HW_VERSION_MTCDT_0_1 "MTCDT-0.1" #define HW_VERSION_MTCDTIP_0_0 "MTCDTIP-0.0" #define HW_VERSION_MTCDTIPHP_0_0 "MTCDTIPHP-0.0" #define HW_VERSION_MTCAP_0_0 "MTCAP-0.0" #define HW_VERSION_MTCAP_0_1 "MTCAP-0.1" #define HW_VERSION_MTHS_0_0 "MTHS-0.0" enum { MTCDP_E1_DK_0_0, MTCDP_E1_DK_1_0, MT100EOCG_0_0, MTR_0_0, MTR_0_1, MTRV1_0_0, MTRV1_0_1, MTRV1_0_2, MTCDT_0_0, MTCDT_0_1, MTCDTIPHP_0_0, MTCAP_0_0, MTCAP_0_1, MTHS_0_0, }; enum { MTAC_NONE, MTAC_GPIOB_0_0, MTAC_MFSER_0_0, MTAC_ETH_0_0, MTAC_LORA_0_0, MTAC_LORA_1_0, MTAC_LORA_1_1, MTAC_LORA_1_5, MTAC_PULSE_1_0, }; struct gpio_pin { char name[32]; struct gpio pin; int active_low; uint8_t capability; }; enum { LED_OFF, LED_ON, LED_FLASHING, }; enum { RADIO_UNKNOWN, RADIO_LEU1, RADIO_LNA3, }; enum ap { port_1 = 1, port_2, }; enum spi_devices { din = 0, dout = 1, adc = 2, }; // info for accessory port // contains function pointers for setup and teardown and useful info // each type of accessory card should have one of these struct ap_info { char product_id[32]; bool (*setup)(enum ap port); bool (*teardown)(enum ap port); char* (*gpio_pin_name_by_attr_name)(const char* name, int port); }; extern struct mutex mts_io_mutex; #endif /* ~__MTS_IO_H */