mfd: da9052: Make touchscreen registration optional
authorSebastian Reichel <sebastian.reichel@collabora.co.uk>
Mon, 21 Aug 2017 14:54:02 +0000 (16:54 +0200)
committerLee Jones <lee.jones@linaro.org>
Tue, 22 Aug 2017 07:44:55 +0000 (08:44 +0100)
If the touchscreen pins are used as general purpose analogue
input, the touchscreen driver should not be used. The pins
will be handled by the existing hwmon driver instead.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/da9052-core.c

index a88c2065d8ab00f3a56239c374b675813b212480..a23a3a1c7061114dd74687e65248dc9efd43af3d 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/mfd/core.h>
 #include <linux/slab.h>
 #include <linux/module.h>
+#include <linux/property.h>
 
 #include <linux/mfd/da9052/da9052.h>
 #include <linux/mfd/da9052/pdata.h>
@@ -518,9 +519,6 @@ static const struct mfd_cell da9052_subdev_info[] = {
        {
                .name = "da9052-wled3",
        },
-       {
-               .name = "da9052-tsi",
-       },
        {
                .name = "da9052-bat",
        },
@@ -529,6 +527,10 @@ static const struct mfd_cell da9052_subdev_info[] = {
        },
 };
 
+static const struct mfd_cell da9052_tsi_subdev_info[] = {
+       { .name = "da9052-tsi" },
+};
+
 const struct regmap_config da9052_regmap_config = {
        .reg_bits = 8,
        .val_bits = 8,
@@ -619,9 +621,27 @@ int da9052_device_init(struct da9052 *da9052, u8 chip_id)
                goto err;
        }
 
+       /*
+        * Check if touchscreen pins are used are analogue input instead
+        * of having a touchscreen connected to them. The analogue input
+        * functionality will be provided by hwmon driver (if enabled).
+        */
+       if (!device_property_read_bool(da9052->dev, "dlg,tsi-as-adc")) {
+               ret = mfd_add_devices(da9052->dev, PLATFORM_DEVID_AUTO,
+                                     da9052_tsi_subdev_info,
+                                     ARRAY_SIZE(da9052_tsi_subdev_info),
+                                     NULL, 0, NULL);
+               if (ret) {
+                       dev_err(da9052->dev, "failed to add TSI subdev: %d\n",
+                               ret);
+                       goto err;
+               }
+       }
+
        return 0;
 
 err:
+       mfd_remove_devices(da9052->dev);
        da9052_irq_exit(da9052);
 
        return ret;