Merge pull request #341 from cytsai0409/master

[ingrasys s9100] platform driver update
This commit is contained in:
Jeffrey Townsend
2018-04-04 09:18:40 -07:00
committed by GitHub
7 changed files with 365 additions and 34 deletions

View File

@@ -25,6 +25,7 @@
#include <onlp/platformi/fani.h>
#include "x86_64_ingrasys_s9100_int.h"
#include <onlplib/file.h>
#include <onlplib/i2c.h>
#include "platform_lib.h"
onlp_fan_info_t fan_info[] = {
@@ -111,12 +112,67 @@ onlp_fani_init(void)
return ONLP_STATUS_OK;
}
/* get fan present status*/
int sys_fan_present_get(onlp_fan_info_t* info, int id)
{
int rv, fan_presence, i2c_bus, offset, fan_reg_mask;
/* get fan presence*/
i2c_bus = I2C_BUS_9;
switch (id)
{
case FAN_ID_FAN1:
case FAN_ID_FAN2:
offset = 0;
fan_reg_mask = FAN_1_2_PRESENT_MASK;
break;
case FAN_ID_FAN3:
case FAN_ID_FAN4:
offset = 0;
fan_reg_mask = FAN_3_4_PRESENT_MASK;
break;
case FAN_ID_FAN5:
case FAN_ID_FAN6:
offset = 1;
fan_reg_mask = FAN_5_6_PRESENT_MASK;
break;
case FAN_ID_FAN7:
case FAN_ID_FAN8:
offset = 1;
fan_reg_mask = FAN_7_8_PRESENT_MASK;
break;
default:
return ONLP_STATUS_E_INVALID;
}
rv = onlp_i2c_readb(i2c_bus, FAN_REG, offset, ONLP_I2C_F_FORCE);
if (rv < 0) {
return ONLP_STATUS_E_INTERNAL;
}
fan_presence = (rv & fan_reg_mask) ? 0 : 1;
if (!fan_presence) {
info->status &= ~ONLP_FAN_STATUS_PRESENT;
} else {
info->status |= ONLP_FAN_STATUS_PRESENT;
}
return ONLP_STATUS_OK;
}
int
sys_fan_info_get(onlp_fan_info_t* info, int id)
{
int rv, fan_status, fan_rpm, perc_val, percentage;
int max_fan_speed = 16000;
fan_status = 0;
fan_rpm = 0;
rv = sys_fan_present_get(info, id);
if (rv < 0) {
return ONLP_STATUS_E_INTERNAL;
}
rv = onlp_file_read_int(&fan_status, SYS_FAN_PREFIX "fan%d_alarm", id);
if (rv < 0) {
@@ -157,21 +213,8 @@ sys_fan_info_get(onlp_fan_info_t* info, int id)
return ONLP_STATUS_E_INTERNAL;
}
/*
Get fan speed, converting driver value to percnet.
Value 128 is 50%.
Value 200 is 80%.
Value 255 is 100%.
*/
if (perc_val == 255) {
percentage = 100;
} else if (perc_val == 200) {
percentage = 80;
} else if (perc_val == 128) {
percentage = 50;
} else {
return ONLP_STATUS_E_INTERNAL;
}
percentage = (info->rpm*100)/max_fan_speed;
info->percentage = percentage;
return ONLP_STATUS_OK;
@@ -280,4 +323,4 @@ onlp_fani_info_get(onlp_oid_t id, onlp_fan_info_t* rv)
return rc;
}

View File

