mirror of https://github.com/torvalds/linux.git
Previously, samsung_gpio_drection_in/output function were not covered
with a spinlock.
For example, samsung_gpio_direction_output function consists of
two functions.
1. samsung_gpio_set
2. samsung_gpio_set_direction
When 2 CPUs try to control the same gpio pin heavily,
(situation like i2c control with gpio emulation)
This situation can cause below problem.
CPU 0 | CPU1
|
samsung_gpio_direction_output |
samsung_gpio_set(pin A as 1) | samsung_gpio_direction_output
| samsung_gpio_set(pin A as 0)
samsung_gpio_set_direction |
| samsung_gpio_set_direction
The initial value of pin A will be set as 0 while we wanted to set pin A as 1.
This patch modifies samsung_gpio_direction_in/output function
to be done in one spinlock to fix race condition.
Additionally, the new samsung_gpio_set_value was added to implement
gpio set callback(samsung_gpio_set) with spinlock using this function.
Cc: stable@vger.kernel.org
Signed-off-by: Youngmin Nam <ym0914@gmail.com>
Acked-by: Tomasz Figa <tomasz.figa@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||
|---|---|---|
| .. | ||
| bcm | ||
| berlin | ||
| freescale | ||
| intel | ||
| mediatek | ||
| meson | ||
| mvebu | ||
| nomadik | ||
| pxa | ||
| qcom | ||
| samsung | ||
| sh-pfc | ||
| sirf | ||
| spear | ||
| sunxi | ||
| uniphier | ||
| vt8500 | ||
| Kconfig | ||
| Makefile | ||
| core.c | ||
| core.h | ||
| devicetree.c | ||
| devicetree.h | ||
| pinconf-generic.c | ||
| pinconf.c | ||
| pinconf.h | ||
| pinctrl-adi2-bf54x.c | ||
| pinctrl-adi2-bf60x.c | ||
| pinctrl-adi2.c | ||
| pinctrl-adi2.h | ||
| pinctrl-amd.c | ||
| pinctrl-amd.h | ||
| pinctrl-as3722.c | ||
| pinctrl-at91-pio4.c | ||
| pinctrl-at91.c | ||
| pinctrl-at91.h | ||
| pinctrl-coh901.c | ||
| pinctrl-coh901.h | ||
| pinctrl-digicolor.c | ||
| pinctrl-falcon.c | ||
| pinctrl-lantiq.c | ||
| pinctrl-lantiq.h | ||
| pinctrl-lpc18xx.c | ||
| pinctrl-palmas.c | ||
| pinctrl-pistachio.c | ||
| pinctrl-rockchip.c | ||
| pinctrl-single.c | ||
| pinctrl-st.c | ||
| pinctrl-tb10x.c | ||
| pinctrl-tegra-xusb.c | ||
| pinctrl-tegra.c | ||
| pinctrl-tegra.h | ||
| pinctrl-tegra20.c | ||
| pinctrl-tegra30.c | ||
| pinctrl-tegra114.c | ||
| pinctrl-tegra124.c | ||
| pinctrl-tegra210.c | ||
| pinctrl-tz1090-pdc.c | ||
| pinctrl-tz1090.c | ||
| pinctrl-u300.c | ||
| pinctrl-utils.c | ||
| pinctrl-utils.h | ||
| pinctrl-xway.c | ||
| pinctrl-zynq.c | ||
| pinmux.c | ||
| pinmux.h | ||