From: Radek Pupák Date: Tue, 15 Jul 2008 18:45:09 +0000 (+0200) Subject: change to litle more universal - ASP_TOUCH_IRQ, ASP_PENDATA_IRQ, ASP_BASE_ADDR are... X-Git-Url: https://rtime.felk.cvut.cz/gitweb/mx1ts.git/commitdiff_plain/HEAD change to litle more universal - ASP_TOUCH_IRQ, ASP_PENDATA_IRQ, ASP_BASE_ADDR are saved in the mx1ts structure, from defines only load to resources --- diff --git a/mx1_ts-driver.c b/mx1_ts-driver.c index d121bec..8a65d42 100644 --- a/mx1_ts-driver.c +++ b/mx1_ts-driver.c @@ -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 */ @@ -132,18 +132,16 @@ 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] = {