sonic-buildimage/platform/innovium/sonic-platform-modules-cameo/esc600-128q/modules/x86-64-cameo-esc600-128q.h
Tony Titus fbd4e452c7
[201911] [Innovium] Add new platforms and config updates (#7545)
Update Innovium configs + Add new platforms supporting Innovium chips
2021-05-17 12:30:20 -07:00

721 lines
34 KiB
C

#include <linux/module.h>
#include <linux/jiffies.h>
#include <linux/i2c.h>
#include <linux/hwmon.h>
#include <linux/hwmon-sysfs.h>
#include <linux/err.h>
#include <linux/mutex.h>
#include <linux/sysfs.h>
#include <linux/slab.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/string.h>
#include <linux/delay.h>
#define DRIVER_VERSION "2.5"
#define TURN_OFF 0
#define TURN_ON 1
#define LED_ON 0x1
#define LED_OFF 0xfe
#define ALERT_TH0 1
#define ALERT_TH1 2
#define ALERT_TH2 3
#define ALERT_TH3 4
#define ALERT_TH4 5
#define ALERT_TH5 6
#define ALERT_TH0_MASK 1
#define ALERT_TH1_MASK 2
#define ALERT_TH2_MASK 3
#define ALERT_TH3_MASK 4
#define ALERT_TH4_MASK 5
#define ALERT_TH5_MASK 6
#define SW_ALERT_TH0 1
#define SW_ALERT_TH1 2
#define SW_ALERT_TH2 3
#define SW_ALERT_TH3 4
#define SW_ALERT_TH0_MASK 1
#define SW_ALERT_TH1_MASK 2
#define SW_ALERT_TH2_MASK 3
#define SW_ALERT_TH3_MASK 4
#define SENSOR_INT_0 1
#define SENSOR_INT_1 2
#define SENSOR_INT_0_MASK 1
#define SENSOR_INT_1_MASK 2
#define FAN_CH1 1
#define FAN_CH2 2
#define FAN_CH3 3
#define USB_ON 0x1
#define USB_OFF 0xfe
#define MODULE_INS_INT 1
#define MODULE_INT 2
#define MODULE_POWER_INT 3
#define THER_SENSOR_INT 4
#define IO_BOARD_INT 5
#define FAN_ERROR_INT 6
#define MODULE_INS_INT_MASK 1
#define MODULE_INT_MASK 2
#define MODULE_POW_INT_MASK 3
#define THER_SEN_INT_MASK 4
#define IO_BOARD_INT_MASK 5
#define FAN_ERROR_INT_MASK 6
#define SFP_PORT_1 1
#define SFP_PORT_2 2
#define SFP_PORT_MGM 3
#define SFP_PORT_1_ON 1
#define SFP_PORT_1_OFF 2
#define SFP_PORT_2_ON 3
#define SFP_PORT_2_OFF 4
#define SFP_PORT_MGM_ON 5
#define SFP_PORT_MGM_OFF 6
#define SYS_LED_A 1
#define SYS_LED_G 2
#define SYS_LED_BLINK 3
#define SYS_LED_OFF 0
#define SYS_LED_A_N 1
#define SYS_LED_A_B 2
#define SYS_LED_G_N 3
#define SYS_LED_G_B 4
#define SWITCH_LED_OFF 0
#define SWITCH_LED_A_N 1
#define SWITCH_LED_A_B 2
#define SWITCH_LED_G_N 3
#define SWITCH_LED_G_B 4
#define SWITCH_LED_BLINK 1
struct i2c_adap {
int nr;
char *name;
const char *funcs;
const char *algo;
};
struct i2c_adap *gather_i2c_busses(void);
void free_adapters(struct i2c_adap *adapters);
/* compiler conditional */
#define LED_CTRL_WANTED
#define USB_CTRL_WANTED
#define ESC_600_BMC_WANTED
#define ESC_600_INT_WANTED
#define ESC_600_ALARM_WANTED
#define ESC_600_STAT_WANTED
#define ESC_600_JTAG_WANTED
#define WDT_CTRL_WANTED
#define EEPROM_WP_WANTED
//#define EEPROM_WANTED
//#define LED_L3_CTRL_WANTED
//#define LINEAR_CONVERT_FUNCTION
#define DEBUG_MSG
#ifdef DEBUG_MSG
#define debug_print(s) printk s
#else
#define debug_print(s)
#endif
/* end of compiler conditional */
/* i2c_client Declaration */
static struct i2c_client *ESC_600_128q_client; //0x33 I/O Board CPLD ,XO2-640
static struct i2c_client *Cameo_Extpand_1_client; //0x20 I/O Extpander ,PCA9534PW
static struct i2c_client *Cameo_Extpand_2_client; //0x21 I/O Extpander ,PCA9534PW
static struct i2c_client *Cameo_CPLD_2_client; //0x30 CPLD ,XO2-2000HC-4FTG256C
static struct i2c_client *Cameo_CPLD_3_client; //0x31 CPLD ,XO2-7000HC-4TG144C
static struct i2c_client *Cameo_CPLD_4_client; //0x35 CPLD ,XO2-2000HC-4FTG256C
#ifdef ESC_600_BMC_WANTED
static struct i2c_client *Cameo_BMC_client; //0x14 BMC ,Aspeed
#endif /*ESC_600_BMC_WANTED*/
/* end of i2c_client Declaration */
/* Function Declaration */
/*0x33 I/O Board CPLD*/
static ssize_t sfp_select_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t sfp_select_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
static ssize_t sfp_tx_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t sfp_tx_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
static ssize_t sfp_insert_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t sfp_rx_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t psu_status_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t switch_button_get(struct device *dev, struct device_attribute *da, char *buf);
#ifdef LED_CTRL_WANTED
static ssize_t sys_led_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t sys_led_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
static ssize_t switch_led_all_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t switch_led_all_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
#ifdef LED_L3_CTRL_WANTED
static ssize_t switch_led_3_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t switch_led_3_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
#endif /*LED_L3_CTRL_WANTED*/
static ssize_t switch_led_4_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t switch_led_4_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
static ssize_t switch_led_5_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t switch_led_5_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
#endif /*LED_CTRL_WANTED*/
#ifdef ESC_600_INT_WANTED
static ssize_t sfp_int_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t psu_int_get(struct device *dev, struct device_attribute *da, char *buf);
#endif /*ESC_600_INT_WANTED*/
/*0x31 CPLD-1 700HC*/
#ifdef LED_CTRL_WANTED
static ssize_t led_ctrl_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t led_ctrl_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
#endif /*LED_CTRL_WANTED*/
#ifdef ESC_600_JTAG_WANTED
static ssize_t jtag_select_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t jtag_select_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
#endif /*ESC_600_JTAG_WANTED*/
#ifdef ESC_600_STAT_WANTED
static ssize_t sensor_status_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t sersor_status_mask_all_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t sersor_status_mask_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t sersor_status_mask_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
#endif /*ESC_600_STAT_WANTED*/
#ifdef ESC_600_ALARM_WANTED
static ssize_t switch_alarm_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t switch_alarm_mask_all_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t switch_alarm_mask_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t switch_alarm_mask_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
#endif /*ESC_600_ALARM_WANTED*/
#ifdef ESC_600_INT_WANTED
static ssize_t sensor_int_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t sersor_int_mask_all_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t sersor_int_mask_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t sersor_int_mask_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
static ssize_t int_mask_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t int_mask_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
#endif /*ESC_600_INT_WANTED*/
/*0x30 CPLD-1 640UHC*/
static ssize_t fan_status_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t fan_insert_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t fan_power_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t fan_direct_get(struct device *dev, struct device_attribute *da, char *buf);
#ifdef USB_CTRL_WANTED
static ssize_t usb_power_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t usb_power_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
#endif /*USB_CTRL_WANTED*/
static ssize_t shutdown_sys_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t shutdown_sys_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
static ssize_t reset_sys_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
static ssize_t module_reset_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
static ssize_t module_power_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t module_12v_status_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t module_enable_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t module_enable_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
static ssize_t module_insert_get(struct device *dev, struct device_attribute *da, char *buf);
#ifdef ESC_600_INT_WANTED
static ssize_t switch_int_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t switch_int_mask_all_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t switch_int_mask_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t switch_int_mask_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
#endif /*ESC_600_INT_WANTED*/
static ssize_t cpld_version_get(struct device *dev, struct device_attribute *da, char *buf);
#ifdef WDT_CTRL_WANTED
static ssize_t wdt_status_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t wdt_status_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
#endif /*WDT_CTRL_WANTED*/
#ifdef EEPROM_WP_WANTED
static ssize_t eeprom_wp_status_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t eeprom_wp_status_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
#endif /*EEPROM_WP_WANTED*/
/*0x14 BMC*/
#ifdef ESC_600_BMC_WANTED
static ssize_t bmc_module_detect(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t themal_temp_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t module_temp_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t mac_temp_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t psu_module_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t dc_chip_switch_get(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t dc_chip_slot_get(struct device *dev, struct device_attribute *da, char *buf);
#endif /*ESC_600_BMC_WANTED*/
/* end of Function Declaration */
/* struct i2c_data */
struct Cameo_i2c_data
{
struct device *hwmon_dev;
struct mutex update_lock;
char valid; /* !=0 if registers are valid */
unsigned long last_updated; /* In jiffies */
u8 status; /* Status register read from CPLD */
};
/*end of struct i2c_data */
/* struct i2c_sysfs_attributes */
enum Cameo_i2c_sysfs_attributes
{
/*0x31 CPLD-1 700HC*/
#ifdef LED_CTRL_WANTED
LED_CTRL,
#endif /*LED_CTRL_WANTED*/
#ifdef ESC_600_JTAG_WANTED
JTAG_SELECT,
#endif /*ESC_600_JTAG_WANTED*/
#ifdef ESC_600_STAT_WANTED
SENSOR_STATUS,
SENSOR_STATUS_MASK,
#endif /*ESC_600_STAT_WANTED*/
#ifdef ESC_600_ALARM_WANTED
SWITCH_ALARM,
SWITCH_ALARM_MASK,
#endif /*ESC_600_ALARM_WANTED*/
#ifdef ESC_600_INT_WANTED
SENSOR_INT,
SENSOR_INT_MASK,
#endif /*ESC_600_INT_WANTED*/
/*0x30 CPLD-1 640UHC*/
FAN_STATUS,
FAN_INSERT,
FAN_POWER,
FAN_DIRECT,
FAN_SPEED_RPM,
#ifdef USB_CTRL_WANTED
USB_POWER,
#endif /*USB_CTRL_WANTED*/
SYS_SHUTDOWN,
SYS_RESET,
MODULE_RESET,
MODULE_INSERT,
MODULE_POWER,
MODULE_ENABLE,
MODULE_12V_STAT,
CPLD_VER,
#ifdef ESC_600_INT_WANTED
SWITCH_INT,
SWITCH_INT_MASK,
#endif /*ESC_600_INT_WANTED*/
#ifdef WDT_CTRL_WANTED
WDT_CTRL,
#endif
#ifdef EEPROM_WP_WANTED
EEPROM_WP_CTRL,
#endif
/*0x33 I/O Board CPLD*/
SFP_SELECT,
SFP_INSERT,
SFP_TX_DISABLE,
SFP_RX_LOSS,
PSU_PRESENT,
PSU_STATUS,
SWITCH_BUTTON,
#ifdef ESC_600_BMC_WANTED
SENSOR_TEMP,
MODULE_TEMP,
MAC_TEMP,
DC_CHIP_SWITCH,
DC_CHIP_SLOT_1,
DC_CHIP_SLOT_2,
DC_CHIP_SLOT_3,
DC_CHIP_SLOT_4,
DC_CHIP_SLOT_5,
DC_CHIP_SLOT_6,
DC_CHIP_SLOT_7,
DC_CHIP_SLOT_8,
PSU_MODULE_1,
PSU_MODULE_2,
PSU_MODULE_3,
PSU_MODULE_4,
BMC_DETECT,
#endif /*ESC_600_BMC_WANTED*/
#ifdef LED_CTRL_WANTED
SYS_LED,
SWITCH_LED,
#endif /*LED_CTRL_WANTED*/
#ifdef ESC_600_INT_WANTED
SFP_INT,
SFP_INT_MASK,
PSU_INT,
#endif /*ESC_600_INT_WANTED*/
};
/* end of struct i2c_sysfs_attributes */
/* sysfs attributes for SENSOR_DEVICE_ATTR */
/*ESC600_SYS_attributes*/
static SENSOR_DEVICE_ATTR(cpld_version , S_IRUGO , cpld_version_get , NULL , CPLD_VER);
#ifdef WDT_CTRL_WANTED
static SENSOR_DEVICE_ATTR(wdt_ctrl , S_IRUGO | S_IWUSR , wdt_status_get , wdt_status_set , WDT_CTRL);
#endif /*WDT_CTRL_WANTED*/
#ifdef EEPROM_WP_WANTED
static SENSOR_DEVICE_ATTR(eeprom_wp_ctrl , S_IRUGO | S_IWUSR , eeprom_wp_status_get , eeprom_wp_status_set , EEPROM_WP_CTRL);
#endif /*EEPROM_WP_WANTED*/
/*ESC600_PSU_attributes*/
static SENSOR_DEVICE_ATTR(psu_present , S_IRUGO , psu_status_get , NULL , PSU_PRESENT);
static SENSOR_DEVICE_ATTR(psu_status , S_IRUGO , psu_status_get , NULL , PSU_STATUS);
#ifdef ESC_600_BMC_WANTED
static SENSOR_DEVICE_ATTR(psu_module_1 , S_IRUGO , psu_module_get , NULL , PSU_MODULE_1);
static SENSOR_DEVICE_ATTR(psu_module_2 , S_IRUGO , psu_module_get , NULL , PSU_MODULE_2);
static SENSOR_DEVICE_ATTR(psu_module_3 , S_IRUGO , psu_module_get , NULL , PSU_MODULE_3);
static SENSOR_DEVICE_ATTR(psu_module_4 , S_IRUGO , psu_module_get , NULL , PSU_MODULE_4);
static SENSOR_DEVICE_ATTR(dc_chip_switch , S_IRUGO , dc_chip_switch_get , NULL , DC_CHIP_SWITCH);
static SENSOR_DEVICE_ATTR(dc_chip_slot_1 , S_IRUGO , dc_chip_slot_get , NULL , DC_CHIP_SLOT_1);
static SENSOR_DEVICE_ATTR(dc_chip_slot_2 , S_IRUGO , dc_chip_slot_get , NULL , DC_CHIP_SLOT_2);
static SENSOR_DEVICE_ATTR(dc_chip_slot_3 , S_IRUGO , dc_chip_slot_get , NULL , DC_CHIP_SLOT_3);
static SENSOR_DEVICE_ATTR(dc_chip_slot_4 , S_IRUGO , dc_chip_slot_get , NULL , DC_CHIP_SLOT_4);
static SENSOR_DEVICE_ATTR(dc_chip_slot_5 , S_IRUGO , dc_chip_slot_get , NULL , DC_CHIP_SLOT_5);
static SENSOR_DEVICE_ATTR(dc_chip_slot_6 , S_IRUGO , dc_chip_slot_get , NULL , DC_CHIP_SLOT_6);
static SENSOR_DEVICE_ATTR(dc_chip_slot_7 , S_IRUGO , dc_chip_slot_get , NULL , DC_CHIP_SLOT_7);
static SENSOR_DEVICE_ATTR(dc_chip_slot_8 , S_IRUGO , dc_chip_slot_get , NULL , DC_CHIP_SLOT_8);
#endif /*ESC_600_BMC_WANTED*/
/*ESC600_JTAG_attributes*/
#ifdef ESC_600_JTAG_WANTED
static SENSOR_DEVICE_ATTR(jtag_select , S_IRUGO | S_IWUSR , jtag_select_get , jtag_select_set , JTAG_SELECT);
#endif /*ESC_600_JTAG_WANTED*/
/*ESC600_SFP_attributes*/
static SENSOR_DEVICE_ATTR(sfp_select , S_IRUGO | S_IWUSR , sfp_select_get , sfp_select_set , SFP_SELECT);
static SENSOR_DEVICE_ATTR(sfp_insert , S_IRUGO , sfp_insert_get , NULL , SFP_INSERT);
static SENSOR_DEVICE_ATTR(sfp_tx_disable , S_IRUGO | S_IWUSR , sfp_tx_get , sfp_tx_set , SFP_TX_DISABLE);
static SENSOR_DEVICE_ATTR(sfp_rx_loss , S_IRUGO , sfp_rx_get , NULL , SFP_RX_LOSS);
/*ESC600_Mask_attributes*/
#ifdef ESC_600_STAT_WANTED
static SENSOR_DEVICE_ATTR(sersor_status_mask_all , S_IRUGO , sersor_status_mask_all_get , NULL , SENSOR_STATUS_MASK);
static SENSOR_DEVICE_ATTR(sersor_status_mask_1 , S_IRUGO | S_IWUSR , sersor_status_mask_get , sersor_status_mask_set , 1);
static SENSOR_DEVICE_ATTR(sersor_status_mask_2 , S_IRUGO | S_IWUSR , sersor_status_mask_get , sersor_status_mask_set , 2);
static SENSOR_DEVICE_ATTR(sersor_status_mask_3 , S_IRUGO | S_IWUSR , sersor_status_mask_get , sersor_status_mask_set , 3);
static SENSOR_DEVICE_ATTR(sersor_status_mask_4 , S_IRUGO | S_IWUSR , sersor_status_mask_get , sersor_status_mask_set , 4);
static SENSOR_DEVICE_ATTR(sersor_status_mask_5 , S_IRUGO | S_IWUSR , sersor_status_mask_get , sersor_status_mask_set , 5);
static SENSOR_DEVICE_ATTR(sersor_status_mask_6 , S_IRUGO | S_IWUSR , sersor_status_mask_get , sersor_status_mask_set , 6);
#endif /*ESC_600_STAT_WANTED*/
#ifdef ESC_600_ALARM_WANTED
static SENSOR_DEVICE_ATTR(switch_alarm_mask_all , S_IRUGO , switch_alarm_mask_all_get , NULL , SWITCH_ALARM_MASK);
static SENSOR_DEVICE_ATTR(switch_alarm_mask_1 , S_IRUGO | S_IWUSR , switch_alarm_mask_get , switch_alarm_mask_set , 1);
static SENSOR_DEVICE_ATTR(switch_alarm_mask_2 , S_IRUGO | S_IWUSR , switch_alarm_mask_get , switch_alarm_mask_set , 2);
static SENSOR_DEVICE_ATTR(switch_alarm_mask_3 , S_IRUGO | S_IWUSR , switch_alarm_mask_get , switch_alarm_mask_set , 3);
static SENSOR_DEVICE_ATTR(switch_alarm_mask_4 , S_IRUGO | S_IWUSR , switch_alarm_mask_get , switch_alarm_mask_set , 4);
#endif /*ESC_600_ALARM_WANTED*/
#ifdef ESC_600_INT_WANTED
static SENSOR_DEVICE_ATTR(sersor_int_mask_all , S_IRUGO , sersor_int_mask_all_get , NULL , SENSOR_INT_MASK);
static SENSOR_DEVICE_ATTR(sersor_int_mask_1 , S_IRUGO | S_IWUSR , sersor_int_mask_get , sersor_int_mask_set , 1);
static SENSOR_DEVICE_ATTR(sersor_int_mask_2 , S_IRUGO | S_IWUSR , sersor_int_mask_get , sersor_int_mask_set , 2);
static SENSOR_DEVICE_ATTR(switch_int_mask_all , S_IRUGO , switch_int_mask_all_get , NULL , SWITCH_INT_MASK);
static SENSOR_DEVICE_ATTR(phy_module_ins_mask , S_IRUGO | S_IWUSR , switch_int_mask_get , switch_int_mask_set , 1);
static SENSOR_DEVICE_ATTR(phy_module_int_mask , S_IRUGO | S_IWUSR , switch_int_mask_get , switch_int_mask_set , 2);
static SENSOR_DEVICE_ATTR(phy_module_power_mask , S_IRUGO | S_IWUSR , switch_int_mask_get , switch_int_mask_set , 3);
static SENSOR_DEVICE_ATTR(cpld2_int_mask , S_IRUGO | S_IWUSR , switch_int_mask_get , switch_int_mask_set , 4);
static SENSOR_DEVICE_ATTR(io_board_int_mask , S_IRUGO | S_IWUSR , switch_int_mask_get , switch_int_mask_set , 5);
static SENSOR_DEVICE_ATTR(fan_error_mask , S_IRUGO | S_IWUSR , switch_int_mask_get , switch_int_mask_set , 6);
static SENSOR_DEVICE_ATTR(psu_int_mask , S_IRUGO | S_IWUSR , int_mask_get , int_mask_set , 1);
static SENSOR_DEVICE_ATTR(sfp_loss_int_mask , S_IRUGO | S_IWUSR , int_mask_get , int_mask_set , 2);
static SENSOR_DEVICE_ATTR(sfp_abs_int_mask , S_IRUGO | S_IWUSR , int_mask_get , int_mask_set , 3);
#endif /*ESC_600_INT_WANTED*/
/*ESC600_Fan_attributes*/
static SENSOR_DEVICE_ATTR(fan_status , S_IRUGO , fan_status_get , NULL , FAN_STATUS);
static SENSOR_DEVICE_ATTR(fan_insert , S_IRUGO , fan_insert_get , NULL , FAN_INSERT);
static SENSOR_DEVICE_ATTR(fan_power , S_IRUGO , fan_power_get , NULL , FAN_POWER);
static SENSOR_DEVICE_ATTR(fan_direct , S_IRUGO , fan_direct_get , NULL , FAN_DIRECT);
static SENSOR_DEVICE_ATTR(fan_speed_rpm , S_IRUGO , fan_status_get , NULL , FAN_SPEED_RPM);
/*ESC600_USB_attributes*/
#ifdef USB_CTRL_WANTED
static SENSOR_DEVICE_ATTR(usb_power , S_IRUGO | S_IWUSR , usb_power_get , usb_power_set , USB_POWER);
#endif /*USB_CTRL_WANTED*/
/*ESC600_LED_attributes*/
#ifdef LED_CTRL_WANTED
static SENSOR_DEVICE_ATTR(led_ctrl , S_IRUGO | S_IWUSR , led_ctrl_get , led_ctrl_set , LED_CTRL);
static SENSOR_DEVICE_ATTR(sys_led , S_IRUGO | S_IWUSR , sys_led_get , sys_led_set , SYS_LED);
static SENSOR_DEVICE_ATTR(switch_led_all , S_IRUGO | S_IWUSR , switch_led_all_get , switch_led_all_set , SWITCH_LED);
#ifdef LED_L3_CTRL_WANTED
static SENSOR_DEVICE_ATTR(switch_led_3_1 , S_IRUGO | S_IWUSR , switch_led_3_get , switch_led_3_set , 1);
static SENSOR_DEVICE_ATTR(switch_led_3_2 , S_IRUGO | S_IWUSR , switch_led_3_get , switch_led_3_set , 2);
static SENSOR_DEVICE_ATTR(switch_led_3_3 , S_IRUGO | S_IWUSR , switch_led_3_get , switch_led_3_set , 3);
static SENSOR_DEVICE_ATTR(switch_led_3_4 , S_IRUGO | S_IWUSR , switch_led_3_get , switch_led_3_set , 4);
#endif /*LED_L3_CTRL_WANTED*/
static SENSOR_DEVICE_ATTR(switch_led_4_1 , S_IRUGO | S_IWUSR , switch_led_4_get , switch_led_4_set , 1);
static SENSOR_DEVICE_ATTR(switch_led_4_2 , S_IRUGO | S_IWUSR , switch_led_4_get , switch_led_4_set , 2);
static SENSOR_DEVICE_ATTR(switch_led_4_3 , S_IRUGO | S_IWUSR , switch_led_4_get , switch_led_4_set , 3);
static SENSOR_DEVICE_ATTR(switch_led_4_4 , S_IRUGO | S_IWUSR , switch_led_4_get , switch_led_4_set , 4);
static SENSOR_DEVICE_ATTR(switch_led_5_1 , S_IRUGO | S_IWUSR , switch_led_5_get , switch_led_5_set , 1);
static SENSOR_DEVICE_ATTR(switch_led_5_2 , S_IRUGO | S_IWUSR , switch_led_5_get , switch_led_5_set , 2);
static SENSOR_DEVICE_ATTR(switch_led_5_3 , S_IRUGO | S_IWUSR , switch_led_5_get , switch_led_5_set , 3);
static SENSOR_DEVICE_ATTR(switch_led_5_4 , S_IRUGO | S_IWUSR , switch_led_5_get , switch_led_5_set , 4);
#endif /*LED_CTRL_WANTED*/
/*ESC600_Reset_attributes*/
static SENSOR_DEVICE_ATTR(shutdown_sys , S_IRUGO | S_IWUSR , shutdown_sys_get , shutdown_sys_set , SYS_SHUTDOWN);
static SENSOR_DEVICE_ATTR(reset_sys , S_IRUGO | S_IWUSR , NULL , reset_sys_set , SYS_RESET);
/*ESC600_Sensor_attributes*/
#ifdef ESC_600_STAT_WANTED
static SENSOR_DEVICE_ATTR(sensor_status , S_IRUGO , sensor_status_get , NULL , SENSOR_STATUS);
#endif /*ESC_600_STAT_WANTED*/
#ifdef ESC_600_ALARM_WANTED
static SENSOR_DEVICE_ATTR(switch_alarm , S_IRUGO , switch_alarm_get , NULL , SWITCH_ALARM);
#endif /*ESC_600_ALARM_WANTED*/
static SENSOR_DEVICE_ATTR(switch_button , S_IRUGO , switch_button_get , NULL , SWITCH_BUTTON);
#ifdef ESC_600_BMC_WANTED
static SENSOR_DEVICE_ATTR(sensor_temp , S_IRUGO , themal_temp_get , NULL , SENSOR_TEMP);
static SENSOR_DEVICE_ATTR(module_temp , S_IRUGO , module_temp_get , NULL , MODULE_TEMP);
static SENSOR_DEVICE_ATTR(mac_temp , S_IRUGO , mac_temp_get , NULL , MAC_TEMP);
static SENSOR_DEVICE_ATTR(bmc_present , S_IRUGO , bmc_module_detect , NULL , BMC_DETECT);
#endif /*ESC_600_BMC_WANTED*/
/*ESC600_INT_attributes*/
#ifdef ESC_600_INT_WANTED
static SENSOR_DEVICE_ATTR(sensor_int , S_IRUGO , sensor_int_get , NULL , SENSOR_INT);
static SENSOR_DEVICE_ATTR(switch_int , S_IRUGO , switch_int_get , NULL , SWITCH_INT);
static SENSOR_DEVICE_ATTR(sfp_int , S_IRUGO , sfp_int_get , NULL , SFP_INT);
static SENSOR_DEVICE_ATTR(psu_int , S_IRUGO , psu_int_get , NULL , PSU_INT);
#endif /*ESC_600_INT_WANTED*/
/*ESC600_Module_attributes*/
static SENSOR_DEVICE_ATTR(module_reset , S_IRUGO | S_IWUSR , NULL , module_reset_set , MODULE_RESET);
static SENSOR_DEVICE_ATTR(module_insert , S_IRUGO , module_insert_get , NULL , MODULE_INSERT);
static SENSOR_DEVICE_ATTR(module_power , S_IRUGO , module_power_get , NULL , MODULE_POWER);
static SENSOR_DEVICE_ATTR(module_enable , S_IRUGO | S_IWUSR , module_enable_get , module_enable_set , MODULE_ENABLE);
static SENSOR_DEVICE_ATTR(module_12v_status , S_IRUGO , module_12v_status_get , NULL , MODULE_12V_STAT);
/* end of sysfs attributes for SENSOR_DEVICE_ATTR */
/* sysfs attributes for hwmon */
static struct attribute *ESC600_SYS_attributes[] =
{
#ifdef ESC_600_BMC_WANTED
&sensor_dev_attr_bmc_present.dev_attr.attr,
#endif /*ESC_600_BMC_WANTED*/
&sensor_dev_attr_cpld_version.dev_attr.attr,
#ifdef WDT_CTRL_WANTED
&sensor_dev_attr_wdt_ctrl.dev_attr.attr,
#endif
#ifdef EEPROM_WP_WANTED
&sensor_dev_attr_eeprom_wp_ctrl.dev_attr.attr,
#endif
NULL
};
static struct attribute *ESC600_PSU_attributes[] =
{
&sensor_dev_attr_psu_present.dev_attr.attr,
&sensor_dev_attr_psu_status.dev_attr.attr,
#ifdef ESC_600_BMC_WANTED
&sensor_dev_attr_psu_module_1.dev_attr.attr,
&sensor_dev_attr_psu_module_2.dev_attr.attr,
&sensor_dev_attr_psu_module_3.dev_attr.attr,
&sensor_dev_attr_psu_module_4.dev_attr.attr,
&sensor_dev_attr_dc_chip_switch.dev_attr.attr,
&sensor_dev_attr_dc_chip_slot_1.dev_attr.attr,
&sensor_dev_attr_dc_chip_slot_2.dev_attr.attr,
&sensor_dev_attr_dc_chip_slot_3.dev_attr.attr,
&sensor_dev_attr_dc_chip_slot_4.dev_attr.attr,
&sensor_dev_attr_dc_chip_slot_5.dev_attr.attr,
&sensor_dev_attr_dc_chip_slot_6.dev_attr.attr,
&sensor_dev_attr_dc_chip_slot_7.dev_attr.attr,
&sensor_dev_attr_dc_chip_slot_8.dev_attr.attr,
#endif /*ESC_600_BMC_WANTED*/
NULL
};
#ifdef ESC_600_JTAG_WANTED
static struct attribute *ESC600_JTAG_attributes[] =
{
&sensor_dev_attr_jtag_select.dev_attr.attr,
NULL
};
#endif
static struct attribute *ESC600_SFP_attributes[] =
{
&sensor_dev_attr_sfp_select.dev_attr.attr,
&sensor_dev_attr_sfp_insert.dev_attr.attr,
&sensor_dev_attr_sfp_tx_disable.dev_attr.attr,
&sensor_dev_attr_sfp_rx_loss.dev_attr.attr,
NULL
};
static struct attribute *ESC600_Mask_attributes[] =
{
#ifdef ESC_600_STAT_WANTED
&sensor_dev_attr_sersor_status_mask_all.dev_attr.attr,
&sensor_dev_attr_sersor_status_mask_1.dev_attr.attr,
&sensor_dev_attr_sersor_status_mask_2.dev_attr.attr,
&sensor_dev_attr_sersor_status_mask_3.dev_attr.attr,
&sensor_dev_attr_sersor_status_mask_4.dev_attr.attr,
&sensor_dev_attr_sersor_status_mask_5.dev_attr.attr,
&sensor_dev_attr_sersor_status_mask_6.dev_attr.attr,
#endif /*ESC_600_STAT_WANTED*/
#ifdef ESC_600_ALARM_WANTED
&sensor_dev_attr_switch_alarm_mask_all.dev_attr.attr,
&sensor_dev_attr_switch_alarm_mask_1.dev_attr.attr,
&sensor_dev_attr_switch_alarm_mask_2.dev_attr.attr,
&sensor_dev_attr_switch_alarm_mask_3.dev_attr.attr,
&sensor_dev_attr_switch_alarm_mask_4.dev_attr.attr,
#endif /*ESC_600_ALARM_WANTED*/
#ifdef ESC_600_INT_WANTED
&sensor_dev_attr_sersor_int_mask_all.dev_attr.attr,
&sensor_dev_attr_sersor_int_mask_1.dev_attr.attr,
&sensor_dev_attr_sersor_int_mask_2.dev_attr.attr,
&sensor_dev_attr_switch_int_mask_all.dev_attr.attr,
&sensor_dev_attr_phy_module_ins_mask.dev_attr.attr,
&sensor_dev_attr_phy_module_int_mask.dev_attr.attr,
&sensor_dev_attr_phy_module_power_mask.dev_attr.attr,
&sensor_dev_attr_cpld2_int_mask.dev_attr.attr,
&sensor_dev_attr_io_board_int_mask.dev_attr.attr,
&sensor_dev_attr_fan_error_mask.dev_attr.attr,
&sensor_dev_attr_psu_int_mask.dev_attr.attr,
&sensor_dev_attr_sfp_loss_int_mask.dev_attr.attr,
&sensor_dev_attr_sfp_abs_int_mask.dev_attr.attr,
#endif /*ESC_600_INT_WANTED*/
NULL
};
static struct attribute *ESC600_Fan_attributes[] =
{
&sensor_dev_attr_fan_status.dev_attr.attr,
&sensor_dev_attr_fan_insert.dev_attr.attr,
&sensor_dev_attr_fan_power.dev_attr.attr,
&sensor_dev_attr_fan_direct.dev_attr.attr,
&sensor_dev_attr_fan_speed_rpm.dev_attr.attr,
NULL
};
#ifdef USB_CTRL_WANTED
static struct attribute *ESC600_USB_attributes[] =
{
&sensor_dev_attr_usb_power.dev_attr.attr,
NULL
};
#endif /*USB_CTRL_WANTED*/
#ifdef LED_CTRL_WANTED
static struct attribute *ESC600_LED_attributes[] =
{
&sensor_dev_attr_led_ctrl.dev_attr.attr,
&sensor_dev_attr_sys_led.dev_attr.attr,
&sensor_dev_attr_switch_led_all.dev_attr.attr,
#ifdef LED_L3_CTRL_WANTED
&sensor_dev_attr_switch_led_3_1.dev_attr.attr,
&sensor_dev_attr_switch_led_3_2.dev_attr.attr,
&sensor_dev_attr_switch_led_3_3.dev_attr.attr,
&sensor_dev_attr_switch_led_3_4.dev_attr.attr,
#endif /*LED_L3_CTRL_WANTED*/
&sensor_dev_attr_switch_led_4_1.dev_attr.attr,
&sensor_dev_attr_switch_led_4_2.dev_attr.attr,
&sensor_dev_attr_switch_led_4_3.dev_attr.attr,
&sensor_dev_attr_switch_led_4_4.dev_attr.attr,
&sensor_dev_attr_switch_led_5_1.dev_attr.attr,
&sensor_dev_attr_switch_led_5_2.dev_attr.attr,
&sensor_dev_attr_switch_led_5_3.dev_attr.attr,
&sensor_dev_attr_switch_led_5_4.dev_attr.attr,
NULL
};
#endif
static struct attribute *ESC600_Reset_attributes[] =
{
&sensor_dev_attr_shutdown_sys.dev_attr.attr,
&sensor_dev_attr_reset_sys.dev_attr.attr,
NULL
};
static struct attribute *ESC600_Sensor_attributes[] =
{
#ifdef ESC_600_STAT_WANTED
&sensor_dev_attr_sensor_status.dev_attr.attr,
#endif /*ESC_600_STAT_WANTED*/
#ifdef ESC_600_ALARM_WANTED
&sensor_dev_attr_switch_alarm.dev_attr.attr,
#endif /*ESC_600_ALARM_WANTED*/
&sensor_dev_attr_switch_button.dev_attr.attr,
#ifdef ESC_600_BMC_WANTED
&sensor_dev_attr_sensor_temp.dev_attr.attr,
&sensor_dev_attr_module_temp.dev_attr.attr,
&sensor_dev_attr_mac_temp.dev_attr.attr,
#endif /*ESC_600_BMC_WANTED*/
NULL
};
#ifdef ESC_600_INT_WANTED
static struct attribute *ESC600_INT_attributes[] =
{
&sensor_dev_attr_sensor_int.dev_attr.attr,
&sensor_dev_attr_switch_int.dev_attr.attr,
&sensor_dev_attr_sfp_int.dev_attr.attr,
&sensor_dev_attr_psu_int.dev_attr.attr,
NULL
};
#endif
static struct attribute *ESC600_Module_attributes[] =
{
&sensor_dev_attr_module_reset.dev_attr.attr,
&sensor_dev_attr_module_insert.dev_attr.attr,
&sensor_dev_attr_module_power.dev_attr.attr,
&sensor_dev_attr_module_enable.dev_attr.attr,
&sensor_dev_attr_module_12v_status.dev_attr.attr,
NULL
};
/* end of sysfs attributes for hwmon */
/* struct attribute_group */
static const struct attribute_group ESC600_SYS_group =
{
.name = "ESC600_SYS",
.attrs = ESC600_SYS_attributes,
};
static const struct attribute_group ESC600_PSU_group =
{
.name = "ESC600_PSU",
.attrs = ESC600_PSU_attributes,
};
#ifdef ESC_600_JTAG_WANTED
static const struct attribute_group ESC600_JTAG_group =
{
.name = "ESC600_JTAG",
.attrs = ESC600_JTAG_attributes,
};
#endif
static const struct attribute_group ESC600_SFP_group =
{
.name = "ESC600_SFP",
.attrs = ESC600_SFP_attributes,
};
static const struct attribute_group ESC600_MASK_group =
{
.name = "ESC600_MASK",
.attrs = ESC600_Mask_attributes,
};
static const struct attribute_group ESC600_FAN_group =
{
.name = "ESC600_FAN",
.attrs = ESC600_Fan_attributes,
};
#ifdef USB_CTRL_WANTED
static const struct attribute_group ESC600_USB_group =
{
.name = "ESC600_USB",
.attrs = ESC600_USB_attributes,
};
#endif /*USB_CTRL_WANTED*/
#ifdef LED_CTRL_WANTED
static const struct attribute_group ESC600_LED_group =
{
.name = "ESC600_LED",
.attrs = ESC600_LED_attributes,
};
#endif /*LED_CTRL_WANTED*/
static const struct attribute_group ESC600_Reset_group =
{
.name = "ESC600_Reset",
.attrs = ESC600_Reset_attributes,
};
static const struct attribute_group ESC600_Sensor_group =
{
.name = "ESC600_Sensor",
.attrs = ESC600_Sensor_attributes,
};
#ifdef ESC_600_INT_WANTED
static const struct attribute_group ESC600_INT_group =
{
.name = "ESC600_INT",
.attrs = ESC600_INT_attributes,
};
#endif
static const struct attribute_group ESC600_Module_group =
{
.name = "ESC600_Module",
.attrs = ESC600_Module_attributes,
};
/* end of struct attribute_group */