Lines Matching refs:sz
114 static void sz_push(struct streamzap_ir *sz, struct ir_raw_event rawir)
116 dev_dbg(sz->dev, "Storing %s with duration %u us\n",
118 ir_raw_event_store_with_filter(sz->rdev, &rawir);
121 static void sz_push_full_pulse(struct streamzap_ir *sz,
126 if (sz->idle) {
129 sz->signal_last = sz->signal_start;
130 sz->signal_start = ktime_get_real();
132 delta = ktime_us_delta(sz->signal_start, sz->signal_last);
139 rawir.duration -= sz->sum;
143 sz_push(sz, rawir);
145 sz->idle = false;
146 sz->sum = 0;
152 sz->sum += rawir.duration;
155 sz_push(sz, rawir);
158 static void sz_push_half_pulse(struct streamzap_ir *sz,
161 sz_push_full_pulse(sz, (value & SZ_PULSE_MASK) >> 4);
164 static void sz_push_full_space(struct streamzap_ir *sz,
172 sz->sum += rawir.duration;
173 sz_push(sz, rawir);
176 static void sz_push_half_space(struct streamzap_ir *sz,
179 sz_push_full_space(sz, value & SZ_SPACE_MASK);
190 struct streamzap_ir *sz;
197 sz = urb->context;
206 * sz might already be invalid at this point
208 dev_err(sz->dev, "urb terminated, status: %d\n", urb->status);
214 dev_dbg(sz->dev, "%s: received urb, len %d\n", __func__, len);
216 dev_dbg(sz->dev, "sz->buf_in[%d]: %x\n",
217 i, (unsigned char)sz->buf_in[i]);
218 switch (sz->decoder_state) {
220 if ((sz->buf_in[i] & SZ_PULSE_MASK) ==
222 sz->decoder_state = FullPulse;
224 } else if ((sz->buf_in[i] & SZ_SPACE_MASK)
226 sz_push_half_pulse(sz, sz->buf_in[i]);
227 sz->decoder_state = FullSpace;
230 sz_push_half_pulse(sz, sz->buf_in[i]);
231 sz_push_half_space(sz, sz->buf_in[i]);
235 sz_push_full_pulse(sz, sz->buf_in[i]);
236 sz->decoder_state = IgnorePulse;
239 if (sz->buf_in[i] == SZ_TIMEOUT) {
242 .duration = sz->rdev->timeout
244 sz->idle = true;
245 if (sz->timeout_enabled)
246 sz_push(sz, rawir);
247 ir_raw_event_handle(sz->rdev);
248 ir_raw_event_reset(sz->rdev);
250 sz_push_full_space(sz, sz->buf_in[i]);
252 sz->decoder_state = PulseSpace;
255 if ((sz->buf_in[i] & SZ_SPACE_MASK) ==
257 sz->decoder_state = FullSpace;
260 sz_push_half_space(sz, sz->buf_in[i]);
261 sz->decoder_state = PulseSpace;
266 ir_raw_event_handle(sz->rdev);
272 static struct rc_dev *streamzap_init_rc_dev(struct streamzap_ir *sz)
275 struct device *dev = sz->dev;
284 snprintf(sz->name, sizeof(sz->name), "Streamzap PC Remote Infrared Receiver (%04x:%04x)",
285 le16_to_cpu(sz->usbdev->descriptor.idVendor),
286 le16_to_cpu(sz->usbdev->descriptor.idProduct));
287 usb_make_path(sz->usbdev, sz->phys, sizeof(sz->phys));
288 strlcat(sz->phys, "/input0", sizeof(sz->phys));
290 rdev->device_name = sz->name;
291 rdev->input_phys = sz->phys;
292 usb_to_input_id(sz->usbdev, &rdev->input_id);
294 rdev->priv = sz;
324 struct streamzap_ir *sz = NULL;
330 sz = kzalloc(sizeof(struct streamzap_ir), GFP_KERNEL);
331 if (!sz)
334 sz->usbdev = usbdev;
335 sz->interface = intf;
347 sz->endpoint = &(iface_host->endpoint[0].desc);
348 if (!usb_endpoint_dir_in(sz->endpoint)) {
350 __func__, sz->endpoint->bEndpointAddress);
355 if (!usb_endpoint_xfer_int(sz->endpoint)) {
357 __func__, sz->endpoint->bmAttributes);
362 pipe = usb_rcvintpipe(usbdev, sz->endpoint->bEndpointAddress);
373 sz->buf_in = usb_alloc_coherent(usbdev, maxp, GFP_ATOMIC, &sz->dma_in);
374 if (!sz->buf_in)
377 sz->urb_in = usb_alloc_urb(0, GFP_KERNEL);
378 if (!sz->urb_in)
381 sz->dev = &intf->dev;
382 sz->buf_in_len = maxp;
395 sz->rdev = streamzap_init_rc_dev(sz);
396 if (!sz->rdev)
399 sz->idle = true;
400 sz->decoder_state = PulseSpace;
402 sz->timeout_enabled = true;
403 sz->rdev->timeout = SZ_TIMEOUT * SZ_RESOLUTION;
407 sz->min_timeout = SZ_TIMEOUT * SZ_RESOLUTION;
408 sz->max_timeout = SZ_TIMEOUT * SZ_RESOLUTION;
411 sz->signal_start = ktime_get_real();
414 usb_fill_int_urb(sz->urb_in, usbdev, pipe, sz->buf_in,
416 sz, sz->endpoint->bInterval);
417 sz->urb_in->transfer_dma = sz->dma_in;
418 sz->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
420 usb_set_intfdata(intf, sz);
422 if (usb_submit_urb(sz->urb_in, GFP_ATOMIC))
423 dev_err(sz->dev, "urb submit failed\n");
425 dev_info(sz->dev, "Registered %s on usb%d:%d\n", name,
431 usb_free_urb(sz->urb_in);
433 usb_free_coherent(usbdev, maxp, sz->buf_in, sz->dma_in);
435 kfree(sz);
452 struct streamzap_ir *sz = usb_get_intfdata(interface);
457 if (!sz)
460 sz->usbdev = NULL;
461 rc_unregister_device(sz->rdev);
462 usb_kill_urb(sz->urb_in);
463 usb_free_urb(sz->urb_in);
464 usb_free_coherent(usbdev, sz->buf_in_len, sz->buf_in, sz->dma_in);
466 kfree(sz);
471 struct streamzap_ir *sz = usb_get_intfdata(intf);
473 usb_kill_urb(sz->urb_in);
480 struct streamzap_ir *sz = usb_get_intfdata(intf);
482 if (usb_submit_urb(sz->urb_in, GFP_ATOMIC)) {
483 dev_err(sz->dev, "Error submitting urb\n");