@@ -55,9 +55,36 @@ static onlp_led_info_t led_info[] =
{ LED_OID_PSU2, "Chassis LED 4 (PSU2 LED)", 0 },
ONLP_LED_STATUS_PRESENT,
ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_ORANGE | ONLP_LED_CAPS_GREEN | ONLP_LED_CAPS_AUTO,
},
{
{ LED_OID_FAN_TRAY1, "Rear LED 1 (FAN TRAY1 LED)", 0 },
ONLP_LED_STATUS_PRESENT,
ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_ORANGE |
ONLP_LED_CAPS_GREEN | ONLP_LED_CAPS_AUTO,
},
{
{ LED_OID_FAN_TRAY2, "Rear LED 2 (FAN TRAY2 LED)", 0 },
ONLP_LED_STATUS_PRESENT,
ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_ORANGE |
ONLP_LED_CAPS_GREEN | ONLP_LED_CAPS_AUTO,
},
{
{ LED_OID_FAN_TRAY3, "Rear LED 3 (FAN TRAY3 LED)", 0 },
ONLP_LED_STATUS_PRESENT,
ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_ORANGE |
ONLP_LED_CAPS_GREEN | ONLP_LED_CAPS_AUTO,
},
{
{ LED_OID_FAN_TRAY4, "Rear LED 4 (FAN TRAY4 LED)", 0 },
ONLP_LED_STATUS_PRESENT,
ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_ORANGE |
ONLP_LED_CAPS_GREEN | ONLP_LED_CAPS_AUTO,
}
};
extern int sys_fan_info_get(onlp_fan_info_t* info, int id);
/*
* This function will be called prior to any other onlp_ledi_* functions.
*/
@@ -70,13 +97,56 @@ onlp_ledi_init(void)
int
onlp_ledi_info_get(onlp_oid_t id, onlp_led_info_t* info)
{
int led_id;
int led_id, pw_exist, pw_good, rc, psu_mask, fan_id;
onlp_fan_info_t fan_info;
memset(&fan_info, 0, sizeof(onlp_fan_info_t));
led_id = ONLP_OID_ID_GET(id);
*info = led_info[led_id];
info->status |= ONLP_LED_STATUS_ON;
info->mode |= ONLP_LED_MODE_ON;
if (id == LED_OID_PSU1 || id == LED_OID_PSU2) {
if (id == LED_OID_PSU1) {
psu_mask = PSU1_MUX_MASK;
} else {
psu_mask = PSU2_MUX_MASK;
}
/* check psu status */
if ((rc = psu_present_get(&pw_exist, I2C_BUS_0, psu_mask)) != ONLP_STATUS_OK) {
return ONLP_STATUS_E_INTERNAL;
}
if ((rc = psu_pwgood_get(&pw_good, I2C_BUS_0, psu_mask)) != ONLP_STATUS_OK) {
return ONLP_STATUS_E_INTERNAL;
}
/* psu not present */
if (pw_exist != PSU_STATUS_PRESENT) {
info->status &= ~ONLP_LED_STATUS_ON;
info->mode = ONLP_LED_MODE_OFF;
} else if (pw_good != PSU_STATUS_POWER_GOOD) {
info->status |= ONLP_LED_STATUS_ON;
info->mode |= ONLP_LED_MODE_ORANGE;
} else {
info->status |= ONLP_LED_STATUS_ON;
info->mode |= ONLP_LED_MODE_GREEN;
}
} else if (id == LED_OID_FAN) {
info->status |= ONLP_LED_STATUS_ON;
info->mode |= ONLP_LED_MODE_GREEN;
for (fan_id=FAN_ID_FAN1; fan_id<=FAN_ID_FAN8; ++fan_id) {
rc = sys_fan_info_get(&fan_info, fan_id);
if (rc != ONLP_STATUS_OK || fan_info.status & ONLP_FAN_STATUS_FAILED) {
info->mode &= ~ONLP_LED_MODE_GREEN;
info->mode |= ONLP_LED_MODE_ORANGE;
break;
}
}
} else if (id == LED_OID_SYSTEM) {
info->status |= ONLP_LED_STATUS_ON;
info->mode |= ONLP_LED_MODE_GREEN;
} else {
info->status |= ONLP_LED_STATUS_ON;
info->mode |= ONLP_LED_MODE_ON;
}
return ONLP_STATUS_OK;
}
@@ -125,6 +195,12 @@ onlp_ledi_mode_set(onlp_oid_t id, onlp_led_mode_t mode)
case LED_PSU2_LED:
rc = psu2_led_set(mode);
break;
case LED_FAN_TRAY1:
case LED_FAN_TRAY2:
case LED_FAN_TRAY3:
case LED_FAN_TRAY4:
rc = fan_tray_led_set(id, mode);
break;
default:
return ONLP_STATUS_E_INTERNAL;
break;

