• Home
  • Raw
  • Download

Lines Matching refs:w

66 static inline void walkera0701_parse_frame(struct walkera_dev *w)  in walkera0701_parse_frame()  argument
74 crc1 += w->buf[i] & 7; in walkera0701_parse_frame()
75 crc2 += (w->buf[i] & 8) >> 3; in walkera0701_parse_frame()
77 if ((w->buf[10] & 7) != (crc1 & 7)) in walkera0701_parse_frame()
79 if (((w->buf[10] & 8) >> 3) != (((crc1 >> 3) + crc2) & 1)) in walkera0701_parse_frame()
82 crc1 += w->buf[i] & 7; in walkera0701_parse_frame()
83 crc2 += (w->buf[i] & 8) >> 3; in walkera0701_parse_frame()
85 if ((w->buf[23] & 7) != (crc1 & 7)) in walkera0701_parse_frame()
87 if (((w->buf[23] & 8) >> 3) != (((crc1 >> 3) + crc2) & 1)) in walkera0701_parse_frame()
89 val1 = ((w->buf[0] & 7) * 256 + w->buf[1] * 16 + w->buf[2]) >> 2; in walkera0701_parse_frame()
90 val1 *= ((w->buf[0] >> 2) & 2) - 1; /* sign */ in walkera0701_parse_frame()
91 val2 = (w->buf[2] & 1) << 8 | (w->buf[3] << 4) | w->buf[4]; in walkera0701_parse_frame()
92 val2 *= (w->buf[2] & 2) - 1; /* sign */ in walkera0701_parse_frame()
93 val3 = ((w->buf[5] & 7) * 256 + w->buf[6] * 16 + w->buf[7]) >> 2; in walkera0701_parse_frame()
94 val3 *= ((w->buf[5] >> 2) & 2) - 1; /* sign */ in walkera0701_parse_frame()
95 val4 = (w->buf[7] & 1) << 8 | (w->buf[8] << 4) | w->buf[9]; in walkera0701_parse_frame()
96 val4 *= (w->buf[7] & 2) - 1; /* sign */ in walkera0701_parse_frame()
97 val5 = ((w->buf[11] & 7) * 256 + w->buf[12] * 16 + w->buf[13]) >> 2; in walkera0701_parse_frame()
98 val5 *= ((w->buf[11] >> 2) & 2) - 1; /* sign */ in walkera0701_parse_frame()
99 val6 = (w->buf[13] & 1) << 8 | (w->buf[14] << 4) | w->buf[15]; in walkera0701_parse_frame()
100 val6 *= (w->buf[13] & 2) - 1; /* sign */ in walkera0701_parse_frame()
101 val7 = ((w->buf[16] & 7) * 256 + w->buf[17] * 16 + w->buf[18]) >> 2; in walkera0701_parse_frame()
102 val7 *= ((w->buf[16] >> 2) & 2) - 1; /*sign */ in walkera0701_parse_frame()
103 val8 = (w->buf[18] & 1) << 8 | (w->buf[19] << 4) | w->buf[20]; in walkera0701_parse_frame()
104 val8 *= (w->buf[18] & 2) - 1; /*sign */ in walkera0701_parse_frame()
106 magic = (w->buf[21] << 4) | w->buf[22]; in walkera0701_parse_frame()
107 magic_bit = (w->buf[24] & 8) >> 3; in walkera0701_parse_frame()
112 input_report_abs(w->input_dev, ABS_X, val2); in walkera0701_parse_frame()
113 input_report_abs(w->input_dev, ABS_Y, val1); in walkera0701_parse_frame()
114 input_report_abs(w->input_dev, ABS_Z, val6); in walkera0701_parse_frame()
115 input_report_abs(w->input_dev, ABS_THROTTLE, val3); in walkera0701_parse_frame()
116 input_report_abs(w->input_dev, ABS_RUDDER, val4); in walkera0701_parse_frame()
117 input_report_abs(w->input_dev, ABS_MISC, val7); in walkera0701_parse_frame()
118 input_report_key(w->input_dev, BTN_GEAR_DOWN, val5 > 0); in walkera0701_parse_frame()
130 struct walkera_dev *w = handler_data; in walkera0701_irq_handler() local
132 w->irq_time = ktime_to_ns(ktime_get()); in walkera0701_irq_handler()
133 pulse_time = w->irq_time - w->irq_lasttime; in walkera0701_irq_handler()
134 w->irq_lasttime = w->irq_time; in walkera0701_irq_handler()
137 if (unlikely(0 != hrtimer_try_to_cancel(&w->timer))) { in walkera0701_irq_handler()
138 w->counter = NO_SYNC; in walkera0701_irq_handler()
142 if (w->counter < NO_SYNC) { in walkera0701_irq_handler()
143 if (w->ack) { in walkera0701_irq_handler()
145 w->buf[w->counter] = 8; in walkera0701_irq_handler()
148 w->buf[w->counter] = 0; in walkera0701_irq_handler()
150 if (w->counter == 24) { /* full frame */ in walkera0701_irq_handler()
151 walkera0701_parse_frame(w); in walkera0701_irq_handler()
152 w->counter = NO_SYNC; in walkera0701_irq_handler()
154 w->counter = 0; in walkera0701_irq_handler()
160 w->buf[w->counter++] |= (pulse_time & 7); in walkera0701_irq_handler()
162 w->counter = NO_SYNC; in walkera0701_irq_handler()
166 w->counter = 0; in walkera0701_irq_handler()
168 hrtimer_start(&w->timer, ktime_set(0, BIN_SAMPLE), HRTIMER_MODE_REL); in walkera0701_irq_handler()
174 struct walkera_dev *w; in timer_handler() local
176 w = container_of(handle, struct walkera_dev, timer); in timer_handler()
177 w->ack = read_ack(w->pardevice); in timer_handler()
184 struct walkera_dev *w = input_get_drvdata(dev); in walkera0701_open() local
186 if (parport_claim(w->pardevice)) in walkera0701_open()
189 parport_enable_irq(w->parport); in walkera0701_open()
195 struct walkera_dev *w = input_get_drvdata(dev); in walkera0701_close() local
197 parport_disable_irq(w->parport); in walkera0701_close()
198 hrtimer_cancel(&w->timer); in walkera0701_close()
200 parport_release(w->pardevice); in walkera0701_close()
203 static int walkera0701_connect(struct walkera_dev *w, int parport) in walkera0701_connect() argument
207 w->parport = parport_find_number(parport); in walkera0701_connect()
208 if (!w->parport) { in walkera0701_connect()
213 if (w->parport->irq == -1) { in walkera0701_connect()
220 w->pardevice = parport_register_device(w->parport, "walkera0701", in walkera0701_connect()
222 PARPORT_DEV_EXCL, w); in walkera0701_connect()
223 if (!w->pardevice) { in walkera0701_connect()
229 if (parport_negotiate(w->pardevice->port, IEEE1284_MODE_COMPAT)) { in walkera0701_connect()
235 hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); in walkera0701_connect()
236 w->timer.function = timer_handler; in walkera0701_connect()
238 w->input_dev = input_allocate_device(); in walkera0701_connect()
239 if (!w->input_dev) { in walkera0701_connect()
245 input_set_drvdata(w->input_dev, w); in walkera0701_connect()
246 w->input_dev->name = "Walkera WK-0701 TX"; in walkera0701_connect()
247 w->input_dev->phys = w->parport->name; in walkera0701_connect()
248 w->input_dev->id.bustype = BUS_PARPORT; in walkera0701_connect()
251 w->input_dev->id.vendor = 0x0001; in walkera0701_connect()
252 w->input_dev->id.product = 0x0001; in walkera0701_connect()
253 w->input_dev->id.version = 0x0100; in walkera0701_connect()
254 w->input_dev->dev.parent = w->parport->dev; in walkera0701_connect()
255 w->input_dev->open = walkera0701_open; in walkera0701_connect()
256 w->input_dev->close = walkera0701_close; in walkera0701_connect()
258 w->input_dev->evbit[0] = BIT(EV_ABS) | BIT_MASK(EV_KEY); in walkera0701_connect()
259 w->input_dev->keybit[BIT_WORD(BTN_GEAR_DOWN)] = BIT_MASK(BTN_GEAR_DOWN); in walkera0701_connect()
261 input_set_abs_params(w->input_dev, ABS_X, -512, 512, 0, 0); in walkera0701_connect()
262 input_set_abs_params(w->input_dev, ABS_Y, -512, 512, 0, 0); in walkera0701_connect()
263 input_set_abs_params(w->input_dev, ABS_Z, -512, 512, 0, 0); in walkera0701_connect()
264 input_set_abs_params(w->input_dev, ABS_THROTTLE, -512, 512, 0, 0); in walkera0701_connect()
265 input_set_abs_params(w->input_dev, ABS_RUDDER, -512, 512, 0, 0); in walkera0701_connect()
266 input_set_abs_params(w->input_dev, ABS_MISC, -512, 512, 0, 0); in walkera0701_connect()
268 error = input_register_device(w->input_dev); in walkera0701_connect()
277 input_free_device(w->input_dev); in walkera0701_connect()
279 parport_unregister_device(w->pardevice); in walkera0701_connect()
281 parport_put_port(w->parport); in walkera0701_connect()
285 static void walkera0701_disconnect(struct walkera_dev *w) in walkera0701_disconnect() argument
287 input_unregister_device(w->input_dev); in walkera0701_disconnect()
288 parport_unregister_device(w->pardevice); in walkera0701_disconnect()
289 parport_put_port(w->parport); in walkera0701_disconnect()