コード例 #1
0
static ssize_t for_vout_data(struct device *dev, struct device_attribute \
		 					*dev_attr, char *buf)
{
	struct dps_800ab_16_d_data *data = dps_800ab_16_d_update_device(dev);
	int exponent, mantissa;
	int multiplier = 1000;
		
	exponent = two_complement_to_int(data->vout_mode, 5, 0x1f);
	mantissa = data->v_out;
    return (exponent > 0) ? sprintf(buf, "%d\n", \
        mantissa * (1 << exponent)) : \
        sprintf(buf, "%d\n", mantissa / (1 << -exponent) * multiplier); 

}
コード例 #2
0
int
pmbus_parse_vout_format(unsigned char vout_mode, unsigned short val)
{
    int exponent, mantissa;

    exponent = two_complement_to_int(vout_mode, 5, 0x1f);
    mantissa = val;

    if (exponent >= 0) {
        return (mantissa << exponent) * PMBUS_LITERAL_DATA_MULTIPLIER;
    }
    else {
        return (mantissa * PMBUS_LITERAL_DATA_MULTIPLIER) / (1 << -exponent);
    }
}
コード例 #3
0
int
pmbus_parse_literal_format(unsigned short val)
{
    int exponent, mantissa;

    exponent = two_complement_to_int(val >> 11, 5, 0x1f);
    mantissa = two_complement_to_int(val & 0x7ff, 11, 0x7ff);

    if (exponent >= 0) {
        return (mantissa << exponent) * PMBUS_LITERAL_DATA_MULTIPLIER;
    }
    else {
        return (mantissa * PMBUS_LITERAL_DATA_MULTIPLIER) / (1 << -exponent);
    }
}
コード例 #4
0
static ssize_t for_linear_data(struct device *dev, struct device_attribute \
							*dev_attr, char *buf)
{
	struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
	struct dps_800ab_16_d_data *data = dps_800ab_16_d_update_device(dev);

	u16 value = 0;
	int exponent, mantissa;
	int multiplier = 1000;
	
	switch (attr->index) {
	case PSU_V_IN:
		value = data->v_in;
		break;
	case PSU_I_IN:
		value = data->i_in;
		break;
	case PSU_I_OUT:
		value = data->i_out;
		break;
	case PSU_P_IN:
		value = data->p_in;
		break;
	case PSU_P_OUT:
		value = data->p_out;
		break;
	case PSU_TEMP1_INPUT:
		value = data->temp_input[0];
		break;
	case PSU_FAN1_DUTY_CYCLE:
		multiplier = 1;
		value = data->fan_duty_cycle[0];
		break;
	case PSU_FAN1_SPEED:
		multiplier = 1;
		value = data->fan_speed[0];
		break;
	default:
		break;
	}

	exponent = two_complement_to_int(value >> 11, 5, 0x1f);
	mantissa = two_complement_to_int(value & 0x7ff, 11, 0x7ff);

	return (exponent >= 0) ? sprintf(buf, "%d\n",	\
		(mantissa << exponent) * multiplier) :	\
	    sprintf(buf, "%d\n", (mantissa * multiplier) / (1 << -exponent));	
}
コード例 #5
0
ファイル: ym2651y.c プロジェクト: spitchai/OpenNetworkLinux
static ssize_t show_linear(struct device *dev, struct device_attribute *da,
			 char *buf)
{
	struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
	struct ym2651y_data *data = ym2651y_update_device(dev);

	u16 value = 0;
	int exponent, mantissa;
	int multiplier = 1000;

	if (!data->valid) {
		return 0;
	}	
	
	switch (attr->index) {
	case PSU_V_OUT:
		value = data->v_out;
		break;
	case PSU_I_OUT:
		value = data->i_out;
		break;
	case PSU_P_OUT:
		value = data->p_out;
		break;
	case PSU_TEMP1_INPUT:
		value = data->temp;
		break;
	case PSU_FAN1_SPEED:
		value = data->fan_speed;
		multiplier = 1;
		break;
	case PSU_FAN1_DUTY_CYCLE:
		value = data->fan_duty_cycle[0];
		multiplier = 1;
		break;
	case PSU_MFR_VIN_MIN:
		value = data->mfr_vin_min;
		break;
	case PSU_MFR_VIN_MAX:
		value = data->mfr_vin_max;
		break;
	case PSU_MFR_VOUT_MIN:
		value = data->mfr_vout_min;
		break;
	case PSU_MFR_VOUT_MAX:
		value = data->mfr_vout_max;
		break;
	case PSU_MFR_PIN_MAX:
		value = data->mfr_pin_max;
		break;
	case PSU_MFR_POUT_MAX:
		value = data->mfr_pout_max;
		break;
	case PSU_MFR_IOUT_MAX:
		value = data->mfr_iout_max;
		break;
	case PSU_MFR_IIN_MAX:
		value = data->mfr_iin_max;
		break;
	}

	exponent = two_complement_to_int(value >> 11, 5, 0x1f);
	mantissa = two_complement_to_int(value & 0x7ff, 11, 0x7ff);

	return (exponent >= 0) ? sprintf(buf, "%d\n", (mantissa << exponent) * multiplier) :
							 sprintf(buf, "%d\n", (mantissa * multiplier) / (1 << -exponent));
}