hwmon: fix potential sensor registration fail if of_node is missing
[ Upstream commit2315332efc
] It is not sufficient to check of_node in current device. In some cases, this would cause the sensor registration to fail. This patch looks for device's ancestors to find a valid of_node if any. Fixes:d560168b5d
("hwmon: (core) New hwmon registration API") Signed-off-by: Phinex Hung <phinex@realtek.com> Link: https://lore.kernel.org/r/20230321060224.3819-1-phinex@realtek.com Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Родитель
8f6b943f9f
Коммит
5662f50cd9
|
@ -736,6 +736,7 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
|
|||
{
|
||||
struct hwmon_device *hwdev;
|
||||
struct device *hdev;
|
||||
struct device *tdev = dev;
|
||||
int i, err, id;
|
||||
|
||||
/* Complain about invalid characters in hwmon name attribute */
|
||||
|
@ -793,7 +794,9 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
|
|||
hwdev->name = name;
|
||||
hdev->class = &hwmon_class;
|
||||
hdev->parent = dev;
|
||||
hdev->of_node = dev ? dev->of_node : NULL;
|
||||
while (tdev && !tdev->of_node)
|
||||
tdev = tdev->parent;
|
||||
hdev->of_node = tdev ? tdev->of_node : NULL;
|
||||
hwdev->chip = chip;
|
||||
dev_set_drvdata(hdev, drvdata);
|
||||
dev_set_name(hdev, HWMON_ID_FORMAT, id);
|
||||
|
@ -805,7 +808,7 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
|
|||
|
||||
INIT_LIST_HEAD(&hwdev->tzdata);
|
||||
|
||||
if (dev && dev->of_node && chip && chip->ops->read &&
|
||||
if (hdev->of_node && chip && chip->ops->read &&
|
||||
chip->info[0]->type == hwmon_chip &&
|
||||
(chip->info[0]->config[0] & HWMON_C_REGISTER_TZ)) {
|
||||
err = hwmon_thermal_register_sensors(hdev);
|
||||
|
|
Загрузка…
Ссылка в новой задаче