mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 13:43:51 +00:00
regulator: Late fixes for v6.1
This is more changes than I'd like this late although the diffstat is still fairly small, I kept on holding off as new fixes came in to give things time to soak in -next but should probably have tagged and sent an additional pull request earlier. There's some relatively large fixes to the twl6030 driver to fix issues with the TWL6032 variant which resulted from some work on the core TWL6030 driver, a couple of fixes for error handling paths (mostly in the core), and a nice stability fix for the sgl51000 driver that's been pulled out of a BSP. -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAmOBOHkACgkQJNaLcl1U h9DSNwf+KFunln/2mpx6UrLa5kl5QQGDtBruEcEBkKnUAx/YZlZ2nFT08bV4V1D0 /STa4PZdThem89VBRClQvxdyPE4qKIUvWsLmTUXF9P48m11bI+PMGCBMoKgjs4ZL jMTZi/JD+4oZcJcOG5Qu3rihdBxotrsvlk2QUMs+PaPx2JPyr1CpBXAseMkVcqrD QzyRWUgCjS2bfnc9Xd7gll1MXeSIcN2oD14ec//5Wv0KItGs2i0cOCUY+U4Dffus b+75g7sU4znCD6bcycKdTJEqcqrotrZycGnq3K36ycrAGulQrH4SwohEc2PUlnUa ZrKBjC6iFkSutk0dYlSz4k7AfRzjrw== =kf38 -----END PGP SIGNATURE----- Merge tag 'regulator-fix-v6.1-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator Pull regulator fixes from Mark Brown: "This is more changes than I'd like this late although the diffstat is still fairly small, I kept on holding off as new fixes came in to give things time to soak in -next but should probably have tagged and sent an additional pull request earlier. There's some relatively large fixes to the twl6030 driver to fix issues with the TWL6032 variant which resulted from some work on the core TWL6030 driver, a couple of fixes for error handling paths (mostly in the core), and a nice stability fix for the sgl51000 driver that's been pulled out of a BSP" * tag 'regulator-fix-v6.1-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator: regulator: twl6030: fix get status of twl6032 regulators regulator: twl6030: re-add TWL6032_SUBCLASS regulator: slg51000: Wait after asserting CS pin regulator: core: fix UAF in destroy_regulator() regulator: rt5759: fix OOB in validate_desc() regulator: core: fix kobject release warning and memory leak in regulator_register()
This commit is contained in:
commit
f10b439638
@ -5154,6 +5154,7 @@ static void regulator_dev_release(struct device *dev)
|
||||
{
|
||||
struct regulator_dev *rdev = dev_get_drvdata(dev);
|
||||
|
||||
debugfs_remove_recursive(rdev->debugfs);
|
||||
kfree(rdev->constraints);
|
||||
of_node_put(rdev->dev.of_node);
|
||||
kfree(rdev);
|
||||
@ -5644,11 +5645,15 @@ regulator_register(const struct regulator_desc *regulator_desc,
|
||||
mutex_lock(®ulator_list_mutex);
|
||||
regulator_ena_gpio_free(rdev);
|
||||
mutex_unlock(®ulator_list_mutex);
|
||||
put_device(&rdev->dev);
|
||||
rdev = NULL;
|
||||
clean:
|
||||
if (dangling_of_gpiod)
|
||||
gpiod_put(config->ena_gpiod);
|
||||
if (rdev && rdev->dev.of_node)
|
||||
of_node_put(rdev->dev.of_node);
|
||||
kfree(rdev);
|
||||
kfree(config);
|
||||
put_device(&rdev->dev);
|
||||
rinse:
|
||||
if (dangling_cfg_gpiod)
|
||||
gpiod_put(cfg->ena_gpiod);
|
||||
@ -5677,7 +5682,6 @@ void regulator_unregister(struct regulator_dev *rdev)
|
||||
|
||||
mutex_lock(®ulator_list_mutex);
|
||||
|
||||
debugfs_remove_recursive(rdev->debugfs);
|
||||
WARN_ON(rdev->open_count);
|
||||
regulator_remove_coupling(rdev);
|
||||
unset_regulator_supplies(rdev);
|
||||
|
@ -243,6 +243,7 @@ static int rt5759_regulator_register(struct rt5759_priv *priv)
|
||||
if (priv->chip_type == CHIP_TYPE_RT5759A)
|
||||
reg_desc->uV_step = RT5759A_STEP_UV;
|
||||
|
||||
memset(®_cfg, 0, sizeof(reg_cfg));
|
||||
reg_cfg.dev = priv->dev;
|
||||
reg_cfg.of_node = np;
|
||||
reg_cfg.init_data = of_get_regulator_init_data(priv->dev, np, reg_desc);
|
||||
|
@ -457,6 +457,8 @@ static int slg51000_i2c_probe(struct i2c_client *client)
|
||||
chip->cs_gpiod = cs_gpiod;
|
||||
}
|
||||
|
||||
usleep_range(10000, 11000);
|
||||
|
||||
i2c_set_clientdata(client, chip);
|
||||
chip->chip_irq = client->irq;
|
||||
chip->dev = dev;
|
||||
|
@ -67,6 +67,7 @@ struct twlreg_info {
|
||||
#define TWL6030_CFG_STATE_SLEEP 0x03
|
||||
#define TWL6030_CFG_STATE_GRP_SHIFT 5
|
||||
#define TWL6030_CFG_STATE_APP_SHIFT 2
|
||||
#define TWL6030_CFG_STATE_MASK 0x03
|
||||
#define TWL6030_CFG_STATE_APP_MASK (0x03 << TWL6030_CFG_STATE_APP_SHIFT)
|
||||
#define TWL6030_CFG_STATE_APP(v) (((v) & TWL6030_CFG_STATE_APP_MASK) >>\
|
||||
TWL6030_CFG_STATE_APP_SHIFT)
|
||||
@ -128,13 +129,14 @@ static int twl6030reg_is_enabled(struct regulator_dev *rdev)
|
||||
if (grp < 0)
|
||||
return grp;
|
||||
grp &= P1_GRP_6030;
|
||||
val = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_STATE);
|
||||
val = TWL6030_CFG_STATE_APP(val);
|
||||
} else {
|
||||
val = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_STATE);
|
||||
val &= TWL6030_CFG_STATE_MASK;
|
||||
grp = 1;
|
||||
}
|
||||
|
||||
val = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_STATE);
|
||||
val = TWL6030_CFG_STATE_APP(val);
|
||||
|
||||
return grp && (val == TWL6030_CFG_STATE_ON);
|
||||
}
|
||||
|
||||
@ -187,7 +189,12 @@ static int twl6030reg_get_status(struct regulator_dev *rdev)
|
||||
|
||||
val = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_STATE);
|
||||
|
||||
switch (TWL6030_CFG_STATE_APP(val)) {
|
||||
if (info->features & TWL6032_SUBCLASS)
|
||||
val &= TWL6030_CFG_STATE_MASK;
|
||||
else
|
||||
val = TWL6030_CFG_STATE_APP(val);
|
||||
|
||||
switch (val) {
|
||||
case TWL6030_CFG_STATE_ON:
|
||||
return REGULATOR_STATUS_NORMAL;
|
||||
|
||||
@ -530,6 +537,7 @@ static const struct twlreg_info TWL6030_INFO_##label = { \
|
||||
#define TWL6032_ADJUSTABLE_LDO(label, offset) \
|
||||
static const struct twlreg_info TWL6032_INFO_##label = { \
|
||||
.base = offset, \
|
||||
.features = TWL6032_SUBCLASS, \
|
||||
.desc = { \
|
||||
.name = #label, \
|
||||
.id = TWL6032_REG_##label, \
|
||||
@ -562,6 +570,7 @@ static const struct twlreg_info TWLFIXED_INFO_##label = { \
|
||||
#define TWL6032_ADJUSTABLE_SMPS(label, offset) \
|
||||
static const struct twlreg_info TWLSMPS_INFO_##label = { \
|
||||
.base = offset, \
|
||||
.features = TWL6032_SUBCLASS, \
|
||||
.desc = { \
|
||||
.name = #label, \
|
||||
.id = TWL6032_REG_##label, \
|
||||
|
Loading…
Reference in New Issue
Block a user