[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
|
* An hwmon driver for delta AG9032v1 PSU
|
||||||
* dps_800ab_16_d.c - Support for DPS-800AB-16 D Power Supply Module
|
* 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 ym2651y.c
|
||||||
* Based on ad7414.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) {
|
if (status < 0) {
|
||||||
dev_dbg(&client->dev, "reg %d, err %d\n",
|
dev_dbg(&client->dev, "reg %d, err %d\n",
|
||||||
regs_byte[i].reg, status);
|
regs_byte[i].reg, status);
|
||||||
|
*(regs_byte[i].value) = 0;
|
||||||
} else {
|
} else {
|
||||||
*(regs_byte[i].value) = status;
|
*(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) {
|
if (status < 0) {
|
||||||
dev_dbg(&client->dev, "reg %d, err %d\n",
|
dev_dbg(&client->dev, "reg %d, err %d\n",
|
||||||
regs_word[i].reg, status);
|
regs_word[i].reg, status);
|
||||||
|
*(regs_word[i].value) = 0;
|
||||||
} else {
|
} else {
|
||||||
*(regs_word[i].value) = status;
|
*(regs_word[i].value) = status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
command = 0x9a; /* PSU mfr_model */
|
command = 0x9a; /* PSU mfr_model */
|
||||||
|
//data->mfr_model[1] = '\0';
|
||||||
status = dps_800ab_16_d_read_block(client, command,
|
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);
|
||||||
data->mfr_model[ARRAY_SIZE(data->mfr_model) - 1] = '\0';
|
data->mfr_model[ARRAY_SIZE(data->mfr_model) - 1] = '\0';
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
dev_dbg(&client->dev, "reg %d, err %d\n", command,
|
dev_dbg(&client->dev, "reg %d, err %d\n", command,status);
|
||||||
status);
|
data->mfr_model[1] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
command = 0x9e; /* PSU mfr_serial */
|
command = 0x9e; /* PSU mfr_serial */
|
||||||
status = dps_800ab_16_d_read_block(client, command,
|
//data->mfr_serial[1] = '\0';
|
||||||
data->mfr_serial, ARRAY_SIZE(data->mfr_serial) - 1);
|
status = dps_800ab_16_d_read_block(client, command,
|
||||||
data->mfr_serial[ARRAY_SIZE(data->mfr_serial) - 1] = '\0';
|
data->mfr_serial, ARRAY_SIZE(data->mfr_serial) - 1);
|
||||||
if (status < 0) {
|
data->mfr_serial[ARRAY_SIZE(data->mfr_serial) - 1] = '\0';
|
||||||
dev_dbg(&client->dev, "reg %d, err %d\n", command,
|
if (status < 0) {
|
||||||
status);
|
dev_dbg(&client->dev, "reg %d, err %d\n", command,status);
|
||||||
}
|
data->mfr_serial[1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
data->valid = 1;
|
data->valid = 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user