Lines Matching full:ir
34 MODULE_PARM_DESC(enable_ir, "enable ir (default is enable)");
38 MODULE_PARM_DESC(ir_clock_mhz, "ir clock, in MHz");
47 printk(KERN_DEBUG "%s/ir: " fmt, ir->name , ## arg); \
68 /* IR device properties */
74 struct tm6000_IR *ir = dev->ir; in tm6000_ir_wait() local
76 if (!dev->ir) in tm6000_ir_wait()
79 dprintk(2, "%s: %i\n",__func__, ir->wait); in tm6000_ir_wait()
82 ir->wait = 1; in tm6000_ir_wait()
84 ir->wait = 0; in tm6000_ir_wait()
87 static int tm6000_ir_config(struct tm6000_IR *ir) in tm6000_ir_config() argument
89 struct tm6000_core *dev = ir->dev; in tm6000_ir_config()
95 * The IR decoder supports RC-5 or NEC, with a configurable timing. in tm6000_ir_config()
103 * IR, in order to discard such decoding in tm6000_ir_config()
106 switch (ir->rc_proto) { in tm6000_ir_config()
120 if (ir->rc_proto == RC_PROTO_BIT_NEC) in tm6000_ir_config()
125 (ir->rc_proto == RC_PROTO_BIT_NEC) ? "NEC" : "RC-5", in tm6000_ir_config()
128 /* Remote WAKEUP = enable, normal mode, from IR decoder output */ in tm6000_ir_config()
131 /* Enable IR reception on non-busrt mode */ in tm6000_ir_config()
134 /* IR_WKUP_SEL = Low byte in decoded IR data */ in tm6000_ir_config()
145 if (!ir->polling) in tm6000_ir_config()
151 /* Shows that IR is working via the LED */ in tm6000_ir_config()
155 ir->pwled = 1; in tm6000_ir_config()
160 static void tm6000_ir_keydown(struct tm6000_IR *ir, in tm6000_ir_keydown() argument
172 switch (ir->rc_proto) { in tm6000_ir_keydown()
189 rc_keydown(ir->rc, protocol, scancode, 0); in tm6000_ir_keydown()
195 struct tm6000_IR *ir = dev->ir; in tm6000_ir_urb_received() local
200 printk(KERN_INFO "tm6000: IR URB failure: status: %i, length %i\n", in tm6000_ir_urb_received()
202 ir->submit_urb = 1; in tm6000_ir_urb_received()
203 schedule_delayed_work(&ir->work, msecs_to_jiffies(URB_SUBMIT_DELAY)); in tm6000_ir_urb_received()
209 print_hex_dump(KERN_DEBUG, "tm6000: IR data: ", in tm6000_ir_urb_received()
213 tm6000_ir_keydown(ir, urb->transfer_buffer, urb->actual_length); in tm6000_ir_urb_received()
220 ir->pwled = 2; in tm6000_ir_urb_received()
221 schedule_delayed_work(&ir->work, msecs_to_jiffies(10)); in tm6000_ir_urb_received()
226 struct tm6000_IR *ir = container_of(work, struct tm6000_IR, work.work); in tm6000_ir_handle_key() local
227 struct tm6000_core *dev = ir->dev; in tm6000_ir_handle_key()
231 if (ir->wait) in tm6000_ir_handle_key()
244 if (!ir->pwled) { in tm6000_ir_handle_key()
246 ir->pwled = 1; in tm6000_ir_handle_key()
251 tm6000_ir_keydown(ir, buf, rc); in tm6000_ir_handle_key()
253 ir->pwled = 0; in tm6000_ir_handle_key()
256 schedule_delayed_work(&ir->work, msecs_to_jiffies(ir->polling)); in tm6000_ir_handle_key()
261 struct tm6000_IR *ir = container_of(work, struct tm6000_IR, work.work); in tm6000_ir_int_work() local
262 struct tm6000_core *dev = ir->dev; in tm6000_ir_int_work()
265 dprintk(3, "%s, submit_urb = %d, pwled = %d\n",__func__, ir->submit_urb, in tm6000_ir_int_work()
266 ir->pwled); in tm6000_ir_int_work()
268 if (ir->submit_urb) { in tm6000_ir_int_work()
272 rc = usb_submit_urb(ir->int_urb, GFP_ATOMIC); in tm6000_ir_int_work()
274 printk(KERN_ERR "tm6000: Can't submit an IR interrupt. Error %i\n", in tm6000_ir_int_work()
277 schedule_delayed_work(&ir->work, msecs_to_jiffies(URB_SUBMIT_DELAY)); in tm6000_ir_int_work()
280 ir->submit_urb = 0; in tm6000_ir_int_work()
284 if (ir->pwled == 2) { in tm6000_ir_int_work()
286 ir->pwled = 0; in tm6000_ir_int_work()
287 schedule_delayed_work(&ir->work, msecs_to_jiffies(URB_INT_LED_DELAY)); in tm6000_ir_int_work()
288 } else if (!ir->pwled) { in tm6000_ir_int_work()
290 ir->pwled = 1; in tm6000_ir_int_work()
296 struct tm6000_IR *ir = rc->priv; in tm6000_ir_start() local
300 schedule_delayed_work(&ir->work, 0); in tm6000_ir_start()
307 struct tm6000_IR *ir = rc->priv; in tm6000_ir_stop() local
311 cancel_delayed_work_sync(&ir->work); in tm6000_ir_stop()
316 struct tm6000_IR *ir = rc->priv; in tm6000_ir_change_protocol() local
318 if (!ir) in tm6000_ir_change_protocol()
323 ir->rc_proto = *rc_proto; in tm6000_ir_change_protocol()
325 tm6000_ir_config(ir); in tm6000_ir_change_protocol()
332 struct tm6000_IR *ir = rc->priv; in __tm6000_ir_int_start() local
337 if (!ir) in __tm6000_ir_int_start()
339 dev = ir->dev; in __tm6000_ir_int_start()
343 ir->int_urb = usb_alloc_urb(0, GFP_ATOMIC); in __tm6000_ir_int_start()
344 if (!ir->int_urb) in __tm6000_ir_int_start()
352 dprintk(1, "IR max size: %d\n", size); in __tm6000_ir_int_start()
354 ir->int_urb->transfer_buffer = kzalloc(size, GFP_ATOMIC); in __tm6000_ir_int_start()
355 if (!ir->int_urb->transfer_buffer) { in __tm6000_ir_int_start()
356 usb_free_urb(ir->int_urb); in __tm6000_ir_int_start()
361 usb_fill_int_urb(ir->int_urb, dev->udev, pipe, in __tm6000_ir_int_start()
362 ir->int_urb->transfer_buffer, size, in __tm6000_ir_int_start()
366 ir->submit_urb = 1; in __tm6000_ir_int_start()
367 schedule_delayed_work(&ir->work, msecs_to_jiffies(URB_SUBMIT_DELAY)); in __tm6000_ir_int_start()
374 struct tm6000_IR *ir = rc->priv; in __tm6000_ir_int_stop() local
376 if (!ir || !ir->int_urb) in __tm6000_ir_int_stop()
381 usb_kill_urb(ir->int_urb); in __tm6000_ir_int_stop()
382 kfree(ir->int_urb->transfer_buffer); in __tm6000_ir_int_stop()
383 usb_free_urb(ir->int_urb); in __tm6000_ir_int_stop()
384 ir->int_urb = NULL; in __tm6000_ir_int_stop()
389 struct tm6000_IR *ir = dev->ir; in tm6000_ir_int_start() local
391 if (!ir) in tm6000_ir_int_start()
394 return __tm6000_ir_int_start(ir->rc); in tm6000_ir_int_start()
399 struct tm6000_IR *ir = dev->ir; in tm6000_ir_int_stop() local
401 if (!ir || !ir->rc) in tm6000_ir_int_stop()
404 __tm6000_ir_int_stop(ir->rc); in tm6000_ir_int_stop()
409 struct tm6000_IR *ir; in tm6000_ir_init() local
423 ir = kzalloc(sizeof(*ir), GFP_ATOMIC); in tm6000_ir_init()
425 if (!ir || !rc) in tm6000_ir_init()
431 ir->dev = dev; in tm6000_ir_init()
432 dev->ir = ir; in tm6000_ir_init()
433 ir->rc = rc; in tm6000_ir_init()
439 rc->priv = ir; in tm6000_ir_init()
444 INIT_DELAYED_WORK(&ir->work, tm6000_ir_int_work); in tm6000_ir_init()
448 ir->polling = 50; in tm6000_ir_init()
449 INIT_DELAYED_WORK(&ir->work, tm6000_ir_handle_key); in tm6000_ir_init()
452 snprintf(ir->name, sizeof(ir->name), "tm5600/60x0 IR (%s)", in tm6000_ir_init()
455 usb_make_path(dev->udev, ir->phys, sizeof(ir->phys)); in tm6000_ir_init()
456 strlcat(ir->phys, "/input0", sizeof(ir->phys)); in tm6000_ir_init()
461 rc->device_name = ir->name; in tm6000_ir_init()
462 rc->input_phys = ir->phys; in tm6000_ir_init()
471 /* ir register */ in tm6000_ir_init()
479 dev->ir = NULL; in tm6000_ir_init()
481 kfree(ir); in tm6000_ir_init()
487 struct tm6000_IR *ir = dev->ir; in tm6000_ir_fini() local
491 if (!ir) in tm6000_ir_fini()
496 if (!ir->polling) in tm6000_ir_fini()
497 __tm6000_ir_int_stop(ir->rc); in tm6000_ir_fini()
499 tm6000_ir_stop(ir->rc); in tm6000_ir_fini()
503 ir->pwled = 0; in tm6000_ir_fini()
505 rc_unregister_device(ir->rc); in tm6000_ir_fini()
507 kfree(ir); in tm6000_ir_fini()
508 dev->ir = NULL; in tm6000_ir_fini()