mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 20:51:44 +00:00
mmc: slot-gpio: Add a function to enable/disable card detect IRQ wakeup
Commit 03dbaa04a2
("mmc: slot-gpio: Add support to enable irq wake on
cd_irq") enabled wakeup at initialization. However drivers may wish to
enable and disable based on different criteria. Add a helper function
mmc_gpio_set_cd_wake() to make it easy for drivers to do that.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
d5d568fad9
commit
36f1d7e817
@ -2655,8 +2655,7 @@ void mmc_start_host(struct mmc_host *host)
|
||||
void mmc_stop_host(struct mmc_host *host)
|
||||
{
|
||||
if (host->slot.cd_irq >= 0) {
|
||||
if (host->slot.cd_wake_enabled)
|
||||
disable_irq_wake(host->slot.cd_irq);
|
||||
mmc_gpio_set_cd_wake(host, false);
|
||||
disable_irq(host->slot.cd_irq);
|
||||
}
|
||||
|
||||
|
@ -154,6 +154,27 @@ void mmc_gpiod_request_cd_irq(struct mmc_host *host)
|
||||
}
|
||||
EXPORT_SYMBOL(mmc_gpiod_request_cd_irq);
|
||||
|
||||
int mmc_gpio_set_cd_wake(struct mmc_host *host, bool on)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (!(host->caps & MMC_CAP_CD_WAKE) ||
|
||||
host->slot.cd_irq < 0 ||
|
||||
on == host->slot.cd_wake_enabled)
|
||||
return 0;
|
||||
|
||||
if (on) {
|
||||
ret = enable_irq_wake(host->slot.cd_irq);
|
||||
host->slot.cd_wake_enabled = !ret;
|
||||
} else {
|
||||
disable_irq_wake(host->slot.cd_irq);
|
||||
host->slot.cd_wake_enabled = false;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(mmc_gpio_set_cd_wake);
|
||||
|
||||
/* Register an alternate interrupt service routine for
|
||||
* the card-detect GPIO.
|
||||
*/
|
||||
|
@ -31,6 +31,7 @@ int mmc_gpiod_request_ro(struct mmc_host *host, const char *con_id,
|
||||
unsigned int debounce, bool *gpio_invert);
|
||||
void mmc_gpio_set_cd_isr(struct mmc_host *host,
|
||||
irqreturn_t (*isr)(int irq, void *dev_id));
|
||||
int mmc_gpio_set_cd_wake(struct mmc_host *host, bool on);
|
||||
void mmc_gpiod_request_cd_irq(struct mmc_host *host);
|
||||
bool mmc_can_gpio_cd(struct mmc_host *host);
|
||||
bool mmc_can_gpio_ro(struct mmc_host *host);
|
||||
|
Loading…
Reference in New Issue
Block a user