meta-facebook/meta-fuji/recipes-kernel/cpld-mod/files/smb_syscpld.c (1,927 lines of code) (raw):
/*
* smb_syscpld.c - The i2c driver for SMB SYSCPLD
*
* Copyright 2020-present Facebook. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
//#define DEBUG
#include <linux/errno.h>
#include <linux/module.h>
#include <linux/i2c.h>
#include <i2c_dev_sysfs.h>
#ifdef DEBUG
#define PP_DEBUG(fmt, ...) do { \
printk(KERN_DEBUG "%s:%d " fmt "\n", \
__FUNCTION__, __LINE__, ##__VA_ARGS__); \
} while (0)
#else /* !DEBUG */
#define PP_DEBUG(fmt, ...)
#endif
#define present_help_str \
"0: Present\n" \
"1: Not present"
#define intr_help_str \
"0: Interrupt active\n" \
"1: No interrupt"
#define reset_help_str \
"0: It is placed in reset state\n" \
"1: It is placed in normal operation state"
#define fail_normal_help_str \
"0: Fail\n" \
"1: Normal"
#define sys_lock_help_str \
"0: System reset signal to be normal\n" \
"1: Lock system reset signal to be high"
#define cpld_cpu_blk_help_str \
"0: CPLD passes the interrupt to CPU\n" \
"1: CPLD blocks incoming the interrupt"
#define enable_help_str \
"0: Disable\n" \
"1: Enable"
/* fuji smb sysfile node */
static const i2c_dev_attr_st smb_syscpld_attr_table[] = {
{
"board_ver",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x00, 0, 8,
},
{
"cpld_ver",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x01, 0, 8,
},
{
"cpld_minor_ver",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x02, 0, 8,
},
{
"cpld_sub_ver",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x03, 0, 8,
},
{
"software_scratch",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x04, 0, 8,
},
{
"psu_L_pwr_ok",
fail_normal_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x05, 0, 1,
},
{
"psu_R_pwr_ok",
fail_normal_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x05, 1, 1,
},
{
"psu1_ac_ok",
fail_normal_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x05, 2, 1,
},
{
"psu2_ac_ok",
fail_normal_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x05, 3, 1,
},
{
"psu3_ac_ok",
fail_normal_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x05, 4, 1,
},
{
"psu4_ac_ok",
fail_normal_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x05, 5, 1,
},
{
"cpld_pdb9548_R_rst",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x06, 0, 1,
},
{
"cpld_pdb9548_L_rst",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x06, 1, 1,
},
{
"pca9548_1_rst",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x06, 2, 1,
},
{
"pca9548_2_rst",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x06, 3, 1,
},
{
"syscpld_bcm5387_rst_n",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x06, 4, 1,
},
{
"bmc_lpcrst_n",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x06, 5, 1,
},
{
"syscpld_bcm54616_1_rst_n",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x06, 6, 1,
},
{
"bmc_reset_n",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x06, 7, 1,
},
{
"fcm2_pca9548_rst",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x07, 0, 1,
},
{
"fcm1_pca9548_rst",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x07, 1, 1,
},
{
"fcm2_cpld_rst",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x07, 2, 1,
},
{
"fcm1_cpld_rst",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x07, 3, 1,
},
{
"sys_cpld_fpga_rst_n",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x07, 5, 1,
},
{
"cpld_usbphy_reset_b_n",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x07, 6, 1,
},
{
"syspld_si5391b_rst_n",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x07, 7, 1,
},
{
"ucd90160a_gpi4_w",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x08, 0, 1,
},
{
"ucd90160a_gpi3_w",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x08, 1, 1,
},
{
"syscpld_usbphy_id",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x08, 2, 1,
},
{
"syscpld_usbpwr_en_n",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x08, 3, 1,
},
{
"ucd9016a_cntrl",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x08, 4, 1,
},
{
"tcxo_50mhz_en",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x08, 5, 1,
},
{
"th4_boot_rst_n",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x08, 6, 1,
},
{
"xp1r8v_flash_en",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x08, 7, 1,
},
{
"pm40028_gpio_8_w",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x09, 0, 1,
},
{
"syscpld_reserve_9",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x09, 1, 1,
},
{
"syscpld_si53108_oe_1_n",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x09, 4, 1,
},
{
"syscpld_si53108_oe_3_n",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x09, 5, 1,
},
{
"syscpld_si53108_oe_4_n",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x09, 6, 1,
},
{
"r_si53362_1_oe",
reset_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x09, 7, 1,
},
{
"iso_pwr_btn_n",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x10, 0, 1,
},
{
"scm_power_enable_rst",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x10, 1, 1,
},
{
"debug_rst_btn_n",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x10, 2, 1,
},
{
"scm_cpld_rst",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x10, 3, 1,
},
{
"pm40028_boot_rst_n",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x10, 4, 1,
},
{
"fcm1_3r3v_en",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x10, 5, 1,
},
{
"fcm2_3r3v_en",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x10, 6, 1,
},
{
"bmc_usb2apwren",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x10, 7, 1,
},
{
"psu_alert_1_l_int_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x11, 0, 1,
},
{
"psu_alert_2_l_int_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x11, 1, 1,
},
{
"psu_alert_1_r_int_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x11, 2, 1,
},
{
"psu_alert_2_r_int_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x11, 3, 1,
},
{
"scm_present_int",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x12, 3, 1,
},
{
"psu_prnst_1_int_n",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x12, 4, 1,
},
{
"psu_prnst_2_int_n",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x12, 5, 1,
},
{
"psu_prnst_3_int_n",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x12, 6, 1,
},
{
"psu_prnst_4_int_n",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x12, 7, 1,
},
{
"lm75b_1_int_n",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x13, 0, 1,
},
{
"lm75b_2_int_n",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x13, 1, 1,
},
{
"lm75b_3_int_n",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x13, 2, 1,
},
{
"nvme_i2c_alert_int",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x13, 4, 1,
},
{
"pwrgd_pch_pwrok_int",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x13, 5, 1,
},
{
"scm_smb_alrt_n_int",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x13, 6, 1,
},
{
"scm_pwrok_int",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x13, 7, 1,
},
{
"psu_pwrok_1_int",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x14, 0, 1,
},
{
"psu_pwrok_2_int",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x14, 1, 1,
},
{
"psu_acok_1_int",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x14, 2, 1,
},
{
"psu_acok_2_int",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x14, 3, 1,
},
{
"fan1_alarm_int",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x14, 4, 1,
},
{
"fan2_alarm_int",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x14, 5, 1,
},
{
"psu_acok_3_int",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x14, 6, 1,
},
{
"psu_acok_4_int",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x14, 7, 1,
},
{
"pim1_i2c_mux_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x15, 0, 1,
},
{
"pim2_i2c_mux_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x15, 1, 1,
},
{
"pim3_i2c_mux_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x15, 2, 1,
},
{
"pim4_i2c_mux_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x15, 3, 1,
},
{
"pim5_i2c_mux_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x15, 4, 1,
},
{
"pim6_i2c_mux_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x15, 5, 1,
},
{
"pim7_i2c_mux_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x15, 6, 1,
},
{
"pim8_i2c_mux_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x15, 7, 1,
},
{
"pim1_pca9534_pwr",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x16, 0, 1,
},
{
"pim2_pca9534_pwr",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x16, 1, 1,
},
{
"pim3_pca9534_pwr",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x16, 2, 1,
},
{
"pim4_pca9534_pwr",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x16, 3, 1,
},
{
"pim5_pca9534_pwr",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x16, 4, 1,
},
{
"pim6_pca9534_pwr",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x16, 5, 1,
},
{
"pim7_pca9534_pwr",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x16, 6, 1,
},
{
"pim8_pca9534_pwr",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x16, 7, 1,
},
{
"pim1_smb_pg",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x17, 0, 1,
},
{
"pim2_smb_pg",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x17, 1, 1,
},
{
"pim3_smb_pg",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x17, 2, 1,
},
{
"pim4_smb_pg",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x17, 3, 1,
},
{
"pim5_smb_pg",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x17, 4, 1,
},
{
"pim6_smb_pg",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x17, 5, 1,
},
{
"pim7_smb_pg",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x17, 6, 1,
},
{
"pim8_smb_pg",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x17, 7, 1,
},
{
"pim1_hw_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x18, 0, 1,
},
{
"pim2_hw_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x18, 1, 1,
},
{
"pim3_hw_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x18, 2, 1,
},
{
"pim4_hw_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x18, 3, 1,
},
{
"pim5_hw_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x18, 4, 1,
},
{
"pim6_hw_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x18, 5, 1,
},
{
"pim7_hw_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x18, 6, 1,
},
{
"pim8_hw_rst_l",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x18, 7, 1,
},
{
"syscpld_si5391b_oe_n",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x19, 0, 1,
},
{
"th4_sys_rst_n",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x19, 1, 1,
},
{
"th4_pcie_perst_n",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x19, 2, 1,
},
{
"syscpld_si53108_oe_0_n",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x19, 3, 1,
},
{
"syscpld_pm40028_rst_n",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x19, 4, 1,
},
{
"psu_alert_1_l_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x20, 0, 1,
},
{
"psu_alert_2_l_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x20, 1, 1,
},
{
"psu_alert_3_l_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x20, 2, 1,
},
{
"psu_alert_4_l_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x20, 3, 1,
},
{
"psu_prnst_1_N_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x21, 4, 1,
},
{
"psu_prnst_2_N_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x21, 5, 1,
},
{
"psu_prnst_3_N_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x21, 6, 1,
},
{
"psu_prnst_4_N_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x21, 7, 1,
},
{
"lm75b_1_int_N_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x22, 0, 1,
},
{
"lm75b_2_int_N_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x22, 1, 1,
},
{
"lm75b_3_int_N_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x22, 2, 1,
},
{
"nvme_i2c_alert_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x22, 4, 1,
},
{
"pwrgd_pch_pwrok_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x22, 5, 1,
},
{
"scm_smb_alrt_N_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x22, 6, 1,
},
{
"scm_pwrok_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x22, 7, 1,
},
{
"psu_pwrok_L_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x23, 0, 1,
},
{
"psu_pwrok_R_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x22, 1, 1,
},
{
"psu_acok_1_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x23, 2, 1,
},
{
"psu_acok_2_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x23, 3, 1,
},
{
"fan1_alarm_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x23, 4, 1,
},
{
"fan2_alarm_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x23, 5, 1,
},
{
"psu_acok_3_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x23, 6, 1,
},
{
"psu_acok_4_mask",
cpld_cpu_blk_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x23, 7, 1,
},
{
"syscpld_a_si53108_oe_0_N",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x30, 0, 1,
},
{
"syscpld_a_si53108_oe_1_N",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x30, 1, 1,
},
{
"syscpld_a_si53108_oe_2_N",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x30, 2, 1,
},
{
"syscpld_a_si53108_oe_3_N",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x30, 3, 1,
},
{
"syscpld_a_si53108_oe_4_N",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x30, 4, 1,
},
{
"syscpld_a_si53108_oe_5_N",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x30, 5, 1,
},
{
"syscpld_a_si53108_oe_6_N",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x30, 6, 1,
},
{
"psu_alert_1_L_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x31, 0, 1,
},
{
"psu_alert_2_L_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x31, 1, 1,
},
{
"psu_alert_3_L_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x31, 2, 1,
},
{
"psu_alert_4_L_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x31, 3, 1,
},
{
"debugcard_present",
"1: Present\n"
"0: Not present",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x32, 0, 1,
},
{
"scm_present",
present_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x32, 3, 1,
},
{
"psu_prnst_1_N_status",
present_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x32, 4, 1,
},
{
"psu_prnst_2_N_status",
present_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x32, 5, 1,
},
{
"psu_prnst_3_N_status",
present_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x32, 6, 1,
},
{
"psu_prnst_4_N_status",
present_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x32, 7, 1,
},
{
"lm75b_1_int_N_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x33, 0, 1,
},
{
"lm75b_2_int_N_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x33, 1, 1,
},
{
"lm75b_3_int_N_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x33, 2, 1,
},
{
"nvme_i2c_alert_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x33, 4, 1,
},
{
"pwrgd_pch_alert_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x33, 5, 1,
},
{
"scm_smb_alrt_N_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x33, 6, 1,
},
{
"scm_pwrok_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x33, 7, 1,
},
{
"psu_pwrok_L_int_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x34, 0, 1,
},
{
"psu_pwrok_R_int_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x34, 1, 1,
},
{
"psu_acok_1_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x34, 2, 1,
},
{
"psu_acok_2_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x34, 3, 1,
},
{
"fan1_alarm_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x34, 4, 1,
},
{
"fan2_alarm_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x34, 5, 1,
},
{
"psu_acok_3_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x34, 6, 1,
},
{
"psu_acok_4_status",
intr_help_str,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x34, 7, 1,
},
{
"led_red",
"0: All led red off\n"
"1: All led red on",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x39, 0, 1,
},
{
"led_blue",
"0: All led blue off\n"
"1: All led blue on",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x39, 1, 1,
},
{
"led_green",
"0: All led green off\n"
"1: All led green on",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x39, 2, 1,
},
{
"uart_selection",
"00: USB debug UART connect to BMC UART-2\n"
"01: USB debug UART connect to COMe's UART",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x3a, 0, 2,
},
{
"debug_uart_selection",
"00: Tomahawk UART-0\n"
"01: Tomahawk UART-2\n"
"10: Tomahawk UART-3\n"
"11: reserved",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x3a, 6, 2,
},
{
"cpld_pm40028_spi_hold_N",
"PM40028 SPI HOLD",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x46, 0, 1,
},
{
"th4_qspi_hold_N",
"TH4_QSPI HOLD",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x46, 1, 1,
},
{
"cpld_th4_qspi_hold_N",
"56990 SPI HOLD",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x46, 2, 1,
},
{
"cpld_pm40028_spi_wp_N",
"PM40028 SPI WP",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x46, 3, 1,
},
{
"th4_qspi_wp_N",
"TH4_QSPI WP",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x46, 4, 1,
},
{
"cpld_th4_qspi_wp_N",
"56990 SPI WP",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x46, 5, 1,
},
{
"bmc_bios_wp_N",
"COMe SPI WP",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x46, 6, 1,
},
{
"cpld_fpga_spi_wp_N",
"IOB FPGA SPI WP",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x46, 7, 1,
},
{
"fpga_init_N",
"0: don't finish loading DOM FPGA image\n"
"1: finsh loading DOM FPGA image",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x47, 0, 1,
},
{
"fpga_program_N",
"0: don't finish loading DOM FPGA image\n"
"1: finsh loading DOM FPGA image",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x47, 1, 1,
},
{
"fpga_done",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x47, 2, 1,
},
{
"spi1_sel",
"00h: BMC SPI1 Select the bcm56990 Flash.\n"
"01h: BMC Select the IOB FPGA Flash.\n"
"02h: BMC Select the PM40028 Flash.\n"
"03h: BMC Select the COMe Flash.\n"
"Others: Reserved",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x48, 0, 3,
},
{
"spi2_sel",
"00h: BMC SPI2 Select the EEPROM Flash.\n"
"01h: BMC Select the BCM5387 Flash.\n"
"Others: Reserved",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x49, 0, 3,
},
{
"fpga1_resered_1",
"FPGA_CPLD input value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x50, 0, 1,
},
{
"fpga1_resered_2",
"FPGA_CPLD input value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x50, 1, 1,
},
{
"fpga1_resered_3",
"FPGA_CPLD input value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x50, 2, 1,
},
{
"fpga1_resered_4",
"FPGA_CPLD input value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x50, 3, 1,
},
{
"fpga2_resered_1",
"FPGA_CPLD input value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x50, 4, 1,
},
{
"fpga2_resered_2",
"FPGA_CPLD input value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x50, 5, 1,
},
{
"fpga2_resered_3",
"FPGA_CPLD input value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x50, 6, 1,
},
{
"fpga2_resered_4",
"FPGA_CPLD input value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x50, 7, 1,
},
{
"fpga1_resered_1_output",
"FPGA_CPLD output value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x51, 0, 1,
},
{
"fpga1_resered_2_output",
"FPGA_CPLD output value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x51, 1, 1,
},
{
"fpga1_resered_3_output",
"FPGA_CPLD output value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x51, 2, 1,
},
{
"fpga1_resered_4_output",
"FPGA_CPLD output value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x51, 3, 1,
},
{
"fpga2_resered_1_output",
"FPGA_CPLD output value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x51, 4, 1,
},
{
"fpga2_resered_2_output",
"FPGA_CPLD output value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x51, 5, 1,
},
{
"fpga2_resered_3_output",
"FPGA_CPLD output value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x51, 6, 1,
},
{
"fpga2_resered_4_output",
"FPGA_CPLD output value",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x51, 7, 1,
},
{
"fpga1_resered_1_en",
"0: Output disable\n"
"1: Output enable",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x52, 0, 1,
},
{
"fpga1_resered_2_en",
"0: Output disable\n"
"1: Output enable",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x52, 1, 1,
},
{
"fpga1_resered_3_en",
"0: Output disable\n"
"1: Output enable",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x52, 2, 1,
},
{
"fpga1_resered_4_en",
"0: Output disable\n"
"1: Output enable",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x52, 3, 1,
},
{
"fpga2_resered_1_en",
"0: Output disable\n"
"1: Output enable",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x52, 4, 1,
},
{
"fpga2_resered_2_en",
"0: Output disable\n"
"1: Output enable",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x52, 5, 1,
},
{
"fpga2_resered_3_en",
"0: Output disable\n"
"1: Output enable",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x52, 6, 1,
},
{
"fpga2_resered_4_en",
"0: Output disable\n"
"1: Output enable",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x52, 7, 1,
},
{
"pim1_ready",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x53, 0, 1,
},
{
"pim2_ready",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x53, 1, 1,
},
{
"pim3_ready",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x53, 2, 1,
},
{
"pim4_ready",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x53, 3, 1,
},
{
"pim5_ready",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x53, 4, 1,
},
{
"pim6_ready",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x53, 5, 1,
},
{
"pim7_ready",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x53, 6, 1,
},
{
"pim8_ready",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x53, 7, 1,
},
{
"pim1_int_L",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x54, 0, 1,
},
{
"pim2_int_L",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x54, 1, 1,
},
{
"pim3_int_L",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x54, 2, 1,
},
{
"pim4_int_L",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x54, 3, 1,
},
{
"pim5_int_L",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x54, 4, 1,
},
{
"pim6_int_L",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x54, 5, 1,
},
{
"pim7_int_L",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x54, 6, 1,
},
{
"pim8_int_L",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x54, 7, 1,
},
{
"pim1_present_L",
"0: Present \n"
"1: Not Present",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x55, 0, 1,
},
{
"pim2_present_L",
"0: Present \n"
"1: Not Present",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x55, 1, 1,
},
{
"pim3_present_L",
"0: Present \n"
"1: Not Present",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x55, 2, 1,
},
{
"pim4_present_L",
"0: Present \n"
"1: Not Present",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x55, 3, 1,
},
{
"pim5_present_L",
"0: Present \n"
"1: Not Present",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x55, 4, 1,
},
{
"pim6_present_L",
"0: Present \n"
"1: Not Present",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x55, 5, 1,
},
{
"pim7_present_L",
"0: Present \n"
"1: Not Present",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x55, 6, 1,
},
{
"pim8_present_L",
"0: Present \n"
"1: Not Present",
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x55, 7, 1,
},
{
"th4_avs0",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x56, 0, 1,
},
{
"th4_avs1",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x56, 1, 1,
},
{
"th4_avs2",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x56, 2, 1,
},
{
"th4_avs3",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x56, 3, 1,
},
{
"th4_avs4",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x56, 4, 1,
},
{
"th4_avs5",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x56, 5, 1,
},
{
"th4_avs6",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x56, 6, 1,
},
{
"th4_avs7",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x56, 7, 1,
},
{
"pm40028_gpio_6",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x57, 0, 1,
},
{
"pm40028_gpio_8_r",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x57, 1, 1,
},
{
"ucd90160a_gpi4_r",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x57, 2, 1,
},
{
"ucd90160a_gpi3_r",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x57, 3, 1,
},
{
"ucd90160a_gpio20",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x57, 4, 1,
},
{
"ucd90160a_gpio19",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x57, 5, 1,
},
{
"ucd90160a_gpio17",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x57, 6, 1,
},
{
"ucd90160A_alert_N",
NULL,
I2C_DEV_ATTR_SHOW_DEFAULT,
NULL,
0x57, 7, 1,
},
{
"th4_read_N",
"0: Disable TH4 I2C access\n"
"1: Enable TH4 I2C access",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0x59, 0, 1,
},
{
"upgrade_run",
"0: No upgrade\n"
"1: Start the upgrade",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0xa0, 0, 1,
},
{
"upgrade_data",
"UPGRADE DATA",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0xa1, 0, 8,
},
{
"almost_fifo_empty",
"0: No upgrade data fifo almost empty\n"
"1: Upgrade data fifo almost empty",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0xa2, 0, 1,
},
{
"fifo_full",
"0: No upgrade data fifo full\n"
"1: Upgrade data fifo full",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0xa2, 1, 1,
},
{
"fifo_empty",
"0: No upgrade data fifo empty\n"
"1: Upgrade data fifo empty",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0xa2, 2, 1,
},
{
"almost_fifo_full",
"0: No upgrade data fifo almost full\n"
"1: Upgrade data fifo almost full",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0xa2, 3, 1,
},
{
"done",
"0: No upgrade done\n"
"1: Upgrade done",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0xa2, 4, 1,
},
{
"error",
"0: No upgrade error\n"
"1: Upgrade error",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0xa2, 5, 1,
},
{
"st_pgm_done_flag",
"0: FSM No upgrade done\n"
"1: FSM Upgrade done",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0xa2, 6, 1,
},
{
"upgrade_refresh_r",
"0: No update\n"
"1: Start the upgrade refresh",
I2C_DEV_ATTR_SHOW_DEFAULT,
I2C_DEV_ATTR_STORE_DEFAULT,
0xa3, 0, 1,
}
};
static i2c_dev_data_st smb_syscpld_data;
/*
* SMB SYSCPLD i2c addresses.
*/
static const unsigned short normal_i2c[] = {
0x3e, I2C_CLIENT_END
};
/* SMBCPLD id */
static const struct i2c_device_id smb_syscpld_id[] = {
{ "smb_syscpld", 0 },
{ },
};
MODULE_DEVICE_TABLE(i2c, smb_syscpld_id);
/* Return 0 if detection is successful, -ENODEV otherwise */
static int smb_syscpld_detect(struct i2c_client *client,
struct i2c_board_info *info)
{
/*
* We don't currently do any detection of the SMB SYSCPLD
*/
strlcpy(info->type, "smb_syscpld", I2C_NAME_SIZE);
return 0;
}
static int smb_syscpld_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
int n_attrs = sizeof(smb_syscpld_attr_table) / sizeof(smb_syscpld_attr_table[0]);
return i2c_dev_sysfs_data_init(client, &smb_syscpld_data,
smb_syscpld_attr_table, n_attrs);
}
static int smb_syscpld_remove(struct i2c_client *client)
{
i2c_dev_sysfs_data_clean(client, &smb_syscpld_data);
return 0;
}
static struct i2c_driver smb_syscpld_driver = {
.class = I2C_CLASS_HWMON,
.driver = {
.name = "smb_syscpld",
},
.probe = smb_syscpld_probe,
.remove = smb_syscpld_remove,
.id_table = smb_syscpld_id,
.detect = smb_syscpld_detect,
.address_list = normal_i2c,
};
static int __init smb_syscpld_mod_init(void)
{
return i2c_add_driver(&smb_syscpld_driver);
}
static void __exit smb_syscpld_mod_exit(void)
{
i2c_del_driver(&smb_syscpld_driver);
}
MODULE_AUTHOR("Xiaohua Wang");
MODULE_DESCRIPTION("SMB SYSCPLD Driver");
MODULE_LICENSE("GPL");
module_init(smb_syscpld_mod_init);
module_exit(smb_syscpld_mod_exit);