summaryrefslogtreecommitdiff
path: root/drivers/hwmon/hwmon.c
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2016-08-12 06:28:15 -0700
committerGuenter Roeck <linux@roeck-us.net>2016-09-08 21:34:16 -0700
commit86430c1a66fe490fc97b0970575c223e27dee49d (patch)
tree3a9cfc330173a7114a5a9b5896a4d3e33f115164 /drivers/hwmon/hwmon.c
parentaa18cc911ae2f172429d59169e95726b8e63525c (diff)
downloadlwn-86430c1a66fe490fc97b0970575c223e27dee49d.tar.gz
lwn-86430c1a66fe490fc97b0970575c223e27dee49d.zip
hwmon: (core) Avoid cyclic dependency between hwmon and thermal_sys
If both hwmon and thermal_sys are built as modules, and CONFIG_THERMAL_HWMON is enabled, the following cyclic module dependency is reported. depmod: ERROR: Found 2 modules in dependency cycles! depmod: ERROR: Cycle detected: hwmon -> thermal_sys -> hwmon Fixes: e4bce763adb2 ("hwmon: (core) New hwmon registration API") Reported-by: Vignesh R <vigneshr@ti.com> Cc: Keerthy J <j-keerthy@ti.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon/hwmon.c')
-rw-r--r--drivers/hwmon/hwmon.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
index fade170977e8..adae6848ffb2 100644
--- a/drivers/hwmon/hwmon.c
+++ b/drivers/hwmon/hwmon.c
@@ -108,7 +108,13 @@ static DEFINE_IDA(hwmon_ida);
/* Thermal zone handling */
-#if IS_REACHABLE(CONFIG_THERMAL) && defined(CONFIG_THERMAL_OF)
+/*
+ * The complex conditional is necessary to avoid a cyclic dependency
+ * between hwmon and thermal_sys modules.
+ */
+#if IS_REACHABLE(CONFIG_THERMAL) && defined(CONFIG_THERMAL_OF) && \
+ (!defined(CONFIG_THERMAL_HWMON) || \
+ !(defined(MODULE) && IS_MODULE(CONFIG_THERMAL)))
static int hwmon_thermal_get_temp(void *data, int *temp)
{
struct hwmon_thermal_data *tdata = data;
@@ -153,7 +159,7 @@ static int hwmon_thermal_add_sensor(struct device *dev,
{
return 0;
}
-#endif /* IS_REACHABLE(CONFIG_THERMAL) && defined(CONFIG_THERMAL_OF) */
+#endif /* IS_REACHABLE(CONFIG_THERMAL) && ... */
/* sysfs attribute management */