Messages in this thread | | | Date | Tue, 13 Aug 2013 09:46:24 -0600 | From | Stephen Warren <> | Subject | Re: [PATCH v3] pinctrl: pinmux: Don't free pins requested by other devices in pinmux_disable_setting. |
| |
On 08/12/2013 10:54 PM, Sonic Zhang wrote: > From: Sonic Zhang <sonic.zhang@analog.com> > > One peripheral may share part of its pins with the 2nd > peripheral and the other pins with the 3rd. If it requests all pins > when part of them has already be requested and owned by the 2nd > peripheral, this request fails and pinmux_disable_setting() is called. > The pinmux_disable_setting() frees all pins of the first peripheral > without checking if the pin is owned by itself or the 2nd, which > results in the malfunction of the 2nd peripheral driver.
> diff --git a/drivers/pinctrl/pinmux.c b/drivers/pinctrl/pinmux.c
> @@ -480,15 +480,17 @@ void pinmux_disable_setting(struct pinctrl_setting const *setting) > dev_warn(pctldev->dev, > "could not get pin desc for pin %d\n", > pins[i]); > + /* And release the pin */ > + pin_free(pctldev, pins[i], NULL);
This change doesn't seem useful. The 2 lines right above the patch context are:
desc = pin_desc_get(pctldev, pins[i]); if (desc == NULL) {
... and the first thing pin_free() does it call pin_desc_get() again. So, pin_free() is simply going to fail and print another error.
The rest of the patch looks good.
| |