gpio_input.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. /* drivers/input/misc/gpio_input.c
  2. *
  3. * Copyright (C) 2007 Google, Inc.
  4. *
  5. * This software is licensed under the terms of the GNU General Public
  6. * License version 2, as published by the Free Software Foundation, and
  7. * may be copied, distributed, and modified under those terms.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. */
  15. #include <linux/kernel.h>
  16. #include <linux/gpio.h>
  17. #include <linux/gpio_event.h>
  18. #include <linux/hrtimer.h>
  19. #include <linux/input.h>
  20. #include <linux/interrupt.h>
  21. #include <linux/slab.h>
  22. #include <linux/pm_wakeup.h>
  23. enum {
  24. DEBOUNCE_UNSTABLE = BIT(0), /* Got irq, while debouncing */
  25. DEBOUNCE_PRESSED = BIT(1),
  26. DEBOUNCE_NOTPRESSED = BIT(2),
  27. DEBOUNCE_WAIT_IRQ = BIT(3), /* Stable irq state */
  28. DEBOUNCE_POLL = BIT(4), /* Stable polling state */
  29. DEBOUNCE_UNKNOWN =
  30. DEBOUNCE_PRESSED | DEBOUNCE_NOTPRESSED,
  31. };
  32. struct gpio_key_state {
  33. struct gpio_input_state *ds;
  34. uint8_t debounce;
  35. };
  36. struct gpio_input_state {
  37. struct gpio_event_input_devs *input_devs;
  38. const struct gpio_event_input_info *info;
  39. struct hrtimer timer;
  40. int use_irq;
  41. int debounce_count;
  42. int is_removing;
  43. spinlock_t irq_lock;
  44. struct wakeup_source *ws;
  45. struct gpio_key_state key_state[0];
  46. };
  47. static enum hrtimer_restart gpio_event_input_timer_func(struct hrtimer *timer)
  48. {
  49. int i;
  50. int pressed;
  51. struct gpio_input_state *ds =
  52. container_of(timer, struct gpio_input_state, timer);
  53. unsigned gpio_flags = ds->info->flags;
  54. unsigned npolarity;
  55. int nkeys = ds->info->keymap_size;
  56. const struct gpio_event_direct_entry *key_entry;
  57. struct gpio_key_state *key_state;
  58. unsigned long irqflags;
  59. uint8_t debounce;
  60. bool sync_needed;
  61. #if 0
  62. key_entry = kp->keys_info->keymap;
  63. key_state = kp->key_state;
  64. for (i = 0; i < nkeys; i++, key_entry++, key_state++)
  65. pr_info("gpio_read_detect_status %d %d\n", key_entry->gpio,
  66. gpio_read_detect_status(key_entry->gpio));
  67. #endif
  68. if (ds->is_removing)
  69. return HRTIMER_NORESTART;
  70. key_entry = ds->info->keymap;
  71. key_state = ds->key_state;
  72. sync_needed = false;
  73. spin_lock_irqsave(&ds->irq_lock, irqflags);
  74. for (i = 0; i < nkeys; i++, key_entry++, key_state++) {
  75. debounce = key_state->debounce;
  76. if (debounce & DEBOUNCE_WAIT_IRQ)
  77. continue;
  78. if (key_state->debounce & DEBOUNCE_UNSTABLE) {
  79. debounce = key_state->debounce = DEBOUNCE_UNKNOWN;
  80. enable_irq(gpio_to_irq(key_entry->gpio));
  81. if (gpio_flags & GPIOEDF_PRINT_KEY_UNSTABLE)
  82. pr_info("gpio_keys_scan_keys: key %x-%x, %d "
  83. "(%d) continue debounce\n",
  84. ds->info->type, key_entry->code,
  85. i, key_entry->gpio);
  86. }
  87. npolarity = !(gpio_flags & GPIOEDF_ACTIVE_HIGH);
  88. pressed = gpio_get_value(key_entry->gpio) ^ npolarity;
  89. if (debounce & DEBOUNCE_POLL) {
  90. if (pressed == !(debounce & DEBOUNCE_PRESSED)) {
  91. ds->debounce_count++;
  92. key_state->debounce = DEBOUNCE_UNKNOWN;
  93. if (gpio_flags & GPIOEDF_PRINT_KEY_DEBOUNCE)
  94. pr_info("gpio_keys_scan_keys: key %x-"
  95. "%x, %d (%d) start debounce\n",
  96. ds->info->type, key_entry->code,
  97. i, key_entry->gpio);
  98. }
  99. continue;
  100. }
  101. if (pressed && (debounce & DEBOUNCE_NOTPRESSED)) {
  102. if (gpio_flags & GPIOEDF_PRINT_KEY_DEBOUNCE)
  103. pr_info("gpio_keys_scan_keys: key %x-%x, %d "
  104. "(%d) debounce pressed 1\n",
  105. ds->info->type, key_entry->code,
  106. i, key_entry->gpio);
  107. key_state->debounce = DEBOUNCE_PRESSED;
  108. continue;
  109. }
  110. if (!pressed && (debounce & DEBOUNCE_PRESSED)) {
  111. if (gpio_flags & GPIOEDF_PRINT_KEY_DEBOUNCE)
  112. pr_info("gpio_keys_scan_keys: key %x-%x, %d "
  113. "(%d) debounce pressed 0\n",
  114. ds->info->type, key_entry->code,
  115. i, key_entry->gpio);
  116. key_state->debounce = DEBOUNCE_NOTPRESSED;
  117. continue;
  118. }
  119. /* key is stable */
  120. ds->debounce_count--;
  121. if (ds->use_irq)
  122. key_state->debounce |= DEBOUNCE_WAIT_IRQ;
  123. else
  124. key_state->debounce |= DEBOUNCE_POLL;
  125. if (gpio_flags & GPIOEDF_PRINT_KEYS)
  126. pr_info("gpio_keys_scan_keys: key %x-%x, %d (%d) "
  127. "changed to %d\n", ds->info->type,
  128. key_entry->code, i, key_entry->gpio, pressed);
  129. input_event(ds->input_devs->dev[key_entry->dev], ds->info->type,
  130. key_entry->code, pressed);
  131. sync_needed = true;
  132. }
  133. if (sync_needed) {
  134. for (i = 0; i < ds->input_devs->count; i++)
  135. input_sync(ds->input_devs->dev[i]);
  136. }
  137. #if 0
  138. key_entry = kp->keys_info->keymap;
  139. key_state = kp->key_state;
  140. for (i = 0; i < nkeys; i++, key_entry++, key_state++) {
  141. pr_info("gpio_read_detect_status %d %d\n", key_entry->gpio,
  142. gpio_read_detect_status(key_entry->gpio));
  143. }
  144. #endif
  145. if (ds->debounce_count && !ds->is_removing)
  146. hrtimer_start(timer, ds->info->debounce_time, HRTIMER_MODE_REL);
  147. else if (!ds->use_irq && !ds->is_removing)
  148. hrtimer_start(timer, ds->info->poll_time, HRTIMER_MODE_REL);
  149. else
  150. __pm_relax(ds->ws);
  151. spin_unlock_irqrestore(&ds->irq_lock, irqflags);
  152. return HRTIMER_NORESTART;
  153. }
  154. static irqreturn_t gpio_event_input_irq_handler(int irq, void *dev_id)
  155. {
  156. struct gpio_key_state *ks = dev_id;
  157. struct gpio_input_state *ds = ks->ds;
  158. int keymap_index = ks - ds->key_state;
  159. const struct gpio_event_direct_entry *key_entry;
  160. unsigned long irqflags;
  161. int pressed;
  162. if (!ds->use_irq || ds->is_removing)
  163. return IRQ_HANDLED;
  164. key_entry = &ds->info->keymap[keymap_index];
  165. if (ds->info->debounce_time.tv64) {
  166. spin_lock_irqsave(&ds->irq_lock, irqflags);
  167. if (ks->debounce & DEBOUNCE_WAIT_IRQ) {
  168. ks->debounce = DEBOUNCE_UNKNOWN;
  169. if (ds->debounce_count++ == 0) {
  170. __pm_stay_awake(ds->ws);
  171. hrtimer_start(
  172. &ds->timer, ds->info->debounce_time,
  173. HRTIMER_MODE_REL);
  174. }
  175. if (ds->info->flags & GPIOEDF_PRINT_KEY_DEBOUNCE)
  176. pr_info("gpio_event_input_irq_handler: "
  177. "key %x-%x, %d (%d) start debounce\n",
  178. ds->info->type, key_entry->code,
  179. keymap_index, key_entry->gpio);
  180. } else {
  181. disable_irq_nosync(irq);
  182. ks->debounce = DEBOUNCE_UNSTABLE;
  183. }
  184. spin_unlock_irqrestore(&ds->irq_lock, irqflags);
  185. } else {
  186. pressed = gpio_get_value(key_entry->gpio) ^
  187. !(ds->info->flags & GPIOEDF_ACTIVE_HIGH);
  188. if (ds->info->flags & GPIOEDF_PRINT_KEYS)
  189. pr_info("gpio_event_input_irq_handler: key %x-%x, %d "
  190. "(%d) changed to %d\n",
  191. ds->info->type, key_entry->code, keymap_index,
  192. key_entry->gpio, pressed);
  193. input_event(ds->input_devs->dev[key_entry->dev], ds->info->type,
  194. key_entry->code, pressed);
  195. input_sync(ds->input_devs->dev[key_entry->dev]);
  196. }
  197. return IRQ_HANDLED;
  198. }
  199. static int gpio_event_input_request_irqs(struct gpio_input_state *ds)
  200. {
  201. int i;
  202. int err;
  203. unsigned int irq;
  204. unsigned long req_flags = IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING;
  205. for (i = 0; i < ds->info->keymap_size; i++) {
  206. err = irq = gpio_to_irq(ds->info->keymap[i].gpio);
  207. if (err < 0)
  208. goto err_gpio_get_irq_num_failed;
  209. err = request_irq(irq, gpio_event_input_irq_handler,
  210. req_flags, "gpio_keys", &ds->key_state[i]);
  211. if (err) {
  212. pr_err("gpio_event_input_request_irqs: request_irq "
  213. "failed for input %d, irq %d\n",
  214. ds->info->keymap[i].gpio, irq);
  215. goto err_request_irq_failed;
  216. }
  217. if (ds->info->info.no_suspend) {
  218. err = enable_irq_wake(irq);
  219. if (err) {
  220. pr_err("gpio_event_input_request_irqs: "
  221. "enable_irq_wake failed for input %d, "
  222. "irq %d\n",
  223. ds->info->keymap[i].gpio, irq);
  224. goto err_enable_irq_wake_failed;
  225. }
  226. }
  227. }
  228. return 0;
  229. for (i = ds->info->keymap_size - 1; i >= 0; i--) {
  230. irq = gpio_to_irq(ds->info->keymap[i].gpio);
  231. if (ds->info->info.no_suspend)
  232. disable_irq_wake(irq);
  233. err_enable_irq_wake_failed:
  234. free_irq(irq, &ds->key_state[i]);
  235. err_request_irq_failed:
  236. err_gpio_get_irq_num_failed:
  237. ;
  238. }
  239. return err;
  240. }
  241. int gpio_event_input_func(struct gpio_event_input_devs *input_devs,
  242. struct gpio_event_info *info, void **data, int func)
  243. {
  244. int ret;
  245. int i;
  246. unsigned long irqflags;
  247. struct gpio_event_input_info *di;
  248. struct gpio_input_state *ds = *data;
  249. char *wlname;
  250. di = container_of(info, struct gpio_event_input_info, info);
  251. if (func == GPIO_EVENT_FUNC_SUSPEND) {
  252. if (ds->use_irq)
  253. for (i = 0; i < di->keymap_size; i++)
  254. disable_irq(gpio_to_irq(di->keymap[i].gpio));
  255. hrtimer_cancel(&ds->timer);
  256. return 0;
  257. }
  258. if (func == GPIO_EVENT_FUNC_RESUME) {
  259. spin_lock_irqsave(&ds->irq_lock, irqflags);
  260. if (ds->use_irq)
  261. for (i = 0; i < di->keymap_size; i++)
  262. enable_irq(gpio_to_irq(di->keymap[i].gpio));
  263. hrtimer_start(&ds->timer, ktime_set(0, 0), HRTIMER_MODE_REL);
  264. spin_unlock_irqrestore(&ds->irq_lock, irqflags);
  265. return 0;
  266. }
  267. if (func == GPIO_EVENT_FUNC_INIT) {
  268. if (ktime_to_ns(di->poll_time) <= 0)
  269. di->poll_time = ktime_set(0, 20 * NSEC_PER_MSEC);
  270. *data = ds = kzalloc(sizeof(*ds) + sizeof(ds->key_state[0]) *
  271. di->keymap_size, GFP_KERNEL);
  272. if (ds == NULL) {
  273. ret = -ENOMEM;
  274. pr_err("gpio_event_input_func: "
  275. "Failed to allocate private data\n");
  276. goto err_ds_alloc_failed;
  277. }
  278. ds->debounce_count = di->keymap_size;
  279. ds->input_devs = input_devs;
  280. ds->info = di;
  281. wlname = kasprintf(GFP_KERNEL, "gpio_input:%s%s",
  282. input_devs->dev[0]->name,
  283. (input_devs->count > 1) ? "..." : "");
  284. ds->ws = wakeup_source_register(wlname);
  285. kfree(wlname);
  286. if (!ds->ws) {
  287. ret = -ENOMEM;
  288. pr_err("gpio_event_input_func: "
  289. "Failed to allocate wakeup source\n");
  290. goto err_ws_failed;
  291. }
  292. spin_lock_init(&ds->irq_lock);
  293. for (i = 0; i < di->keymap_size; i++) {
  294. int dev = di->keymap[i].dev;
  295. if (dev >= input_devs->count) {
  296. pr_err("gpio_event_input_func: bad device "
  297. "index %d >= %d for key code %d\n",
  298. dev, input_devs->count,
  299. di->keymap[i].code);
  300. ret = -EINVAL;
  301. goto err_bad_keymap;
  302. }
  303. input_set_capability(input_devs->dev[dev], di->type,
  304. di->keymap[i].code);
  305. ds->key_state[i].ds = ds;
  306. ds->key_state[i].debounce = DEBOUNCE_UNKNOWN;
  307. }
  308. for (i = 0; i < di->keymap_size; i++) {
  309. ret = gpio_request(di->keymap[i].gpio, "gpio_kp_in");
  310. if (ret) {
  311. pr_err("gpio_event_input_func: gpio_request "
  312. "failed for %d\n", di->keymap[i].gpio);
  313. goto err_gpio_request_failed;
  314. }
  315. ret = gpio_direction_input(di->keymap[i].gpio);
  316. if (ret) {
  317. pr_err("gpio_event_input_func: "
  318. "gpio_direction_input failed for %d\n",
  319. di->keymap[i].gpio);
  320. goto err_gpio_configure_failed;
  321. }
  322. }
  323. ret = gpio_event_input_request_irqs(ds);
  324. spin_lock_irqsave(&ds->irq_lock, irqflags);
  325. ds->use_irq = ret == 0;
  326. ds->is_removing = 0;
  327. pr_info("GPIO Input Driver: Start gpio inputs for %s%s in %s "
  328. "mode\n", input_devs->dev[0]->name,
  329. (input_devs->count > 1) ? "..." : "",
  330. ret == 0 ? "interrupt" : "polling");
  331. hrtimer_init(&ds->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
  332. ds->timer.function = gpio_event_input_timer_func;
  333. hrtimer_start(&ds->timer, ktime_set(0, 0), HRTIMER_MODE_REL);
  334. spin_unlock_irqrestore(&ds->irq_lock, irqflags);
  335. return 0;
  336. }
  337. ret = 0;
  338. ds->is_removing = 1;
  339. spin_lock_irqsave(&ds->irq_lock, irqflags);
  340. hrtimer_cancel(&ds->timer);
  341. spin_unlock_irqrestore(&ds->irq_lock, irqflags);
  342. if (ds->use_irq) {
  343. for (i = di->keymap_size - 1; i >= 0; i--) {
  344. int irq = gpio_to_irq(di->keymap[i].gpio);
  345. if (ds->info->info.no_suspend)
  346. disable_irq_wake(irq);
  347. free_irq(irq, &ds->key_state[i]);
  348. }
  349. }
  350. for (i = di->keymap_size - 1; i >= 0; i--) {
  351. err_gpio_configure_failed:
  352. gpio_free(di->keymap[i].gpio);
  353. err_gpio_request_failed:
  354. ;
  355. }
  356. err_bad_keymap:
  357. wakeup_source_unregister(ds->ws);
  358. err_ws_failed:
  359. kfree(ds);
  360. err_ds_alloc_failed:
  361. return ret;
  362. }