/* 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;
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,
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;
-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;
}
/* 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;
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");
//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";
//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");*/
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);
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] = {