Lines Matching refs:elo
55 struct elo { struct
69 static void elo_process_data_10(struct elo *elo, unsigned char data) in elo_process_data_10() argument
71 struct input_dev *dev = elo->dev; in elo_process_data_10()
73 elo->data[elo->idx] = data; in elo_process_data_10()
75 switch (elo->idx++) { in elo_process_data_10()
77 elo->csum = 0xaa; in elo_process_data_10()
79 dev_dbg(&elo->serio->dev, in elo_process_data_10()
81 elo->idx = 0; in elo_process_data_10()
86 elo->idx = 0; in elo_process_data_10()
87 if (data != elo->csum) { in elo_process_data_10()
88 dev_dbg(&elo->serio->dev, in elo_process_data_10()
90 data, elo->csum); in elo_process_data_10()
93 if (elo->data[1] != elo->expected_packet) { in elo_process_data_10()
94 if (elo->data[1] != ELO10_TOUCH_PACKET) in elo_process_data_10()
95 dev_dbg(&elo->serio->dev, in elo_process_data_10()
97 elo->data[1]); in elo_process_data_10()
100 if (likely(elo->data[1] == ELO10_TOUCH_PACKET)) { in elo_process_data_10()
101 input_report_abs(dev, ABS_X, (elo->data[4] << 8) | elo->data[3]); in elo_process_data_10()
102 input_report_abs(dev, ABS_Y, (elo->data[6] << 8) | elo->data[5]); in elo_process_data_10()
103 if (elo->data[2] & ELO10_PRESSURE) in elo_process_data_10()
105 (elo->data[8] << 8) | elo->data[7]); in elo_process_data_10()
106 input_report_key(dev, BTN_TOUCH, elo->data[2] & ELO10_TOUCH); in elo_process_data_10()
108 } else if (elo->data[1] == ELO10_ACK_PACKET) { in elo_process_data_10()
109 if (elo->data[2] == '0') in elo_process_data_10()
110 elo->expected_packet = ELO10_TOUCH_PACKET; in elo_process_data_10()
111 complete(&elo->cmd_done); in elo_process_data_10()
113 memcpy(elo->response, &elo->data[1], ELO10_PACKET_LEN); in elo_process_data_10()
114 elo->expected_packet = ELO10_ACK_PACKET; in elo_process_data_10()
118 elo->csum += data; in elo_process_data_10()
121 static void elo_process_data_6(struct elo *elo, unsigned char data) in elo_process_data_6() argument
123 struct input_dev *dev = elo->dev; in elo_process_data_6()
125 elo->data[elo->idx] = data; in elo_process_data_6()
127 switch (elo->idx++) { in elo_process_data_6()
131 elo->idx = 0; in elo_process_data_6()
136 elo->idx = 0; in elo_process_data_6()
141 elo->idx = 0; in elo_process_data_6()
146 elo->idx = 0; in elo_process_data_6()
150 input_report_abs(dev, ABS_X, ((elo->data[0] & 0x3f) << 6) | (elo->data[1] & 0x3f)); in elo_process_data_6()
151 input_report_abs(dev, ABS_Y, ((elo->data[2] & 0x3f) << 6) | (elo->data[3] & 0x3f)); in elo_process_data_6()
153 if (elo->id == 2) { in elo_process_data_6()
156 elo->idx = 0; in elo_process_data_6()
164 elo->idx = 0; in elo_process_data_6()
170 input_report_abs(dev, ABS_PRESSURE, elo->data[5]); in elo_process_data_6()
171 input_report_key(dev, BTN_TOUCH, !!elo->data[5]); in elo_process_data_6()
174 elo->idx = 0; in elo_process_data_6()
179 static void elo_process_data_3(struct elo *elo, unsigned char data) in elo_process_data_3() argument
181 struct input_dev *dev = elo->dev; in elo_process_data_3()
183 elo->data[elo->idx] = data; in elo_process_data_3()
185 switch (elo->idx++) { in elo_process_data_3()
189 elo->idx = 0; in elo_process_data_3()
192 input_report_key(dev, BTN_TOUCH, !(elo->data[1] & 0x80)); in elo_process_data_3()
193 input_report_abs(dev, ABS_X, elo->data[1]); in elo_process_data_3()
194 input_report_abs(dev, ABS_Y, elo->data[2]); in elo_process_data_3()
196 elo->idx = 0; in elo_process_data_3()
204 struct elo *elo = serio_get_drvdata(serio); in elo_interrupt() local
206 switch (elo->id) { in elo_interrupt()
208 elo_process_data_10(elo, data); in elo_interrupt()
213 elo_process_data_6(elo, data); in elo_interrupt()
217 elo_process_data_3(elo, data); in elo_interrupt()
224 static int elo_command_10(struct elo *elo, unsigned char *packet) in elo_command_10() argument
230 mutex_lock(&elo->cmd_mutex); in elo_command_10()
232 serio_pause_rx(elo->serio); in elo_command_10()
233 elo->expected_packet = toupper(packet[0]); in elo_command_10()
234 init_completion(&elo->cmd_done); in elo_command_10()
235 serio_continue_rx(elo->serio); in elo_command_10()
237 if (serio_write(elo->serio, ELO10_LEAD_BYTE)) in elo_command_10()
242 if (serio_write(elo->serio, packet[i])) in elo_command_10()
246 if (serio_write(elo->serio, csum)) in elo_command_10()
249 wait_for_completion_timeout(&elo->cmd_done, HZ); in elo_command_10()
251 if (elo->expected_packet == ELO10_TOUCH_PACKET) { in elo_command_10()
253 memcpy(packet, elo->response, ELO10_PACKET_LEN); in elo_command_10()
258 mutex_unlock(&elo->cmd_mutex); in elo_command_10()
262 static int elo_setup_10(struct elo *elo) in elo_setup_10() argument
265 struct input_dev *dev = elo->dev; in elo_setup_10()
268 if (elo_command_10(elo, packet)) in elo_setup_10()
278 dev_info(&elo->serio->dev, in elo_setup_10()
292 struct elo *elo = serio_get_drvdata(serio); in elo_disconnect() local
294 input_get_device(elo->dev); in elo_disconnect()
295 input_unregister_device(elo->dev); in elo_disconnect()
298 input_put_device(elo->dev); in elo_disconnect()
299 kfree(elo); in elo_disconnect()
310 struct elo *elo; in elo_connect() local
314 elo = kzalloc(sizeof(struct elo), GFP_KERNEL); in elo_connect()
316 if (!elo || !input_dev) { in elo_connect()
321 elo->serio = serio; in elo_connect()
322 elo->id = serio->id.id; in elo_connect()
323 elo->dev = input_dev; in elo_connect()
324 elo->expected_packet = ELO10_TOUCH_PACKET; in elo_connect()
325 mutex_init(&elo->cmd_mutex); in elo_connect()
326 init_completion(&elo->cmd_done); in elo_connect()
327 snprintf(elo->phys, sizeof(elo->phys), "%s/input0", serio->phys); in elo_connect()
330 input_dev->phys = elo->phys; in elo_connect()
333 input_dev->id.product = elo->id; in elo_connect()
340 serio_set_drvdata(serio, elo); in elo_connect()
345 switch (elo->id) { in elo_connect()
348 if (elo_setup_10(elo)) in elo_connect()
367 err = input_register_device(elo->dev); in elo_connect()
376 kfree(elo); in elo_connect()