Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8f056611 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Merge tag 'regulator-v4.19-rc5' of...

Merge tag 'regulator-v4.19-rc5' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator

Mark writes:
  "regulator: Fixes for 4.19

   A collection of fairly minor bug fixes here, a couple of driver
   specific ones plus two core fixes.  There's one fix for the new
   suspend state code which fixes some confusion with constant values
   that are supposed to indicate noop operation and another fixing a
   race condition with the creation of sysfs files on new regulators."

* tag 'regulator-v4.19-rc5' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator:
  regulator: fix crash caused by null driver data
  regulator: Fix 'do-nothing' value for regulators without suspend state
  regulator: da9063: fix DT probing with constraints
  regulator: bd71837: Disable voltage monitoring for LDO3/4
parents f005de01 fb6de923
Loading
Loading
Loading
Loading
+19 −0
Original line number Original line Diff line number Diff line
@@ -569,6 +569,25 @@ static int bd71837_probe(struct platform_device *pdev)
			BD71837_REG_REGLOCK);
			BD71837_REG_REGLOCK);
	}
	}


	/*
	 * There is a HW quirk in BD71837. The shutdown sequence timings for
	 * bucks/LDOs which are controlled via register interface are changed.
	 * At PMIC poweroff the voltage for BUCK6/7 is cut immediately at the
	 * beginning of shut-down sequence. As bucks 6 and 7 are parent
	 * supplies for LDO5 and LDO6 - this causes LDO5/6 voltage
	 * monitoring to errorneously detect under voltage and force PMIC to
	 * emergency state instead of poweroff. In order to avoid this we
	 * disable voltage monitoring for LDO5 and LDO6
	 */
	err = regmap_update_bits(pmic->mfd->regmap, BD718XX_REG_MVRFLTMASK2,
				 BD718XX_LDO5_VRMON80 | BD718XX_LDO6_VRMON80,
				 BD718XX_LDO5_VRMON80 | BD718XX_LDO6_VRMON80);
	if (err) {
		dev_err(&pmic->pdev->dev,
			"Failed to disable voltage monitoring\n");
		goto err;
	}

	for (i = 0; i < ARRAY_SIZE(pmic_regulator_inits); i++) {
	for (i = 0; i < ARRAY_SIZE(pmic_regulator_inits); i++) {


		struct regulator_desc *desc;
		struct regulator_desc *desc;
+2 −2
Original line number Original line Diff line number Diff line
@@ -3161,7 +3161,7 @@ static inline int regulator_suspend_toggle(struct regulator_dev *rdev,
	if (!rstate->changeable)
	if (!rstate->changeable)
		return -EPERM;
		return -EPERM;


	rstate->enabled = en;
	rstate->enabled = (en) ? ENABLE_IN_SUSPEND : DISABLE_IN_SUSPEND;


	return 0;
	return 0;
}
}
@@ -4395,13 +4395,13 @@ regulator_register(const struct regulator_desc *regulator_desc,
	    !rdev->desc->fixed_uV)
	    !rdev->desc->fixed_uV)
		rdev->is_switch = true;
		rdev->is_switch = true;


	dev_set_drvdata(&rdev->dev, rdev);
	ret = device_register(&rdev->dev);
	ret = device_register(&rdev->dev);
	if (ret != 0) {
	if (ret != 0) {
		put_device(&rdev->dev);
		put_device(&rdev->dev);
		goto unset_supplies;
		goto unset_supplies;
	}
	}


	dev_set_drvdata(&rdev->dev, rdev);
	rdev_init_debugfs(rdev);
	rdev_init_debugfs(rdev);


	/* try to resolve regulators supply since a new one was registered */
	/* try to resolve regulators supply since a new one was registered */
