592 lines
26 KiB
C
592 lines
26 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>
|
||
|
|
||
|
#define DRIVER_VERSION "1.4.1"
|
||
|
|
||
|
#define TURN_OFF 0
|
||
|
#define TURN_ON 1
|
||
|
#define GET_USB 2
|
||
|
#define GET_LOC 3
|
||
|
#define LOC_OFF 0
|
||
|
#define LOC_BLINK 1
|
||
|
#define ALARM_OFF 0
|
||
|
#define ALARM_AMBER 1
|
||
|
#define ALARM_GREEN 2
|
||
|
#define PSU_1_GOOD 3
|
||
|
#define PSU_2_GOOD 4
|
||
|
#define PCIE_INT 1
|
||
|
#define QSFP_1_INT 2
|
||
|
#define QSFP_2_INT 3
|
||
|
#define FAN_INT 4
|
||
|
#define PSU_INT 5
|
||
|
#define SENSOR_INT 6
|
||
|
#define USB_INT 7
|
||
|
#define USB_ON 0x2
|
||
|
#define USB_OFF 0xfd
|
||
|
#define DIAG_G_ON 0x2
|
||
|
#define DIAG_G_OFF 0xfd
|
||
|
#define LED_ON 0x1
|
||
|
#define LED_OFF 0xfe
|
||
|
#define DIAG_A_ON 0x1
|
||
|
#define DIAG_A_OFF 0xfe
|
||
|
#define LOC_LED_OFF 0x4
|
||
|
#define LOC_LED_BLINK 0xfb
|
||
|
#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 BMC_PRESENT_OFFSET 0xa4
|
||
|
|
||
|
#define SYSFAN_MAX_NUM 4
|
||
|
|
||
|
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 ASPEED_BMC_WANTED
|
||
|
#define PSU_STAT_WANTED
|
||
|
//#define WDT_CTRL_WANTED
|
||
|
//#define EEPROM_WP_WANTED
|
||
|
//#define I2C_SWITCH_WANTED
|
||
|
//#define THEMAL_WANTED
|
||
|
//#define FAN_CTRL_WANTED
|
||
|
|
||
|
//#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 *ESQC_610_i2c_client; //0x30 for other device
|
||
|
static struct i2c_client *Cameo_CPLD_2_client; //0x31 for Port 01-32
|
||
|
static struct i2c_client *Cameo_CPLD_3_client; //0x32 for Port 33-48 QSFP 1-8
|
||
|
static struct i2c_client *Cameo_CPLD_4_client; //0x23 for Fan Status
|
||
|
static struct i2c_client *Cameo_CPLD_5_client; //0x35 for Power Status
|
||
|
#ifdef I2C_SWITCH_WANTED
|
||
|
static struct i2c_client *Cameo_Switch_1_client; //0x73
|
||
|
static struct i2c_client *Cameo_Switch_2_client; //0x77
|
||
|
#endif
|
||
|
#ifdef THEMAL_WANTED
|
||
|
static struct i2c_client *Cameo_Sensor_client; //0x4c themal sensor
|
||
|
static struct i2c_client *Cameo_Sensor_fan_client; //0x2e themal sensor
|
||
|
#endif
|
||
|
#ifdef ASPEED_BMC_WANTED
|
||
|
static struct i2c_client *Cameo_BMC_client; //0x14 ASPEED BMC
|
||
|
#endif
|
||
|
/* end of i2c_client Declaration */
|
||
|
|
||
|
/* Function Declaration */
|
||
|
/* i2c-0 */
|
||
|
static ssize_t psu_status_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
#ifdef PSU_STAT_WANTED
|
||
|
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);
|
||
|
#endif
|
||
|
#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
|
||
|
#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
|
||
|
static ssize_t sys_led_ctrl_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
static ssize_t sys_led_ctrl_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
|
||
|
static ssize_t reset_mac_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
|
||
|
static ssize_t shutdown_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
|
||
|
static ssize_t themal_status_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
#ifdef THEMAL_WANTED
|
||
|
static ssize_t themal_temp_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
#endif
|
||
|
static ssize_t themal_mask_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
static ssize_t themal_mask_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
|
||
|
static ssize_t int_status_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
static ssize_t sfp_status_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 low_power_all_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
static ssize_t low_power_all_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
|
||
|
static ssize_t low_power_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
static ssize_t low_power_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
|
||
|
static ssize_t qsfp_reset_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
|
||
|
static ssize_t qsfp_status_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
static ssize_t fan_status_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
#ifdef FAN_CTRL_WANTED
|
||
|
static ssize_t fan_mode_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
static ssize_t fan_mode_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
|
||
|
static ssize_t fan_rpm_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
static ssize_t fan_rpm_set(struct device *dev, struct device_attribute *da, const char *buf, size_t count);
|
||
|
#endif
|
||
|
#ifdef ASPEED_BMC_WANTED
|
||
|
static ssize_t bmc_register_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
static ssize_t bmc_module_detect(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
#endif
|
||
|
#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
|
||
|
#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
|
||
|
static ssize_t hw_version_get(struct device *dev, struct device_attribute *da, char *buf);
|
||
|
/* 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 */
|
||
|
};
|
||
|
|
||
|
/* struct i2c_sysfs_attributes */
|
||
|
enum Cameo_i2c_sysfs_attributes
|
||
|
{
|
||
|
/* i2c-0 */
|
||
|
/*CPLD 0X30*/
|
||
|
PSU_PRESENT,
|
||
|
PSU_STATUS,
|
||
|
#ifdef PSU_STAT_WANTED
|
||
|
PSU_MODULE_1,
|
||
|
PSU_MODULE_2,
|
||
|
DC_CHIP_SWITCH,
|
||
|
#endif
|
||
|
#ifdef USB_CTRL_WANTED
|
||
|
USB_POWER,
|
||
|
#endif
|
||
|
#ifdef LED_CTRL_WANTED
|
||
|
LED_CTRL,
|
||
|
#endif
|
||
|
SYS_LED,
|
||
|
FLOW_LED,
|
||
|
SW_LED_1,
|
||
|
SW_LED_2,
|
||
|
RESET_MAC,
|
||
|
SHUTDOWN_DUT,
|
||
|
SENSOR_STATUS,
|
||
|
#ifdef THEMAL_WANTED
|
||
|
SENSOR_TEMP,
|
||
|
#endif
|
||
|
SENSOR_INT_MASK,
|
||
|
INT_STATUS,
|
||
|
/*CPLD 0X31 & 0X32*/
|
||
|
SFP_PRESENT,
|
||
|
SFP_RX_LOSS,
|
||
|
SFP_TX_STAT,
|
||
|
QSFP_LOW_POWER_ALL,
|
||
|
QSFP_RESET,
|
||
|
QSFP_PRESENT,
|
||
|
QSFP_INT,
|
||
|
FAN_STATUS,
|
||
|
FAN_PRESENT,
|
||
|
FAN_POWER,
|
||
|
FAN_SPEED_RPM,
|
||
|
#ifdef FAN_CTRL_WANTED
|
||
|
FAN_MODE,
|
||
|
FAN_RPM,
|
||
|
#endif
|
||
|
#ifdef ASPEED_BMC_WANTED
|
||
|
BMC_SERSOR_1,
|
||
|
BMC_SERSOR_2,
|
||
|
BMC_SERSOR_3,
|
||
|
BMC_SERSOR_4,
|
||
|
BMC_DETECT,
|
||
|
#endif
|
||
|
#ifdef WDT_CTRL_WANTED
|
||
|
WDT_CTRL,
|
||
|
#endif
|
||
|
#ifdef EEPROM_WP_WANTED
|
||
|
EEPROM_WP_CTRL,
|
||
|
#endif
|
||
|
HW_VER,
|
||
|
};
|
||
|
/* end of struct i2c_sysfs_attributes */
|
||
|
|
||
|
/* sysfs attributes for SENSOR_DEVICE_ATTR */
|
||
|
/* i2c-0 */
|
||
|
/*CPLD 0X30*/
|
||
|
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 PSU_STAT_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(dc_chip_switch , S_IRUGO , dc_chip_switch_get, NULL , DC_CHIP_SWITCH);
|
||
|
#endif
|
||
|
#ifdef USB_CTRL_WANTED
|
||
|
static SENSOR_DEVICE_ATTR(usb_power , S_IRUGO | S_IWUSR , usb_power_get , usb_power_set , USB_POWER);
|
||
|
#endif
|
||
|
#ifdef LED_CTRL_WANTED
|
||
|
static SENSOR_DEVICE_ATTR(led_ctrl , S_IRUGO | S_IWUSR , led_ctrl_get , led_ctrl_set , LED_CTRL);
|
||
|
#endif
|
||
|
static SENSOR_DEVICE_ATTR(led_sys , S_IRUGO | S_IWUSR , sys_led_ctrl_get , sys_led_ctrl_set , SYS_LED);
|
||
|
static SENSOR_DEVICE_ATTR(led_flow , S_IRUGO | S_IWUSR , sys_led_ctrl_get , sys_led_ctrl_set , FLOW_LED);
|
||
|
static SENSOR_DEVICE_ATTR(led_sw1 , S_IRUGO | S_IWUSR , sys_led_ctrl_get , sys_led_ctrl_set , SW_LED_1);
|
||
|
static SENSOR_DEVICE_ATTR(led_sw2 , S_IRUGO | S_IWUSR , sys_led_ctrl_get , sys_led_ctrl_set , SW_LED_2);
|
||
|
static SENSOR_DEVICE_ATTR(reset_mac , S_IRUGO | S_IWUSR , NULL , reset_mac_set , RESET_MAC);
|
||
|
static SENSOR_DEVICE_ATTR(shutdown_set , S_IRUGO | S_IWUSR , NULL , shutdown_set , SHUTDOWN_DUT);
|
||
|
static SENSOR_DEVICE_ATTR(sensor_status , S_IRUGO , themal_status_get , NULL , SENSOR_STATUS);
|
||
|
#ifdef THEMAL_WANTED
|
||
|
static SENSOR_DEVICE_ATTR(sensor_temp , S_IRUGO , themal_temp_get , NULL , SENSOR_TEMP);
|
||
|
#endif
|
||
|
static SENSOR_DEVICE_ATTR(sensor_int_mask , S_IRUGO , themal_mask_get , NULL , SENSOR_INT_MASK);
|
||
|
static SENSOR_DEVICE_ATTR(sensor_int_mask_1 , S_IRUGO | S_IWUSR , NULL , themal_mask_set , 1);
|
||
|
static SENSOR_DEVICE_ATTR(sensor_int_mask_2 , S_IRUGO | S_IWUSR , NULL , themal_mask_set , 2);
|
||
|
static SENSOR_DEVICE_ATTR(sensor_int_mask_3 , S_IRUGO | S_IWUSR , NULL , themal_mask_set , 3);
|
||
|
static SENSOR_DEVICE_ATTR(sensor_int_mask_4 , S_IRUGO | S_IWUSR , NULL , themal_mask_set , 4);
|
||
|
static SENSOR_DEVICE_ATTR(int_status , S_IRUGO , int_status_get , NULL , INT_STATUS);
|
||
|
/*CPLD 0X31 & 0X32*/
|
||
|
static SENSOR_DEVICE_ATTR(SFP_present , S_IRUGO , sfp_status_get , NULL , SFP_PRESENT);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_rx_loss , S_IRUGO , sfp_status_get , NULL , SFP_RX_LOSS);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_stat , S_IRUGO , sfp_status_get , NULL , SFP_TX_STAT);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_1 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 1);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_2 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 2);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_3 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 3);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_4 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 4);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_5 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 5);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_6 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 6);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_7 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 7);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_8 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 8);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_9 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 9);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_10 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 10);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_11 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 11);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_12 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 12);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_13 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 13);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_14 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 14);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_15 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 15);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_16 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 16);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_17 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 17);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_18 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 18);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_19 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 19);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_20 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 20);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_21 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 21);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_22 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 22);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_23 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 23);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_24 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 24);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_25 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 25);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_26 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 26);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_27 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 27);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_28 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 28);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_29 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 29);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_30 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 30);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_31 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 31);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_32 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 32);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_33 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 33);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_34 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 34);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_35 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 35);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_36 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 36);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_37 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 37);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_38 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 38);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_39 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 39);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_40 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 40);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_41 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 41);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_42 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 42);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_43 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 43);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_44 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 44);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_45 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 45);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_46 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 46);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_47 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 47);
|
||
|
static SENSOR_DEVICE_ATTR(SFP_tx_ctrl_48 , S_IRUGO | S_IWUSR , NULL , sfp_tx_set , 48);
|
||
|
static SENSOR_DEVICE_ATTR(QSFP_low_power_all, S_IRUGO | S_IWUSR , low_power_all_get , low_power_all_set , QSFP_LOW_POWER_ALL);
|
||
|
static SENSOR_DEVICE_ATTR(QSFP_low_power_1 , S_IRUGO | S_IWUSR , low_power_get , low_power_set , 1);
|
||
|
static SENSOR_DEVICE_ATTR(QSFP_low_power_2 , S_IRUGO | S_IWUSR , low_power_get , low_power_set , 2);
|
||
|
static SENSOR_DEVICE_ATTR(QSFP_low_power_3 , S_IRUGO | S_IWUSR , low_power_get , low_power_set , 3);
|
||
|
static SENSOR_DEVICE_ATTR(QSFP_low_power_4 , S_IRUGO | S_IWUSR , low_power_get , low_power_set , 4);
|
||
|
static SENSOR_DEVICE_ATTR(QSFP_low_power_5 , S_IRUGO | S_IWUSR , low_power_get , low_power_set , 5);
|
||
|
static SENSOR_DEVICE_ATTR(QSFP_low_power_6 , S_IRUGO | S_IWUSR , low_power_get , low_power_set , 6);
|
||
|
static SENSOR_DEVICE_ATTR(QSFP_low_power_7 , S_IRUGO | S_IWUSR , low_power_get , low_power_set , 7);
|
||
|
static SENSOR_DEVICE_ATTR(QSFP_low_power_8 , S_IRUGO | S_IWUSR , low_power_get , low_power_set , 8);
|
||
|
static SENSOR_DEVICE_ATTR(QSFP_reset , S_IRUGO | S_IWUSR , NULL , qsfp_reset_set , QSFP_RESET);
|
||
|
static SENSOR_DEVICE_ATTR(QSFP_present , S_IRUGO , qsfp_status_get , NULL , QSFP_PRESENT);
|
||
|
static SENSOR_DEVICE_ATTR(QSFP_int , S_IRUGO , qsfp_status_get , NULL , QSFP_INT);
|
||
|
static SENSOR_DEVICE_ATTR(fan_status , S_IRUGO , fan_status_get , NULL , FAN_STATUS);
|
||
|
static SENSOR_DEVICE_ATTR(fan_present , S_IRUGO , fan_status_get , NULL , FAN_PRESENT);
|
||
|
static SENSOR_DEVICE_ATTR(fan_power , S_IRUGO , fan_status_get , NULL , FAN_POWER);
|
||
|
static SENSOR_DEVICE_ATTR(fan_speed_rpm , S_IRUGO , fan_status_get , NULL , FAN_SPEED_RPM);
|
||
|
#ifdef FAN_CTRL_WANTED
|
||
|
static SENSOR_DEVICE_ATTR(fan_mode , S_IRUGO | S_IWUSR , fan_mode_get , fan_mode_set , FAN_MODE);
|
||
|
static SENSOR_DEVICE_ATTR(fan_rpm , S_IRUGO | S_IWUSR , fan_rpm_get , fan_rpm_set , FAN_RPM);
|
||
|
#endif
|
||
|
#ifdef ASPEED_BMC_WANTED
|
||
|
static SENSOR_DEVICE_ATTR(bmc_sersor_1 , S_IRUGO , bmc_register_get , NULL , BMC_SERSOR_1);
|
||
|
static SENSOR_DEVICE_ATTR(bmc_sersor_2 , S_IRUGO , bmc_register_get , NULL , BMC_SERSOR_2);
|
||
|
static SENSOR_DEVICE_ATTR(bmc_sersor_3 , S_IRUGO , bmc_register_get , NULL , BMC_SERSOR_3);
|
||
|
static SENSOR_DEVICE_ATTR(bmc_sersor_4 , S_IRUGO , bmc_register_get , NULL , BMC_SERSOR_4);
|
||
|
static SENSOR_DEVICE_ATTR(bmc_present , S_IRUGO , bmc_module_detect , NULL , BMC_DETECT);
|
||
|
#endif
|
||
|
#ifdef WDT_CTRL_WANTED
|
||
|
static SENSOR_DEVICE_ATTR(wdt_ctrl , S_IRUGO | S_IWUSR , wdt_status_get , wdt_status_set , WDT_CTRL);
|
||
|
#endif
|
||
|
static SENSOR_DEVICE_ATTR(hw_version , S_IRUGO , hw_version_get , NULL , HW_VER);
|
||
|
#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
|
||
|
/* end of sysfs attributes for SENSOR_DEVICE_ATTR */
|
||
|
|
||
|
/* sysfs attributes for hwmon */
|
||
|
/* i2c-0 */
|
||
|
static struct attribute *ESQC610_SYS_attributes[] =
|
||
|
{
|
||
|
&sensor_dev_attr_hw_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 *ESQC610_PSU_attributes[] =
|
||
|
{
|
||
|
&sensor_dev_attr_psu_present.dev_attr.attr,
|
||
|
&sensor_dev_attr_psu_status.dev_attr.attr,
|
||
|
#ifdef PSU_STAT_WANTED
|
||
|
&sensor_dev_attr_psu_module_1.dev_attr.attr,
|
||
|
&sensor_dev_attr_psu_module_2.dev_attr.attr,
|
||
|
&sensor_dev_attr_dc_chip_switch.dev_attr.attr,
|
||
|
#endif
|
||
|
NULL
|
||
|
};
|
||
|
#ifdef USB_CTRL_WANTED
|
||
|
static struct attribute *ESQC610_USB_attributes[] =
|
||
|
{
|
||
|
&sensor_dev_attr_usb_power.dev_attr.attr,
|
||
|
NULL
|
||
|
};
|
||
|
#endif
|
||
|
static struct attribute *ESQC610_LED_attributes[] =
|
||
|
{
|
||
|
#ifdef LED_CTRL_WANTED
|
||
|
&sensor_dev_attr_led_ctrl.dev_attr.attr,
|
||
|
#endif
|
||
|
&sensor_dev_attr_led_sys.dev_attr.attr,
|
||
|
&sensor_dev_attr_led_flow.dev_attr.attr,
|
||
|
&sensor_dev_attr_led_sw1.dev_attr.attr,
|
||
|
&sensor_dev_attr_led_sw2.dev_attr.attr,
|
||
|
NULL
|
||
|
};
|
||
|
|
||
|
static struct attribute *ESQC610_Reset_attributes[] =
|
||
|
{
|
||
|
&sensor_dev_attr_reset_mac.dev_attr.attr,
|
||
|
&sensor_dev_attr_shutdown_set.dev_attr.attr,
|
||
|
NULL
|
||
|
};
|
||
|
|
||
|
static struct attribute *ESQC610_Sensor_attributes[] =
|
||
|
{
|
||
|
&sensor_dev_attr_sensor_status.dev_attr.attr,
|
||
|
#ifdef THEMAL_WANTED
|
||
|
&sensor_dev_attr_sensor_temp.dev_attr.attr,
|
||
|
#endif
|
||
|
NULL
|
||
|
};
|
||
|
|
||
|
static struct attribute *ESQC610_INT_attributes[] =
|
||
|
{
|
||
|
&sensor_dev_attr_int_status.dev_attr.attr,
|
||
|
&sensor_dev_attr_QSFP_int.dev_attr.attr,
|
||
|
&sensor_dev_attr_sensor_int_mask.dev_attr.attr,
|
||
|
&sensor_dev_attr_sensor_int_mask_1.dev_attr.attr,
|
||
|
&sensor_dev_attr_sensor_int_mask_2.dev_attr.attr,
|
||
|
&sensor_dev_attr_sensor_int_mask_3.dev_attr.attr,
|
||
|
&sensor_dev_attr_sensor_int_mask_4.dev_attr.attr,
|
||
|
NULL
|
||
|
};
|
||
|
|
||
|
static struct attribute *ESQC610_SFP_attributes[] =
|
||
|
{
|
||
|
&sensor_dev_attr_SFP_present.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_rx_loss.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_stat.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_1.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_2.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_3.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_4.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_5.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_6.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_7.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_8.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_9.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_10.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_11.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_12.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_13.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_14.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_15.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_16.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_17.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_18.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_19.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_20.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_21.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_22.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_23.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_24.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_25.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_26.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_27.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_28.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_29.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_30.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_31.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_32.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_33.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_34.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_35.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_36.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_37.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_38.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_39.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_40.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_41.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_42.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_43.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_44.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_45.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_46.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_47.dev_attr.attr,
|
||
|
&sensor_dev_attr_SFP_tx_ctrl_48.dev_attr.attr,
|
||
|
NULL
|
||
|
};
|
||
|
|
||
|
static struct attribute *ESQC610_QSFP_attributes[] =
|
||
|
{
|
||
|
&sensor_dev_attr_QSFP_present.dev_attr.attr,
|
||
|
&sensor_dev_attr_QSFP_reset.dev_attr.attr,
|
||
|
&sensor_dev_attr_QSFP_low_power_all.dev_attr.attr,
|
||
|
&sensor_dev_attr_QSFP_low_power_1.dev_attr.attr,
|
||
|
&sensor_dev_attr_QSFP_low_power_2.dev_attr.attr,
|
||
|
&sensor_dev_attr_QSFP_low_power_3.dev_attr.attr,
|
||
|
&sensor_dev_attr_QSFP_low_power_4.dev_attr.attr,
|
||
|
&sensor_dev_attr_QSFP_low_power_5.dev_attr.attr,
|
||
|
&sensor_dev_attr_QSFP_low_power_6.dev_attr.attr,
|
||
|
&sensor_dev_attr_QSFP_low_power_7.dev_attr.attr,
|
||
|
&sensor_dev_attr_QSFP_low_power_8.dev_attr.attr,
|
||
|
NULL
|
||
|
};
|
||
|
|
||
|
static struct attribute *ESQC610_FAN_attributes[] = {
|
||
|
&sensor_dev_attr_fan_status.dev_attr.attr,
|
||
|
&sensor_dev_attr_fan_present.dev_attr.attr,
|
||
|
&sensor_dev_attr_fan_power.dev_attr.attr,
|
||
|
&sensor_dev_attr_fan_speed_rpm.dev_attr.attr,
|
||
|
#ifdef FAN_CTRL_WANTED
|
||
|
&sensor_dev_attr_fan_mode.dev_attr.attr,
|
||
|
&sensor_dev_attr_fan_rpm.dev_attr.attr,
|
||
|
#endif
|
||
|
NULL
|
||
|
};
|
||
|
|
||
|
#ifdef ASPEED_BMC_WANTED
|
||
|
static struct attribute *ESQC610_BMC_attributes[] = {
|
||
|
&sensor_dev_attr_bmc_sersor_1.dev_attr.attr,
|
||
|
&sensor_dev_attr_bmc_sersor_2.dev_attr.attr,
|
||
|
&sensor_dev_attr_bmc_sersor_3.dev_attr.attr,
|
||
|
&sensor_dev_attr_bmc_sersor_4.dev_attr.attr,
|
||
|
&sensor_dev_attr_bmc_present.dev_attr.attr,
|
||
|
NULL
|
||
|
};
|
||
|
#endif
|
||
|
/* end of sysfs attributes for hwmon */
|
||
|
|
||
|
/* struct attribute_group */
|
||
|
static const struct attribute_group ESQC610_SYS_group =
|
||
|
{
|
||
|
.name = "ESQC610_SYS",
|
||
|
.attrs = ESQC610_SYS_attributes,
|
||
|
};
|
||
|
|
||
|
static const struct attribute_group ESQC610_PSU_group =
|
||
|
{
|
||
|
.name = "ESQC610_PSU",
|
||
|
.attrs = ESQC610_PSU_attributes,
|
||
|
};
|
||
|
|
||
|
#ifdef USB_CTRL_WANTED
|
||
|
static const struct attribute_group ESQC610_USB_group =
|
||
|
{
|
||
|
.name = "ESQC610_USB",
|
||
|
.attrs = ESQC610_USB_attributes,
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
static const struct attribute_group ESQC610_LED_group =
|
||
|
{
|
||
|
.name = "ESQC610_LED",
|
||
|
.attrs = ESQC610_LED_attributes,
|
||
|
};
|
||
|
|
||
|
static const struct attribute_group ESQC610_Reset_group =
|
||
|
{
|
||
|
.name = "ESQC610_Reset",
|
||
|
.attrs = ESQC610_Reset_attributes,
|
||
|
};
|
||
|
|
||
|
static const struct attribute_group ESQC610_Sensor_group =
|
||
|
{
|
||
|
.name = "ESQC610_Sensor",
|
||
|
.attrs = ESQC610_Sensor_attributes,
|
||
|
};
|
||
|
|
||
|
static const struct attribute_group ESQC610_INT_group =
|
||
|
{
|
||
|
.name = "ESQC610_INT",
|
||
|
.attrs = ESQC610_INT_attributes,
|
||
|
};
|
||
|
|
||
|
static const struct attribute_group ESQC610_SFP_group =
|
||
|
{
|
||
|
.name = "ESQC610_SFP",
|
||
|
.attrs = ESQC610_SFP_attributes,
|
||
|
};
|
||
|
|
||
|
static const struct attribute_group ESQC610_QSFP_group =
|
||
|
{
|
||
|
.name = "ESQC610_QSFP",
|
||
|
.attrs = ESQC610_QSFP_attributes,
|
||
|
};
|
||
|
|
||
|
static const struct attribute_group ESQC610_FAN_group =
|
||
|
{
|
||
|
.name = "ESQC610_FAN",
|
||
|
.attrs = ESQC610_FAN_attributes,
|
||
|
};
|
||
|
|
||
|
#ifdef ASPEED_BMC_WANTED
|
||
|
static const struct attribute_group ESQC610_BMC_group =
|
||
|
{
|
||
|
.name = "ESQC610_BMC",
|
||
|
.attrs = ESQC610_BMC_attributes,
|
||
|
};
|
||
|
#endif
|
||
|
/* end of struct attribute_group */
|