mirror of
				https://github.com/Telecominfraproject/OpenNetworkLinux.git
				synced 2025-11-03 19:58:20 +00:00 
			
		
		
		
	Merge pull request #522 from phani-karanam/add_YM2851J_PSU_support
Added YM2851J PSU support to onlpdump,and also ym2651y.c single driv…
This commit is contained in:
		@@ -32,6 +32,7 @@
 | 
				
			|||||||
#include <linux/sysfs.h>
 | 
					#include <linux/sysfs.h>
 | 
				
			||||||
#include <linux/slab.h>
 | 
					#include <linux/slab.h>
 | 
				
			||||||
#include <linux/delay.h>
 | 
					#include <linux/delay.h>
 | 
				
			||||||
 | 
					#include <linux/string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MAX_FAN_DUTY_CYCLE      100
 | 
					#define MAX_FAN_DUTY_CYCLE      100
 | 
				
			||||||
#define I2C_RW_RETRY_COUNT      10
 | 
					#define I2C_RW_RETRY_COUNT      10
 | 
				
			||||||
@@ -62,6 +63,9 @@ struct ym2651y_data {
 | 
				
			|||||||
    u16  status_word;   /* Register value */
 | 
					    u16  status_word;   /* Register value */
 | 
				
			||||||
    u8   fan_fault;   /* Register value */
 | 
					    u8   fan_fault;   /* Register value */
 | 
				
			||||||
    u8   over_temp;   /* Register value */
 | 
					    u8   over_temp;   /* Register value */
 | 
				
			||||||
 | 
					    u16  v_in;        /* Register value */
 | 
				
			||||||
 | 
					    u16  i_in;        /* Register value */
 | 
				
			||||||
 | 
					    u16  p_in;        /* Register value */
 | 
				
			||||||
    u16  v_out;       /* Register value */
 | 
					    u16  v_out;       /* Register value */
 | 
				
			||||||
    u16  i_out;       /* Register value */
 | 
					    u16  i_out;       /* Register value */
 | 
				
			||||||
    u16  p_out;       /* Register value */
 | 
					    u16  p_out;       /* Register value */
 | 
				
			||||||
@@ -110,6 +114,9 @@ enum ym2651y_sysfs_attributes {
 | 
				
			|||||||
    PSU_FAN1_FAULT,
 | 
					    PSU_FAN1_FAULT,
 | 
				
			||||||
    PSU_FAN_DIRECTION,
 | 
					    PSU_FAN_DIRECTION,
 | 
				
			||||||
    PSU_OVER_TEMP,
 | 
					    PSU_OVER_TEMP,
 | 
				
			||||||
 | 
					    PSU_V_IN,
 | 
				
			||||||
 | 
					    PSU_I_IN,
 | 
				
			||||||
 | 
					    PSU_P_IN,
 | 
				
			||||||
    PSU_V_OUT,
 | 
					    PSU_V_OUT,
 | 
				
			||||||
    PSU_I_OUT,
 | 
					    PSU_I_OUT,
 | 
				
			||||||
    PSU_P_OUT,
 | 
					    PSU_P_OUT,
 | 
				
			||||||
@@ -138,6 +145,9 @@ static SENSOR_DEVICE_ATTR(psu_temp_fault,   S_IRUGO, show_word,   NULL, PSU_TEMP
 | 
				
			|||||||
static SENSOR_DEVICE_ATTR(psu_power_good,   S_IRUGO, show_word,   NULL, PSU_POWER_GOOD);
 | 
					static SENSOR_DEVICE_ATTR(psu_power_good,   S_IRUGO, show_word,   NULL, PSU_POWER_GOOD);
 | 
				
			||||||
static SENSOR_DEVICE_ATTR(psu_fan1_fault,   S_IRUGO, show_fan_fault, NULL, PSU_FAN1_FAULT);
 | 
					static SENSOR_DEVICE_ATTR(psu_fan1_fault,   S_IRUGO, show_fan_fault, NULL, PSU_FAN1_FAULT);
 | 
				
			||||||
static SENSOR_DEVICE_ATTR(psu_over_temp,    S_IRUGO, show_over_temp, NULL, PSU_OVER_TEMP);
 | 
					static SENSOR_DEVICE_ATTR(psu_over_temp,    S_IRUGO, show_over_temp, NULL, PSU_OVER_TEMP);
 | 
				
			||||||
 | 
					static SENSOR_DEVICE_ATTR(psu_v_in,     S_IRUGO, show_linear,   NULL, PSU_V_IN);
 | 
				
			||||||
 | 
					static SENSOR_DEVICE_ATTR(psu_i_in,     S_IRUGO, show_linear,   NULL, PSU_I_IN);
 | 
				
			||||||
 | 
					static SENSOR_DEVICE_ATTR(psu_p_in,     S_IRUGO, show_linear,   NULL, PSU_P_IN);
 | 
				
			||||||
static SENSOR_DEVICE_ATTR(psu_v_out,        S_IRUGO, show_vout,     NULL, PSU_V_OUT);
 | 
					static SENSOR_DEVICE_ATTR(psu_v_out,        S_IRUGO, show_vout,     NULL, PSU_V_OUT);
 | 
				
			||||||
static SENSOR_DEVICE_ATTR(psu_i_out,        S_IRUGO, show_linear,   NULL, PSU_I_OUT);
 | 
					static SENSOR_DEVICE_ATTR(psu_i_out,        S_IRUGO, show_linear,   NULL, PSU_I_OUT);
 | 
				
			||||||
static SENSOR_DEVICE_ATTR(psu_p_out,        S_IRUGO, show_linear,   NULL, PSU_P_OUT);
 | 
					static SENSOR_DEVICE_ATTR(psu_p_out,        S_IRUGO, show_linear,   NULL, PSU_P_OUT);
 | 
				
			||||||
@@ -152,8 +162,8 @@ static SENSOR_DEVICE_ATTR(psu_mfr_revision, S_IRUGO, show_ascii, NULL, PSU_MFR_R
 | 
				
			|||||||
static SENSOR_DEVICE_ATTR(psu_mfr_serial,   S_IRUGO, show_ascii, NULL, PSU_MFR_SERIAL);
 | 
					static SENSOR_DEVICE_ATTR(psu_mfr_serial,   S_IRUGO, show_ascii, NULL, PSU_MFR_SERIAL);
 | 
				
			||||||
static SENSOR_DEVICE_ATTR(psu_mfr_vin_min,  S_IRUGO, show_linear, NULL, PSU_MFR_VIN_MIN);
 | 
					static SENSOR_DEVICE_ATTR(psu_mfr_vin_min,  S_IRUGO, show_linear, NULL, PSU_MFR_VIN_MIN);
 | 
				
			||||||
static SENSOR_DEVICE_ATTR(psu_mfr_vin_max,  S_IRUGO, show_linear, NULL, PSU_MFR_VIN_MAX);
 | 
					static SENSOR_DEVICE_ATTR(psu_mfr_vin_max,  S_IRUGO, show_linear, NULL, PSU_MFR_VIN_MAX);
 | 
				
			||||||
static SENSOR_DEVICE_ATTR(psu_mfr_vout_min, S_IRUGO, show_linear, NULL, PSU_MFR_VOUT_MIN);
 | 
					static SENSOR_DEVICE_ATTR(psu_mfr_vout_min, S_IRUGO, show_vout, NULL, PSU_MFR_VOUT_MIN);
 | 
				
			||||||
static SENSOR_DEVICE_ATTR(psu_mfr_vout_max, S_IRUGO, show_linear, NULL, PSU_MFR_VOUT_MAX);
 | 
					static SENSOR_DEVICE_ATTR(psu_mfr_vout_max, S_IRUGO, show_vout, NULL, PSU_MFR_VOUT_MAX);
 | 
				
			||||||
static SENSOR_DEVICE_ATTR(psu_mfr_iin_max,  S_IRUGO, show_linear, NULL, PSU_MFR_IIN_MAX);
 | 
					static SENSOR_DEVICE_ATTR(psu_mfr_iin_max,  S_IRUGO, show_linear, NULL, PSU_MFR_IIN_MAX);
 | 
				
			||||||
static SENSOR_DEVICE_ATTR(psu_mfr_iout_max, S_IRUGO, show_linear, NULL, PSU_MFR_IOUT_MAX);
 | 
					static SENSOR_DEVICE_ATTR(psu_mfr_iout_max, S_IRUGO, show_linear, NULL, PSU_MFR_IOUT_MAX);
 | 
				
			||||||
static SENSOR_DEVICE_ATTR(psu_mfr_pin_max,  S_IRUGO, show_linear, NULL, PSU_MFR_PIN_MAX);
 | 
					static SENSOR_DEVICE_ATTR(psu_mfr_pin_max,  S_IRUGO, show_linear, NULL, PSU_MFR_PIN_MAX);
 | 
				
			||||||
@@ -165,6 +175,9 @@ static struct attribute *ym2651y_attributes[] = {
 | 
				
			|||||||
    &sensor_dev_attr_psu_power_good.dev_attr.attr,
 | 
					    &sensor_dev_attr_psu_power_good.dev_attr.attr,
 | 
				
			||||||
    &sensor_dev_attr_psu_fan1_fault.dev_attr.attr,
 | 
					    &sensor_dev_attr_psu_fan1_fault.dev_attr.attr,
 | 
				
			||||||
    &sensor_dev_attr_psu_over_temp.dev_attr.attr,
 | 
					    &sensor_dev_attr_psu_over_temp.dev_attr.attr,
 | 
				
			||||||
 | 
					    &sensor_dev_attr_psu_v_in.dev_attr.attr,
 | 
				
			||||||
 | 
					    &sensor_dev_attr_psu_i_in.dev_attr.attr,
 | 
				
			||||||
 | 
					    &sensor_dev_attr_psu_p_in.dev_attr.attr,
 | 
				
			||||||
    &sensor_dev_attr_psu_v_out.dev_attr.attr,
 | 
					    &sensor_dev_attr_psu_v_out.dev_attr.attr,
 | 
				
			||||||
    &sensor_dev_attr_psu_i_out.dev_attr.attr,
 | 
					    &sensor_dev_attr_psu_i_out.dev_attr.attr,
 | 
				
			||||||
    &sensor_dev_attr_psu_p_out.dev_attr.attr,
 | 
					    &sensor_dev_attr_psu_p_out.dev_attr.attr,
 | 
				
			||||||
@@ -223,6 +236,8 @@ static ssize_t show_word(struct device *dev, struct device_attribute *da,
 | 
				
			|||||||
    case PSU_POWER_GOOD: /* psu_power_good, high byte bit 3 of status_word, 0=>OK, 1=>FAIL */
 | 
					    case PSU_POWER_GOOD: /* psu_power_good, high byte bit 3 of status_word, 0=>OK, 1=>FAIL */
 | 
				
			||||||
        status = (data->status_word & 0x800) ? 0 : 1;
 | 
					        status = (data->status_word & 0x800) ? 0 : 1;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					    default:
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return sprintf(buf, "%d\n", status);
 | 
					    return sprintf(buf, "%d\n", status);
 | 
				
			||||||
@@ -266,16 +281,36 @@ static ssize_t show_linear(struct device *dev, struct device_attribute *da,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
 | 
					    struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
 | 
				
			||||||
    struct ym2651y_data *data = ym2651y_update_device(dev);
 | 
					    struct ym2651y_data *data = ym2651y_update_device(dev);
 | 
				
			||||||
 | 
					    u8 *ptr = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    u16 value = 0;
 | 
					    u16 value = 0;
 | 
				
			||||||
    int exponent, mantissa;
 | 
					    int exponent, mantissa;
 | 
				
			||||||
    int multiplier = 1000;
 | 
					    int multiplier = 1000;
 | 
				
			||||||
 | 
					    ptr = data->mfr_model + 1; /* The first byte is the count byte of string. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!data->valid) {
 | 
					    if (!data->valid) {
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }   
 | 
					    }   
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    switch (attr->index) {
 | 
					    switch (attr->index) {
 | 
				
			||||||
 | 
					    case PSU_V_IN:
 | 
				
			||||||
 | 
					        if ((strncmp(ptr, "DPS-850A", strlen("DPS-850A")) == 0)||
 | 
				
			||||||
 | 
					            (strncmp(ptr, "YM-2851J", strlen("YM-2851J")) == 0)) {
 | 
				
			||||||
 | 
					            value = data->v_in;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    case PSU_I_IN:
 | 
				
			||||||
 | 
					        if ((strncmp(ptr, "DPS-850A", strlen("DPS-850A")) == 0)||
 | 
				
			||||||
 | 
					            (strncmp(ptr, "YM-2851J", strlen("YM-2851J")) == 0)) {
 | 
				
			||||||
 | 
					            value = data->i_in;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    case PSU_P_IN:
 | 
				
			||||||
 | 
					        if ((strncmp(ptr, "DPS-850A", strlen("DPS-850A")) == 0)||
 | 
				
			||||||
 | 
					            (strncmp(ptr, "YM-2851J", strlen("YM-2851J")) == 0)) {
 | 
				
			||||||
 | 
					            value = data->p_in;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
    case PSU_V_OUT:
 | 
					    case PSU_V_OUT:
 | 
				
			||||||
        value = data->v_out;
 | 
					        value = data->v_out;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
@@ -320,6 +355,8 @@ static ssize_t show_linear(struct device *dev, struct device_attribute *da,
 | 
				
			|||||||
    case PSU_MFR_IIN_MAX:
 | 
					    case PSU_MFR_IIN_MAX:
 | 
				
			||||||
        value = data->mfr_iin_max;
 | 
					        value = data->mfr_iin_max;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					    default:
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    exponent = two_complement_to_int(value >> 11, 5, 0x1f);
 | 
					    exponent = two_complement_to_int(value >> 11, 5, 0x1f);
 | 
				
			||||||
@@ -394,6 +431,7 @@ static ssize_t show_ascii(struct device *dev, struct device_attribute *da,
 | 
				
			|||||||
static ssize_t show_vout_by_mode(struct device *dev, struct device_attribute *da,
 | 
					static ssize_t show_vout_by_mode(struct device *dev, struct device_attribute *da,
 | 
				
			||||||
             char *buf)
 | 
					             char *buf)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
 | 
				
			||||||
    struct ym2651y_data *data = ym2651y_update_device(dev);
 | 
					    struct ym2651y_data *data = ym2651y_update_device(dev);
 | 
				
			||||||
    int exponent, mantissa;
 | 
					    int exponent, mantissa;
 | 
				
			||||||
    int multiplier = 1000;
 | 
					    int multiplier = 1000;
 | 
				
			||||||
@@ -403,7 +441,19 @@ static ssize_t show_vout_by_mode(struct device *dev, struct device_attribute *da
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    exponent = two_complement_to_int(data->vout_mode, 5, 0x1f);
 | 
					    exponent = two_complement_to_int(data->vout_mode, 5, 0x1f);
 | 
				
			||||||
 | 
					    switch (attr->index) {
 | 
				
			||||||
 | 
					    case PSU_MFR_VOUT_MIN:
 | 
				
			||||||
 | 
					        mantissa = data->mfr_vout_min;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    case PSU_MFR_VOUT_MAX:
 | 
				
			||||||
 | 
					        mantissa = data->mfr_vout_max;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    case PSU_V_OUT:
 | 
				
			||||||
        mantissa = data->v_out;
 | 
					        mantissa = data->v_out;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    default:
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return (exponent > 0) ? sprintf(buf, "%d\n", (mantissa << exponent) * multiplier) :
 | 
					    return (exponent > 0) ? sprintf(buf, "%d\n", (mantissa << exponent) * multiplier) :
 | 
				
			||||||
                            sprintf(buf, "%d\n", (mantissa * multiplier) / (1 << -exponent));
 | 
					                            sprintf(buf, "%d\n", (mantissa * multiplier) / (1 << -exponent));
 | 
				
			||||||
@@ -414,12 +464,19 @@ static ssize_t show_vout(struct device *dev, struct device_attribute *da,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    struct i2c_client *client = to_i2c_client(dev);
 | 
					    struct i2c_client *client = to_i2c_client(dev);
 | 
				
			||||||
    struct ym2651y_data *data = i2c_get_clientdata(client);
 | 
					    struct ym2651y_data *data = i2c_get_clientdata(client);
 | 
				
			||||||
 | 
					    u8 *ptr = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ptr = data->mfr_model + 1; /* The first byte is the count byte of string. */
 | 
				
			||||||
    if (data->chip == YM2401) {
 | 
					    if (data->chip == YM2401) {
 | 
				
			||||||
        return show_vout_by_mode(dev, da, buf);
 | 
					        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)) {
 | 
				
			||||||
 | 
					        return show_vout_by_mode(dev, da, buf);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
        return show_linear(dev, da, buf);
 | 
					        return show_linear(dev, da, buf);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct attribute_group ym2651y_group = {
 | 
					static const struct attribute_group ym2651y_group = {
 | 
				
			||||||
@@ -612,8 +669,11 @@ static struct ym2651y_data *ym2651y_update_device(struct device *dev)
 | 
				
			|||||||
                                             {0x81, &data->fan_fault},
 | 
					                                             {0x81, &data->fan_fault},
 | 
				
			||||||
                                             {0x98, &data->pmbus_revision}};
 | 
					                                             {0x98, &data->pmbus_revision}};
 | 
				
			||||||
        struct reg_data_word regs_word[] = { {0x79, &data->status_word},
 | 
					        struct reg_data_word regs_word[] = { {0x79, &data->status_word},
 | 
				
			||||||
 | 
					                                             {0x88, &data->v_in},
 | 
				
			||||||
                                             {0x8b, &data->v_out},
 | 
					                                             {0x8b, &data->v_out},
 | 
				
			||||||
 | 
					                                             {0x89, &data->i_in},
 | 
				
			||||||
                                             {0x8c, &data->i_out},
 | 
					                                             {0x8c, &data->i_out},
 | 
				
			||||||
 | 
					                                             {0x97, &data->p_in},
 | 
				
			||||||
                                             {0x96, &data->p_out},
 | 
					                                             {0x96, &data->p_out},
 | 
				
			||||||
                                             {0x8d, &data->temp},
 | 
					                                             {0x8d, &data->temp},
 | 
				
			||||||
                                             {0x3b, &(data->fan_duty_cycle[0])},
 | 
					                                             {0x3b, &(data->fan_duty_cycle[0])},
 | 
				
			||||||
@@ -751,4 +811,3 @@ MODULE_LICENSE("GPL");
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
module_init(ym2651y_init);
 | 
					module_init(ym2651y_init);
 | 
				
			||||||
module_exit(ym2651y_exit);
 | 
					module_exit(ym2651y_exit);
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,7 @@
 | 
				
			|||||||
#define PSU_MODEL_NAME_LEN 		8
 | 
					#define PSU_MODEL_NAME_LEN 		8
 | 
				
			||||||
#define PSU_SERIAL_NUMBER_LEN	18
 | 
					#define PSU_SERIAL_NUMBER_LEN	18
 | 
				
			||||||
#define PSU_NODE_MAX_PATH_LEN   64
 | 
					#define PSU_NODE_MAX_PATH_LEN   64
 | 
				
			||||||
 | 
					#define PSU_FAN_DIR_LEN    3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int psu_serial_number_get(int id, char *serial, int serial_len)
 | 
					int psu_serial_number_get(int id, char *serial, int serial_len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -60,6 +61,7 @@ psu_type_t psu_type_get(int id, char* modelname, int modelname_len)
 | 
				
			|||||||
	int   ret   = ONLP_STATUS_OK; 
 | 
						int   ret   = ONLP_STATUS_OK; 
 | 
				
			||||||
	char  model[PSU_MODEL_NAME_LEN + 1] = {0};
 | 
						char  model[PSU_MODEL_NAME_LEN + 1] = {0};
 | 
				
			||||||
	char *prefix = NULL;
 | 
						char *prefix = NULL;
 | 
				
			||||||
 | 
					    char  fan_dir[PSU_FAN_DIR_LEN + 1] = {0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (modelname && modelname_len < PSU_MODEL_NAME_LEN) {
 | 
						if (modelname && modelname_len < PSU_MODEL_NAME_LEN) {
 | 
				
			||||||
		return PSU_TYPE_UNKNOWN;
 | 
							return PSU_TYPE_UNKNOWN;
 | 
				
			||||||
@@ -89,13 +91,53 @@ psu_type_t psu_type_get(int id, char* modelname, int modelname_len)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (strncmp(model, "DPS-850A", strlen("DPS-850A")) == 0) {
 | 
					    if (strncmp(model, "DPS-850A", strlen("DPS-850A")) == 0) {
 | 
				
			||||||
 | 
					        prefix = (id == PSU1_ID) ? PSU1_AC_PMBUS_PREFIX : PSU2_AC_PMBUS_PREFIX;
 | 
				
			||||||
 | 
					        ret = onlp_file_read((uint8_t*)fan_dir, PSU_FAN_DIR_LEN, &value, "%s%s", prefix, "psu_fan_dir");
 | 
				
			||||||
 | 
					        if (ret != ONLP_STATUS_OK || value != PSU_FAN_DIR_LEN) {
 | 
				
			||||||
 | 
					            return PSU_TYPE_UNKNOWN;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (strncmp(fan_dir, "F2B", strlen("F2B")) == 0) {
 | 
				
			||||||
            return PSU_TYPE_AC_DPS850_F2B;
 | 
					            return PSU_TYPE_AC_DPS850_F2B;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (strncmp(fan_dir, "B2F", strlen("B2F")) == 0) {
 | 
				
			||||||
 | 
					            return PSU_TYPE_AC_DPS850_B2F;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (strncmp(model, "YM-2851F", strlen("YM-2851F")) == 0) {
 | 
					    if (strncmp(model, "YM-2851F", strlen("YM-2851F")) == 0) {
 | 
				
			||||||
 | 
					        prefix = (id == PSU1_ID) ? PSU1_AC_PMBUS_PREFIX : PSU2_AC_PMBUS_PREFIX;
 | 
				
			||||||
 | 
					        ret = onlp_file_read((uint8_t*)fan_dir, PSU_FAN_DIR_LEN, &value, "%s%s", prefix, "psu_fan_dir");
 | 
				
			||||||
 | 
					        if (ret != ONLP_STATUS_OK || value != PSU_FAN_DIR_LEN) {
 | 
				
			||||||
 | 
					            return PSU_TYPE_UNKNOWN;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (strncmp(fan_dir, "F2B", strlen("F2B")) == 0) {
 | 
				
			||||||
            return PSU_TYPE_AC_YM2851_F2B;
 | 
					            return PSU_TYPE_AC_YM2851_F2B;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (strncmp(fan_dir, "B2F", strlen("B2F")) == 0) {
 | 
				
			||||||
 | 
					            return PSU_TYPE_AC_YM2851_B2F;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (strncmp(model, "YM-2851J", strlen("YM-2851J")) == 0) {
 | 
				
			||||||
 | 
					        prefix = (id == PSU1_ID) ? PSU1_AC_PMBUS_PREFIX : PSU2_AC_PMBUS_PREFIX;
 | 
				
			||||||
 | 
					        ret = onlp_file_read((uint8_t*)fan_dir, PSU_FAN_DIR_LEN, &value, "%s%s", prefix, "psu_fan_dir");
 | 
				
			||||||
 | 
					        if (ret != ONLP_STATUS_OK || value != PSU_FAN_DIR_LEN) {
 | 
				
			||||||
 | 
					            return PSU_TYPE_UNKNOWN;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (strncmp(fan_dir, "F2B", strlen("F2B")) == 0) {
 | 
				
			||||||
 | 
					            return PSU_TYPE_AC_YM2851_F2B;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (strncmp(fan_dir, "B2F", strlen("B2F")) == 0) {
 | 
				
			||||||
 | 
					            return PSU_TYPE_AC_YM2851_B2F;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return PSU_TYPE_UNKNOWN;
 | 
					    return PSU_TYPE_UNKNOWN;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,6 +61,40 @@ psu_ym2651y_info_get(onlp_psu_info_t* info)
 | 
				
			|||||||
    info->hdr.coids[0] = ONLP_FAN_ID_CREATE(index + CHASSIS_FAN_COUNT);
 | 
					    info->hdr.coids[0] = ONLP_FAN_ID_CREATE(index + CHASSIS_FAN_COUNT);
 | 
				
			||||||
    info->hdr.coids[1] = ONLP_THERMAL_ID_CREATE(index + CHASSIS_THERMAL_COUNT);
 | 
					    info->hdr.coids[1] = ONLP_THERMAL_ID_CREATE(index + CHASSIS_THERMAL_COUNT);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    if (strncmp(info->model, "YM-2851J", strlen("YM-2851J")) == 0) {
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					            /* Read voltage, current and power */
 | 
				
			||||||
 | 
					        if (psu_dps850_pmbus_info_get(index, "psu_v_out", &val) == 0) {
 | 
				
			||||||
 | 
					            info->mvout = val;
 | 
				
			||||||
 | 
					            info->caps |= ONLP_PSU_CAPS_VOUT;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (psu_dps850_pmbus_info_get(index, "psu_v_in", &val) == 0) {
 | 
				
			||||||
 | 
					            info->mvin  = val;
 | 
				
			||||||
 | 
					            info->caps |= ONLP_PSU_CAPS_VIN;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (psu_dps850_pmbus_info_get(index, "psu_i_out", &val) == 0) {
 | 
				
			||||||
 | 
					            info->miout = val;
 | 
				
			||||||
 | 
					            info->caps |= ONLP_PSU_CAPS_IOUT;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (psu_dps850_pmbus_info_get(index, "psu_i_in", &val) == 0) {
 | 
				
			||||||
 | 
					            info->caps |= ONLP_PSU_CAPS_IIN;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (psu_dps850_pmbus_info_get(index, "psu_p_out", &val) == 0) {
 | 
				
			||||||
 | 
					            info->mpout = val;
 | 
				
			||||||
 | 
					            info->caps |= ONLP_PSU_CAPS_POUT;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (psu_dps850_pmbus_info_get(index, "psu_p_in", &val) == 0) {
 | 
				
			||||||
 | 
					            info->mpin  = val;
 | 
				
			||||||
 | 
					            info->caps |= ONLP_PSU_CAPS_PIN;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    } 
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* Read voltage, current and power */
 | 
					        /* Read voltage, current and power */
 | 
				
			||||||
        if (psu_ym2651y_pmbus_info_get(index, "psu_v_out", &val) == 0) {
 | 
					        if (psu_ym2651y_pmbus_info_get(index, "psu_v_out", &val) == 0) {
 | 
				
			||||||
            info->mvout = val;
 | 
					            info->mvout = val;
 | 
				
			||||||
@@ -76,6 +110,7 @@ psu_ym2651y_info_get(onlp_psu_info_t* info)
 | 
				
			|||||||
            info->mpout = val;
 | 
					            info->mpout = val;
 | 
				
			||||||
            info->caps |= ONLP_PSU_CAPS_POUT;
 | 
					            info->caps |= ONLP_PSU_CAPS_POUT;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	psu_serial_number_get(index, info->serial, sizeof(info->serial));
 | 
						psu_serial_number_get(index, info->serial, sizeof(info->serial));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,16 +6,10 @@ class OnlPlatform_x86_64_accton_as7816_64x_r0(OnlPlatformAccton,
 | 
				
			|||||||
    PLATFORM='x86-64-accton-as7816-64x-r0'
 | 
					    PLATFORM='x86-64-accton-as7816-64x-r0'
 | 
				
			||||||
    MODEL="AS7816-64x"
 | 
					    MODEL="AS7816-64x"
 | 
				
			||||||
    SYS_OBJECT_ID=".7816.64"
 | 
					    SYS_OBJECT_ID=".7816.64"
 | 
				
			||||||
    PSU1_MODEL="/sys/bus/i2c/devices/i2c-10/10-005b/psu_mfr_model"
 | 
					 | 
				
			||||||
    PSU2_MODEL="/sys/bus/i2c/devices/i2c-9/9-0058/psu_mfr_model"
 | 
					 | 
				
			||||||
    PSU1_POWER="/sys/bus/i2c/devices/i2c-19/19-0060/psu1_power_good"
 | 
					 | 
				
			||||||
    PSU2_POWER="/sys/bus/i2c/devices/i2c-19/19-0060/psu2_power_good"
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    def baseconfig(self):
 | 
					    def baseconfig(self):
 | 
				
			||||||
        self.insmod('optoe')
 | 
					        self.insmod('optoe')
 | 
				
			||||||
        self.insmod('ym2651y')
 | 
					        self.insmod('ym2651y')
 | 
				
			||||||
        self.insmod('dps850')
 | 
					 | 
				
			||||||
        self.insmod('accton_i2c_cpld')
 | 
					        self.insmod('accton_i2c_cpld')
 | 
				
			||||||
        for m in [ 'fan', 'cpld1', 'leds' ]:
 | 
					        for m in [ 'fan', 'cpld1', 'leds' ]:
 | 
				
			||||||
            self.insmod("x86-64-accton-as7816-64x-%s.ko" % m)
 | 
					            self.insmod("x86-64-accton-as7816-64x-%s.ko" % m)
 | 
				
			||||||
@@ -32,13 +26,11 @@ class OnlPlatform_x86_64_accton_as7816_64x_r0(OnlPlatformAccton,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                # initiate PSU-1
 | 
					                # initiate PSU-1
 | 
				
			||||||
                ('24c02', 0x53, 10),
 | 
					                ('24c02', 0x53, 10),
 | 
				
			||||||
                ('dps850', 0x5b, 10),
 | 
					                ('ym2851', 0x5b, 10),
 | 
				
			||||||
                #('ym2851', 0x5b, 10),
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                # initiate PSU-2
 | 
					                # initiate PSU-2
 | 
				
			||||||
                ('24c02', 0x50, 9),
 | 
					                ('24c02', 0x50, 9),
 | 
				
			||||||
                ('dps850', 0x58, 9),
 | 
					                ('ym2851', 0x58, 9),
 | 
				
			||||||
                #('ym2851', 0x58, 9),
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                # initiate chassis fan
 | 
					                # initiate chassis fan
 | 
				
			||||||
                ('as7816_64x_fan', 0x68, 17),
 | 
					                ('as7816_64x_fan', 0x68, 17),
 | 
				
			||||||
@@ -201,39 +193,4 @@ class OnlPlatform_x86_64_accton_as7816_64x_r0(OnlPlatformAccton,
 | 
				
			|||||||
        subprocess.call('echo port51 > /sys/bus/i2c/devices/87-0050/port_name', shell=True)
 | 
					        subprocess.call('echo port51 > /sys/bus/i2c/devices/87-0050/port_name', shell=True)
 | 
				
			||||||
        subprocess.call('echo port52 > /sys/bus/i2c/devices/88-0050/port_name', shell=True)
 | 
					        subprocess.call('echo port52 > /sys/bus/i2c/devices/88-0050/port_name', shell=True)
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        PSU_DELTA="DPS-850"
 | 
					 | 
				
			||||||
        PSU_3Y= "YM-2851F"           
 | 
					 | 
				
			||||||
        if os.path.exists(self.PSU2_POWER):
 | 
					 | 
				
			||||||
            with open(self.PSU2_POWER, 'r') as fd:
 | 
					 | 
				
			||||||
                val=int(fd.read())            
 | 
					 | 
				
			||||||
                if val==1:
 | 
					 | 
				
			||||||
                    if os.path.exists(self.PSU2_MODEL):
 | 
					 | 
				
			||||||
                        with open(self.PSU2_MODEL, 'r') as fd:
 | 
					 | 
				
			||||||
                            f=open(self.PSU2_MODEL)
 | 
					 | 
				
			||||||
                            val_str=f.read()
 | 
					 | 
				
			||||||
                            if int(val_str.find(PSU_3Y))== 0:
 | 
					 | 
				
			||||||
                                subprocess.call('echo 0x58 > /sys/bus/i2c/devices/i2c-9/delete_device', shell=True)
 | 
					 | 
				
			||||||
                                subprocess.call('echo 0x5b > /sys/bus/i2c/devices/i2c-10/delete_device', shell=True)
 | 
					 | 
				
			||||||
                                self.new_i2c_devices([
 | 
					 | 
				
			||||||
                                 ('ym2851', 0x58, 9),
 | 
					 | 
				
			||||||
                                 ('ym2851', 0x5b, 10),
 | 
					 | 
				
			||||||
                                ])
 | 
					 | 
				
			||||||
                                return True
 | 
					 | 
				
			||||||
        if os.path.exists(self.PSU1_POWER):
 | 
					 | 
				
			||||||
            with open(self.PSU1_POWER, 'r') as fd:
 | 
					 | 
				
			||||||
                val=int(fd.read())            
 | 
					 | 
				
			||||||
                if val==1:
 | 
					 | 
				
			||||||
                    if os.path.exists(self.PSU1_MODEL):
 | 
					 | 
				
			||||||
                        with open(self.PSU1_MODEL, 'r') as fd:
 | 
					 | 
				
			||||||
                            f=open(self.PSU1_MODEL)
 | 
					 | 
				
			||||||
                            val_str=f.read()
 | 
					 | 
				
			||||||
                            if int(val_str.find(PSU_3Y))== 0:
 | 
					 | 
				
			||||||
                                subprocess.call('echo 0x58 > /sys/bus/i2c/devices/i2c-9/delete_device', shell=True)
 | 
					 | 
				
			||||||
                                subprocess.call('echo 0x5b > /sys/bus/i2c/devices/i2c-10/delete_device', shell=True)
 | 
					 | 
				
			||||||
                                self.new_i2c_devices([
 | 
					 | 
				
			||||||
                                 ('ym2851', 0x58, 9),
 | 
					 | 
				
			||||||
                                 ('ym2851', 0x5b, 10),
 | 
					 | 
				
			||||||
                                ])
 | 
					 | 
				
			||||||
                                return True                        
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
        return True
 | 
					        return True
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user