View File

@@ -70,8 +70,11 @@ psu_thermal_get(onlp_thermal_info_t* info, int thermal_id)
if (pw_exist != PSU_STATUS_PRESENT) {
info->mcelsius = 0;
info->status &= ~ONLP_THERMAL_STATUS_PRESENT;
return ONLP_STATUS_OK;
}
} else {
info->status |= ONLP_THERMAL_STATUS_PRESENT;
}
if ((rc = psu_pwgood_get(&pw_good, I2C_BUS_0, psu_mask)) != ONLP_STATUS_OK) {
return ONLP_STATUS_E_INTERNAL;
@@ -126,7 +129,10 @@ psu_fan_info_get(onlp_fan_info_t* info, int id)
if (pw_exist != PSU_STATUS_PRESENT) {
info->rpm = 0;
info->status &= ~ONLP_FAN_STATUS_PRESENT;
return ONLP_STATUS_OK;
} else {
info->status |= ONLP_FAN_STATUS_PRESENT;
}
if ((rc = psu_pwgood_get(&pw_good, I2C_BUS_0, psu_mask)) != ONLP_STATUS_OK) {
@@ -472,6 +478,10 @@ psu1_led_set(onlp_led_mode_t mode)
rc = onlp_i2c_modifyb(I2C_BUS_9, LED_REG, LED_OFFSET,
LED_PSU1_AND_MASK, LED_PSU1_YMASK,
ONLP_I2C_F_FORCE);
} else if(mode == ONLP_LED_MODE_OFF) {
rc = onlp_i2c_modifyb(I2C_BUS_9, LED_REG, LED_OFFSET,
LED_PSU1_AND_MASK, LED_PSU1_OFFMASK,
ONLP_I2C_F_FORCE);
} else {
return ONLP_STATUS_E_INTERNAL;
}
@@ -495,6 +505,10 @@ psu2_led_set(onlp_led_mode_t mode)
rc = onlp_i2c_modifyb(I2C_BUS_9, LED_REG, LED_OFFSET,
LED_PSU2_AND_MASK, LED_PSU2_YMASK,
ONLP_I2C_F_FORCE);
} else if(mode == ONLP_LED_MODE_OFF) {
rc = onlp_i2c_modifyb(I2C_BUS_9, LED_REG, LED_OFFSET,
LED_PSU2_AND_MASK, LED_PSU2_OFFMASK,
ONLP_I2C_F_FORCE);
} else {
return ONLP_STATUS_E_INTERNAL;
}
@@ -507,6 +521,60 @@ psu2_led_set(onlp_led_mode_t mode)
return ONLP_STATUS_OK;
}
int
fan_tray_led_set(onlp_oid_t id, onlp_led_mode_t mode)
{
int rc, temp_id;
int fan_tray_id, offset;
char cmd[256];
memset(cmd, 0, sizeof(cmd));
temp_id = ONLP_OID_ID_GET(id);
switch (temp_id) {
case 5:
fan_tray_id = 1;
offset = 2;
break;
case 6:
fan_tray_id = 2;
offset = 2;
break;
case 7:
fan_tray_id = 3;
offset = 3;
break;
case 8:
fan_tray_id = 4;
offset = 3;
break;
default:
return ONLP_STATUS_E_INTERNAL;
break;
}
if (fan_tray_id == 1 || fan_tray_id == 3) {
if (mode == ONLP_LED_MODE_GREEN) {
rc = onlp_i2c_modifyb(I2C_BUS_9, FAN_REG, offset, 0xFC,
0x01, ONLP_I2C_F_FORCE);
} else if (mode == ONLP_LED_MODE_ORANGE) {
rc = onlp_i2c_modifyb(I2C_BUS_9, FAN_REG, offset, 0xFC,
0x02, ONLP_I2C_F_FORCE);
}
} else if (fan_tray_id == 2 || fan_tray_id == 4) {
if (mode == ONLP_LED_MODE_GREEN) {
rc = onlp_i2c_modifyb(I2C_BUS_9, FAN_REG, offset, 0xCF,
0x10, ONLP_I2C_F_FORCE);
} else if (mode == ONLP_LED_MODE_ORANGE) {
rc = onlp_i2c_modifyb(I2C_BUS_9, FAN_REG, offset, 0xCF,
0x20, ONLP_I2C_F_FORCE);
}
}
if (rc < 0) {
return ONLP_STATUS_E_INTERNAL;
}
return ONLP_STATUS_OK;
}
int
sysi_platform_info_get(onlp_platform_info_t* pi)
{

View File

@@ -111,9 +111,11 @@
#define LED_PSU1_AND_MASK 0xFC
#define LED_PSU1_GMASK 0x01
#define LED_PSU1_YMASK 0x02
#define LED_PSU1_OFFMASK 0x03
#define LED_PSU2_AND_MASK 0xCF
#define LED_PSU2_GMASK 0x10
#define LED_PSU2_YMASK 0x20
#define LED_PSU2_OFFMASK 0x30
/* SYS */
#define CPLD_REG 0x33
@@ -125,12 +127,23 @@
#define QSFP_PRES_OFFSET1 0x00
#define QSFP_PRES_OFFSET2 0x01
/* FAN */
#define FAN_REG 0x20
#define FAN_1_2_PRESENT_MASK 0x04
#define FAN_3_4_PRESENT_MASK 0x40
#define FAN_5_6_PRESENT_MASK 0x04
#define FAN_7_8_PRESENT_MASK 0x40
/** led_oid */
typedef enum led_oid_e {
LED_OID_SYSTEM = ONLP_LED_ID_CREATE(1),
LED_OID_FAN = ONLP_LED_ID_CREATE(2),
LED_OID_PSU1 = ONLP_LED_ID_CREATE(3),
LED_OID_PSU2 = ONLP_LED_ID_CREATE(4),
LED_OID_FAN_TRAY1 = ONLP_LED_ID_CREATE(5),
LED_OID_FAN_TRAY2 = ONLP_LED_ID_CREATE(6),
LED_OID_FAN_TRAY3 = ONLP_LED_ID_CREATE(7),
LED_OID_FAN_TRAY4 = ONLP_LED_ID_CREATE(8),
} led_oid_t;
/** led_id */
@@ -139,6 +152,10 @@ typedef enum led_id_e {
LED_FAN_LED = 2,
LED_PSU1_LED = 3,
LED_PSU2_LED = 4,
LED_FAN_TRAY1 = 5,
LED_FAN_TRAY2 = 6,
LED_FAN_TRAY3 = 7,
LED_FAN_TRAY4 = 8,
} led_id_t;
/** Thermal_oid */
@@ -241,6 +258,8 @@ int fan_led_set(onlp_led_mode_t mode);
int system_led_set(onlp_led_mode_t mode);
int fan_tray_led_set(onlp_oid_t id, onlp_led_mode_t mode);
int sysi_platform_info_get(onlp_platform_info_t* pi);
int qsfp_present_get(int port, int *pres_val);

View File

@@ -93,6 +93,8 @@ psu_status_info_get(int id, onlp_psu_info_t *info)
if (pw_good != PSU_STATUS_POWER_GOOD) {
info->status |= ONLP_PSU_STATUS_UNPLUGGED;
return ONLP_STATUS_OK;
} else {
info->status &= ~ONLP_PSU_STATUS_UNPLUGGED;
}
/* Get power eeprom status */
@@ -147,4 +149,4 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info)
return ONLP_STATUS_OK;
}
}

