Lines Matching defs:raw

2 // rc-ir-raw.c - handle IR pulse/space events
13 /* Used to keep track of IR raw clients, protected by ir_raw_handler_lock */
16 /* Used to handle IR raw handler extensions */
25 struct ir_raw_event_ctrl *raw = data;
26 struct rc_dev *dev = raw->dev;
30 while (kfifo_out(&raw->kfifo, &ev, 1)) {
34 if (is_timing_event(raw->prev_ev) &&
35 !is_transition(&ev, &raw->prev_ev))
38 if (raw->prev_ev.reset && ev.pulse == 0)
46 raw->prev_ev = ev;
55 } else if (!kfifo_is_empty(&raw->kfifo))
65 * ir_raw_event_store() - pass a pulse/space duration to the raw ir decoders
70 * pulse/space duration for the raw ir decoding state machines. Pulses are
76 if (!dev->raw)
82 if (!kfifo_put(&dev->raw->kfifo, *ev)) {
92 * ir_raw_event_store_edge() - notify raw ir decoders of the start of a pulse/space
98 * reception) for the raw ir decoding state machines. This is used by
107 if (!dev->raw)
111 ev.duration = ktime_to_us(ktime_sub(now, dev->raw->last_event));
119 * ir_raw_event_store_with_timeout() - pass a pulse/space duration to the raw
126 * pulse/space duration for the raw ir decoding state machines, schedules
134 if (!dev->raw)
139 spin_lock(&dev->raw->edge_spinlock);
142 dev->raw->last_event = now;
145 if (!timer_pending(&dev->raw->edge_handle) ||
146 time_after(dev->raw->edge_handle.expires,
148 mod_timer(&dev->raw->edge_handle,
151 spin_unlock(&dev->raw->edge_spinlock);
171 if (!dev->raw)
180 if (!dev->raw->this_ev.duration)
181 dev->raw->this_ev = *ev;
182 else if (ev->pulse == dev->raw->this_ev.pulse)
183 dev->raw->this_ev.duration += ev->duration;
185 ir_raw_event_store(dev, &dev->raw->this_ev);
186 dev->raw->this_ev = *ev;
191 dev->raw->this_ev.duration >= dev->timeout)
205 if (!dev->raw)
211 dev->raw->this_ev.timeout = true;
212 ir_raw_event_store(dev, &dev->raw->this_ev);
213 dev->raw->this_ev = (struct ir_raw_event) {};
231 if (!dev->raw || !dev->raw->thread)
234 wake_up_process(dev->raw->thread);
303 * each raw event filled.
304 * @max: Maximum number of raw events to fill.
311 * to @max raw IR events using the *@ev pointer.
383 * ir_raw_gen_pd() - Encode data to raw events with pulse-distance modulation.
385 * each raw event filled.
386 * @max: Maximum number of raw events to fill.
393 * to @max raw IR events using the *@ev pointer.
442 * ir_raw_gen_pl() - Encode data to raw events with pulse-length modulation.
444 * each raw event filled.
445 * @max: Maximum number of raw events to fill.
452 * to @max raw IR events using the *@ev pointer.
506 * ir_raw_encode_scancode() - Encode a scancode as raw events
510 * @events: array of raw events to write into
511 * @max: max number of raw events
513 * Attempts to encode the scancode as raw events.
557 struct ir_raw_event_ctrl *raw = from_timer(raw, t, edge_handle);
558 struct rc_dev *dev = raw->dev;
562 spin_lock_irqsave(&dev->raw->edge_spinlock, flags);
563 interval = ktime_sub(ktime_get(), dev->raw->last_event);
572 mod_timer(&dev->raw->edge_handle,
576 spin_unlock_irqrestore(&dev->raw->edge_spinlock, flags);
612 * Used to (un)register raw event clients
619 dev->raw = kzalloc(sizeof(*dev->raw), GFP_KERNEL);
620 if (!dev->raw)
623 dev->raw->dev = dev;
626 spin_lock_init(&dev->raw->edge_spinlock);
627 timer_setup(&dev->raw->edge_handle, ir_raw_edge_handle, 0);
628 INIT_KFIFO(dev->raw->kfifo);
637 thread = kthread_run(ir_raw_event_thread, dev->raw, "rc%u", dev->minor);
641 dev->raw->thread = thread;
644 list_add_tail(&dev->raw->list, &ir_raw_client_list);
655 kfree(dev->raw);
656 dev->raw = NULL;
663 if (!dev || !dev->raw)
666 kthread_stop(dev->raw->thread);
667 del_timer_sync(&dev->raw->edge_handle);
670 list_del(&dev->raw->list);
682 * ensure that the raw member is null on unlock; this is how
705 struct ir_raw_event_ctrl *raw;
710 list_for_each_entry(raw, &ir_raw_client_list, list) {
712 (raw->dev->enabled_protocols & protocols))
713 ir_raw_handler->raw_unregister(raw->dev);
714 ir_raw_disable_protocols(raw->dev, protocols);