Merge branch 'next' into for-linus
[sfrench/cifs-2.6.git] / drivers / input / touchscreen / zinitix.c
index 1e70b8d2a8d79869c94200511c4b5e0c9fecd298..7c82c4f5fa6b331f2bf532c63c19a860ac13616e 100644 (file)
@@ -252,16 +252,27 @@ static int zinitix_init_touch(struct bt541_ts_data *bt541)
 
 static int zinitix_init_regulators(struct bt541_ts_data *bt541)
 {
-       struct i2c_client *client = bt541->client;
+       struct device *dev = &bt541->client->dev;
        int error;
 
-       bt541->supplies[0].supply = "vdd";
-       bt541->supplies[1].supply = "vddo";
-       error = devm_regulator_bulk_get(&client->dev,
+       /*
+        * Some older device trees have erroneous names for the regulators,
+        * so check if "vddo" is present and in that case use these names.
+        * Else use the proper supply names on the component.
+        */
+       if (of_find_property(dev->of_node, "vddo-supply", NULL)) {
+               bt541->supplies[0].supply = "vdd";
+               bt541->supplies[1].supply = "vddo";
+       } else {
+               /* Else use the proper supply names */
+               bt541->supplies[0].supply = "vcca";
+               bt541->supplies[1].supply = "vdd";
+       }
+       error = devm_regulator_bulk_get(dev,
                                        ARRAY_SIZE(bt541->supplies),
                                        bt541->supplies);
        if (error < 0) {
-               dev_err(&client->dev, "Failed to get regulators: %d\n", error);
+               dev_err(dev, "Failed to get regulators: %d\n", error);
                return error;
        }
 
@@ -560,6 +571,7 @@ static SIMPLE_DEV_PM_OPS(zinitix_pm_ops, zinitix_suspend, zinitix_resume);
 
 #ifdef CONFIG_OF
 static const struct of_device_id zinitix_of_match[] = {
+       { .compatible = "zinitix,bt532" },
        { .compatible = "zinitix,bt541" },
        { }
 };