aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/keyboard/sh_keysc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/keyboard/sh_keysc.c')
-rw-r--r--drivers/input/keyboard/sh_keysc.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/drivers/input/keyboard/sh_keysc.c b/drivers/input/keyboard/sh_keysc.c
index 5c8a1bcf7ca7..bf92178644ab 100644
--- a/drivers/input/keyboard/sh_keysc.c
+++ b/drivers/input/keyboard/sh_keysc.c
@@ -219,6 +219,8 @@ static int __devinit sh_keysc_probe(struct platform_device *pdev)
219 pdata->scan_timing, priv->iomem_base + KYCR1_OFFS); 219 pdata->scan_timing, priv->iomem_base + KYCR1_OFFS);
220 iowrite16(0, priv->iomem_base + KYOUTDR_OFFS); 220 iowrite16(0, priv->iomem_base + KYOUTDR_OFFS);
221 iowrite16(KYCR2_IRQ_LEVEL, priv->iomem_base + KYCR2_OFFS); 221 iowrite16(KYCR2_IRQ_LEVEL, priv->iomem_base + KYCR2_OFFS);
222
223 device_init_wakeup(&pdev->dev, 1);
222 return 0; 224 return 0;
223 err5: 225 err5:
224 free_irq(irq, pdev); 226 free_irq(irq, pdev);
@@ -253,17 +255,36 @@ static int __devexit sh_keysc_remove(struct platform_device *pdev)
253 return 0; 255 return 0;
254} 256}
255 257
258static int sh_keysc_suspend(struct device *dev)
259{
260 struct platform_device *pdev;
261 struct sh_keysc_priv *priv;
262 unsigned short value;
263
264 pdev = container_of(dev, struct platform_device, dev);
265 priv = platform_get_drvdata(pdev);
266
267 value = ioread16(priv->iomem_base + KYCR1_OFFS);
256 268
257#define sh_keysc_suspend NULL 269 if (device_may_wakeup(dev))
258#define sh_keysc_resume NULL 270 value |= 0x80;
271 else
272 value &= ~0x80;
273
274 iowrite16(value, priv->iomem_base + KYCR1_OFFS);
275 return 0;
276}
277
278static struct dev_pm_ops sh_keysc_dev_pm_ops = {
279 .suspend = sh_keysc_suspend,
280};
259 281
260struct platform_driver sh_keysc_device_driver = { 282struct platform_driver sh_keysc_device_driver = {
261 .probe = sh_keysc_probe, 283 .probe = sh_keysc_probe,
262 .remove = __devexit_p(sh_keysc_remove), 284 .remove = __devexit_p(sh_keysc_remove),
263 .suspend = sh_keysc_suspend,
264 .resume = sh_keysc_resume,
265 .driver = { 285 .driver = {
266 .name = "sh_keysc", 286 .name = "sh_keysc",
287 .pm = &sh_keysc_dev_pm_ops,
267 } 288 }
268}; 289};
269 290