]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
MIPS: Alchemy: DB1300: Add touch penirq support
authorManuel Lauss <manuel.lauss@gmail.com>
Wed, 20 Aug 2014 19:36:33 +0000 (21:36 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 22 Sep 2014 11:35:47 +0000 (13:35 +0200)
wire up the WM9713 pendown irq support.

Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com>
Cc: Linux-MIPS <linux-mips@linux-mips.org>
Patchwork: https://patchwork.linux-mips.org/patch/7563/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/alchemy/devboards/db1300.c

index e476ae9472b91e8dde8e9e228c518419bf873053..1c64fdbe4c813c41f1a4bdb68150336e428bfb21 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/mtd/partitions.h>
 #include <linux/platform_device.h>
 #include <linux/smsc911x.h>
+#include <linux/wm97xx.h>
 
 #include <asm/mach-au1x00/au1000.h>
 #include <asm/mach-au1x00/au1100_mmc.h>
@@ -711,6 +712,46 @@ static struct platform_device db1300_lcd_dev = {
 
 /**********************************************************************/
 
+static void db1300_wm97xx_irqen(struct wm97xx *wm, int enable)
+{
+       if (enable)
+               enable_irq(DB1300_AC97_PEN_INT);
+       else
+               disable_irq_nosync(DB1300_AC97_PEN_INT);
+}
+
+static struct wm97xx_mach_ops db1300_wm97xx_ops = {
+       .irq_enable     = db1300_wm97xx_irqen,
+       .irq_gpio       = WM97XX_GPIO_3,
+};
+
+static int db1300_wm97xx_probe(struct platform_device *pdev)
+{
+       struct wm97xx *wm = platform_get_drvdata(pdev);
+
+       /* external pendown indicator */
+       wm97xx_config_gpio(wm, WM97XX_GPIO_13, WM97XX_GPIO_IN,
+                          WM97XX_GPIO_POL_LOW, WM97XX_GPIO_STICKY,
+                          WM97XX_GPIO_WAKE);
+
+       /* internal "virtual" pendown gpio */
+       wm97xx_config_gpio(wm, WM97XX_GPIO_3, WM97XX_GPIO_OUT,
+                          WM97XX_GPIO_POL_LOW, WM97XX_GPIO_NOTSTICKY,
+                          WM97XX_GPIO_NOWAKE);
+
+       wm->pen_irq = DB1300_AC97_PEN_INT;
+
+       return wm97xx_register_mach_ops(wm, &db1300_wm97xx_ops);
+}
+
+static struct platform_driver db1300_wm97xx_driver = {
+       .driver.name    = "wm97xx-touch",
+       .driver.owner   = THIS_MODULE,
+       .probe          = db1300_wm97xx_probe,
+};
+
+/**********************************************************************/
+
 static struct platform_device *db1300_dev[] __initdata = {
        &db1300_eth_dev,
        &db1300_i2c_dev,
@@ -755,6 +796,9 @@ int __init db1300_dev_setup(void)
        i2c_register_board_info(0, db1300_i2c_devs,
                                ARRAY_SIZE(db1300_i2c_devs));
 
+       if (platform_driver_register(&db1300_wm97xx_driver))
+               pr_warn("DB1300: failed to init touch pen irq support!\n");
+
        /* Audio PSC clock is supplied by codecs (PSC1, 2) */
        __raw_writel(PSC_SEL_CLK_SERCLK,
            (void __iomem *)KSEG1ADDR(AU1300_PSC1_PHYS_ADDR) + PSC_SEL_OFFSET);