All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marek Vasut <marek.vasut@gmail.com>
To: alsa-devel@alsa-project.org
Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
Subject: [PATCH 1/2] Add Palm support to Mainstone accelerated touch
Date: Fri, 17 Jul 2009 10:00:24 +0200	[thread overview]
Message-ID: <200907171000.24408.marek.vasut@gmail.com> (raw)

>From f32fa9ef6476be0cf8106bc57a98724c48d4baa1 Mon Sep 17 00:00:00 2001                                
From: Marek Vasut <marek.vasut@gmail.com>                                                             
Date: Fri, 17 Jul 2009 09:54:13 +0200                                                                 
Subject: [PATCH 1/2] Add Palm support to Mainstone accelerated touch                                  

This patch refactors the Mainstone accelerated touch code a little and
adds support for interrupt driven touchscreen on Palm LifeDrive, TX and
Tungsten T5.                                                           

Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
---                                               
 drivers/input/touchscreen/Kconfig            |    4 +-
 drivers/input/touchscreen/mainstone-wm97xx.c |   52 +++++++++++++++++--------
 2 files changed, 37 insertions(+), 19 deletions(-)                           

diff --git a/drivers/input/touchscreen/Kconfig 
b/drivers/input/touchscreen/Kconfig
index 72e2712..0fdae1a 100644                                                     
--- a/drivers/input/touchscreen/Kconfig                                           
+++ b/drivers/input/touchscreen/Kconfig                                           
@@ -366,11 +366,11 @@ config TOUCHSCREEN_WM97XX_ATMEL                             
          be called atmel-wm97xx.                                                 
                                                                                  
 config TOUCHSCREEN_WM97XX_MAINSTONE                                              
-       tristate "WM97xx Mainstone accelerated touch"                             
+       tristate "WM97xx Mainstone/Palm accelerated touch"                        
        depends on TOUCHSCREEN_WM97XX && ARCH_PXA                                 
        help                                                                      
          Say Y here for support for streaming mode with WM97xx touchscreens      
-         on Mainstone systems.                                                   
+         on Mainstone, Palm Tungsten T5, TX and LifeDrive systems.               
                                                                                  
          If unsure, say N.                                                       
                                                                                  
diff --git a/drivers/input/touchscreen/mainstone-wm97xx.c 
b/drivers/input/touchscreen/mainstone-wm97xx.c
index 4cc047a..60bda9a 100644                                                                           
--- a/drivers/input/touchscreen/mainstone-wm97xx.c                                                      
+++ b/drivers/input/touchscreen/mainstone-wm97xx.c                                                      
@@ -31,9 +31,13 @@                                                                                      
 #include <linux/interrupt.h>                                                                           
 #include <linux/wm97xx.h>                                                                              
 #include <linux/io.h>                                                                                  
+#include <linux/gpio.h>                                                                                
+                                                                                                       
 #include <mach/regs-ac97.h>                                                                            
                                                                                                        
-#define VERSION                "0.13"                                                                  
+#include <asm/mach-types.h>                                                                            
+                                                                                                       
+#define VERSION                "0.14"                                                                  
                                                                                                        
 struct continuous {                                                                                    
        u16 id;    /* codec id */                                                                       
@@ -62,6 +66,7 @@ static const struct continuous cinfo[] = {                                            
 /* continuous speed index */                                                                           
 static int sp_idx;                                                                                     
 static u16 last, tries;                                                                                
+static int irq;                                                                                        
                                                                                                        
 /*                                                                                                     
  * Pen sampling frequency (Hz) in continuous mode.                                                     
@@ -171,7 +176,7 @@ up:                                                                                 
                                                                                                        
 static int wm97xx_acc_startup(struct wm97xx *wm)                                                       
 {                                                                                                      
-       int idx = 0;                                                                                    
+       int idx = 0, ret = 0;                                                                           
                                                                                                        
        /* check we have a codec */                                                                     
        if (wm->ac97 == NULL)                                                                           
@@ -191,18 +196,37 @@ static int wm97xx_acc_startup(struct wm97xx *wm)                                  
                 "mainstone accelerated touchscreen driver, %d samples/sec\n",                          
                 cinfo[sp_idx].speed);                                                                  
                                                                                                        
+       /* IRQ driven touchscreen is used on Palm hardware */                                           
+       if (machine_is_palmt5() || machine_is_palmtx() || machine_is_palmld()) 
{                        
+               pen_int = 1;                                                                            
+               irq = 27;                                                                               
+       } else if (machine_is_mainstone() && pen_int)                                                   
+               irq = 4;                                                                                
+                                                                                                       
+       if (irq) {                                                                                      
+               ret = gpio_request(irq, "Touchscreen IRQ");                                             
+               if (ret)                                                                                
+                       goto out;                                                                       
+                                                                                                       
+               ret = gpio_direction_input(irq);                                                        
+               if (ret) {                                                                              
+                       gpio_free(irq);                                                                 
+                       goto out;                                                                       
+               }                                                                                       
+                                                                                                       
+               wm->pen_irq = gpio_to_irq(irq);                                                         
+               set_irq_type(wm->pen_irq, IRQ_TYPE_EDGE_BOTH);                                          
+       } else  /* pen irq not supported */                                                             
+               pen_int = 0;                                                                            
+                                                                                                       
        /* codec specific irq config */                                                                 
        if (pen_int) {                                                                                  
                switch (wm->id) {                                                                       
                case WM9705_ID2:                                                                        
-                       wm->pen_irq = IRQ_GPIO(4);                                                      
-                       set_irq_type(IRQ_GPIO(4), IRQ_TYPE_EDGE_BOTH);                                  
                        break;                                                                          
                case WM9712_ID2:                                                                        
                case WM9713_ID2:                                                                        
-                       /* enable pen down interrupt */                                                 
                        /* use PEN_DOWN GPIO 13 to assert IRQ on GPIO line 2 
*/                         
-                       wm->pen_irq = MAINSTONE_AC97_IRQ;                                               
                        wm97xx_config_gpio(wm, WM97XX_GPIO_13, WM97XX_GPIO_IN,                          
                                           WM97XX_GPIO_POL_HIGH,                                        
                                           WM97XX_GPIO_STICKY,                                          
@@ -220,23 +244,17 @@ static int wm97xx_acc_startup(struct wm97xx *wm)                                  
                }                                                                                       
        }

-       return 0;
+out:
+       return ret;
 }

 static void wm97xx_acc_shutdown(struct wm97xx *wm)
 {
        /* codec specific deconfig */
        if (pen_int) {
-               switch (wm->id & 0xffff) {
-               case WM9705_ID2:
-                       wm->pen_irq = 0;
-                       break;
-               case WM9712_ID2:
-               case WM9713_ID2:
-                       /* disable interrupt */
-                       wm->pen_irq = 0;
-                       break;
-               }
+               if (irq)
+                       gpio_free(irq);
+               wm->pen_irq = 0;
        }
 }

--
1.6.3.3

             reply	other threads:[~2009-07-17  8:00 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-17  8:00 Marek Vasut [this message]
2009-07-17 10:22 ` [PATCH 1/2] Add Palm support to Mainstone accelerated touch Mark Brown
2009-07-17 11:10   ` Marek Vasut
2009-07-17 11:15     ` Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200907171000.24408.marek.vasut@gmail.com \
    --to=marek.vasut@gmail.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@opensource.wolfsonmicro.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.