summaryrefslogtreecommitdiffstats
path: root/drivers/nfc/pn544
diff options
context:
space:
mode:
authorRobert Dolca <robert.dolca@intel.com>2015-01-26 06:13:36 -0500
committerSamuel Ortiz <sameo@linux.intel.com>2015-01-27 18:16:23 -0500
commit75dda421a31dc614b8b6502cafd3825e2c72ccf0 (patch)
treee37ff146bf4f97c2fecc74ac52761da0fbad2b31 /drivers/nfc/pn544
parent3b060532621ef52e9e58c7596868c2570229a47b (diff)
NFC: PN544: GPIO access that may sleep
gpio_set_value was replaced with gpio_set_value_cansleep in order to allow GPIO access that may sleep. This is particularelly useful when GPIO is accessed using busses like I2C, SPI, USB Signed-off-by: Robert Dolca <robert.dolca@intel.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/nfc/pn544')
-rw-r--r--drivers/nfc/pn544/i2c.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/nfc/pn544/i2c.c b/drivers/nfc/pn544/i2c.c
index fc02e8d6a193..d9018cda6c7f 100644
--- a/drivers/nfc/pn544/i2c.c
+++ b/drivers/nfc/pn544/i2c.c
@@ -195,18 +195,19 @@ static void pn544_hci_i2c_platform_init(struct pn544_i2c_phy *phy)
195 nfc_info(&phy->i2c_dev->dev, "Detecting nfc_en polarity\n"); 195 nfc_info(&phy->i2c_dev->dev, "Detecting nfc_en polarity\n");
196 196
197 /* Disable fw download */ 197 /* Disable fw download */
198 gpio_set_value(phy->gpio_fw, 0); 198 gpio_set_value_cansleep(phy->gpio_fw, 0);
199 199
200 for (polarity = 0; polarity < 2; polarity++) { 200 for (polarity = 0; polarity < 2; polarity++) {
201 phy->en_polarity = polarity; 201 phy->en_polarity = polarity;
202 retry = 3; 202 retry = 3;
203 while (retry--) { 203 while (retry--) {
204 /* power off */ 204 /* power off */
205 gpio_set_value(phy->gpio_en, !phy->en_polarity); 205 gpio_set_value_cansleep(phy->gpio_en,
206 !phy->en_polarity);
206 usleep_range(10000, 15000); 207 usleep_range(10000, 15000);
207 208
208 /* power on */ 209 /* power on */
209 gpio_set_value(phy->gpio_en, phy->en_polarity); 210 gpio_set_value_cansleep(phy->gpio_en, phy->en_polarity);
210 usleep_range(10000, 15000); 211 usleep_range(10000, 15000);
211 212
212 /* send reset */ 213 /* send reset */
@@ -225,13 +226,14 @@ static void pn544_hci_i2c_platform_init(struct pn544_i2c_phy *phy)
225 "Could not detect nfc_en polarity, fallback to active high\n"); 226 "Could not detect nfc_en polarity, fallback to active high\n");
226 227
227out: 228out:
228 gpio_set_value(phy->gpio_en, !phy->en_polarity); 229 gpio_set_value_cansleep(phy->gpio_en, !phy->en_polarity);
229} 230}
230 231
231static void pn544_hci_i2c_enable_mode(struct pn544_i2c_phy *phy, int run_mode) 232static void pn544_hci_i2c_enable_mode(struct pn544_i2c_phy *phy, int run_mode)
232{ 233{
233 gpio_set_value(phy->gpio_fw, run_mode == PN544_FW_MODE ? 1 : 0); 234 gpio_set_value_cansleep(phy->gpio_fw,
234 gpio_set_value(phy->gpio_en, phy->en_polarity); 235 run_mode == PN544_FW_MODE ? 1 : 0);
236 gpio_set_value_cansleep(phy->gpio_en, phy->en_polarity);
235 usleep_range(10000, 15000); 237 usleep_range(10000, 15000);
236 238
237 phy->run_mode = run_mode; 239 phy->run_mode = run_mode;
@@ -254,14 +256,14 @@ static void pn544_hci_i2c_disable(void *phy_id)
254{ 256{
255 struct pn544_i2c_phy *phy = phy_id; 257 struct pn544_i2c_phy *phy = phy_id;
256 258
257 gpio_set_value(phy->gpio_fw, 0); 259 gpio_set_value_cansleep(phy->gpio_fw, 0);
258 gpio_set_value(phy->gpio_en, !phy->en_polarity); 260 gpio_set_value_cansleep(phy->gpio_en, !phy->en_polarity);
259 usleep_range(10000, 15000); 261 usleep_range(10000, 15000);
260 262
261 gpio_set_value(phy->gpio_en, phy->en_polarity); 263 gpio_set_value_cansleep(phy->gpio_en, phy->en_polarity);
262 usleep_range(10000, 15000); 264 usleep_range(10000, 15000);
263 265
264 gpio_set_value(phy->gpio_en, !phy->en_polarity); 266 gpio_set_value_cansleep(phy->gpio_en, !phy->en_polarity);
265 usleep_range(10000, 15000); 267 usleep_range(10000, 15000);
266 268
267 phy->powered = 0; 269 phy->powered = 0;