diff options
author | Dan Willemsen <dwillemsen@nvidia.com> | 2011-09-29 00:18:04 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:49:04 -0800 |
commit | a71c974799d01e8312c19a42767f060cafd1fc6c (patch) | |
tree | 689e3f3ef6cbc5e5393a4e12201936dfdd135800 /drivers/input | |
parent | 591921cf279d41e9861f732d0fa1309d66a63ef4 (diff) |
HACK Revert "Input: tegra-kbc - change wakeup logic to be all or nothing"
This reverts commit baafb435372dd48e3854028aec669effae957c9e.
Rebase-Id: Re9bd7135ad63df297876341431cad65fa12a838a
Diffstat (limited to 'drivers/input')
-rw-r--r-- | drivers/input/keyboard/tegra-kbc.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/drivers/input/keyboard/tegra-kbc.c b/drivers/input/keyboard/tegra-kbc.c index a5a77915c650..58a28ac9b1f8 100644 --- a/drivers/input/keyboard/tegra-kbc.c +++ b/drivers/input/keyboard/tegra-kbc.c @@ -67,6 +67,8 @@ struct tegra_kbc { void __iomem *mmio; struct input_dev *idev; unsigned int irq; + unsigned int wake_enable_rows; + unsigned int wake_enable_cols; spinlock_t lock; unsigned int repoll_dly; unsigned long cp_dly_jiffies; @@ -417,11 +419,21 @@ static void tegra_kbc_setup_wakekeys(struct tegra_kbc *kbc, bool filter) int i; unsigned int rst_val; - /* Either mask all keys or none. */ - rst_val = (filter && !pdata->wakeup) ? ~0 : 0; + BUG_ON(pdata->wake_cnt > KBC_MAX_KEY); + rst_val = (filter && pdata->wake_cnt) ? ~0 : 0; for (i = 0; i < KBC_MAX_ROW; i++) writel(rst_val, kbc->mmio + KBC_ROW0_MASK_0 + i * 4); + + if (filter) { + for (i = 0; i < pdata->wake_cnt; i++) { + u32 val, addr; + addr = pdata->wake_cfg[i].row * 4 + KBC_ROW0_MASK_0; + val = readl(kbc->mmio + addr); + val &= ~(1 << pdata->wake_cfg[i].col); + writel(val, kbc->mmio + addr); + } + } } static void tegra_kbc_config_pins(struct tegra_kbc *kbc) @@ -583,6 +595,7 @@ static int __devinit tegra_kbc_probe(struct platform_device *pdev) struct resource *res; int irq; int err; + int i; int num_rows = 0; unsigned int debounce_cnt; unsigned int scan_time_rows; @@ -639,6 +652,13 @@ static int __devinit tegra_kbc_probe(struct platform_device *pdev) goto err_iounmap; } + kbc->wake_enable_rows = 0; + kbc->wake_enable_cols = 0; + for (i = 0; i < pdata->wake_cnt; i++) { + kbc->wake_enable_rows |= (1 << pdata->wake_cfg[i].row); + kbc->wake_enable_cols |= (1 << pdata->wake_cfg[i].col); + } + /* * The time delay between two consecutive reads of the FIFO is * the sum of the repeat time and the time taken for scanning |