static inline void mx1ts_reg_write(struct mx1ts *mts, unsigned int reg, unsigned int val)
{
__raw_writel(val, mts->mx1ts_mem+reg);
- printk("mx1_touchscreen: zapisuji do : %p hodnotu %x\n",mts->mx1ts_mem+reg, val);
+ printk(KERN_ERR "mx1_touchscreen: zapisuji do : %p hodnotu %x\n",mts->mx1ts_mem+reg, val);
}
unsigned int out;
out = __raw_readl( mts->mx1ts_mem + reg );
- /*printk("mx1_touchscreen: ctu z %p : %d \n",mts->mx1ts_mem + reg, out);*/
+ /*printk(KERN_ERR "mx1_touchscreen: ctu z %p : %d \n",mts->mx1ts_mem + reg, out);*/
return out;
}
value = mx1ts_reg_read(mts, ASP_ICNTLR);
value |= /*ASP_POL detekuje zvednuti |*/ ASP_EDGE | ASP_PIRQE;
mx1ts_reg_write(mts, ASP_ICNTLR, value);
- printk("mx1_touchscreen: aktivuji pen down interrupt \n");
+ printk(KERN_ERR "mx1_touchscreen: aktivuji pen down interrupt \n");
}
static void mx1ts_disable_pen_touch_interrupt(struct mx1ts *mts)
value = mx1ts_reg_read(mts, ASP_ICNTLR);
value &= ~ASP_PIRQE;
mx1ts_reg_write(mts, ASP_ICNTLR, value);
- printk("mx1_touchscreen: deaktivuji pen down interrupt \n");
+ printk(KERN_ERR "mx1_touchscreen: deaktivuji pen down interrupt \n");
}
static void mx1ts_enable_pen_up_interrupt(struct mx1ts *mts)
{
unsigned int value;
- /* Enable pen up interrupt. XXX: This feature is undocumented. */
value = mx1ts_reg_read(mts, ASP_ICNTLR);
value |= ASP_PUIE;
mx1ts_reg_write(mts, ASP_ICNTLR, value);
- printk("mx1_touchscreen: aktivuji penup interrupt \n");
+ printk(KERN_ERR "mx1_touchscreen: aktivuji pen up interrupt \n");
}
static void mx1ts_disable_pen_up_interrupt(struct mx1ts *mts)
value = mx1ts_reg_read(mts, ASP_ICNTLR);
value &= ~ASP_PUIE;
mx1ts_reg_write(mts, ASP_ICNTLR, value);
- printk("mx1_touchscreen: deaktivuji penup interrupt \n");
+ printk(KERN_ERR "mx1_touchscreen: deaktivuji penup interrupt \n");
}
mx1_cal_range_x = 1;
mx1_cal_range_y = 1;
-/* printk("<1> mx1_touchscreen: mx1_pendata_irq interrupt recived from struct %p\n", mts);*/
+/* printk(KERN_ERR "mx1_touchscreen: mx1_pendata_irq interrupt recived from struct %p\n", mts);*/
- if (mx1ts_reg_read(mts, ASP_ISTATR) & ASP_PUIS) {
- mx1ts_reg_set_mask(mts, ASP_ISTATR, ASP_PUIS);
+ if (mx1ts_reg_read(mts, ASP_ISTATR) & ASP_PUIS) { /*pen up interupt pending*/
+ mx1ts_reg_set_mask(mts, ASP_ISTATR, ASP_PUIS); /*clearing pen up interupt*/
- mx1ts_disable_auto_sample(mts);
+ mx1ts_disable_auto_sample(mts);
mx1ts_disable_pen_up_interrupt(mts);
mx1ts_enable_pen_touch_interrupt(mts);
- if(mts->is_open)
+ if(mts->is_open) /*report last known touch*/
mx1ts_evt_add(mts->ts_idev, 0, 0, 0);
- printk(KERN_ERR "Zaplnena fifo.\n");
+ printk(KERN_ERR "Pen up interrupt.\n");
mx1ts_flush_fifo(mts);
return IRQ_HANDLED;
(mts->cal_auto_zero >= mts->cal_range_y)) {
// Invalid data.
printk(KERN_ERR "Invalid data.\n");
- mx1ts_flush_fifo(mts);
+ mx1ts_flush_fifo(mts); /*if there are some older data*/
mx1ts_start_auto_calibration(mts);
return IRQ_NONE; /* return IRQ_HANDLED; */
}
- value = mx1ts_reg_read(mts, ASP_ACNTLCR);
- value &= ~0x04000000; // Undocumented.
+ value = mx1ts_reg_read(mts, ASP_ACNTLCR); /*switching S0..S7 by internal logic*/
+ value &= ~0x04000000;
mx1ts_reg_write(mts, ASP_ACNTLCR, value);
mts->auto_calibration = 0;
return IRQ_HANDLED;
}
-/* static void mx1ts_pokus_zapnout(struct mx1ts *mts) {
- mx1ts_reg_write(mts, ASP_CLKDIV, 0x1F); //clok divide register
- mx1ts_reg_write(mts, ASP_ICNTLR , ASP_PUIE | ASP_PDRE | ASP_PFFE | ASP_EDGE | ASP_PIRQE); //interupt control register //0X00000833
- mx1ts_reg_write(mts, ASP_PSMPLRG, 0x0000487F); //pen a/d sample rate control register
- mx1ts_reg_write(mts,ASP_ACNTLCR, ASP_CLKEN | ASP_AZE | ASP_AUTO | (10<<12) | 3); //control register
-
-} */
-
-static void mx1ts_enable_pen_up_irq(struct mx1ts *mts)
-{
- unsigned int value;
- printk(KERN_ERR "enabling pen up irq.\n");
-
- value = mx1ts_reg_read(mts, ASP_ICNTLR);
- value |= ASP_PUIE;
- mx1ts_reg_write(mts, ASP_ICNTLR, value);
-}
-
/*
* Handle the touch interrupt, generated when the pen is pressed/
* released.
return -1;
}
- printk("<1>mx1ts: request_mem_region \tOK\n");
+ printk(KERN_ERR "mx1ts: request_mem_region \tOK\n");
mts->mx1ts_mem = ioremap ( ASP_BASE_ADDR, 0x38);
- printk("<1>mx1ts: memory remaped on %p \n", mts->mx1ts_mem);
+ printk(KERN_ERR "mx1ts: memory remaped on %p \n", mts->mx1ts_mem);
- printk("<1>mx1ts: enabling irqs\n");
+ printk(KERN_ERR "mx1ts: enabling irqs\n");
if ((ret = mx1ts_enable_irqs(mts)))
return ret;
- printk("<1>mx1ts: irqs enabled \tOK\n");
+ printk(KERN_ERR "mx1ts: irqs enabled \tOK\n");
mx1ts_reset_asp(mts);
- printk("<1>mx1ts: reset\tOK\n");
+ printk(KERN_ERR "mx1ts: reset\tOK\n");
return 0;
}
struct mx1ts *mts = dev_get_drvdata(idev->dev.parent);
mts->is_open = 0;
mx1ts_reset_asp(mts);
- printk("<1>mx1ts: reset\tOK\n");
+ printk(KERN_ERR "mx1ts: reset\tOK\n");
mx1ts_disable_pen_touch_interrupt(mts);
mx1ts_disable_pen_up_interrupt(mts);
mts->is_open = 1;
mx1ts_enable_pen_touch_interrupt(mts);
- printk("<1>mx1ts: zapnuti touch interrupt\n");
+ printk(KERN_ERR "mx1ts: zapnuti touch interrupt\n");
return 0;
}
{
struct mx1ts *mts;
struct input_dev *idev;
- int error, id, x_res, y_res;
+ int error, x_res, y_res;
-// mx1ts_disable_pen_touch_interrupt();
-// mx1ts_start_auto_calibration();
-// mx1ts_enable_pen_up_interrupt();
+ /* TODO jak poznat ze zarizeni je pritomne ? */
- mts = kzalloc(sizeof(struct mx1ts), GFP_KERNEL); //alokuje pamet
+ mts = kzalloc(sizeof(struct mx1ts), GFP_KERNEL); /* alokuje pamet */
idev = input_allocate_device();
if (!mts || !idev) {
error = -ENOMEM;
+ printk(KERN_ERR "mx1ts: failed allocate memory for struct mx1ts or idev\n");
goto err_free_devs;
- return error; //XXX
+ return error;
}
- mx1ts_on(mts);
+ mx1ts_on(mts); /* remaping registers, reseting device */
mts->ts_idev = idev;
//ucb->adcsync = adcsync;
}
printk(KERN_DEBUG "UCB1400: found IRQ %d\n", ucb->irq);*/
- //input_set_drvdata(idev, mts);
+ //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->id.vendor = (unsigned int) 345;//mx1ts_reg_read(mx1_ts, AC97_VENDOR_ID1);
- idev->id.product = id;
+ idev->id.vendor = (unsigned int) 345; /*mx1ts_reg_read(mx1_ts, AC97_VENDOR_ID1);*/
+ idev->id.product = (unsigned int) 354; /*id;*/
idev->open = mx1ts_open;
idev->close = mx1ts_close;
idev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
idev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
- //idev->bustype = BUS_HOST;
-
- printk("<1> mx1ts: setting idev struct \tOK\n");
+ printk(KERN_ERR "mx1ts: setting idev struct \tOK\n");
x_res = 35000;
y_res = 35000;
error = input_register_device(idev);
if (error)
- goto err_free_irq;
+ printk(KERN_ERR "mx1ts: error while register input device\n");
+ goto err_free_devs;
- printk("<1> mx1ts: input device registered \tOK\n");
+ printk(KERN_ERR "mx1ts: input device registered \tOK\n");
return 0;
- err_free_irq:
-// free_irq(ucb->irq, ucb);
- err_free_devs:
- printk("<1> mx1ts: chyba pri nastavovani irq \n");
- input_free_device(idev);
+ err_free_devs:
+ printk(KERN_ERR "mx1ts: error in device probe \n");
+ /*input_free_device(idev);*/
kfree(mts);
return error;
kfree(mts);
- printk("<1> Removing driver \tOK\n");
+ printk(KERN_ERR "Removing driver \tOK\n");
return 0;
}