diff options
Diffstat (limited to 'net/rfkill/rfkill-gpio.c')
-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 9c4a5eb91cbf..14c98e48f261 100644 --- a/net/rfkill/rfkill-gpio.c +++ b/net/rfkill/rfkill-gpio.c | |||
@@ -45,17 +45,14 @@ static int rfkill_gpio_set_power(void *data, bool blocked) | |||
45 | { | 45 | { |
46 | struct rfkill_gpio_data *rfkill = data; | 46 | struct rfkill_gpio_data *rfkill = data; |
47 | 47 | ||
48 | if (blocked) { | 48 | if (!blocked && !IS_ERR(rfkill->clk) && !rfkill->clk_enabled) |
49 | gpiod_set_value(rfkill->shutdown_gpio, 0); | 49 | clk_enable(rfkill->clk); |
50 | gpiod_set_value(rfkill->reset_gpio, 0); | 50 | |
51 | if (!IS_ERR(rfkill->clk) && rfkill->clk_enabled) | 51 | gpiod_set_value_cansleep(rfkill->shutdown_gpio, !blocked); |
52 | clk_disable(rfkill->clk); | 52 | gpiod_set_value_cansleep(rfkill->reset_gpio, !blocked); |
53 | } else { | 53 | |
54 | if (!IS_ERR(rfkill->clk) && !rfkill->clk_enabled) | 54 | if (blocked && !IS_ERR(rfkill->clk) && rfkill->clk_enabled) |
55 | clk_enable(rfkill->clk); | 55 | clk_disable(rfkill->clk); |
56 | gpiod_set_value(rfkill->reset_gpio, 1); | ||
57 | gpiod_set_value(rfkill->shutdown_gpio, 1); | ||
58 | } | ||
59 | 56 | ||
60 | rfkill->clk_enabled = blocked; | 57 | rfkill->clk_enabled = blocked; |
61 | 58 | ||