Thread (5 messages) flat view 5 messages, 4 authors, 2011-09-18

Re: [PATCH 1/3] input: Add a driver TSC40 (serial)

From: Christian Gmeiner <christian.gmeiner@gmail.com>
Date: 2011-09-14 12:07:58

Hi Dmitry,

2011/9/13 Dmitry Torokhov [off-list ref]:
Hi Christian,

On Tue, Sep 13, 2011 at 10:18:24AM +0200, Christian Gmeiner wrote:
quoted
+
+       ret = tsc_get_id(serio, STATE_GET_ID);
+       if (ret) {
+
+               /*
+                * So it did not repsond. Nasty litle thingy. A reset followed
+                * by ID seems to wake it up again. It responds with an ack
+                * followed by the ID.
+                */
+               ret = serio_write(serio, TSC10_CMD_RESET);
+               if (ret)
+                       goto fail3;
+
+               msleep(15);
+               ret = tsc_get_id(serio, STATE_GET_ID);
+               if (ret)
+                       goto fail3;
+
+               ret = serio_write(serio, TSC10_CMD_RESET);
+               if (ret)
+                       goto fail3;
+
+               msleep(15);
+
+               ret = tsc_get_id(serio, STATE_RESET_GET_ID);
+               if (ret)
+                       goto fail3;
+       }
+
+       mode = ptsc->data[0];
+       switch (mode) {
+               case 0x00:
+                       ptsc->state = STATE_INIT_MODE;
+                       break;
+
+               case 0x05:
+               case 0x01:
+               case 0x21:
+               case 0x31:
+               case 0x02:
+               case 0x0a:
+               case 0x2a:
+               case 0x3a:
+                       ret = serio_write(serio, TSC10_CMD_RESET);
+                       if (ret)
+                               goto fail3;
+                       msleep(16);
+                       ret = tsc_get_id(serio, STATE_GET_ID);
+                       if (ret)
+                               goto fail3;
+                       if (ptsc->data[0] == 0) {
+                               ptsc->state = STATE_INIT_MODE;
+                               break;
+                       }
+                       dev_err(&serio->dev, "Can't get into init mode
in %x\n", ptsc->data[0]);
+                       goto fail3;
+               default:
+                       dev_err(&serio->dev, "Unexpected mode: %02x\n", mode);
+                       goto fail3;
+       }
+
+       ptsc->idx = 0;
+       init_completion(&ptsc->cmd_done);
+       ret = serio_write(serio, TSC10_CMD_RATE);
+       if (ret)
+               goto fail3;
+       ret = serio_write(serio, TSC10_RATE_150);
+       if (ret)
+               goto fail3;
+
+       ret = wait_for_completion_timeout(&ptsc->cmd_done, HZ);
+       if (ret <= 0) {
+               dev_err(&serio->dev, "Mode transition failed %d\n", ret);
+               goto fail3;
+       }
+
+       ptsc->idx = 0;
+       if (ptsc->state != STATE_READ) {
+               dev_err(&serio->dev, "Touchscreen probably not attached.\n");
+               goto fail3;
+       }
All this initialization is much easier done in inputattach.
Thats fine for me... is http://git.iplinux.org/inputattach.git the
official git repo for inputattach?
quoted
+       ret = serio_write(serio, TSC10_CMD_DATA1);
+       if (ret)
+               goto fail3;
+
+       ret = input_register_device(ptsc->dev);
+       if (ret)
+               goto fail3;
+
+       return 0;
+ fail3:
+       serio_close(serio);
+ fail2:
+       serio_set_drvdata(serio, NULL);
+ fail1:
+       input_free_device(input_dev);
+       kfree(ptsc);
+       return ret;
+}
+
+static void tsc_disconnect(struct serio *serio)
+{
+       struct tsc_ser *ptsc = serio_get_drvdata(serio);
+
+       input_get_device(ptsc->dev);
+       input_unregister_device(ptsc->dev);
+       serio_close(serio);
+       serio_set_drvdata(serio, NULL);
+       input_put_device(ptsc->dev);
+       kfree(ptsc);
Just say:

       serio_close(serio);
       input_unregister_device(ptsc->dev);
       kfree(ptsc);
       serio_set_drvdata(serio, NULL);

No need to mess with get/put. I over-complicated some older drivers in
this regard ;)
Will improve this part in v2.

thanks
--
Christian Gmeiner, MSc
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help