MODULE_DESCRIPTION("I2C driver for Si4713 FM Radio Transmitter");
 MODULE_VERSION("0.0.1");
 
-static const char *si4713_supply_names[SI4713_NUM_SUPPLIES] = {
-       "vio",
-       "vdd",
-};
-
 #define DEFAULT_RDS_PI                 0x00
 #define DEFAULT_RDS_PTY                        0x00
 #define DEFAULT_RDS_DEVIATION          0x00C8
        if (sdev->power_state)
                return 0;
 
-       err = regulator_bulk_enable(ARRAY_SIZE(sdev->supplies),
-                                   sdev->supplies);
-       if (err) {
-               v4l2_err(&sdev->sd, "Failed to enable supplies: %d\n", err);
-               return err;
+       if (sdev->supplies) {
+               err = regulator_bulk_enable(sdev->supplies, sdev->supply_data);
+               if (err) {
+                       v4l2_err(&sdev->sd, "Failed to enable supplies: %d\n", err);
+                       return err;
+               }
        }
        if (gpio_is_valid(sdev->gpio_reset)) {
                udelay(50);
                if (client->irq)
                        err = si4713_write_property(sdev, SI4713_GPO_IEN,
                                                SI4713_STC_INT | SI4713_CTS);
-       } else {
-               if (gpio_is_valid(sdev->gpio_reset))
-                       gpio_set_value(sdev->gpio_reset, 0);
-               err = regulator_bulk_disable(ARRAY_SIZE(sdev->supplies),
-                                            sdev->supplies);
+               return err;
+       }
+       if (gpio_is_valid(sdev->gpio_reset))
+               gpio_set_value(sdev->gpio_reset, 0);
+       if (sdev->supplies) {
+               err = regulator_bulk_disable(sdev->supplies, sdev->supply_data);
                if (err)
                        v4l2_err(&sdev->sd,
                                 "Failed to disable supplies: %d\n", err);
                v4l2_dbg(1, debug, &sdev->sd, "Device in reset mode\n");
                if (gpio_is_valid(sdev->gpio_reset))
                        gpio_set_value(sdev->gpio_reset, 0);
-               err = regulator_bulk_disable(ARRAY_SIZE(sdev->supplies),
-                                            sdev->supplies);
-               if (err)
-                       v4l2_err(&sdev->sd,
-                                "Failed to disable supplies: %d\n", err);
+               if (sdev->supplies) {
+                       err = regulator_bulk_disable(sdev->supplies,
+                                                    sdev->supply_data);
+                       if (err)
+                               v4l2_err(&sdev->sd,
+                                        "Failed to disable supplies: %d\n", err);
+               }
                sdev->power_state = POWER_OFF;
        }
 
                }
                sdev->gpio_reset = pdata->gpio_reset;
                gpio_direction_output(sdev->gpio_reset, 0);
+               sdev->supplies = pdata->supplies;
        }
 
-       for (i = 0; i < ARRAY_SIZE(sdev->supplies); i++)
-               sdev->supplies[i].supply = si4713_supply_names[i];
+       for (i = 0; i < sdev->supplies; i++)
+               sdev->supply_data[i].supply = pdata->supply_names[i];
 
-       rval = regulator_bulk_get(&client->dev, ARRAY_SIZE(sdev->supplies),
-                                 sdev->supplies);
+       rval = regulator_bulk_get(&client->dev, sdev->supplies,
+                                 sdev->supply_data);
        if (rval) {
                dev_err(&client->dev, "Cannot get regulators: %d\n", rval);
                goto free_gpio;
 free_ctrls:
        v4l2_ctrl_handler_free(hdl);
 put_reg:
-       regulator_bulk_free(ARRAY_SIZE(sdev->supplies), sdev->supplies);
+       regulator_bulk_free(sdev->supplies, sdev->supply_data);
 free_gpio:
        if (gpio_is_valid(sdev->gpio_reset))
                gpio_free(sdev->gpio_reset);
 
        v4l2_device_unregister_subdev(sd);
        v4l2_ctrl_handler_free(sd->ctrl_handler);
-       regulator_bulk_free(ARRAY_SIZE(sdev->supplies), sdev->supplies);
+       regulator_bulk_free(sdev->supplies, sdev->supply_data);
        if (gpio_is_valid(sdev->gpio_reset))
                gpio_free(sdev->gpio_reset);
        kfree(sdev);