aboutsummaryrefslogtreecommitdiffstats
path: root/net/rfkill
diff options
context:
space:
mode:
Diffstat (limited to 'net/rfkill')
-rw-r--r--net/rfkill/rfkill-gpio.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/net/rfkill/rfkill-gpio.c b/net/rfkill/rfkill-gpio.c
index bd2a5b90400c..1cb42d040669 100644
--- a/net/rfkill/rfkill-gpio.c
+++ b/net/rfkill/rfkill-gpio.c
@@ -47,17 +47,14 @@ static int rfkill_gpio_set_power(void *data, bool blocked)
47{ 47{
48 struct rfkill_gpio_data *rfkill = data; 48 struct rfkill_gpio_data *rfkill = data;
49 49
50 if (blocked) { 50 if (!blocked && !IS_ERR(rfkill->clk) && !rfkill->clk_enabled)
51 gpiod_set_value(rfkill->shutdown_gpio, 0); 51 clk_enable(rfkill->clk);
52 gpiod_set_value(rfkill->reset_gpio, 0); 52
53 if (!IS_ERR(rfkill->clk) && rfkill->clk_enabled) 53 gpiod_set_value_cansleep(rfkill->shutdown_gpio, !blocked);
54 clk_disable(rfkill->clk); 54 gpiod_set_value_cansleep(rfkill->reset_gpio, !blocked);
55 } else { 55
56 if (!IS_ERR(rfkill->clk) && !rfkill->clk_enabled) 56 if (blocked && !IS_ERR(rfkill->clk) && rfkill->clk_enabled)
57 clk_enable(rfkill->clk); 57 clk_disable(rfkill->clk);
58 gpiod_set_value(rfkill->reset_gpio, 1);
59 gpiod_set_value(rfkill->shutdown_gpio, 1);
60 }
61 58
62 rfkill->clk_enabled = blocked; 59 rfkill->clk_enabled = blocked;
63 60