View File

@@ -197,13 +197,18 @@ _EXIT :
int
onlp_sysi_platform_manage_leds(void)
{
int psu1_status, psu2_status, rc, i, tmp_fan_status;
int psu1_status, psu2_status, rc, i;
int fan_tray_id, sum, total = 0;
static int pre_psu1_status = 0, pre_psu2_status = 0, pre_fan_status = 0;
static int pre_fan_tray_status[4] = {0};
onlp_psu_info_t psu_info;
onlp_fan_info_t fan_info;
onlp_led_status_t fan_tray_status[SYS_FAN_NUM];
memset(&psu_info, 0, sizeof(onlp_psu_info_t));
memset(&fan_info, 0, sizeof(onlp_fan_info_t));
memset(&fan_tray_status, 0, sizeof(fan_tray_status));
uint32_t fan_arr[] = { FAN_OID_FAN1,
FAN_OID_FAN2,
FAN_OID_FAN3,
@@ -213,6 +218,7 @@ onlp_sysi_platform_manage_leds(void)
FAN_OID_FAN7,
FAN_OID_FAN8, };
/* PSU LED CTRL */
if ((rc = onlp_psui_info_get(PSU_OID_PSU1, &psu_info)) != ONLP_STATUS_OK) {
goto _EXIT;
@@ -220,7 +226,10 @@ onlp_sysi_platform_manage_leds(void)
psu1_status = psu_info.status;
if (psu1_status != pre_psu1_status) {
if(psu1_status != ONLP_PSU_STATUS_PRESENT) {
if((psu1_status & ONLP_PSU_STATUS_PRESENT) == 0) {
rc = onlp_ledi_mode_set(LED_OID_PSU1, ONLP_LED_MODE_OFF);
}
else if(psu1_status != ONLP_PSU_STATUS_PRESENT) {
rc = onlp_ledi_mode_set(LED_OID_PSU1, ONLP_LED_MODE_ORANGE);
} else {
rc = onlp_ledi_mode_set(LED_OID_PSU1, ONLP_LED_MODE_GREEN);
@@ -238,7 +247,10 @@ onlp_sysi_platform_manage_leds(void)
psu2_status = psu_info.status;
if( psu2_status != pre_psu2_status) {
if(psu2_status != ONLP_PSU_STATUS_PRESENT) {
if((psu2_status & ONLP_PSU_STATUS_PRESENT) == 0) {
rc = onlp_ledi_mode_set(LED_OID_PSU2, ONLP_LED_MODE_OFF);
}
else if(psu2_status != ONLP_PSU_STATUS_PRESENT) {
rc = onlp_ledi_mode_set(LED_OID_PSU2, ONLP_LED_MODE_ORANGE);
} else {
rc = onlp_ledi_mode_set(LED_OID_PSU2, ONLP_LED_MODE_GREEN);
@@ -251,29 +263,65 @@ onlp_sysi_platform_manage_leds(void)
}
/* FAN LED CTRL */
tmp_fan_status = ONLP_LED_STATUS_PRESENT;
for (i=0; i<SYS_FAN_NUM; i++) {
if ((rc = onlp_fani_info_get(fan_arr[i], &fan_info)) != ONLP_STATUS_OK) {
goto _EXIT;
}
/* FAN TRAY LED CTRL */
fan_tray_status[i] = fan_info.status;
if (i%2 == 1) {
sum = fan_tray_status[i-1] + fan_tray_status[i];
total = total + sum;
switch (i) {
case 1:
fan_tray_id = LED_FAN_TRAY1;
break;
case 3:
fan_tray_id = LED_FAN_TRAY2;
break;
case 5:
fan_tray_id = LED_FAN_TRAY3;
break;
case 7:
fan_tray_id = LED_FAN_TRAY4;
break;
}
/* the enum of fan_tray id is start from 5 to 8,
* the "-5" means mapping to array index 0 to 3
*/
if (sum != pre_fan_tray_status[fan_tray_id - 5]) {
if (sum > ONLP_LED_STATUS_FAILED) {
rc = onlp_ledi_mode_set(fan_tray_id, ONLP_LED_MODE_ORANGE);
} else {
rc = onlp_ledi_mode_set(fan_tray_id, ONLP_LED_MODE_GREEN);
}
if(fan_info.status != ONLP_LED_STATUS_PRESENT) {
tmp_fan_status = fan_info.status;
if (rc != ONLP_STATUS_OK) {
goto _EXIT;
}
pre_fan_tray_status[fan_tray_id - 5] = sum;
}
}
}
}
if (tmp_fan_status != pre_fan_status) {
if (tmp_fan_status != ONLP_LED_STATUS_PRESENT) {
rc = onlp_ledi_mode_set(LED_OID_FAN, ONLP_LED_MODE_ORANGE);
} else {
if (total != pre_fan_status) {
if (total == (ONLP_LED_STATUS_PRESENT * 8)) {
rc = onlp_ledi_mode_set(LED_OID_FAN, ONLP_LED_MODE_GREEN);
} else {
rc = onlp_ledi_mode_set(LED_OID_FAN, ONLP_LED_MODE_ORANGE);
}
if (rc != ONLP_STATUS_OK) {
goto _EXIT;
}
pre_fan_status = total;
}
pre_fan_status = fan_info.status;
_EXIT :
return rc;

View File

@@ -365,6 +365,38 @@ class OnlPlatform_x86_64_ingrasys_s9100_r0(OnlPlatformIngrasys):
os.system("echo out > /sys/class/gpio/gpio413/direction")
os.system("echo out > /sys/class/gpio/gpio414/direction")
os.system("echo out > /sys/class/gpio/gpio415/direction")
os.system("echo 1 > /sys/class/gpio/gpio400/active_low")
os.system("echo 1 > /sys/class/gpio/gpio401/active_low")
os.system("echo 1 > /sys/class/gpio/gpio402/active_low")
os.system("echo 1 > /sys/class/gpio/gpio403/active_low")
os.system("echo 1 > /sys/class/gpio/gpio404/active_low")
os.system("echo 1 > /sys/class/gpio/gpio405/active_low")
os.system("echo 1 > /sys/class/gpio/gpio406/active_low")
os.system("echo 1 > /sys/class/gpio/gpio407/active_low")
os.system("echo 1 > /sys/class/gpio/gpio408/active_low")
os.system("echo 1 > /sys/class/gpio/gpio409/active_low")
os.system("echo 1 > /sys/class/gpio/gpio410/active_low")
os.system("echo 1 > /sys/class/gpio/gpio411/active_low")
os.system("echo 1 > /sys/class/gpio/gpio412/active_low")
os.system("echo 1 > /sys/class/gpio/gpio413/active_low")
os.system("echo 1 > /sys/class/gpio/gpio414/active_low")
os.system("echo 1 > /sys/class/gpio/gpio415/active_low")
os.system("echo 0 > /sys/class/gpio/gpio400/value")
os.system("echo 0 > /sys/class/gpio/gpio401/value")
os.system("echo 0 > /sys/class/gpio/gpio402/value")
os.system("echo 0 > /sys/class/gpio/gpio403/value")
os.system("echo 0 > /sys/class/gpio/gpio404/value")
os.system("echo 0 > /sys/class/gpio/gpio405/value")
os.system("echo 0 > /sys/class/gpio/gpio406/value")
os.system("echo 0 > /sys/class/gpio/gpio407/value")
os.system("echo 0 > /sys/class/gpio/gpio408/value")
os.system("echo 0 > /sys/class/gpio/gpio409/value")
os.system("echo 0 > /sys/class/gpio/gpio410/value")
os.system("echo 0 > /sys/class/gpio/gpio411/value")
os.system("echo 0 > /sys/class/gpio/gpio412/value")
os.system("echo 0 > /sys/class/gpio/gpio413/value")
os.system("echo 0 > /sys/class/gpio/gpio414/value")
os.system("echo 0 > /sys/class/gpio/gpio415/value")
# initialize RST Port 16-31
self.new_i2c_device('pca9535', 0x23, 7)
@@ -400,6 +432,38 @@ class OnlPlatform_x86_64_ingrasys_s9100_r0(OnlPlatformIngrasys):
os.system("echo out > /sys/class/gpio/gpio397/direction")
os.system("echo out > /sys/class/gpio/gpio398/direction")
os.system("echo out > /sys/class/gpio/gpio399/direction")
os.system("echo 1 > /sys/class/gpio/gpio384/active_low")
os.system("echo 1 > /sys/class/gpio/gpio385/active_low")
os.system("echo 1 > /sys/class/gpio/gpio386/active_low")
os.system("echo 1 > /sys/class/gpio/gpio387/active_low")
os.system("echo 1 > /sys/class/gpio/gpio388/active_low")
os.system("echo 1 > /sys/class/gpio/gpio389/active_low")
os.system("echo 1 > /sys/class/gpio/gpio390/active_low")
os.system("echo 1 > /sys/class/gpio/gpio391/active_low")
os.system("echo 1 > /sys/class/gpio/gpio392/active_low")
os.system("echo 1 > /sys/class/gpio/gpio393/active_low")
os.system("echo 1 > /sys/class/gpio/gpio394/active_low")
os.system("echo 1 > /sys/class/gpio/gpio395/active_low")
os.system("echo 1 > /sys/class/gpio/gpio396/active_low")
os.system("echo 1 > /sys/class/gpio/gpio397/active_low")
os.system("echo 1 > /sys/class/gpio/gpio398/active_low")
os.system("echo 1 > /sys/class/gpio/gpio399/active_low")
os.system("echo 0 > /sys/class/gpio/gpio384/value")
os.system("echo 0 > /sys/class/gpio/gpio385/value")
os.system("echo 0 > /sys/class/gpio/gpio386/value")
os.system("echo 0 > /sys/class/gpio/gpio387/value")
os.system("echo 0 > /sys/class/gpio/gpio388/value")
os.system("echo 0 > /sys/class/gpio/gpio389/value")
os.system("echo 0 > /sys/class/gpio/gpio390/value")
os.system("echo 0 > /sys/class/gpio/gpio391/value")
os.system("echo 0 > /sys/class/gpio/gpio392/value")
os.system("echo 0 > /sys/class/gpio/gpio393/value")
os.system("echo 0 > /sys/class/gpio/gpio394/value")
os.system("echo 0 > /sys/class/gpio/gpio395/value")
os.system("echo 0 > /sys/class/gpio/gpio396/value")
os.system("echo 0 > /sys/class/gpio/gpio397/value")
os.system("echo 0 > /sys/class/gpio/gpio398/value")
os.system("echo 0 > /sys/class/gpio/gpio399/value")
# initialize MODSEL Port 0-15
self.new_i2c_device('pca9535', 0x24, 7)
@@ -491,6 +555,17 @@ class OnlPlatform_x86_64_ingrasys_s9100_r0(OnlPlatformIngrasys):
os.system("i2cset -m 0x40 -y -r 9 0x22 2 0xFF")
os.system("i2cset -m 0x80 -y -r 9 0x22 2 0x00")
# init CPLD LED_CLR Register (Switch Port LED)
os.system("i2cset -y 0 0x33 0x34 0x10")
# init Fan I/O Exanpler
os.system("i2cset -y -r 9 0x20 4 0x00")
os.system("i2cset -y -r 9 0x20 5 0x00")
os.system("i2cset -y -r 9 0x20 2 0x00")
os.system("i2cset -y -r 9 0x20 3 0x00")
os.system("i2cset -y -r 9 0x20 6 0xCC")
os.system("i2cset -y -r 9 0x20 7 0xCC")
return True