···157157 },158158};159159160160+static struct mfd_cell regulator_devs[] = {161161+ {162162+ .name = "88pm80x-regulator",163163+ .id = -1,164164+ },165165+};166166+160167static const struct regmap_irq pm800_irqs[] = {161168 /* INT0 */162169 [PM800_IRQ_ONKEY] = {···346339 return 0;347340}348341342342+static int device_regulator_init(struct pm80x_chip *chip,343343+ struct pm80x_platform_data *pdata)344344+{345345+ int ret;346346+347347+ ret = mfd_add_devices(chip->dev, 0, ®ulator_devs[0],348348+ ARRAY_SIZE(regulator_devs), NULL, 0, NULL);349349+ if (ret) {350350+ dev_err(chip->dev, "Failed to add regulator subdev\n");351351+ return ret;352352+ }353353+354354+ return 0;355355+}356356+349357static int device_irq_init_800(struct pm80x_chip *chip)350358{351359 struct regmap *map = chip->regmap;···519497 ret = device_rtc_init(chip, pdata);520498 if (ret) {521499 dev_err(chip->dev, "Failed to add rtc subdev\n");500500+ goto out;501501+ }502502+503503+ ret = device_regulator_init(chip, pdata);504504+ if (ret) {505505+ dev_err(chip->dev, "Failed to add regulators subdev\n");522506 goto out;523507 }524508
+8
include/linux/mfd/88pm80x.h
···307307308308struct pm80x_platform_data {309309 struct pm80x_rtc_pdata *rtc;310310+ /*311311+ * For the regulator not defined, set regulators[not_defined] to be312312+ * NULL. num_regulators are the number of regulators supposed to be313313+ * initialized. If all regulators are not defined, set num_regulators314314+ * to be 0.315315+ */316316+ struct regulator_init_data *regulators[PM800_ID_RG_MAX];317317+ unsigned int num_regulators;310318 int irq_mode; /* Clear interrupt by read/write(0/1) */311319 int batt_det; /* enable/disable */312320 int (*plat_config)(struct pm80x_chip *chip,