static inline void mx1ts_reg_write(struct mx1ts *mts, unsigned int reg, unsigned int val)
{
__raw_writel(val, mts->mx1ts_mem+reg);
- printk(KERN_ERR "mx1_touchscreen: zapisuji do : %p hodnotu %x\n",mts->mx1ts_mem+reg, val);
+ printk(KERN_DEBUG "mx1_touchscreen: writing into : %p value %x\n",mts->mx1ts_mem+reg, val);
}
unsigned int out;
out = __raw_readl( mts->mx1ts_mem + reg );
- /*printk(KERN_ERR "mx1_touchscreen: ctu z %p : %d \n",mts->mx1ts_mem + reg, out);*/
+ /*printk(KERN_DEBUG "mx1_touchscreen: reading from %p : %d \n",mts->mx1ts_mem + reg, out);*/
return out;
}
value |= ASP_EDGE | /*ASP_POL |*/ ASP_PIRQE;
mx1ts_reg_write(mts, ASP_ICNTLR, value);
- printk(KERN_ERR "mx1_touchscreen pen_touch: aktivuji pen down interrupt \n");
+ printk(KERN_DEBUG "mx1_touchscreen: pen_touch: activating pen_down interrupt \n");
}
static void mx1ts_disable_pen_touch_interrupt(struct mx1ts *mts)
value &= ~ASP_PIRQE;
value = 0; /* TODO tohle se musi smazat*/
mx1ts_reg_write(mts, ASP_ICNTLR, value);
- printk(KERN_ERR "mx1_touchscreen pen_touch: deaktivuji pen down interrupt \n");
+ printk(KERN_DEBUG "mx1_touchscreen: pen_touch: deaktivating pen_down interrupt \n");
}
static void mx1ts_enable_pen_up_interrupt(struct mx1ts *mts)
value = mx1ts_reg_read(mts, ASP_ICNTLR);
value |= ASP_PUIE;
mx1ts_reg_write(mts, ASP_ICNTLR, value);
- printk(KERN_ERR "mx1_touchscreen pen_up: aktivuji pen up interrupt \n");
+ printk(KERN_DEBUG "mx1_touchscreen: pen_up: activating 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(KERN_ERR "mx1_touchscreen pen_up: deaktivuji pen up interrupt \n");
+ printk(KERN_DEBUG "mx1_touchscreen: pen_up: deaktivating pen_up interrupt \n");
}
static void mx1ts_start_auto_calibration(struct mx1ts *mts)
{
unsigned int value;
- printk(KERN_ERR "mx1_touchscreen start_auto_calibration \n");
+ printk(KERN_DEBUG "mx1_touchscreen: start_auto_calibration \n");
mts->auto_calibration = 1;
mx1_cal_range_x = 1;
mx1_cal_range_y = 1;
- /*printk(KERN_ERR "mx1_touchscreen mx1ts_pendata_irq \n");*/
-/* printk(KERN_ERR "mx1_touchscreen: mx1_pendata_irq interrupt recived from struct %p\n", mts);*/
+ /*printk(KERN_DEBUG "mx1_touchscreen mx1ts_pendata_irq \n");*/
+/* printk(KERN_DEBUG "mx1_touchscreen: mx1_pendata_irq interrupt recived from struct %p\n", mts);*/
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*/
if(mts->is_open) /*report last known touch*/
mx1ts_evt_add_up(mts->ts_idev, 100, 100);
- printk(KERN_ERR "Pen up interrupt.\n");
+ printk(KERN_DEBUG "Pen up interrupt.\n");
mx1ts_flush_fifo(mts);
return IRQ_HANDLED;
mts->cal_range_x = mx1ts_reg_read(mts, ASP_PADFIFO) & 0xFFFF;
mts->cal_range_y = mx1ts_reg_read(mts, ASP_PADFIFO) & 0xFFFF;
- printk(KERN_ERR "Kalibrace cal_auto_zero %i.\n",mts->cal_auto_zero);
- printk(KERN_ERR "Kalibrace cal_range_x %i.\n",mts->cal_range_x);
- printk(KERN_ERR "Kalibrace cal_range_y %i.\n",mts->cal_range_y);
-
if ((mts->cal_auto_zero >= mts->cal_range_x) ||
(mts->cal_auto_zero >= mts->cal_range_y)) {
// Invalid data.
- printk(KERN_ERR "Invalid data.\n");
+ printk(KERN_INFO "Invalid calibration data. Recalibrating. \n");
mx1ts_flush_fifo(mts); /*if there are some older data*/
mx1ts_start_auto_calibration(mts);
- return IRQ_NONE; /* return IRQ_HANDLED; */
+ return IRQ_HANDLED; /*return IRQ_NONE;*/
}
+ printk(KERN_DEBUG "mx1 touchscreen: calibration cal_auto_zero %i.\n",mts->cal_auto_zero);
+ printk(KERN_DEBUG "mx1 touchscreen: calibration cal_range_x %i.\n",mts->cal_range_x);
+ printk(KERN_DEBUG "mx1 touchscreen: calibration cal_range_y %i.\n",mts->cal_range_y);
mts->cal_range_x -= mts->cal_auto_zero;
mts->cal_range_y -= mts->cal_auto_zero;
{
struct mx1ts *mts = (struct mx1ts *) dev_id;
- printk(KERN_ERR "Prijat touch down irq \n");
+ printk(KERN_DEBUG "mx1 touchscreen: Touch down interrupt \n");
/* Clear the interrupt. */
mx1ts_reg_set_mask(mts, ASP_ISTATR, ASP_PEN);
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,
mx1ts_pendata_irq,
- /*IRQF_*/ 0,
+ 0,
DEV_IRQ_ID,
mts);
if (result) {
- printk(KERN_ERR "Couldn't request pen data IRQ.\n");
+ printk(KERN_ERR "mx1 touchscreen: Couldn't request pen data IRQ.\n");
return result;
}
DEV_IRQ_ID,
mts);
if (result) {
- printk(KERN_ERR "Couldn't request pen touch IRQ.\n");
+ printk(KERN_ERR "mx1 touchscreen: Couldn't request pen touch IRQ.\n");
free_irq(ASP_PENDATA_IRQ, mts);
return result;
}
int ret = 0;
if(!request_mem_region(ASP_BASE_ADDR, 0x38 , "mx1ts")) {
- printk(KERN_ERR "mx1ts: request_mem_region \tFAILED\n");
+ printk(KERN_ERR "mx1 touchscreen: request_mem_region \tFAILED\n");
return -1;
}
- printk(KERN_ERR "mx1ts: request_mem_region \tOK\n");
+ printk(KERN_DEBUG "mx1 touchscreen: request_mem_region \tOK\n");
mts->mx1ts_mem = ioremap ( ASP_BASE_ADDR, 0x38);
- printk(KERN_ERR "mx1ts: memory remaped on %p \n", mts->mx1ts_mem);
+ printk(KERN_DEBUG "mx1 touchscreen: memory remaped on %p \n", mts->mx1ts_mem);
- printk(KERN_ERR "mx1ts: enabling irqs\n");
+ /*printk(KERN_DEBUG "mx1 touchscreen: enabling irqs\n");*/
if ((ret = mx1ts_enable_irqs(mts)))
return ret;
- printk(KERN_ERR "mx1ts: irqs enabled \tOK\n");
+ printk(KERN_DEBUG "mx1 touchscreen: irqs enabled \tOK\n");
mx1ts_reset_asp(mts);
- printk(KERN_ERR "mx1ts: reset\tOK\n");
+ printk(KERN_DEBUG "mx1 touchscreen: reset\tOK\n");
return 0;
}
mts->is_open = 0;
mx1ts_flush_fifo(mts);
mx1ts_reset_asp(mts);
- printk(KERN_ERR "mx1ts: reset\tOK\n");
+ printk(KERN_DEBUG "mx1 touchscreen: reset\tOK\n");
mx1ts_disable_pen_touch_interrupt(mts);
mx1ts_disable_pen_up_interrupt(mts);
mts->is_open = 1;
mx1ts_flush_fifo(mts); /*if there are some older data*/
mx1ts_enable_pen_touch_interrupt(mts);
- printk(KERN_ERR "mx1ts: zapnuti touch interrupt\n");
+ printk(KERN_DEBUG "mx1 touchscreen: touch_down interupt enabled\n");
return 0;
}
idev = input_allocate_device();
if (!mts || !idev) {
error = -ENOMEM;
- printk(KERN_ERR "mx1ts: failed allocate memory for struct mx1ts or idev\n");
+ printk(KERN_ERR "mx1 touchscreen: failed allocate memory for struct mx1ts or idev\n");
goto err_free_devs;
return error;
}
mx1ts_on(mts); /* remaping registers, reseting device */
mts->ts_idev = idev;
- //ucb->adcsync = adcsync;
- //ucb->ac97 = to_ac97_t(dev);
init_waitqueue_head(&mts->ts_wait);
-/* id = mx1ts_reg_read(ucb, UCB_ID);
- if (id != UCB_ID_1400) {
- error = -ENODEV;
- goto err_free_devs;
- }
-
- error = mx1ts_detect_irq(ucb);
- if (error) {
- printk(KERN_ERR "UCB1400: IRQ probe failed\n");
- goto err_free_devs;
- }
-
- error = request_irq(ucb->irq, mx1ts_hard_irq, IRQF_TRIGGER_RISING,
- "UCB1400", ucb);
- if (error) {
- printk(KERN_ERR "mx1ts: unable to grab irq%d: %d\n",
- ucb->irq, error);
- goto err_free_devs;
- }
- printk(KERN_DEBUG "UCB1400: found IRQ %d\n", ucb->irq);*/
-
//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"; //dodano
idev->id.vendor = (unsigned int) 345; /*mx1ts_reg_read(mx1_ts, AC97_VENDOR_ID1);*/
idev->id.product = (unsigned int) 354; /*id;*/
+ idev->id.version = 0x0100; //dodano
+ idev->id.bustype = BUS_HOST;
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);
- printk(KERN_ERR "mx1ts: setting idev struct \tOK\n");
+ printk(KERN_DEBUG "mx1ts: setting idev struct \tOK\n");
x_res = 60000;
y_res = 60000;
input_set_abs_params(idev, ABS_X, 0, x_res, 0, 0);
input_set_abs_params(idev, ABS_Y, 0, y_res, 0, 0);
- input_set_abs_params(idev, ABS_PRESSURE, 0, 20000, 0, 0);
+ input_set_abs_params(idev, ABS_PRESSURE, 0, 1, 0, 0);
error = input_register_device(idev);
if (error) {
- printk(KERN_ERR "mx1ts: error while register input device\n");
+ printk(KERN_ERR "mx1 touchscreen: error while register input device\n");
goto err_free_devs;
}
- printk(KERN_ERR "mx1ts: input device registered \tOK\n");
+ printk(KERN_DEBUG "mx1ts: input device registered \tOK\n");
return 0;
err_free_devs:
- printk(KERN_ERR "mx1ts: error in device probe \n");
+ printk(KERN_ERR "mx1 touchscreen: error in device probe \n");
/*input_free_device(idev);*/
kfree(mts);
return error;
{
struct mx1ts *mts = platform_get_drvdata(dev);
- BUG_ON(mts == NULL);
+ //BUG_ON(mts == NULL);
free_irq(ASP_PENDATA_IRQ, mts);
free_irq(ASP_TOUCH_IRQ, mts);
/*input_free_device(mts->ts_idev);
- printk(KERN_ERR "Free device \tOK\n");*/
+ printk(KERN_DEBUG "Free device \tOK\n");*/
input_unregister_device(mts->ts_idev);
- printk(KERN_ERR "Unregister device \tOK\n");
+ printk(KERN_INFO "mx1 touchscreen: Unregister device \tOK\n");
iounmap(mts->mx1ts_mem);
release_mem_region(ASP_BASE_ADDR, 0x38);
kfree(mts);
- printk(KERN_ERR "Removing driver \tOK\n");
+ printk(KERN_INFO "mx1 touchscreen: Removing driver \tOK\n");
return 0;
}
},
};
+void mx1ts_device_release(struct device *dev) {
+ /*struct platform_device *pdev = to_platform_device(dev);
+ release_resource(&dev->res);
+ kfree(pdev);
+ }*/
+}
+
static struct platform_device mx1ts_device = {
.name = "mx1ts",
.id = 0,
.num_resources = ARRAY_SIZE(mx1ts_resources),
.resource = mx1ts_resources,
+ .dev = {
+ .release = mx1ts_device_release,
+ },
};
int error;
error = platform_device_register(&mx1ts_device);
if(error) {
- printk(KERN_ERR "PiMX1_touchsceen: device registration failed\n");
+ printk(KERN_ERR "mx1 touchscreen: device registration failed\n");
return error;
}