Revert r335173 at request of mmel@
This was the wrong solution to the problem; regulator_shutdown invokes regnode_stop. regulator_stop is not a refcounting method, but it invokes regnode_enable, which is. mmel@ has a proposed patch/solution to instead provide regnode_fixed_stop behavior that properly takes shared GPIO pins into account.
This commit is contained in:
parent
43b223f42e
commit
e5f97ff2cc
@ -507,20 +507,6 @@ struct regnode_std_param *regnode_get_stdparam(struct regnode *regnode)
|
||||
return (®node->std_param);
|
||||
}
|
||||
|
||||
void
|
||||
regnode_enable_cnt_inc(struct regnode *regnode)
|
||||
{
|
||||
|
||||
regnode->enable_cnt++;
|
||||
}
|
||||
|
||||
void
|
||||
regnode_enable_cnt_dec(struct regnode *regnode)
|
||||
{
|
||||
|
||||
regnode->enable_cnt--;
|
||||
}
|
||||
|
||||
void regnode_topo_unlock(void)
|
||||
{
|
||||
|
||||
|
@ -106,8 +106,6 @@ int regnode_get_flags(struct regnode *regnode);
|
||||
void *regnode_get_softc(struct regnode *regnode);
|
||||
device_t regnode_get_device(struct regnode *regnode);
|
||||
struct regnode_std_param *regnode_get_stdparam(struct regnode *regnode);
|
||||
void regnode_enable_cnt_inc(struct regnode *regnode);
|
||||
void regnode_enable_cnt_dec(struct regnode *regnode);
|
||||
void regnode_topo_unlock(void);
|
||||
void regnode_topo_xlock(void);
|
||||
void regnode_topo_slock(void);
|
||||
|
@ -156,8 +156,6 @@ regnode_fixed_init(struct regnode *regnode)
|
||||
if (sc->gpio_open_drain)
|
||||
flags |= GPIO_PIN_OPENDRAIN;
|
||||
enable = sc->param->boot_on || sc->param->always_on;
|
||||
if (enable)
|
||||
regnode_enable_cnt_inc(regnode);
|
||||
if (!sc->param->enable_active_high)
|
||||
enable = !enable;
|
||||
rv = GPIO_PIN_SET(pin->dev, pin->pin, enable);
|
||||
@ -196,14 +194,12 @@ regnode_fixed_enable(struct regnode *regnode, bool enable, int *udelay)
|
||||
return (0);
|
||||
pin = &sc->gpio_entry->gpio_pin;
|
||||
if (enable) {
|
||||
regnode_enable_cnt_inc(regnode);
|
||||
sc->gpio_entry->enable_cnt++;
|
||||
if (sc->gpio_entry->enable_cnt > 1)
|
||||
return (0);
|
||||
} else {
|
||||
KASSERT(sc->gpio_entry->enable_cnt > 0,
|
||||
("Invalid enable count"));
|
||||
regnode_enable_cnt_dec(regnode);
|
||||
sc->gpio_entry->enable_cnt--;
|
||||
if (sc->gpio_entry->enable_cnt >= 1)
|
||||
return (0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user