Lines Matching refs:elo

51 struct elo {
65 static void elo_process_data_10(struct elo *elo, unsigned char data)
67 struct input_dev *dev = elo->dev;
69 elo->data[elo->idx] = data;
71 switch (elo->idx++) {
73 elo->csum = 0xaa;
75 dev_dbg(&elo->serio->dev,
77 elo->idx = 0;
82 elo->idx = 0;
83 if (data != elo->csum) {
84 dev_dbg(&elo->serio->dev,
86 data, elo->csum);
89 if (elo->data[1] != elo->expected_packet) {
90 if (elo->data[1] != ELO10_TOUCH_PACKET)
91 dev_dbg(&elo->serio->dev,
93 elo->data[1]);
96 if (likely(elo->data[1] == ELO10_TOUCH_PACKET)) {
97 input_report_abs(dev, ABS_X, (elo->data[4] << 8) | elo->data[3]);
98 input_report_abs(dev, ABS_Y, (elo->data[6] << 8) | elo->data[5]);
99 if (elo->data[2] & ELO10_PRESSURE)
101 (elo->data[8] << 8) | elo->data[7]);
102 input_report_key(dev, BTN_TOUCH, elo->data[2] & ELO10_TOUCH);
104 } else if (elo->data[1] == ELO10_ACK_PACKET) {
105 if (elo->data[2] == '0')
106 elo->expected_packet = ELO10_TOUCH_PACKET;
107 complete(&elo->cmd_done);
109 memcpy(elo->response, &elo->data[1], ELO10_PACKET_LEN);
110 elo->expected_packet = ELO10_ACK_PACKET;
114 elo->csum += data;
117 static void elo_process_data_6(struct elo *elo, unsigned char data)
119 struct input_dev *dev = elo->dev;
121 elo->data[elo->idx] = data;
123 switch (elo->idx++) {
127 elo->idx = 0;
132 elo->idx = 0;
137 elo->idx = 0;
142 elo->idx = 0;
146 input_report_abs(dev, ABS_X, ((elo->data[0] & 0x3f) << 6) | (elo->data[1] & 0x3f));
147 input_report_abs(dev, ABS_Y, ((elo->data[2] & 0x3f) << 6) | (elo->data[3] & 0x3f));
149 if (elo->id == 2) {
152 elo->idx = 0;
160 elo->idx = 0;
166 input_report_abs(dev, ABS_PRESSURE, elo->data[5]);
167 input_report_key(dev, BTN_TOUCH, !!elo->data[5]);
170 elo->idx = 0;
175 static void elo_process_data_3(struct elo *elo, unsigned char data)
177 struct input_dev *dev = elo->dev;
179 elo->data[elo->idx] = data;
181 switch (elo->idx++) {
185 elo->idx = 0;
188 input_report_key(dev, BTN_TOUCH, !(elo->data[1] & 0x80));
189 input_report_abs(dev, ABS_X, elo->data[1]);
190 input_report_abs(dev, ABS_Y, elo->data[2]);
192 elo->idx = 0;
200 struct elo *elo = serio_get_drvdata(serio);
202 switch (elo->id) {
204 elo_process_data_10(elo, data);
209 elo_process_data_6(elo, data);
213 elo_process_data_3(elo, data);
220 static int elo_command_10(struct elo *elo, unsigned char *packet)
226 mutex_lock(&elo->cmd_mutex);
228 serio_pause_rx(elo->serio);
229 elo->expected_packet = toupper(packet[0]);
230 init_completion(&elo->cmd_done);
231 serio_continue_rx(elo->serio);
233 if (serio_write(elo->serio, ELO10_LEAD_BYTE))
238 if (serio_write(elo->serio, packet[i]))
242 if (serio_write(elo->serio, csum))
245 wait_for_completion_timeout(&elo->cmd_done, HZ);
247 if (elo->expected_packet == ELO10_TOUCH_PACKET) {
249 memcpy(packet, elo->response, ELO10_PACKET_LEN);
254 mutex_unlock(&elo->cmd_mutex);
258 static int elo_setup_10(struct elo *elo)
261 struct input_dev *dev = elo->dev;
264 if (elo_command_10(elo, packet))
274 dev_info(&elo->serio->dev,
288 struct elo *elo = serio_get_drvdata(serio);
290 input_get_device(elo->dev);
291 input_unregister_device(elo->dev);
294 input_put_device(elo->dev);
295 kfree(elo);
306 struct elo *elo;
310 elo = kzalloc(sizeof(struct elo), GFP_KERNEL);
312 if (!elo || !input_dev) {
317 elo->serio = serio;
318 elo->id = serio->id.id;
319 elo->dev = input_dev;
320 elo->expected_packet = ELO10_TOUCH_PACKET;
321 mutex_init(&elo->cmd_mutex);
322 init_completion(&elo->cmd_done);
323 snprintf(elo->phys, sizeof(elo->phys), "%s/input0", serio->phys);
326 input_dev->phys = elo->phys;
329 input_dev->id.product = elo->id;
336 serio_set_drvdata(serio, elo);
341 switch (elo->id) {
344 if (elo_setup_10(elo)) {
366 err = input_register_device(elo->dev);
375 kfree(elo);
397 .name = "elo",