[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:
nealtai 2018-01-12 07:17:55 +08:00 committed by lguohan
parent 9669b3477e
commit 41cdb8971f
2 changed files with 77 additions and 16 deletions

View 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

View File

@ -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;
} }