diff --git a/packages/base/any/kernels/modules/ym2651y.c b/packages/base/any/kernels/modules/ym2651y.c index d85e84541c..46efbf245c 100755 --- a/packages/base/any/kernels/modules/ym2651y.c +++ b/packages/base/any/kernels/modules/ym2651y.c @@ -518,7 +518,9 @@ static ssize_t show_vout(struct device *dev, struct device_attribute *da, return show_vout_by_mode(dev, da, buf); } else if ((strncmp(ptr, "DPS-850A", strlen("DPS-850A")) == 0)|| - (strncmp(ptr, "YM-2851J", strlen("YM-2851J")) == 0)) { + (strncmp(ptr, "YM-2851J", strlen("YM-2851J")) == 0) || + (strncmp(ptr, "UPD1501SA-1190G", strlen("UPD1501SA-1190G")) == 0) || + (strncmp(ptr, "UPD1501SA-1290G", strlen("UPD1501SA-1290G")) == 0)) { return show_vout_by_mode(dev, da, buf); } else { diff --git a/packages/platforms/accton/x86-64/as4630-54pe/modules/builds/x86-64-accton-as4630-54pe-psu.c b/packages/platforms/accton/x86-64/as4630-54pe/modules/builds/x86-64-accton-as4630-54pe-psu.c index 73f1e672e5..2147671051 100755 --- a/packages/platforms/accton/x86-64/as4630-54pe/modules/builds/x86-64-accton-as4630-54pe-psu.c +++ b/packages/platforms/accton/x86-64/as4630-54pe/modules/builds/x86-64-accton-as4630-54pe-psu.c @@ -37,6 +37,7 @@ #define MAX_MODEL_NAME 20 #define MAX_SERIAL_NUMBER 19 +static int models_min_offset = 0; static ssize_t show_status(struct device *dev, struct device_attribute *da, char *buf); static ssize_t show_string(struct device *dev, struct device_attribute *da, char *buf); static int as4630_54pe_psu_read_block(struct i2c_client *client, u8 command, u8 *data,int data_len); @@ -68,6 +69,37 @@ enum as4630_54pe_psu_sysfs_attributes { PSU_SERIAL_NUMBER }; +enum psu_type { + PSU_YPEB1200, /* F2B */ + PSU_YPEB1200AM, /* F2B */ + PSU_UP1K21R_1085G, /* F2B */ + UNKNOWN_PSU +}; + +struct model_name_info { + enum psu_type type; + u8 offset; + u8 length; + char* model_name; +}; + +struct model_name_info models[] = { + { PSU_YPEB1200, 0x20, 11, "YPEB1200" }, + { PSU_YPEB1200AM, 0x20, 11, "YPEB1200AM" }, /* Replace YPEB1200-AM to YPEB1200AM */ + { PSU_UP1K21R_1085G, 0x20, 13, "UP1K21R-1085G" }, +}; + +struct serial_number_info { + u8 offset; + u8 length; +}; + +struct serial_number_info serials[] = { + [PSU_YPEB1200] = { 0x35, 17 }, + [PSU_YPEB1200AM] = { 0x35, 18 }, + [PSU_UP1K21R_1085G] = { 0x3B, 9 }, +}; + /* sysfs attributes for hwmon */ static SENSOR_DEVICE_ATTR(psu_present, S_IRUGO, show_status, NULL, PSU_PRESENT); @@ -148,6 +180,18 @@ static const struct attribute_group as4630_54pe_psu_group = { .attrs = as4630_54pe_psu_attributes, }; +static int find_models_min_offset(void) { + int i, min_offset = models[0].offset; + + for(i = 1; i < ARRAY_SIZE(models); i++) { + if(models[i].offset < min_offset) { + min_offset = models[i].offset; + } + } + + return min_offset; +} + static int as4630_54pe_psu_probe(struct i2c_client *client, const struct i2c_device_id *dev_id) { @@ -169,6 +213,7 @@ static int as4630_54pe_psu_probe(struct i2c_client *client, data->valid = 0; data->index = dev_id->driver_data; mutex_init(&data->update_lock); + models_min_offset = find_models_min_offset(); dev_info(&client->dev, "chip found\n"); @@ -266,11 +311,12 @@ static struct as4630_54pe_psu_data *as4630_54pe_psu_update_device(struct device { struct i2c_client *client = to_i2c_client(dev); struct as4630_54pe_psu_data *data = i2c_get_clientdata(client); + char temp_model_name[MAX_MODEL_NAME] = {0}; if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || !data->valid) { int status; - int power_good = 0; + int i, power_good = 0; dev_dbg(&client->dev, "Starting as4630_54pe update\n"); @@ -293,47 +339,83 @@ static struct as4630_54pe_psu_data *as4630_54pe_psu_update_device(struct device power_good = ( (data->status >> 2) & 0x1); if (power_good) { - status = as4630_54pe_psu_read_block(client, 0x20, data->model_name, - ARRAY_SIZE(data->model_name)-1); + enum psu_type type = UNKNOWN_PSU; + + status = as4630_54pe_psu_read_block(client, models_min_offset, + temp_model_name, + ARRAY_SIZE(temp_model_name)); if (status < 0) { - data->model_name[0] = '\0'; dev_dbg(&client->dev, "unable to read model name from (0x%x)\n", client->addr); + goto exit; } - else if(!strncmp(data->model_name, "YPEB1200", strlen("YPEB1200"))) - { - if (data->model_name[9]=='A' && data->model_name[10]=='M') - { - data->model_name[8]='A'; - data->model_name[9]='M'; - data->model_name[strlen("YPEB1200AM")]='\0'; - } - else - data->model_name[strlen("YPEB1200")]='\0'; - } - else - { - data->model_name[ARRAY_SIZE(data->model_name)-1] = '\0'; + + for (i = 0; i < ARRAY_SIZE(models); i++) { + if ((models[i].length+1) > ARRAY_SIZE(data->model_name)) { + dev_dbg(&client->dev, + "invalid models[%d].length(%d), should not exceed the size of data->model_name(%ld)\n", + i, models[i].length, ARRAY_SIZE(data->model_name)); + continue; + } + + snprintf(data->model_name, models[i].length + 1, "%s", + temp_model_name + (models[i].offset - models_min_offset)); + + if(!strncmp(data->model_name, "YPEB1200", strlen("YPEB1200"))) + { + if (data->model_name[9]=='A' && data->model_name[10]=='M') + { + data->model_name[8]='A'; + data->model_name[9]='M'; + data->model_name[strlen("YPEB1200AM")]='\0'; + } + else + data->model_name[strlen("YPEB1200")]='\0'; + } + + /* Determine if the model name is known, if not, read next index */ + if (strcmp(data->model_name, models[i].model_name) == 0) { + type = models[i].type; + break; + } + + data->model_name[0] = '\0'; } - /* Read from offset 0x35 ~ 0x46 (18 bytes) */ - status = as4630_54pe_psu_read_block(client, 0x35,data->serial_number, MAX_SERIAL_NUMBER); - if (status < 0) - { - data->serial_number[0] = '\0'; - dev_dbg(&client->dev, "unable to read model name from (0x%x) offset(0x35)\n", client->addr); + + if (type < ARRAY_SIZE(serials)) { + if ((serials[type].length+1) > ARRAY_SIZE(data->serial_number)) { + dev_dbg(&client->dev, + "invalid serials[%d].length(%d), should not exceed the size of data->serial_number(%ld)\n", + type, serials[type].length, ARRAY_SIZE(data->serial_number)); + goto exit; + } + + memset(data->serial_number, 0, sizeof(data->serial_number)); + status = as4630_54pe_psu_read_block(client, serials[type].offset, + data->serial_number, + serials[type].length); + if (status < 0) { + dev_dbg(&client->dev, + "unable to read serial from (0x%x) offset(0x%02x)\n", + client->addr, serials[type].length); + goto exit; + } + else { + data->serial_number[serials[type].length]= '\0'; + } } - if (!strncmp(data->model_name, "YPEB1200AM", strlen("YPEB1200AM"))) /*for YPEB1200AM, SN length=18*/ - { - data->serial_number[MAX_SERIAL_NUMBER-1]='\0'; + else { + dev_dbg(&client->dev, "invalid PSU type(%d)\n", type); + return data; } - else - data->serial_number[MAX_SERIAL_NUMBER-2]='\0'; - } + data->last_updated = jiffies; data->valid = 1; } +exit: + return data; } diff --git a/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/fani.c b/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/fani.c index e83ddced4b..df1034beb3 100755 --- a/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/fani.c +++ b/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/fani.c @@ -168,7 +168,10 @@ _onlp_get_fan_direction_on_psu(void) continue; } - if (PSU_TYPE_AC_F2B == psu_type) { + if (PSU_TYPE_ACBEL == psu_type || + PSU_TYPE_YM2651Y == psu_type || + PSU_TYPE_YPEB1200A == psu_type || + PSU_TYPE_UP1K21R_1085G == psu_type) { return ONLP_FAN_STATUS_F2B; } else { diff --git a/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.c b/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.c index 5f51e1cc1d..f7a9734b3d 100755 --- a/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.c +++ b/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.c @@ -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 11 +#define I2C_PSU_MODEL_NAME_LEN 14 #define I2C_PSU_FAN_DIR_LEN 3 psu_type_t get_psu_type(int id, char* modelname, int modelname_len) @@ -126,6 +126,13 @@ psu_type_t get_psu_type(int id, char* modelname, int modelname_len) aim_strlcpy(modelname, model_name, (modelname_len>strlen(model_name))?strlen(model_name):modelname_len-1); return PSU_TYPE_YPEB1200A; } + + if (!strncmp(model_name, "UP1K21R-1085G", strlen("UP1K21R-1085G"))) + { + if (modelname) + aim_strlcpy(modelname, model_name, (modelname_len>strlen(model_name))?strlen(model_name):modelname_len-1); + return PSU_TYPE_UP1K21R_1085G; + } return PSU_TYPE_UNKNOWN; } int diff --git a/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.h b/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.h index fe8a92ac0e..92e00387a3 100755 --- a/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.h +++ b/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.h @@ -73,6 +73,7 @@ typedef enum psu_type { PSU_TYPE_ACBEL, PSU_TYPE_YM2651Y, PSU_TYPE_YPEB1200A, + PSU_TYPE_UP1K21R_1085G, PSU_TYPE_AC_F2B, PSU_TYPE_AC_B2F } psu_type_t; diff --git a/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/psui.c b/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/psui.c index 9b08dcba22..f41bbdd721 100755 --- a/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/psui.c +++ b/packages/platforms/accton/x86-64/as4630-54pe/onlp/builds/x86_64_accton_as4630_54pe/module/src/psui.c @@ -222,6 +222,7 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) break; case PSU_TYPE_YM2651Y: case PSU_TYPE_YPEB1200A: + case PSU_TYPE_UP1K21R_1085G: ret = psu_ym2651y_info_get(info); break; case PSU_TYPE_UNKNOWN: /* User insert a unknown PSU or unplugged.*/ diff --git a/packages/platforms/accton/x86-64/as4630-54te/modules/builds/x86-64-accton-as4630-54te-psu.c b/packages/platforms/accton/x86-64/as4630-54te/modules/builds/x86-64-accton-as4630-54te-psu.c index f39985560a..a3744e228f 100644 --- a/packages/platforms/accton/x86-64/as4630-54te/modules/builds/x86-64-accton-as4630-54te-psu.c +++ b/packages/platforms/accton/x86-64/as4630-54te/modules/builds/x86-64-accton-as4630-54te-psu.c @@ -34,12 +34,13 @@ #include #include -#define MAX_MODEL_NAME 13 +#define MAX_MODEL_NAME 15 #define MAX_SERIAL_NUMBER 18 #define IS_POWER_GOOD(id, value) (!!(value >> (6-id*4) & 0x1)) #define IS_PRESENT(id, value) (!(value >> (5-id*4) & 0x1)) +static int models_min_offset = 0; static ssize_t show_status(struct device *dev, struct device_attribute *da, char *buf); static ssize_t show_string(struct device *dev, struct device_attribute *da, @@ -75,6 +76,43 @@ enum as4630_54te_psu_sysfs_attributes { PSU_SERIAL_NUMBER }; +enum psu_type { + PSU_YM_1151D_A02R, /* B2F */ + PSU_YM_1151D_A03R, /* F2B */ + PSU_YM_1151F_A01R, /* F2B */ + PSU_UPD1501SA_1190G, /* F2B */ + PSU_UPD1501SA_1290G, /* B2F */ + UNKNOWN_PSU +}; + +struct model_name_info { + enum psu_type type; + u8 offset; + u8 length; + char* model_name; +}; + +struct model_name_info models[] = { + { PSU_YM_1151D_A02R, 0x20, 13, "YM-1151D-A02R" }, + { PSU_YM_1151D_A03R, 0x20, 13, "YM-1151D-A03R" }, + { PSU_YM_1151F_A01R, 0x20, 13, "YM-1151F-A01R" }, + { PSU_UPD1501SA_1190G, 0x20, 15, "UPD1501SA-1190G" }, + { PSU_UPD1501SA_1290G, 0x20, 15, "UPD1501SA-1290G" }, +}; + +struct serial_number_info { + u8 offset; + u8 length; +}; + +struct serial_number_info serials[] = { + [PSU_YM_1151D_A02R] = { 0x35, 18 }, + [PSU_YM_1151D_A03R] = { 0x2E, 18 }, + [PSU_YM_1151F_A01R] = { 0x2E, 18 }, + [PSU_UPD1501SA_1190G] = { 0x3B, 9 }, + [PSU_UPD1501SA_1290G] = { 0x3B, 9 }, +}; + /* sysfs attributes for hwmon */ static SENSOR_DEVICE_ATTR(psu_present, S_IRUGO, show_status, NULL, PSU_PRESENT); @@ -153,6 +191,18 @@ static const struct attribute_group as4630_54te_psu_group = { .attrs = as4630_54te_psu_attributes, }; +static int find_models_min_offset(void) { + int i, min_offset = models[0].offset; + + for(i = 1; i < ARRAY_SIZE(models); i++) { + if(models[i].offset < min_offset) { + min_offset = models[i].offset; + } + } + + return min_offset; +} + static int as4630_54te_psu_probe(struct i2c_client *client, const struct i2c_device_id *dev_id) { @@ -174,6 +224,7 @@ static int as4630_54te_psu_probe(struct i2c_client *client, data->valid = 0; data->index = dev_id->driver_data; mutex_init(&data->update_lock); + models_min_offset = find_models_min_offset(); dev_info(&client->dev, "chip found\n"); @@ -272,12 +323,12 @@ as4630_54te_psu_data *as4630_54te_psu_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct as4630_54te_psu_data *data = i2c_get_clientdata(client); + char temp_model_name[MAX_MODEL_NAME+1] = {0}; if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || !data->valid) { int status; - u8 serial_offset; - int power_good = 0; + int i, power_good = 0; dev_dbg(&client->dev, "Starting as4630_54te update\n"); @@ -299,43 +350,77 @@ as4630_54te_psu_data *as4630_54te_psu_update_device(struct device *dev) power_good = IS_POWER_GOOD(data->index, data->status); if (power_good) { - status = as4630_54te_psu_read_block(client, 0x20, - data->model_name, - ARRAY_SIZE(data->model_name)-1); + enum psu_type type = UNKNOWN_PSU; + + status = as4630_54te_psu_read_block(client, models_min_offset, + temp_model_name, + ARRAY_SIZE(temp_model_name)); if (status < 0) { - data->model_name[0] = '\0'; dev_dbg(&client->dev, - "unable to read model name from (0x%x) offset(0x20)\n", - client->addr); - } - else { - data->model_name[8] = '-'; - data->model_name[ARRAY_SIZE(data->model_name)-1] = '\0'; + "unable to read model name from (0x%x) offset(0x%02x)\n", + client->addr, models_min_offset); + goto exit; } - if (strncmp(data->model_name, "YM-1151D-A03R", MAX_MODEL_NAME) == 0 || - strncmp(data->model_name, "YM-1151F-A01R", MAX_MODEL_NAME) == 0) - serial_offset = 0x2E; /* YM-1151D-A03R or YM-1151F-A01R */ - else - serial_offset = 0x35; /* YM-1151D-A02R */ + for (i = 0; i < ARRAY_SIZE(models); i++) { + if ((models[i].length+1) > ARRAY_SIZE(data->model_name)) { + dev_dbg(&client->dev, + "invalid models[%d].length(%d), should not exceed the size of data->model_name(%ld)\n", + i, models[i].length, ARRAY_SIZE(data->model_name)); + continue; + } + + snprintf(data->model_name, models[i].length + 1, "%s", + temp_model_name + (models[i].offset - models_min_offset)); + + if (i == PSU_YM_1151D_A03R || + i == PSU_YM_1151F_A01R || + i == PSU_YM_1151D_A02R) { + data->model_name[8] = '-'; + } + + /* Determine if the model name is known, if not, read next index */ + if (strncmp(data->model_name, models[i].model_name, models[i].length) == 0) { + type = models[i].type; + break; + } - /* Read from offset 0x2e or 0x35 (18 bytes) */ - status = as4630_54te_psu_read_block(client, serial_offset, - data->serial_number, - ARRAY_SIZE(data->serial_number)-1); - if (status < 0) { - data->serial_number[0] = '\0'; - dev_dbg(&client->dev, - "unable to read serial from (0x%x) offset(0x%x)\n", - client->addr, serial_offset); + data->model_name[0] = '\0'; + } + + if (type < ARRAY_SIZE(serials)) { + if ((serials[type].length+1) > ARRAY_SIZE(data->serial_number)) { + dev_dbg(&client->dev, + "invalid serials[%d].length(%d), should not exceed the size of data->serial_number(%ld)\n", + type, serials[type].length, ARRAY_SIZE(data->serial_number)); + goto exit; + } + + memset(data->serial_number, 0, sizeof(data->serial_number)); + status = as4630_54te_psu_read_block(client, serials[type].offset, + data->serial_number, + serials[type].length); + if (status < 0) { + dev_dbg(&client->dev, + "unable to read serial from (0x%x) offset(0x%02x)\n", + client->addr, serials[type].length); + goto exit; + } + else { + data->serial_number[serials[type].length]= '\0'; + } + } + else { + dev_dbg(&client->dev, "invalid PSU type(%d)\n", type); + return data; } - data->serial_number[ARRAY_SIZE(data->serial_number)-1]= '\0'; } data->last_updated = jiffies; data->valid = 1; } +exit: return data; } diff --git a/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/fani.c b/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/fani.c index c7e55f359f..398a13b474 100644 --- a/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/fani.c +++ b/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/fani.c @@ -150,7 +150,8 @@ _onlp_get_fan_direction_on_psu(void) } if (PSU_TYPE_YM1151D_F2B == psu_type || - PSU_TYPE_YM1151F_F2B == psu_type) { + PSU_TYPE_YM1151F_F2B == psu_type || + PSU_TYPE_UPD1501SA_1190G_F2B == psu_type) { return ONLP_FAN_STATUS_F2B; } else { diff --git a/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.c b/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.c index 21a8246250..23d577d346 100644 --- a/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.c +++ b/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.c @@ -28,6 +28,10 @@ psu_type_t get_psu_type(int id, char *data_buf, int data_len) ptype = PSU_TYPE_YM1151F_F2B; else if (strncmp(str, "YM-1151D-A03R", strlen("YM-1151D-A03R")) == 0) ptype = PSU_TYPE_YM1151D_F2B; + else if (strncmp(str, "UPD1501SA-1190G", strlen("UPD1501SA-1190G")) == 0) + ptype = PSU_TYPE_UPD1501SA_1190G_F2B; + else if (strncmp(str, "UPD1501SA-1290G", strlen("UPD1501SA-1290G")) == 0) + ptype = PSU_TYPE_UPD1501SA_1290G_B2F; else ptype = PSU_TYPE_YM1151D_B2F; diff --git a/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.h b/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.h index 8efc344491..5b3b06bbb8 100644 --- a/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.h +++ b/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/platform_lib.h @@ -60,7 +60,9 @@ typedef enum psu_type { PSU_TYPE_UNKNOWN, PSU_TYPE_YM1151D_F2B, PSU_TYPE_YM1151D_B2F, - PSU_TYPE_YM1151F_F2B + PSU_TYPE_YM1151F_F2B, + PSU_TYPE_UPD1501SA_1190G_F2B, + PSU_TYPE_UPD1501SA_1290G_B2F } psu_type_t; psu_type_t get_psu_type(int id, char* modelname, int modelname_len); diff --git a/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/psui.c b/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/psui.c index 5bf35ff66d..e28b97a26e 100644 --- a/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/psui.c +++ b/packages/platforms/accton/x86-64/as4630-54te/onlp/builds/x86_64_accton_as4630_54pe/module/src/psui.c @@ -149,6 +149,8 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) case PSU_TYPE_YM1151F_F2B: case PSU_TYPE_YM1151D_F2B: case PSU_TYPE_YM1151D_B2F: + case PSU_TYPE_UPD1501SA_1190G_F2B: + case PSU_TYPE_UPD1501SA_1290G_B2F: ret = psu_ym2651y_info_get(info); break; case PSU_TYPE_UNKNOWN: /* User insert a unknown PSU or unplugged.*/