[Delta]: Add psuutil support for ag9032v1 (#1298)
Fix the bug of psu module for ag9032v1 Signed-off-by: neal <neal.tai@deltaww.com>
This commit is contained in:
parent
9669b3477e
commit
41cdb8971f
57
device/delta/x86_64-delta_ag9032v1-r0/plugins/psuutil.py
Normal file
57
device/delta/x86_64-delta_ag9032v1-r0/plugins/psuutil.py
Normal file
@ -0,0 +1,57 @@
|
||||
import os.path
|
||||
|
||||
try:
|
||||
from sonic_psu.psu_base import PsuBase
|
||||
except ImportError as e:
|
||||
raise ImportError (str(e) + "- required module not found")
|
||||
|
||||
class PsuUtil(PsuBase):
|
||||
"""Platform-specific PSUutil class"""
|
||||
|
||||
def __init__(self):
|
||||
PsuBase.__init__(self)
|
||||
|
||||
self.psu_path = "/sys/bus/i2c/devices/{}-0058/"
|
||||
self.psu_oper_status = "in1_input"
|
||||
self.psu_presence = "i2cget -y {} 0x50 0x00"
|
||||
|
||||
|
||||
def get_num_psus(self):
|
||||
"""
|
||||
Retrieves the number of PSUs available on the device
|
||||
|
||||
:return: An integer, the number of PSUs available on the device
|
||||
"""
|
||||
return 2
|
||||
|
||||
def get_psu_status(self, index):
|
||||
if index is None:
|
||||
return False
|
||||
Base_bus_number = 39
|
||||
status = 0
|
||||
#index from 1, psu attribute bus from 40
|
||||
try:
|
||||
with open(self.psu_path.format(index + Base_bus_number) + self.psu_oper_status, 'r') as power_status:
|
||||
if int(power_status.read()) == 0 :
|
||||
return False
|
||||
else:
|
||||
status = 1
|
||||
except IOError:
|
||||
return False
|
||||
return status == 1
|
||||
|
||||
def get_psu_presence(self, index):
|
||||
if index is None:
|
||||
return False
|
||||
Base_bus_number = 39
|
||||
status = 0
|
||||
try:
|
||||
p = os.popen(self.psu_presence.format(index + Base_bus_number)+ "> /dev/null 2>&1")
|
||||
if p.readline() != None:
|
||||
status = 1
|
||||
p.close()
|
||||
except IOError:
|
||||
return False
|
||||
return status == 1
|
||||
|
||||
|
@ -2,9 +2,9 @@
|
||||
* An hwmon driver for delta AG9032v1 PSU
|
||||
* dps_800ab_16_d.c - Support for DPS-800AB-16 D Power Supply Module
|
||||
*
|
||||
* Copyright (C) 2017 Delta Networks, Inc.
|
||||
* Copyright (C) 2016 Delta Network Technology Corporation
|
||||
*
|
||||
* Aries Lin <aries.lin@deltaww.com>
|
||||
* DNI <DNIsales@delta.com.tw>
|
||||
*
|
||||
* Based on ym2651y.c
|
||||
* Based on ad7414.c
|
||||
@ -361,6 +361,7 @@ static struct dps_800ab_16_d_data *dps_800ab_16_d_update_device( \
|
||||
if (status < 0) {
|
||||
dev_dbg(&client->dev, "reg %d, err %d\n",
|
||||
regs_byte[i].reg, status);
|
||||
*(regs_byte[i].value) = 0;
|
||||
} else {
|
||||
*(regs_byte[i].value) = status;
|
||||
}
|
||||
@ -372,28 +373,31 @@ static struct dps_800ab_16_d_data *dps_800ab_16_d_update_device( \
|
||||
if (status < 0) {
|
||||
dev_dbg(&client->dev, "reg %d, err %d\n",
|
||||
regs_word[i].reg, status);
|
||||
*(regs_word[i].value) = 0;
|
||||
} else {
|
||||
*(regs_word[i].value) = status;
|
||||
}
|
||||
}
|
||||
|
||||
command = 0x9a; /* PSU mfr_model */
|
||||
//data->mfr_model[1] = '\0';
|
||||
status = dps_800ab_16_d_read_block(client, command,
|
||||
data->mfr_model, ARRAY_SIZE(data->mfr_model) - 1);
|
||||
data->mfr_model[ARRAY_SIZE(data->mfr_model) - 1] = '\0';
|
||||
if (status < 0) {
|
||||
dev_dbg(&client->dev, "reg %d, err %d\n", command,
|
||||
status);
|
||||
}
|
||||
data->mfr_model, ARRAY_SIZE(data->mfr_model) - 1);
|
||||
data->mfr_model[ARRAY_SIZE(data->mfr_model) - 1] = '\0';
|
||||
if (status < 0) {
|
||||
dev_dbg(&client->dev, "reg %d, err %d\n", command,status);
|
||||
data->mfr_model[1] = '\0';
|
||||
}
|
||||
|
||||
command = 0x9e; /* PSU mfr_serial */
|
||||
status = dps_800ab_16_d_read_block(client, command,
|
||||
data->mfr_serial, ARRAY_SIZE(data->mfr_serial) - 1);
|
||||
data->mfr_serial[ARRAY_SIZE(data->mfr_serial) - 1] = '\0';
|
||||
if (status < 0) {
|
||||
dev_dbg(&client->dev, "reg %d, err %d\n", command,
|
||||
status);
|
||||
}
|
||||
command = 0x9e; /* PSU mfr_serial */
|
||||
//data->mfr_serial[1] = '\0';
|
||||
status = dps_800ab_16_d_read_block(client, command,
|
||||
data->mfr_serial, ARRAY_SIZE(data->mfr_serial) - 1);
|
||||
data->mfr_serial[ARRAY_SIZE(data->mfr_serial) - 1] = '\0';
|
||||
if (status < 0) {
|
||||
dev_dbg(&client->dev, "reg %d, err %d\n", command,status);
|
||||
data->mfr_serial[1] = '\0';
|
||||
}
|
||||
|
||||
data->valid = 1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user