mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-19 04:56:18 +07:00
drm/nouveau/iccsense: convert to linked list
v2: add list_del calls Signed-off-by: Karol Herbst <nouveau@karolherbst.de> Reviewed-by: Martin Peres <martin.peres@free.fr> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
d03e0f2748
commit
92224e751f
@ -3,12 +3,10 @@
|
||||
|
||||
#include <core/subdev.h>
|
||||
|
||||
struct nkvm_iccsense_rail;
|
||||
struct nvkm_iccsense {
|
||||
struct nvkm_subdev subdev;
|
||||
u8 rail_count;
|
||||
bool data_valid;
|
||||
struct nvkm_iccsense_rail *rails;
|
||||
struct list_head rails;
|
||||
};
|
||||
|
||||
int gf100_iccsense_new(struct nvkm_device *, int index, struct nvkm_iccsense **);
|
||||
|
@ -689,7 +689,7 @@ nouveau_hwmon_init(struct drm_device *dev)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (iccsense && iccsense->data_valid && iccsense->rail_count) {
|
||||
if (iccsense && iccsense->data_valid && !list_empty(&iccsense->rails)) {
|
||||
ret = sysfs_create_group(&hwmon_dev->kobj,
|
||||
&hwmon_power_attrgroup);
|
||||
if (ret)
|
||||
|
@ -98,25 +98,21 @@ nvkm_iccsense_ina3221_read(struct nvkm_iccsense *iccsense,
|
||||
int
|
||||
nvkm_iccsense_read_all(struct nvkm_iccsense *iccsense)
|
||||
{
|
||||
int result = 0, i;
|
||||
int result = 0;
|
||||
struct nvkm_iccsense_rail *rail;
|
||||
|
||||
if (!iccsense)
|
||||
return -EINVAL;
|
||||
|
||||
if (iccsense->rail_count == 0)
|
||||
return -ENODEV;
|
||||
|
||||
for (i = 0; i < iccsense->rail_count; ++i) {
|
||||
list_for_each_entry(rail, &iccsense->rails, head) {
|
||||
int res;
|
||||
struct nvkm_iccsense_rail *rail = &iccsense->rails[i];
|
||||
if (!rail->read)
|
||||
return -ENODEV;
|
||||
|
||||
res = rail->read(iccsense, rail);
|
||||
if (res >= 0)
|
||||
result += res;
|
||||
else
|
||||
if (res < 0)
|
||||
return res;
|
||||
result += res;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -125,9 +121,12 @@ static void *
|
||||
nvkm_iccsense_dtor(struct nvkm_subdev *subdev)
|
||||
{
|
||||
struct nvkm_iccsense *iccsense = nvkm_iccsense(subdev);
|
||||
struct nvkm_iccsense_rail *rail, *tmp;
|
||||
|
||||
if (iccsense->rails)
|
||||
kfree(iccsense->rails);
|
||||
list_for_each_entry_safe(rail, tmp, &iccsense->rails, head) {
|
||||
list_del(&rail->head);
|
||||
kfree(rail);
|
||||
}
|
||||
|
||||
return iccsense;
|
||||
}
|
||||
@ -145,11 +144,6 @@ nvkm_iccsense_oneinit(struct nvkm_subdev *subdev)
|
||||
|| !stbl.nr_entry)
|
||||
return 0;
|
||||
|
||||
iccsense->rails = kmalloc(sizeof(*iccsense->rails) * stbl.nr_entry,
|
||||
GFP_KERNEL);
|
||||
if (!iccsense->rails)
|
||||
return -ENOMEM;
|
||||
|
||||
iccsense->data_valid = true;
|
||||
for (i = 0; i < stbl.nr_entry; ++i) {
|
||||
struct pwr_rail_t *r = &stbl.rail[i];
|
||||
@ -184,7 +178,10 @@ nvkm_iccsense_oneinit(struct nvkm_subdev *subdev)
|
||||
continue;
|
||||
}
|
||||
|
||||
rail = &iccsense->rails[iccsense->rail_count];
|
||||
rail = kmalloc(sizeof(*rail), GFP_KERNEL);
|
||||
if (!rail)
|
||||
return -ENOMEM;
|
||||
|
||||
switch (extdev.type) {
|
||||
case NVBIOS_EXTDEV_INA209:
|
||||
rail->read = nvkm_iccsense_ina209_read;
|
||||
@ -201,7 +198,7 @@ nvkm_iccsense_oneinit(struct nvkm_subdev *subdev)
|
||||
rail->rail = r->rail;
|
||||
rail->mohm = r->resistor_mohm;
|
||||
rail->i2c = &i2c_bus->i2c;
|
||||
++iccsense->rail_count;
|
||||
list_add_tail(&rail->head, &iccsense->rails);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -224,6 +221,7 @@ nvkm_iccsense_new_(struct nvkm_device *device, int index,
|
||||
{
|
||||
if (!(*iccsense = kzalloc(sizeof(**iccsense), GFP_KERNEL)))
|
||||
return -ENOMEM;
|
||||
INIT_LIST_HEAD(&(*iccsense)->rails);
|
||||
nvkm_iccsense_ctor(device, index, *iccsense);
|
||||
return 0;
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <subdev/iccsense.h>
|
||||
|
||||
struct nvkm_iccsense_rail {
|
||||
struct list_head head;
|
||||
int (*read)(struct nvkm_iccsense *, struct nvkm_iccsense_rail *);
|
||||
struct i2c_adapter *i2c;
|
||||
u8 addr;
|
||||
|
Loading…
Reference in New Issue
Block a user