]> rtime.felk.cvut.cz Git - mx1ts.git/commitdiff
change to litle more universal - ASP_TOUCH_IRQ, ASP_PENDATA_IRQ, ASP_BASE_ADDR are... master
authorRadek Pupák <pupakr1@fel.cvut.cz>
Tue, 15 Jul 2008 18:45:09 +0000 (20:45 +0200)
committerRadek Pupák <pupakr1@fel.cvut.cz>
Tue, 15 Jul 2008 18:45:09 +0000 (20:45 +0200)
mx1_ts-driver.c

index d121bec325e7feddeafc12f29fca6f3bac08d86c..8a65d4212e3c7c9b27bf40c073b13051e79d5e8f 100644 (file)
@@ -34,7 +34,7 @@
 
 /* Analog signal processor (ASP) control registers */
 #define ASP_BASE_ADDR          0x00215000
-#define ASP_MEM_LENGTH         0x38
+#define ASP_BASE_ADDR_LEN      0x38
 
 #define ASP_ACNTLCR            (0x10)     /* Control register */
 #define ASP_PSMPLRG            (0x14)     /* Pen A/D sampe rate control */
 
 struct mx1ts {
        struct input_dev        *ts_idev;
-       struct resource         pamet;
-       int                     irq_touch;
-       int                     irq_pen_up;
+       /*struct resource       pamet;*/
+       unsigned int            irq_touch;
+       unsigned int            irq_pen_data;
 
        wait_queue_head_t       ts_wait;
        struct task_struct      *ts_task;
 
-       unsigned int            irq_pending;    
-/*     unsigned int            ts_restart:1;
-       unsigned int            adcsync:1;*/
-       void __iomem*           mx1ts_mem;
-       
+       void __iomem*           mx1ts_mem;      /* remaped memmory */
+       unsigned int            baseaddr;
+       unsigned int            baseaddr_len;           
        u16                     x_res;          
        u16                     y_res;
        u16                     x_akt;
@@ -510,8 +508,8 @@ static irqreturn_t mx1ts_touch_irq(int irq, void *dev_id)
 static inline int mx1ts_enable_irqs(struct mx1ts *mts) //zaregistruje preruseni
 {
        int result;
-//TODO printk(KERN_ERR "enabling irq %d.\n",mts->ts_idev->dev.parent.resource[1]->start);
-       result = request_irq(ASP_PENDATA_IRQ,
+
+       result = request_irq(mts->irq_pen_data,
                             mx1ts_pendata_irq,
                                 0,
                             DEV_IRQ_ID,
@@ -520,15 +518,15 @@ static inline int mx1ts_enable_irqs(struct mx1ts *mts)    //zaregistruje preruseni
                printk(KERN_ERR "mx1 touchscreen: Couldn't request pen data IRQ.\n");
                return result;
        }
-
-       result = request_irq(ASP_TOUCH_IRQ,
+       
+       result = request_irq(mts->irq_touch,
                             mx1ts_touch_irq,
                             /*IRQF_*/ 0,
                             DEV_IRQ_ID,
                             mts);
        if (result) {
                printk(KERN_ERR "mx1 touchscreen: Couldn't request pen touch IRQ.\n");
-               free_irq(ASP_PENDATA_IRQ, mts);
+               free_irq(mts->irq_pen_data, mts);
                return result;
        }
        return result;
@@ -536,21 +534,21 @@ static inline int mx1ts_enable_irqs(struct mx1ts *mts)    //zaregistruje preruseni
 
 
 
-static int mx1ts_on(struct mx1ts *mts)    /*TODO doplnit pri chybach*/
+static int mx1ts_on(struct mx1ts *mts)
 {
        int ret = 0;
        
-       if(!request_mem_region(ASP_BASE_ADDR, ASP_MEM_LENGTH , "mx1ts")) {
+       if(!request_mem_region(mts->baseaddr, mts->baseaddr_len , "mx1ts")) {
                printk(KERN_ERR "mx1 touchscreen: request_mem_region \tFAILED\n");
                return -ENOMEM; 
        }
 
        printk(KERN_DEBUG "mx1 touchscreen: request_mem_region \tOK\n");        
 
-       mts->mx1ts_mem = ioremap ( ASP_BASE_ADDR, ASP_MEM_LENGTH);
+       mts->mx1ts_mem = ioremap ( mts->baseaddr, mts->baseaddr_len);
        
        if(!mts->mx1ts_mem) {
-               release_mem_region(ASP_BASE_ADDR, ASP_MEM_LENGTH);
+               release_mem_region(mts->baseaddr, mts->baseaddr_len);
                printk(KERN_ERR "mx1 touchscreen: ioremap  \tFAILED\n");
                return -1;      
        }
@@ -601,7 +599,7 @@ static int mx1ts_probe(struct platform_device *dev)
 
        /* TODO jak poznat ze zarizeni je pritomne ? */
 
-       mts = kzalloc(sizeof(struct mx1ts), GFP_KERNEL);        /* alokuje pamet */
+       mts = kzalloc(sizeof(struct mx1ts), GFP_KERNEL);
        idev = input_allocate_device();
        if (!mts || !idev) {
                error = -ENOMEM;
@@ -609,6 +607,13 @@ static int mx1ts_probe(struct platform_device *dev)
                goto err_free_devs;
                return error;   
        }
+       mts->baseaddr = dev->resource[0].start;
+       mts->baseaddr_len = dev->resource[0].end - dev->resource[0].start;
+       printk(KERN_ERR "mx1 touchscreen: memorry base addr %d \n", mts->baseaddr);     
+       printk(KERN_ERR "mx1 touchscreen: memorry base addr_len %d \n", mts->baseaddr_len);     
+       mts->irq_pen_data = dev->resource[1].start;
+       mts->irq_touch = dev->resource[2].start;
+
        error = mx1ts_on(mts);
        if(error<0) {                   /* remaping registers, reseting device */
                printk(KERN_ERR "mx1 touchscreen: failed mx1ts_on - remaping registers, reseting device\n");    
@@ -621,7 +626,7 @@ static int mx1ts_probe(struct platform_device *dev)
 
        //input_set_drvdata(idev, mts);         /*moznost ulozit ukazatel na trukturu do input_driver*/
        platform_set_drvdata(dev, mts);
-
+       
        idev->dev.parent        = &dev->dev;
        idev->name              = "MX1 touchscreen interface";
        idev->phys              = "mx1ts/input0";       
@@ -670,8 +675,8 @@ static int mx1ts_remove(struct platform_device *dev)
 
        //BUG_ON(mts == NULL);
        
-       free_irq(ASP_PENDATA_IRQ, mts);
-       free_irq(ASP_TOUCH_IRQ, mts);
+       free_irq(mts->irq_pen_data, mts);
+       free_irq(mts->irq_touch, mts);
 
        /*input_free_device(mts->ts_idev);
        printk(KERN_DEBUG "Free device \tOK\n");*/
@@ -679,7 +684,7 @@ static int mx1ts_remove(struct platform_device *dev)
        input_unregister_device(mts->ts_idev);
        printk(KERN_INFO "mx1 touchscreen: Unregister device \tOK\n");
        iounmap(mts->mx1ts_mem);
-       release_mem_region(ASP_BASE_ADDR, ASP_MEM_LENGTH);
+       release_mem_region(mts->baseaddr, mts->baseaddr_len);
                
        kfree(mts);
 
@@ -707,7 +712,7 @@ static struct platform_driver mx1ts_driver = {
 static struct resource mx1ts_resources[] = {
        [0] = {
                .start  = ASP_BASE_ADDR + 0,
-               .end    = ASP_BASE_ADDR + 0x37,
+               .end    = ASP_BASE_ADDR + ASP_BASE_ADDR_LEN,
                .flags  = IORESOURCE_MEM,
        },
        [1] = {