This driver can also be built as a module. If so, the module will
          be called pli1209bc.
 
+config SENSORS_PLI1209BC_REGULATOR
+       bool "Regulator support for PLI1209BC"
+       depends on SENSORS_PLI1209BC && REGULATOR
+       help
+         If you say yes here you get regulator support for Vicor PLI1209BC
+         Digital Supervisor.
+
 config SENSORS_PM6764TR
        tristate "ST PM6764TR"
        help
 
 #include <linux/i2c.h>
 #include <linux/module.h>
 #include <linux/pmbus.h>
+#include <linux/regulator/driver.h>
 #include "pmbus.h"
 
 /*
                        return data;
                data = sign_extend32(data, 15) * 10;
                return clamp_val(data, -32768, 32767) & 0xffff;
+       /*
+        * PMBUS_READ_VOUT and PMBUS_READ_TEMPERATURE_1 return invalid data
+        * when the BCM is turned off. Since it is not possible to return
+        * ENODATA error, return zero instead.
+        */
+       case PMBUS_READ_VOUT:
+       case PMBUS_READ_TEMPERATURE_1:
+               data = pmbus_read_word_data(client, page, phase,
+                                           PMBUS_STATUS_WORD);
+               if (data < 0)
+                       return data;
+               if (data & PB_STATUS_POWER_GOOD_N)
+                       return 0;
+               return pmbus_read_word_data(client, page, phase, reg);
        default:
                return -ENODATA;
        }
 }
 
+#if IS_ENABLED(CONFIG_SENSORS_PLI1209BC_REGULATOR)
+static const struct regulator_desc pli1209bc_reg_desc = {
+       .name = "vout2",
+       .id = 1,
+       .of_match = of_match_ptr("vout2"),
+       .regulators_node = of_match_ptr("regulators"),
+       .ops = &pmbus_regulator_ops,
+       .type = REGULATOR_VOLTAGE,
+       .owner = THIS_MODULE,
+};
+#endif
+
 static struct pmbus_driver_info pli1209bc_info = {
        .pages = 2,
        .format[PSC_VOLTAGE_IN] = direct,
            | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP
            | PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_STATUS_INPUT,
        .read_word_data = pli1209bc_read_word_data,
+#if IS_ENABLED(CONFIG_SENSORS_PLI1209BC_REGULATOR)
+       .num_regulators = 1,
+       .reg_desc = &pli1209bc_reg_desc,
+#endif
 };
 
 static int pli1209bc_probe(struct i2c_client *client)