mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-17 20:54:10 +00:00
Merge series "regulator: unexport regulator_lock/unlock()" from Michał Mirosław <mirq-linux@rere.qmqm.pl>:
This removes regulator_lock/unlock() calls around regulator_notifier_call_chain() as they are redundant - drivers already have to guarantee regulator_dev's existence during the call. This should make reasoing about the lock easier, as this was the only use outside regulator core code. The only client that needed recursive locking from the notifier chain was drivers/usb/host/ohci-da8xx.c, which responds to over-current notification by calling regulator_disable(). Michał Mirosław (3): regulator: don't require mutex for regulator_notifier_call_chain() regulator: remove locking around regulator_notifier_call_chain() regulator: unexport regulator_lock/unlock() drivers/regulator/core.c | 11 +++-------- drivers/regulator/da9055-regulator.c | 2 -- drivers/regulator/da9062-regulator.c | 2 -- drivers/regulator/da9063-regulator.c | 2 -- drivers/regulator/da9210-regulator.c | 4 ---- drivers/regulator/da9211-regulator.c | 4 ---- drivers/regulator/lp8755.c | 6 ------ drivers/regulator/ltc3589.c | 10 ++-------- drivers/regulator/ltc3676.c | 10 ++-------- drivers/regulator/pv88060-regulator.c | 10 ++-------- drivers/regulator/pv88080-regulator.c | 10 ++-------- drivers/regulator/pv88090-regulator.c | 10 ++-------- drivers/regulator/slg51000-regulator.c | 4 ---- drivers/regulator/stpmic1_regulator.c | 4 ---- drivers/regulator/wm831x-dcdc.c | 4 ---- drivers/regulator/wm831x-isink.c | 2 -- drivers/regulator/wm831x-ldo.c | 2 -- drivers/regulator/wm8350-regulator.c | 2 -- include/linux/regulator/driver.h | 3 --- 19 files changed, 13 insertions(+), 89 deletions(-) -- 2.20.1
This commit is contained in:
commit
567444fbdd
18 changed files with 11 additions and 82 deletions
|
@ -4725,14 +4725,11 @@ EXPORT_SYMBOL_GPL(regulator_bulk_free);
|
|||
* @data: callback-specific data.
|
||||
*
|
||||
* Called by regulator drivers to notify clients a regulator event has
|
||||
* occurred. We also notify regulator clients downstream.
|
||||
* Note lock must be held by caller.
|
||||
* occurred.
|
||||
*/
|
||||
int regulator_notifier_call_chain(struct regulator_dev *rdev,
|
||||
unsigned long event, void *data)
|
||||
{
|
||||
lockdep_assert_held_once(&rdev->mutex.base);
|
||||
|
||||
_notifier_call_chain(rdev, event, data);
|
||||
return NOTIFY_DONE;
|
||||
|
||||
|
|
|
@ -485,10 +485,8 @@ static irqreturn_t da9055_ldo5_6_oc_irq(int irq, void *data)
|
|||
{
|
||||
struct da9055_regulator *regulator = data;
|
||||
|
||||
regulator_lock(regulator->rdev);
|
||||
regulator_notifier_call_chain(regulator->rdev,
|
||||
REGULATOR_EVENT_OVER_CURRENT, NULL);
|
||||
regulator_unlock(regulator->rdev);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
|
|
@ -907,10 +907,8 @@ static irqreturn_t da9062_ldo_lim_event(int irq, void *data)
|
|||
continue;
|
||||
|
||||
if (BIT(regl->info->oc_event.lsb) & bits) {
|
||||
regulator_lock(regl->rdev);
|
||||
regulator_notifier_call_chain(regl->rdev,
|
||||
REGULATOR_EVENT_OVER_CURRENT, NULL);
|
||||
regulator_unlock(regl->rdev);
|
||||
handled = IRQ_HANDLED;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -574,10 +574,8 @@ static irqreturn_t da9063_ldo_lim_event(int irq, void *data)
|
|||
continue;
|
||||
|
||||
if (BIT(regl->info->oc_event.lsb) & bits) {
|
||||
regulator_lock(regl->rdev);
|
||||
regulator_notifier_call_chain(regl->rdev,
|
||||
REGULATOR_EVENT_OVER_CURRENT, NULL);
|
||||
regulator_unlock(regl->rdev);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -77,8 +77,6 @@ static irqreturn_t da9210_irq_handler(int irq, void *data)
|
|||
if (error < 0)
|
||||
goto error_i2c;
|
||||
|
||||
regulator_lock(chip->rdev);
|
||||
|
||||
if (val & DA9210_E_OVCURR) {
|
||||
regulator_notifier_call_chain(chip->rdev,
|
||||
REGULATOR_EVENT_OVER_CURRENT,
|
||||
|
@ -103,8 +101,6 @@ static irqreturn_t da9210_irq_handler(int irq, void *data)
|
|||
handled |= DA9210_E_VMAX;
|
||||
}
|
||||
|
||||
regulator_unlock(chip->rdev);
|
||||
|
||||
if (handled) {
|
||||
/* Clear handled events */
|
||||
error = regmap_write(chip->regmap, DA9210_REG_EVENT_B, handled);
|
||||
|
|
|
@ -346,10 +346,8 @@ static irqreturn_t da9211_irq_handler(int irq, void *data)
|
|||
goto error_i2c;
|
||||
|
||||
if (reg_val & DA9211_E_OV_CURR_A) {
|
||||
regulator_lock(chip->rdev[0]);
|
||||
regulator_notifier_call_chain(chip->rdev[0],
|
||||
REGULATOR_EVENT_OVER_CURRENT, NULL);
|
||||
regulator_unlock(chip->rdev[0]);
|
||||
|
||||
err = regmap_write(chip->regmap, DA9211_REG_EVENT_B,
|
||||
DA9211_E_OV_CURR_A);
|
||||
|
@ -360,10 +358,8 @@ static irqreturn_t da9211_irq_handler(int irq, void *data)
|
|||
}
|
||||
|
||||
if (reg_val & DA9211_E_OV_CURR_B) {
|
||||
regulator_lock(chip->rdev[1]);
|
||||
regulator_notifier_call_chain(chip->rdev[1],
|
||||
REGULATOR_EVENT_OVER_CURRENT, NULL);
|
||||
regulator_unlock(chip->rdev[1]);
|
||||
|
||||
err = regmap_write(chip->regmap, DA9211_REG_EVENT_B,
|
||||
DA9211_E_OV_CURR_B);
|
||||
|
|
|
@ -329,11 +329,9 @@ static irqreturn_t lp8755_irq_handler(int irq, void *data)
|
|||
if ((flag0 & (0x4 << icnt))
|
||||
&& (pchip->irqmask & (0x04 << icnt))
|
||||
&& (pchip->rdev[icnt] != NULL)) {
|
||||
regulator_lock(pchip->rdev[icnt]);
|
||||
regulator_notifier_call_chain(pchip->rdev[icnt],
|
||||
LP8755_EVENT_PWR_FAULT,
|
||||
NULL);
|
||||
regulator_unlock(pchip->rdev[icnt]);
|
||||
}
|
||||
|
||||
/* read flag1 register */
|
||||
|
@ -349,22 +347,18 @@ static irqreturn_t lp8755_irq_handler(int irq, void *data)
|
|||
if ((flag1 & 0x01) && (pchip->irqmask & 0x01))
|
||||
for (icnt = 0; icnt < LP8755_BUCK_MAX; icnt++)
|
||||
if (pchip->rdev[icnt] != NULL) {
|
||||
regulator_lock(pchip->rdev[icnt]);
|
||||
regulator_notifier_call_chain(pchip->rdev[icnt],
|
||||
LP8755_EVENT_OCP,
|
||||
NULL);
|
||||
regulator_unlock(pchip->rdev[icnt]);
|
||||
}
|
||||
|
||||
/* send OVP event to all regulator devices */
|
||||
if ((flag1 & 0x02) && (pchip->irqmask & 0x02))
|
||||
for (icnt = 0; icnt < LP8755_BUCK_MAX; icnt++)
|
||||
if (pchip->rdev[icnt] != NULL) {
|
||||
regulator_lock(pchip->rdev[icnt]);
|
||||
regulator_notifier_call_chain(pchip->rdev[icnt],
|
||||
LP8755_EVENT_OVP,
|
||||
NULL);
|
||||
regulator_unlock(pchip->rdev[icnt]);
|
||||
}
|
||||
return IRQ_HANDLED;
|
||||
|
||||
|
|
|
@ -357,22 +357,16 @@ static irqreturn_t ltc3589_isr(int irq, void *dev_id)
|
|||
|
||||
if (irqstat & LTC3589_IRQSTAT_THERMAL_WARN) {
|
||||
event = REGULATOR_EVENT_OVER_TEMP;
|
||||
for (i = 0; i < LTC3589_NUM_REGULATORS; i++) {
|
||||
regulator_lock(ltc3589->regulators[i]);
|
||||
for (i = 0; i < LTC3589_NUM_REGULATORS; i++)
|
||||
regulator_notifier_call_chain(ltc3589->regulators[i],
|
||||
event, NULL);
|
||||
regulator_unlock(ltc3589->regulators[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (irqstat & LTC3589_IRQSTAT_UNDERVOLT_WARN) {
|
||||
event = REGULATOR_EVENT_UNDER_VOLTAGE;
|
||||
for (i = 0; i < LTC3589_NUM_REGULATORS; i++) {
|
||||
regulator_lock(ltc3589->regulators[i]);
|
||||
for (i = 0; i < LTC3589_NUM_REGULATORS; i++)
|
||||
regulator_notifier_call_chain(ltc3589->regulators[i],
|
||||
event, NULL);
|
||||
regulator_unlock(ltc3589->regulators[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Clear warning condition */
|
||||
|
|
|
@ -276,23 +276,17 @@ static irqreturn_t ltc3676_isr(int irq, void *dev_id)
|
|||
if (irqstat & LTC3676_IRQSTAT_THERMAL_WARN) {
|
||||
dev_warn(dev, "Over-temperature Warning\n");
|
||||
event = REGULATOR_EVENT_OVER_TEMP;
|
||||
for (i = 0; i < LTC3676_NUM_REGULATORS; i++) {
|
||||
regulator_lock(ltc3676->regulators[i]);
|
||||
for (i = 0; i < LTC3676_NUM_REGULATORS; i++)
|
||||
regulator_notifier_call_chain(ltc3676->regulators[i],
|
||||
event, NULL);
|
||||
regulator_unlock(ltc3676->regulators[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (irqstat & LTC3676_IRQSTAT_UNDERVOLT_WARN) {
|
||||
dev_info(dev, "Undervoltage Warning\n");
|
||||
event = REGULATOR_EVENT_UNDER_VOLTAGE;
|
||||
for (i = 0; i < LTC3676_NUM_REGULATORS; i++) {
|
||||
regulator_lock(ltc3676->regulators[i]);
|
||||
for (i = 0; i < LTC3676_NUM_REGULATORS; i++)
|
||||
regulator_notifier_call_chain(ltc3676->regulators[i],
|
||||
event, NULL);
|
||||
regulator_unlock(ltc3676->regulators[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Clear warning condition */
|
||||
|
|
|
@ -233,13 +233,10 @@ static irqreturn_t pv88060_irq_handler(int irq, void *data)
|
|||
|
||||
if (reg_val & PV88060_E_VDD_FLT) {
|
||||
for (i = 0; i < PV88060_MAX_REGULATORS; i++) {
|
||||
if (chip->rdev[i] != NULL) {
|
||||
regulator_lock(chip->rdev[i]);
|
||||
if (chip->rdev[i] != NULL)
|
||||
regulator_notifier_call_chain(chip->rdev[i],
|
||||
REGULATOR_EVENT_UNDER_VOLTAGE,
|
||||
NULL);
|
||||
regulator_unlock(chip->rdev[i]);
|
||||
}
|
||||
}
|
||||
|
||||
err = regmap_write(chip->regmap, PV88060_REG_EVENT_A,
|
||||
|
@ -252,13 +249,10 @@ static irqreturn_t pv88060_irq_handler(int irq, void *data)
|
|||
|
||||
if (reg_val & PV88060_E_OVER_TEMP) {
|
||||
for (i = 0; i < PV88060_MAX_REGULATORS; i++) {
|
||||
if (chip->rdev[i] != NULL) {
|
||||
regulator_lock(chip->rdev[i]);
|
||||
if (chip->rdev[i] != NULL)
|
||||
regulator_notifier_call_chain(chip->rdev[i],
|
||||
REGULATOR_EVENT_OVER_TEMP,
|
||||
NULL);
|
||||
regulator_unlock(chip->rdev[i]);
|
||||
}
|
||||
}
|
||||
|
||||
err = regmap_write(chip->regmap, PV88060_REG_EVENT_A,
|
||||
|
|
|
@ -334,13 +334,10 @@ static irqreturn_t pv88080_irq_handler(int irq, void *data)
|
|||
|
||||
if (reg_val & PV88080_E_VDD_FLT) {
|
||||
for (i = 0; i < PV88080_MAX_REGULATORS; i++) {
|
||||
if (chip->rdev[i] != NULL) {
|
||||
regulator_lock(chip->rdev[i]);
|
||||
if (chip->rdev[i] != NULL)
|
||||
regulator_notifier_call_chain(chip->rdev[i],
|
||||
REGULATOR_EVENT_UNDER_VOLTAGE,
|
||||
NULL);
|
||||
regulator_unlock(chip->rdev[i]);
|
||||
}
|
||||
}
|
||||
|
||||
err = regmap_write(chip->regmap, PV88080_REG_EVENT_A,
|
||||
|
@ -353,13 +350,10 @@ static irqreturn_t pv88080_irq_handler(int irq, void *data)
|
|||
|
||||
if (reg_val & PV88080_E_OVER_TEMP) {
|
||||
for (i = 0; i < PV88080_MAX_REGULATORS; i++) {
|
||||
if (chip->rdev[i] != NULL) {
|
||||
regulator_lock(chip->rdev[i]);
|
||||
if (chip->rdev[i] != NULL)
|
||||
regulator_notifier_call_chain(chip->rdev[i],
|
||||
REGULATOR_EVENT_OVER_TEMP,
|
||||
NULL);
|
||||
regulator_unlock(chip->rdev[i]);
|
||||
}
|
||||
}
|
||||
|
||||
err = regmap_write(chip->regmap, PV88080_REG_EVENT_A,
|
||||
|
|
|
@ -226,13 +226,10 @@ static irqreturn_t pv88090_irq_handler(int irq, void *data)
|
|||
|
||||
if (reg_val & PV88090_E_VDD_FLT) {
|
||||
for (i = 0; i < PV88090_MAX_REGULATORS; i++) {
|
||||
if (chip->rdev[i] != NULL) {
|
||||
regulator_lock(chip->rdev[i]);
|
||||
if (chip->rdev[i] != NULL)
|
||||
regulator_notifier_call_chain(chip->rdev[i],
|
||||
REGULATOR_EVENT_UNDER_VOLTAGE,
|
||||
NULL);
|
||||
regulator_unlock(chip->rdev[i]);
|
||||
}
|
||||
}
|
||||
|
||||
err = regmap_write(chip->regmap, PV88090_REG_EVENT_A,
|
||||
|
@ -245,13 +242,10 @@ static irqreturn_t pv88090_irq_handler(int irq, void *data)
|
|||
|
||||
if (reg_val & PV88090_E_OVER_TEMP) {
|
||||
for (i = 0; i < PV88090_MAX_REGULATORS; i++) {
|
||||
if (chip->rdev[i] != NULL) {
|
||||
regulator_lock(chip->rdev[i]);
|
||||
if (chip->rdev[i] != NULL)
|
||||
regulator_notifier_call_chain(chip->rdev[i],
|
||||
REGULATOR_EVENT_OVER_TEMP,
|
||||
NULL);
|
||||
regulator_unlock(chip->rdev[i]);
|
||||
}
|
||||
}
|
||||
|
||||
err = regmap_write(chip->regmap, PV88090_REG_EVENT_A,
|
||||
|
|
|
@ -386,10 +386,8 @@ static irqreturn_t slg51000_irq_handler(int irq, void *data)
|
|||
for (i = 0; i < SLG51000_MAX_REGULATORS; i++) {
|
||||
if (!(evt[i][R2] & SLG51000_IRQ_ILIM_FLAG_MASK) &&
|
||||
(evt[i][R0] & SLG51000_EVT_ILIM_FLAG_MASK)) {
|
||||
regulator_lock(chip->rdev[i]);
|
||||
regulator_notifier_call_chain(chip->rdev[i],
|
||||
REGULATOR_EVENT_OVER_CURRENT, NULL);
|
||||
regulator_unlock(chip->rdev[i]);
|
||||
|
||||
if (evt[i][R1] & SLG51000_STA_ILIM_FLAG_MASK)
|
||||
dev_warn(chip->dev,
|
||||
|
@ -403,10 +401,8 @@ static irqreturn_t slg51000_irq_handler(int irq, void *data)
|
|||
for (i = 0; i < SLG51000_MAX_REGULATORS; i++) {
|
||||
if (!(evt[i][R1] & SLG51000_STA_ILIM_FLAG_MASK) &&
|
||||
(evt[i][R1] & SLG51000_STA_VOUT_OK_FLAG_MASK)) {
|
||||
regulator_lock(chip->rdev[i]);
|
||||
regulator_notifier_call_chain(chip->rdev[i],
|
||||
REGULATOR_EVENT_OVER_TEMP, NULL);
|
||||
regulator_unlock(chip->rdev[i]);
|
||||
}
|
||||
}
|
||||
handled = IRQ_HANDLED;
|
||||
|
|
|
@ -505,15 +505,11 @@ static irqreturn_t stpmic1_curlim_irq_handler(int irq, void *data)
|
|||
{
|
||||
struct regulator_dev *rdev = (struct regulator_dev *)data;
|
||||
|
||||
regulator_lock(rdev);
|
||||
|
||||
/* Send an overcurrent notification */
|
||||
regulator_notifier_call_chain(rdev,
|
||||
REGULATOR_EVENT_OVER_CURRENT,
|
||||
NULL);
|
||||
|
||||
regulator_unlock(rdev);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
|
|
@ -178,11 +178,9 @@ static irqreturn_t wm831x_dcdc_uv_irq(int irq, void *data)
|
|||
{
|
||||
struct wm831x_dcdc *dcdc = data;
|
||||
|
||||
regulator_lock(dcdc->regulator);
|
||||
regulator_notifier_call_chain(dcdc->regulator,
|
||||
REGULATOR_EVENT_UNDER_VOLTAGE,
|
||||
NULL);
|
||||
regulator_unlock(dcdc->regulator);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
@ -191,11 +189,9 @@ static irqreturn_t wm831x_dcdc_oc_irq(int irq, void *data)
|
|||
{
|
||||
struct wm831x_dcdc *dcdc = data;
|
||||
|
||||
regulator_lock(dcdc->regulator);
|
||||
regulator_notifier_call_chain(dcdc->regulator,
|
||||
REGULATOR_EVENT_OVER_CURRENT,
|
||||
NULL);
|
||||
regulator_unlock(dcdc->regulator);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
|
|
@ -99,11 +99,9 @@ static irqreturn_t wm831x_isink_irq(int irq, void *data)
|
|||
{
|
||||
struct wm831x_isink *isink = data;
|
||||
|
||||
regulator_lock(isink->regulator);
|
||||
regulator_notifier_call_chain(isink->regulator,
|
||||
REGULATOR_EVENT_OVER_CURRENT,
|
||||
NULL);
|
||||
regulator_unlock(isink->regulator);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
|
|
@ -46,11 +46,9 @@ static irqreturn_t wm831x_ldo_uv_irq(int irq, void *data)
|
|||
{
|
||||
struct wm831x_ldo *ldo = data;
|
||||
|
||||
regulator_lock(ldo->regulator);
|
||||
regulator_notifier_call_chain(ldo->regulator,
|
||||
REGULATOR_EVENT_UNDER_VOLTAGE,
|
||||
NULL);
|
||||
regulator_unlock(ldo->regulator);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
|
|
@ -1089,7 +1089,6 @@ static irqreturn_t pmic_uv_handler(int irq, void *data)
|
|||
{
|
||||
struct regulator_dev *rdev = (struct regulator_dev *)data;
|
||||
|
||||
regulator_lock(rdev);
|
||||
if (irq == WM8350_IRQ_CS1 || irq == WM8350_IRQ_CS2)
|
||||
regulator_notifier_call_chain(rdev,
|
||||
REGULATOR_EVENT_REGULATION_OUT,
|
||||
|
@ -1098,7 +1097,6 @@ static irqreturn_t pmic_uv_handler(int irq, void *data)
|
|||
regulator_notifier_call_chain(rdev,
|
||||
REGULATOR_EVENT_UNDER_VOLTAGE,
|
||||
NULL);
|
||||
regulator_unlock(rdev);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue