Hi Mohan,
> Can you tell us what it takes to fix the touchscreen in N810 ? If the
> explanation is equally large:--), then
> perhaps ignore it and update your site when you have time.
I was looking at the wrong file...the patch is actually rather small :-)
Guiyong sent me that patch ... it fixes the touchscreen
Apply the patch to a nokia+android patched 2.6.21 kernel and you should
have a working touchscreen.
--
regards,
Georges Toth
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Android Internals" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/android-internals?hl=en
-~----------~----~----~----~------~----~------~--~---
Index: drivers/input/touchscreen/tsc2005.c
===================================================================
--- drivers/input/touchscreen/tsc2005.c (revision 1269)
+++ drivers/input/touchscreen/tsc2005.c (revision 1273)
@@ -181,6 +181,8 @@
};
#define NUM_READ_REGS (sizeof(tsc2005_read_reg)/sizeof(tsc2005_read_reg[0]))
+extern struct input_dev * android_idev;
+
struct tsc2005 {
struct spi_device *spi;
@@ -262,6 +264,8 @@
int x, int y, int pressure)
{
if (pressure) {
+ x = abs((x -260) * 800 / 3500);
+ y = abs((3550 - y) * 480 / 3000);
input_report_abs(ts->idev, ABS_X, x);
input_report_abs(ts->idev, ABS_Y, y);
input_report_abs(ts->idev, ABS_PRESSURE, pressure);
@@ -557,7 +561,8 @@
ts->touch_pressure = pdata->ts_touch_pressure ? : ts->p_max;
p_fudge = pdata->ts_pressure_fudge ? : 2;
- idev = input_allocate_device();
+// idev = input_allocate_device();
+ idev = android_idev;
if (idev == NULL) {
r = -ENOMEM;
goto err2;
@@ -567,10 +572,10 @@
* TODO: should be "TSC2005 touchscreen", but X has hardcoded these
* strings and doesn't accept TSC2005 yet...
*/
- idev->name = "TSC2301 touchscreen";
- snprintf(ts->phys, sizeof(ts->phys), "%s/input-ts",
- ts->spi->dev.bus_id);
- idev->phys = ts->phys;
+// idev->name = "TSC2301 touchscreen";
+// snprintf(ts->phys, sizeof(ts->phys), "%s/input-ts",
+// ts->spi->dev.bus_id);
+// idev->phys = ts->phys;
idev->evbit[0] = BIT(EV_ABS) | BIT(EV_KEY);
idev->absbit[0] = BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE);
@@ -578,9 +583,14 @@
tsc2005_ts_setup_spi_xfer(ts);
+ x_max = 800;
+ y_max = 480;
+
input_set_abs_params(idev, ABS_X, 0, x_max, x_fudge, 0);
input_set_abs_params(idev, ABS_Y, 0, y_max, y_fudge, 0);
input_set_abs_params(idev, ABS_PRESSURE, 0, ts->p_max, p_fudge, 0);
+ set_bit(BTN_TOUCH, idev->keybit);
+ bitmap_fill(idev->absbit, ABS_MAX);
tsc2005_start_scan(ts);
Index: drivers/video/omap/omapfb_main.c
===================================================================
--- drivers/video/omap/omapfb_main.c (revision 1269)
+++ drivers/video/omap/omapfb_main.c (revision 1273)
@@ -698,6 +698,34 @@
struct omapfb_device *fbdev = plane->fbdev;
int r;
+ if((var->rotate & 1) != (fbi->var.rotate & 1)) {
+ if((var->xres != fbi->var.yres) ||
+ (var->yres != fbi->var.xres) ||
+ (var->xres_virtual != fbi->var.yres) ||
+ (var->yres_virtual > fbi->var.xres) ||
+ (var->yres_virtual < fbi->var.xres )) {
+ printk(KERN_INFO "omapfb_check_var: failed 1\n");
+ return -EINVAL;
+ }
+ }
+ else {
+ if((var->xres != fbi->var.xres) ||
+ (var->yres != fbi->var.yres) ||
+ (var->xres_virtual != fbi->var.xres) ||
+ (var->yres_virtual > fbi->var.yres) ||
+ (var->yres_virtual < fbi->var.yres )) {
+ printk(KERN_INFO "omapfb_check_var: failed 2\n");
+ return -EINVAL;
+ }
+ }
+ if((var->xoffset != fbi->var.xoffset) ||
+ (var->bits_per_pixel != fbi->var.bits_per_pixel) ||
+ (var->grayscale != fbi->var.grayscale)) {
+
+ printk(KERN_INFO "omapfb_check_var: failed 3\n");
+ return -EINVAL;
+ }
+
omapfb_rqueue_lock(fbdev);
if (fbdev->ctrl->sync != NULL)
fbdev->ctrl->sync();
Index: drivers/i2c/chips/menelaus.c
===================================================================
--- drivers/i2c/chips/menelaus.c (revision 1269)
+++ drivers/i2c/chips/menelaus.c (revision 1273)
@@ -48,6 +48,7 @@
#include <asm/arch/menelaus.h>
/*#define DEBUG*/
+#define dev_info(dev, format, arg...) do { (void)(dev); } while (0)
#define DRIVER_NAME "menelaus"
Index: drivers/i2c/chips/lm8323.c
===================================================================
--- drivers/i2c/chips/lm8323.c (revision 1269)
+++ drivers/i2c/chips/lm8323.c (revision 1273)
@@ -174,6 +174,9 @@
struct lm8323_pwm pwm3;
};
+struct input_dev * android_idev;
+EXPORT_SYMBOL(android_idev);
+
#define client_to_lm8323(c) container_of(c, struct lm8323_chip, client)
#define dev_to_lm8323(d) container_of(d, struct lm8323_chip, client.dev)
#define work_to_lm8323(w) container_of(w, struct lm8323_chip, work)
@@ -801,6 +804,7 @@
err = -ENOMEM;
goto fail8;
}
+ android_idev = idev;
if (lm8323_pdata->name)
idev->name = lm8323_pdata->name;
@@ -822,7 +826,7 @@
set_bit(EV_REP, idev->evbit);
lm->idev = idev;
- input_register_device(idev);
+// input_register_device(idev);
return 0;