Merge pull request #551 from jostar-yang/as9716_0419

Add onlp to support 3y power(yesm1300am). Fix LED.
This commit is contained in:
Jeffrey Townsend
2019-04-24 13:12:40 -07:00
committed by GitHub
8 changed files with 37 additions and 20 deletions

View File

@@ -365,6 +365,7 @@ static int accton_i2c_psu_remove(struct i2c_client *client)
*/
static const struct i2c_device_id accton_i2c_psu_id[] = {
{ "acbel_fsh082", 0 },
{ "yesm1300am", 1 },
{}
};
MODULE_DEVICE_TABLE(i2c, accton_i2c_psu_id);

View File

@@ -40,7 +40,7 @@ struct accton_as9716_32d_led_data {
struct mutex update_lock;
char valid; /* != 0 if registers are valid */
unsigned long last_updated; /* In jiffies */
u8 reg_val[1]; /* only 1 register*/
u8 reg_val[2]; /* only 1 register*/
};
static struct accton_as9716_32d_led_data *ledctl = NULL;
@@ -296,7 +296,7 @@ static void accton_as9716_32d_led_loc_set(struct led_classdev *led_cdev,
static enum led_brightness accton_as9716_32d_led_loc_get(struct led_classdev *cdev)
{
accton_as9716_32d_led_update();
return led_reg_val_to_light_mode(LED_TYPE_LOC, ledctl->reg_val[0]);
return led_reg_val_to_light_mode(LED_TYPE_LOC, ledctl->reg_val[1]);
}
static void accton_as9716_32d_led_fan_set(struct led_classdev *led_cdev,
@@ -308,7 +308,7 @@ static void accton_as9716_32d_led_fan_set(struct led_classdev *led_cdev,
static enum led_brightness accton_as9716_32d_led_fan_get(struct led_classdev *cdev)
{
accton_as9716_32d_led_update();
return led_reg_val_to_light_mode(LED_TYPE_FAN, ledctl->reg_val[0]);
return led_reg_val_to_light_mode(LED_TYPE_FAN, ledctl->reg_val[1]);
}
static void accton_as9716_32d_led_psu1_set(struct led_classdev *led_cdev,
@@ -320,7 +320,7 @@ static void accton_as9716_32d_led_psu1_set(struct led_classdev *led_cdev,
static enum led_brightness accton_as9716_32d_led_psu1_get(struct led_classdev *cdev)
{
accton_as9716_32d_led_update();
return led_reg_val_to_light_mode(LED_TYPE_PSU1, ledctl->reg_val[0]);
return led_reg_val_to_light_mode(LED_TYPE_PSU1, ledctl->reg_val[1]);
}
static void accton_as9716_32d_led_psu2_set(struct led_classdev *led_cdev,
@@ -332,7 +332,7 @@ static void accton_as9716_32d_led_psu2_set(struct led_classdev *led_cdev,
static enum led_brightness accton_as9716_32d_led_psu2_get(struct led_classdev *cdev)
{
accton_as9716_32d_led_update();
return led_reg_val_to_light_mode(LED_TYPE_PSU2, ledctl->reg_val[0]);
return led_reg_val_to_light_mode(LED_TYPE_PSU2, ledctl->reg_val[1]);
}
static struct led_classdev accton_as9716_32d_leds[] = {

View File

@@ -177,8 +177,6 @@ static int onlp_to_driver_led_mode(enum onlp_led_id id, onlp_led_mode_t onlp_led
int
onlp_ledi_init(void)
{
onlp_ledi_mode_set(ONLP_LED_ID_CREATE(LED_DIAG), ONLP_LED_MODE_OFF);
onlp_ledi_mode_set(ONLP_LED_ID_CREATE(LED_LOC), ONLP_LED_MODE_OFF);
return ONLP_STATUS_OK;
}

View File

@@ -90,7 +90,7 @@ int onlp_file_read_string(char *filename, char *buffer, int buf_size, int data_l
return ret;
}
#define I2C_PSU_MODEL_NAME_LEN 9
#define I2C_PSU_MODEL_NAME_LEN 10
#define I2C_PSU_FAN_DIR_LEN 3
psu_type_t get_psu_type(int id, char* modelname, int modelname_len)
@@ -107,13 +107,21 @@ psu_type_t get_psu_type(int id, char* modelname, int modelname_len)
return PSU_TYPE_UNKNOWN;
}
if (!strncmp(model_name, "FSH082", strlen("FSH082")))
{
if (modelname)
if (!strncmp(model_name, "FSH082", strlen("FSH082")))
{
if (modelname)
strncpy(modelname, model_name, strlen("FSH082")<(modelname_len-1)?strlen("FSH082"):(modelname_len-1));
return PSU_TYPE_ACBEL;
}
if (!strncmp(model_name, "YESM1300AM", strlen("YESM1300AM")))
{
if (modelname)
strncpy(modelname, model_name, strlen("YESM1300AM")<(modelname_len-1)?strlen("YESM1300AM"):(modelname_len-1));
return PSU_TYPE_YESM1300;
}
if (!strncmp(model_name, "YM-2651Y", strlen("YM-2651Y")))
{
if (modelname)

View File

@@ -71,6 +71,7 @@ int psu_ym2651y_pmbus_info_set(int id, char *node, int value);
typedef enum psu_type {
PSU_TYPE_UNKNOWN,
PSU_TYPE_ACBEL,
PSU_TYPE_YESM1300,
PSU_TYPE_YM2651Y,
PSU_TYPE_AC_F2B,
PSU_TYPE_AC_B2F

View File

@@ -219,6 +219,7 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info)
switch (psu_type) {
case PSU_TYPE_ACBEL:
case PSU_TYPE_YESM1300:
ret = psu_data_info_get(info);
break;
case PSU_TYPE_YM2651Y:

View File

@@ -27,6 +27,7 @@
#include <fcntl.h>
#include <limits.h>
#include <onlplib/i2c.h>
#include <onlp/platformi/sysi.h>
#include <onlp/platformi/ledi.h>
#include <onlp/platformi/thermali.h>
@@ -69,18 +70,26 @@ onlp_sysi_platform_get(void)
int
onlp_sysi_onie_data_get(uint8_t** data, int* size)
{
int ret = ONLP_STATUS_OK;
int i = 0;
uint8_t* rdata = aim_zmalloc(256);
if(onlp_file_read(rdata, 256, size, IDPROM_PATH) == ONLP_STATUS_OK) {
if(*size == 256) {
*data = rdata;
return ONLP_STATUS_OK;
for (i = 0; i < 128; i++) {
ret = onlp_i2c_readw(0, 0x56, i*2, ONLP_I2C_F_FORCE);
if (ret < 0) {
aim_free(rdata);
*size = 0;
return ret;
}
rdata[i*2] = ret & 0xff;
rdata[i*2+1] = (ret >> 8) & 0xff;
}
aim_free(rdata);
*size = 0;
return ONLP_STATUS_E_INTERNAL;
*size = 256;
*data = rdata;
return ONLP_STATUS_OK;
}
int

View File

@@ -74,5 +74,4 @@ class OnlPlatform_x86_64_accton_as9716_32d_r0(OnlPlatformAccton,
subprocess.call('echo port%d > /sys/bus/i2c/devices/%d-0050/port_name' % (port, port+24), shell=True)
self.new_i2c_device('24c02', 0x56, 0)
return True