diff options
author | Heikki Krogerus <heikki.krogerus@linux.intel.com> | 2013-10-16 06:53:40 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-10-28 10:05:24 -0400 |
commit | f02ae59b1230853693d09a1003075d671f1a6f7d (patch) | |
tree | b9a13836b2fdc6645fd33ac533763b768f1f6150 /net/rfkill/rfkill-gpio.c | |
parent | 5e7ca3937fbeaedd7383058ea2bd9af1089ef81a (diff) |
net: rfkill: gpio: clean up clock handling
Use a simple flag to see the state of the clock, and make
the clock available even without a name. Also, get rid of
HAVE_CLK dependency.
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Acked-by: Rhyland Klein <rklein@nvidia.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/rfkill/rfkill-gpio.c')
-rw-r--r-- | net/rfkill/rfkill-gpio.c | 35 |
1 files changed, 8 insertions, 27 deletions
diff --git a/net/rfkill/rfkill-gpio.c b/net/rfkill/rfkill-gpio.c index 070580619e3d..1d104e728ef9 100644 --- a/net/rfkill/rfkill-gpio.c +++ b/net/rfkill/rfkill-gpio.c | |||
@@ -27,24 +27,13 @@ | |||
27 | 27 | ||
28 | #include <linux/rfkill-gpio.h> | 28 | #include <linux/rfkill-gpio.h> |
29 | 29 | ||
30 | enum rfkill_gpio_clk_state { | ||
31 | UNSPECIFIED = 0, | ||
32 | PWR_ENABLED, | ||
33 | PWR_DISABLED | ||
34 | }; | ||
35 | |||
36 | #define PWR_CLK_SET(_RF, _EN) \ | ||
37 | ((_RF)->pwr_clk_enabled = (!(_EN) ? PWR_ENABLED : PWR_DISABLED)) | ||
38 | #define PWR_CLK_ENABLED(_RF) ((_RF)->pwr_clk_enabled == PWR_ENABLED) | ||
39 | #define PWR_CLK_DISABLED(_RF) ((_RF)->pwr_clk_enabled != PWR_ENABLED) | ||
40 | |||
41 | struct rfkill_gpio_data { | 30 | struct rfkill_gpio_data { |
42 | struct rfkill_gpio_platform_data *pdata; | 31 | struct rfkill_gpio_platform_data *pdata; |
43 | struct rfkill *rfkill_dev; | 32 | struct rfkill *rfkill_dev; |
44 | char *reset_name; | 33 | char *reset_name; |
45 | char *shutdown_name; | 34 | char *shutdown_name; |
46 | enum rfkill_gpio_clk_state pwr_clk_enabled; | 35 | struct clk *clk; |
47 | struct clk *pwr_clk; | 36 | bool clk_enabled; |
48 | }; | 37 | }; |
49 | 38 | ||
50 | static int rfkill_gpio_set_power(void *data, bool blocked) | 39 | static int rfkill_gpio_set_power(void *data, bool blocked) |
@@ -56,19 +45,18 @@ static int rfkill_gpio_set_power(void *data, bool blocked) | |||
56 | gpio_direction_output(rfkill->pdata->shutdown_gpio, 0); | 45 | gpio_direction_output(rfkill->pdata->shutdown_gpio, 0); |
57 | if (gpio_is_valid(rfkill->pdata->reset_gpio)) | 46 | if (gpio_is_valid(rfkill->pdata->reset_gpio)) |
58 | gpio_direction_output(rfkill->pdata->reset_gpio, 0); | 47 | gpio_direction_output(rfkill->pdata->reset_gpio, 0); |
59 | if (rfkill->pwr_clk && PWR_CLK_ENABLED(rfkill)) | 48 | if (!IS_ERR(rfkill->clk) && rfkill->clk_enabled) |
60 | clk_disable(rfkill->pwr_clk); | 49 | clk_disable(rfkill->clk); |
61 | } else { | 50 | } else { |
62 | if (rfkill->pwr_clk && PWR_CLK_DISABLED(rfkill)) | 51 | if (!IS_ERR(rfkill->clk) && !rfkill->clk_enabled) |
63 | clk_enable(rfkill->pwr_clk); | 52 | clk_enable(rfkill->clk); |
64 | if (gpio_is_valid(rfkill->pdata->reset_gpio)) | 53 | if (gpio_is_valid(rfkill->pdata->reset_gpio)) |
65 | gpio_direction_output(rfkill->pdata->reset_gpio, 1); | 54 | gpio_direction_output(rfkill->pdata->reset_gpio, 1); |
66 | if (gpio_is_valid(rfkill->pdata->shutdown_gpio)) | 55 | if (gpio_is_valid(rfkill->pdata->shutdown_gpio)) |
67 | gpio_direction_output(rfkill->pdata->shutdown_gpio, 1); | 56 | gpio_direction_output(rfkill->pdata->shutdown_gpio, 1); |
68 | } | 57 | } |
69 | 58 | ||
70 | if (rfkill->pwr_clk) | 59 | rfkill->clk_enabled = blocked; |
71 | PWR_CLK_SET(rfkill, blocked); | ||
72 | 60 | ||
73 | return 0; | 61 | return 0; |
74 | } | 62 | } |
@@ -123,14 +111,7 @@ static int rfkill_gpio_probe(struct platform_device *pdev) | |||
123 | snprintf(rfkill->reset_name, len + 6 , "%s_reset", pdata->name); | 111 | snprintf(rfkill->reset_name, len + 6 , "%s_reset", pdata->name); |
124 | snprintf(rfkill->shutdown_name, len + 9, "%s_shutdown", pdata->name); | 112 | snprintf(rfkill->shutdown_name, len + 9, "%s_shutdown", pdata->name); |
125 | 113 | ||
126 | if (pdata->power_clk_name) { | 114 | rfkill->clk = devm_clk_get(&pdev->dev, pdata->power_clk_name); |
127 | rfkill->pwr_clk = devm_clk_get(&pdev->dev, | ||
128 | pdata->power_clk_name); | ||
129 | if (IS_ERR(rfkill->pwr_clk)) { | ||
130 | pr_warn("%s: can't find pwr_clk.\n", __func__); | ||
131 | return PTR_ERR(rfkill->pwr_clk); | ||
132 | } | ||
133 | } | ||
134 | 115 | ||
135 | if (gpio_is_valid(pdata->reset_gpio)) { | 116 | if (gpio_is_valid(pdata->reset_gpio)) { |
136 | ret = devm_gpio_request(&pdev->dev, pdata->reset_gpio, | 117 | ret = devm_gpio_request(&pdev->dev, pdata->reset_gpio, |