diff options
Diffstat (limited to 'net/rfkill')
-rw-r--r-- | net/rfkill/rfkill-gpio.c | 19 |
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 | ||