2 * Generic GPIO card-detect helper
4 * Copyright (C) 2011, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
11 #include <linux/err.h>
12 #include <linux/gpio.h>
13 #include <linux/interrupt.h>
14 #include <linux/jiffies.h>
15 #include <linux/mmc/cd-gpio.h>
16 #include <linux/mmc/host.h>
17 #include <linux/module.h>
18 #include <linux/slab.h>
25 static irqreturn_t
mmc_cd_gpio_irqt(int irq
, void *dev_id
)
27 /* Schedule a card detection after a debounce timeout */
28 mmc_detect_change(dev_id
, msecs_to_jiffies(100));
32 int mmc_cd_gpio_request(struct mmc_host
*host
, unsigned int gpio
)
34 size_t len
= strlen(dev_name(host
->parent
)) + 4;
35 struct mmc_cd_gpio
*cd
;
36 int irq
= gpio_to_irq(gpio
);
42 cd
= kmalloc(sizeof(*cd
) + len
, GFP_KERNEL
);
46 snprintf(cd
->label
, len
, "%s cd", dev_name(host
->parent
));
48 ret
= gpio_request_one(gpio
, GPIOF_DIR_IN
, cd
->label
);
52 ret
= request_threaded_irq(irq
, NULL
, mmc_cd_gpio_irqt
,
53 IRQF_TRIGGER_RISING
| IRQF_TRIGGER_FALLING
,
59 host
->hotplug
.irq
= irq
;
60 host
->hotplug
.handler_priv
= cd
;
70 EXPORT_SYMBOL(mmc_cd_gpio_request
);
72 void mmc_cd_gpio_free(struct mmc_host
*host
)
74 struct mmc_cd_gpio
*cd
= host
->hotplug
.handler_priv
;
79 free_irq(host
->hotplug
.irq
, host
);
83 EXPORT_SYMBOL(mmc_cd_gpio_free
);
This page took 0.03351 seconds and 5 git commands to generate.