hwmon: (occ) Check for device property for setting OCC active during probe
authorEddie James <eajames@linux.ibm.com>
Tue, 9 Aug 2022 20:07:01 +0000 (15:07 -0500)
committerJoel Stanley <joel@jms.id.au>
Wed, 28 Sep 2022 11:40:57 +0000 (21:10 +0930)
A previous commit changed the existing behavior of the driver to skip
attempting to communicate with the OCC during probe. Return to the
previous default behavior of automatically communicating with the OCC
and make it optional with a new device-tree property.

Signed-off-by: Eddie James <eajames@linux.ibm.com>
Acked-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20220809200701.218059-4-eajames@linux.ibm.com
Signed-off-by: Joel Stanley <joel@jms.id.au>
drivers/hwmon/occ/common.c
drivers/hwmon/occ/p9_sbe.c

index 45407b12db4b481342f3e86e5082ae0aefe8c0ed..dd690f700d4990e5f11785f8777b936061f9215a 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/math64.h>
 #include <linux/module.h>
 #include <linux/mutex.h>
+#include <linux/property.h>
 #include <linux/sysfs.h>
 #include <asm/unaligned.h>
 
@@ -1216,8 +1217,16 @@ int occ_setup(struct occ *occ)
        occ->groups[0] = &occ->group;
 
        rc = occ_setup_sysfs(occ);
-       if (rc)
+       if (rc) {
                dev_err(occ->bus_dev, "failed to setup sysfs: %d\n", rc);
+               return rc;
+       }
+
+       if (!device_property_read_bool(occ->bus_dev, "ibm,no-poll-on-init")) {
+               rc = occ_active(occ, true);
+               if (rc)
+                       occ_shutdown_sysfs(occ);
+       }
 
        return rc;
 }
index f3791a589b01bf2d82e1877328dd3af9db3f6ce5..96521363b696ec9eb02c6446ecfa07e43f82b103 100644 (file)
@@ -7,6 +7,7 @@
 #include <linux/fsi-occ.h>
 #include <linux/mm.h>
 #include <linux/module.h>
+#include <linux/mod_devicetable.h>
 #include <linux/mutex.h>
 #include <linux/platform_device.h>
 #include <linux/string.h>
@@ -181,9 +182,17 @@ static int p9_sbe_occ_remove(struct platform_device *pdev)
        return 0;
 }
 
+static const struct of_device_id p9_sbe_occ_of_match[] = {
+       { .compatible = "ibm,p9-occ-hwmon" },
+       { .compatible = "ibm,p10-occ-hwmon" },
+       {}
+};
+MODULE_DEVICE_TABLE(of, p9_sbe_occ_of_match);
+
 static struct platform_driver p9_sbe_occ_driver = {
        .driver = {
                .name = "occ-hwmon",
+               .of_match_table = p9_sbe_occ_of_match,
        },
        .probe  = p9_sbe_occ_probe,
        .remove = p9_sbe_occ_remove,