+0 −2
Original line number Original line Diff line number Diff line
@@ -213,8 +213,6 @@ static void of_get_regulation_constraints(struct device_node *np,
		else if (of_property_read_bool(suspend_np,
		else if (of_property_read_bool(suspend_np,
					"regulator-off-in-suspend"))
					"regulator-off-in-suspend"))
			suspend_state->enabled = DISABLE_IN_SUSPEND;
			suspend_state->enabled = DISABLE_IN_SUSPEND;
		else
			suspend_state->enabled = DO_NOTHING_IN_SUSPEND;


		if (!of_property_read_u32(np, "regulator-suspend-min-microvolt",
		if (!of_property_read_u32(np, "regulator-suspend-min-microvolt",
					  &pval))
					  &pval))
+30 −3
Original line number Original line Diff line number Diff line
@@ -78,9 +78,9 @@ enum {
	BD71837_REG_TRANS_COND0        = 0x1F,
	BD71837_REG_TRANS_COND0        = 0x1F,
	BD71837_REG_TRANS_COND1        = 0x20,
	BD71837_REG_TRANS_COND1        = 0x20,
	BD71837_REG_VRFAULTEN          = 0x21,
	BD71837_REG_VRFAULTEN          = 0x21,
	BD71837_REG_MVRFLTMASK0        = 0x22,
	BD718XX_REG_MVRFLTMASK0        = 0x22,
	BD71837_REG_MVRFLTMASK1        = 0x23,
	BD718XX_REG_MVRFLTMASK1        = 0x23,
	BD71837_REG_MVRFLTMASK2        = 0x24,
	BD718XX_REG_MVRFLTMASK2        = 0x24,
	BD71837_REG_RCVCFG             = 0x25,
	BD71837_REG_RCVCFG             = 0x25,
	BD71837_REG_RCVNUM             = 0x26,
	BD71837_REG_RCVNUM             = 0x26,
	BD71837_REG_PWRONCONFIG0       = 0x27,
	BD71837_REG_PWRONCONFIG0       = 0x27,
@@ -159,6 +159,33 @@ enum {
#define BUCK8_MASK		0x3F
#define BUCK8_MASK		0x3F
#define BUCK8_DEFAULT		0x1E
#define BUCK8_DEFAULT		0x1E


/* BD718XX Voltage monitoring masks */
#define BD718XX_BUCK1_VRMON80           0x1
#define BD718XX_BUCK1_VRMON130          0x2
#define BD718XX_BUCK2_VRMON80           0x4
#define BD718XX_BUCK2_VRMON130          0x8
#define BD718XX_1ST_NODVS_BUCK_VRMON80  0x1
#define BD718XX_1ST_NODVS_BUCK_VRMON130 0x2
#define BD718XX_2ND_NODVS_BUCK_VRMON80  0x4
#define BD718XX_2ND_NODVS_BUCK_VRMON130 0x8
#define BD718XX_3RD_NODVS_BUCK_VRMON80  0x10
#define BD718XX_3RD_NODVS_BUCK_VRMON130 0x20
#define BD718XX_4TH_NODVS_BUCK_VRMON80  0x40
#define BD718XX_4TH_NODVS_BUCK_VRMON130 0x80
#define BD718XX_LDO1_VRMON80            0x1
#define BD718XX_LDO2_VRMON80            0x2
#define BD718XX_LDO3_VRMON80            0x4
#define BD718XX_LDO4_VRMON80            0x8
#define BD718XX_LDO5_VRMON80            0x10
#define BD718XX_LDO6_VRMON80            0x20

/* BD71837 specific voltage monitoring masks */
#define BD71837_BUCK3_VRMON80           0x10
#define BD71837_BUCK3_VRMON130          0x20
#define BD71837_BUCK4_VRMON80           0x40
#define BD71837_BUCK4_VRMON130          0x80
#define BD71837_LDO7_VRMON80            0x40

/* BD71837_REG_IRQ bits */
/* BD71837_REG_IRQ bits */
#define IRQ_SWRST		0x40
#define IRQ_SWRST		0x40
#define IRQ_PWRON_S		0x20
#define IRQ_PWRON_S		0x20
+3 −3
Original line number Original line Diff line number Diff line
@@ -48,9 +48,9 @@ struct regulator;
 * DISABLE_IN_SUSPEND	- turn off regulator in suspend states
 * DISABLE_IN_SUSPEND	- turn off regulator in suspend states
 * ENABLE_IN_SUSPEND	- keep regulator on in suspend states
 * ENABLE_IN_SUSPEND	- keep regulator on in suspend states
 */
 */
#define DO_NOTHING_IN_SUSPEND	(-1)
#define DO_NOTHING_IN_SUSPEND	0
#define DISABLE_IN_SUSPEND	0
#define DISABLE_IN_SUSPEND	1
#define ENABLE_IN_SUSPEND	1
#define ENABLE_IN_SUSPEND	2


/* Regulator active discharge flags */
/* Regulator active discharge flags */
enum regulator_active_discharge {
enum regulator_active_discharge {