Merge tag 'hardening-v6.6-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/kees...
[platform/kernel/linux-starfive.git] / drivers / leds / leds-aw2013.c
index 5976564..91f44b2 100644 (file)
@@ -62,7 +62,7 @@ struct aw2013_led {
 
 struct aw2013 {
        struct mutex mutex; /* held when writing to registers */
-       struct regulator *vcc_regulator;
+       struct regulator_bulk_data regulators[2];
        struct i2c_client *client;
        struct aw2013_led leds[AW2013_MAX_LEDS];
        struct regmap *regmap;
@@ -106,10 +106,11 @@ static void aw2013_chip_disable(struct aw2013 *chip)
 
        regmap_write(chip->regmap, AW2013_GCR, 0);
 
-       ret = regulator_disable(chip->vcc_regulator);
+       ret = regulator_bulk_disable(ARRAY_SIZE(chip->regulators),
+                                    chip->regulators);
        if (ret) {
                dev_err(&chip->client->dev,
-                       "Failed to disable regulator: %d\n", ret);
+                       "Failed to disable regulators: %d\n", ret);
                return;
        }
 
@@ -123,10 +124,11 @@ static int aw2013_chip_enable(struct aw2013 *chip)
        if (chip->enabled)
                return 0;
 
-       ret = regulator_enable(chip->vcc_regulator);
+       ret = regulator_bulk_enable(ARRAY_SIZE(chip->regulators),
+                                   chip->regulators);
        if (ret) {
                dev_err(&chip->client->dev,
-                       "Failed to enable regulator: %d\n", ret);
+                       "Failed to enable regulators: %d\n", ret);
                return ret;
        }
        chip->enabled = true;
@@ -348,19 +350,23 @@ static int aw2013_probe(struct i2c_client *client)
                goto error;
        }
 
-       chip->vcc_regulator = devm_regulator_get(&client->dev, "vcc");
-       ret = PTR_ERR_OR_ZERO(chip->vcc_regulator);
-       if (ret) {
+       chip->regulators[0].supply = "vcc";
+       chip->regulators[1].supply = "vio";
+       ret = devm_regulator_bulk_get(&client->dev,
+                                     ARRAY_SIZE(chip->regulators),
+                                     chip->regulators);
+       if (ret < 0) {
                if (ret != -EPROBE_DEFER)
                        dev_err(&client->dev,
-                               "Failed to request regulator: %d\n", ret);
+                               "Failed to request regulators: %d\n", ret);
                goto error;
        }
 
-       ret = regulator_enable(chip->vcc_regulator);
+       ret = regulator_bulk_enable(ARRAY_SIZE(chip->regulators),
+                                   chip->regulators);
        if (ret) {
                dev_err(&client->dev,
-                       "Failed to enable regulator: %d\n", ret);
+                       "Failed to enable regulators: %d\n", ret);
                goto error;
        }
 
@@ -382,10 +388,11 @@ static int aw2013_probe(struct i2c_client *client)
        if (ret < 0)
                goto error_reg;
 
-       ret = regulator_disable(chip->vcc_regulator);
+       ret = regulator_bulk_disable(ARRAY_SIZE(chip->regulators),
+                                    chip->regulators);
        if (ret) {
                dev_err(&client->dev,
-                       "Failed to disable regulator: %d\n", ret);
+                       "Failed to disable regulators: %d\n", ret);
                goto error;
        }
 
@@ -394,7 +401,8 @@ static int aw2013_probe(struct i2c_client *client)
        return 0;
 
 error_reg:
-       regulator_disable(chip->vcc_regulator);
+       regulator_bulk_disable(ARRAY_SIZE(chip->regulators),
+                              chip->regulators);
 
 error:
        mutex_destroy(&chip->mutex);
@@ -420,7 +428,7 @@ MODULE_DEVICE_TABLE(of, aw2013_match_table);
 static struct i2c_driver aw2013_driver = {
        .driver = {
                .name = "leds-aw2013",
-               .of_match_table = of_match_ptr(aw2013_match_table),
+               .of_match_table = aw2013_match_table,
        },
        .probe = aw2013_probe,
        .remove = aw2013_remove,