Lines Matching full:ir
26 MODULE_PARM_DESC(enable_ir, "enable ir (default is enable)");
30 MODULE_PARM_DESC(ir_clock_mhz, "ir clock, in MHz");
39 printk(KERN_DEBUG "%s/ir: " fmt, ir->name , ## arg); \
60 /* IR device properties */
66 struct tm6000_IR *ir = dev->ir; in tm6000_ir_wait() local
68 if (!dev->ir) in tm6000_ir_wait()
71 dprintk(2, "%s: %i\n",__func__, ir->wait); in tm6000_ir_wait()
74 ir->wait = 1; in tm6000_ir_wait()
76 ir->wait = 0; in tm6000_ir_wait()
79 static int tm6000_ir_config(struct tm6000_IR *ir) in tm6000_ir_config() argument
81 struct tm6000_core *dev = ir->dev; in tm6000_ir_config()
87 * The IR decoder supports RC-5 or NEC, with a configurable timing. in tm6000_ir_config()
95 * IR, in order to discard such decoding in tm6000_ir_config()
98 switch (ir->rc_proto) { in tm6000_ir_config()
112 if (ir->rc_proto == RC_PROTO_BIT_NEC) in tm6000_ir_config()
117 (ir->rc_proto == RC_PROTO_BIT_NEC) ? "NEC" : "RC-5", in tm6000_ir_config()
120 /* Remote WAKEUP = enable, normal mode, from IR decoder output */ in tm6000_ir_config()
123 /* Enable IR reception on non-busrt mode */ in tm6000_ir_config()
126 /* IR_WKUP_SEL = Low byte in decoded IR data */ in tm6000_ir_config()
137 if (!ir->polling) in tm6000_ir_config()
143 /* Shows that IR is working via the LED */ in tm6000_ir_config()
147 ir->pwled = 1; in tm6000_ir_config()
152 static void tm6000_ir_keydown(struct tm6000_IR *ir, in tm6000_ir_keydown() argument
164 switch (ir->rc_proto) { in tm6000_ir_keydown()
181 rc_keydown(ir->rc, protocol, scancode, 0); in tm6000_ir_keydown()
187 struct tm6000_IR *ir = dev->ir; in tm6000_ir_urb_received() local
192 printk(KERN_INFO "tm6000: IR URB failure: status: %i, length %i\n", in tm6000_ir_urb_received()
194 ir->submit_urb = 1; in tm6000_ir_urb_received()
195 schedule_delayed_work(&ir->work, msecs_to_jiffies(URB_SUBMIT_DELAY)); in tm6000_ir_urb_received()
201 print_hex_dump(KERN_DEBUG, "tm6000: IR data: ", in tm6000_ir_urb_received()
205 tm6000_ir_keydown(ir, urb->transfer_buffer, urb->actual_length); in tm6000_ir_urb_received()
212 ir->pwled = 2; in tm6000_ir_urb_received()
213 schedule_delayed_work(&ir->work, msecs_to_jiffies(10)); in tm6000_ir_urb_received()
218 struct tm6000_IR *ir = container_of(work, struct tm6000_IR, work.work); in tm6000_ir_handle_key() local
219 struct tm6000_core *dev = ir->dev; in tm6000_ir_handle_key()
223 if (ir->wait) in tm6000_ir_handle_key()
236 if (!ir->pwled) { in tm6000_ir_handle_key()
238 ir->pwled = 1; in tm6000_ir_handle_key()
243 tm6000_ir_keydown(ir, buf, rc); in tm6000_ir_handle_key()
245 ir->pwled = 0; in tm6000_ir_handle_key()
248 schedule_delayed_work(&ir->work, msecs_to_jiffies(ir->polling)); in tm6000_ir_handle_key()
253 struct tm6000_IR *ir = container_of(work, struct tm6000_IR, work.work); in tm6000_ir_int_work() local
254 struct tm6000_core *dev = ir->dev; in tm6000_ir_int_work()
257 dprintk(3, "%s, submit_urb = %d, pwled = %d\n",__func__, ir->submit_urb, in tm6000_ir_int_work()
258 ir->pwled); in tm6000_ir_int_work()
260 if (ir->submit_urb) { in tm6000_ir_int_work()
264 rc = usb_submit_urb(ir->int_urb, GFP_ATOMIC); in tm6000_ir_int_work()
266 printk(KERN_ERR "tm6000: Can't submit an IR interrupt. Error %i\n", in tm6000_ir_int_work()
269 schedule_delayed_work(&ir->work, msecs_to_jiffies(URB_SUBMIT_DELAY)); in tm6000_ir_int_work()
272 ir->submit_urb = 0; in tm6000_ir_int_work()
276 if (ir->pwled == 2) { in tm6000_ir_int_work()
278 ir->pwled = 0; in tm6000_ir_int_work()
279 schedule_delayed_work(&ir->work, msecs_to_jiffies(URB_INT_LED_DELAY)); in tm6000_ir_int_work()
280 } else if (!ir->pwled) { in tm6000_ir_int_work()
282 ir->pwled = 1; in tm6000_ir_int_work()
288 struct tm6000_IR *ir = rc->priv; in tm6000_ir_start() local
292 schedule_delayed_work(&ir->work, 0); in tm6000_ir_start()
299 struct tm6000_IR *ir = rc->priv; in tm6000_ir_stop() local
303 cancel_delayed_work_sync(&ir->work); in tm6000_ir_stop()
308 struct tm6000_IR *ir = rc->priv; in tm6000_ir_change_protocol() local
310 if (!ir) in tm6000_ir_change_protocol()
315 ir->rc_proto = *rc_proto; in tm6000_ir_change_protocol()
317 tm6000_ir_config(ir); in tm6000_ir_change_protocol()
324 struct tm6000_IR *ir = rc->priv; in __tm6000_ir_int_start() local
329 if (!ir) in __tm6000_ir_int_start()
331 dev = ir->dev; in __tm6000_ir_int_start()
335 ir->int_urb = usb_alloc_urb(0, GFP_ATOMIC); in __tm6000_ir_int_start()
336 if (!ir->int_urb) in __tm6000_ir_int_start()
344 dprintk(1, "IR max size: %d\n", size); in __tm6000_ir_int_start()
346 ir->int_urb->transfer_buffer = kzalloc(size, GFP_ATOMIC); in __tm6000_ir_int_start()
347 if (!ir->int_urb->transfer_buffer) { in __tm6000_ir_int_start()
348 usb_free_urb(ir->int_urb); in __tm6000_ir_int_start()
353 usb_fill_int_urb(ir->int_urb, dev->udev, pipe, in __tm6000_ir_int_start()
354 ir->int_urb->transfer_buffer, size, in __tm6000_ir_int_start()
358 ir->submit_urb = 1; in __tm6000_ir_int_start()
359 schedule_delayed_work(&ir->work, msecs_to_jiffies(URB_SUBMIT_DELAY)); in __tm6000_ir_int_start()
366 struct tm6000_IR *ir = rc->priv; in __tm6000_ir_int_stop() local
368 if (!ir || !ir->int_urb) in __tm6000_ir_int_stop()
373 usb_kill_urb(ir->int_urb); in __tm6000_ir_int_stop()
374 kfree(ir->int_urb->transfer_buffer); in __tm6000_ir_int_stop()
375 usb_free_urb(ir->int_urb); in __tm6000_ir_int_stop()
376 ir->int_urb = NULL; in __tm6000_ir_int_stop()
381 struct tm6000_IR *ir = dev->ir; in tm6000_ir_int_start() local
383 if (!ir) in tm6000_ir_int_start()
386 return __tm6000_ir_int_start(ir->rc); in tm6000_ir_int_start()
391 struct tm6000_IR *ir = dev->ir; in tm6000_ir_int_stop() local
393 if (!ir || !ir->rc) in tm6000_ir_int_stop()
396 __tm6000_ir_int_stop(ir->rc); in tm6000_ir_int_stop()
401 struct tm6000_IR *ir; in tm6000_ir_init() local
415 ir = kzalloc(sizeof(*ir), GFP_ATOMIC); in tm6000_ir_init()
417 if (!ir || !rc) in tm6000_ir_init()
423 ir->dev = dev; in tm6000_ir_init()
424 dev->ir = ir; in tm6000_ir_init()
425 ir->rc = rc; in tm6000_ir_init()
431 rc->priv = ir; in tm6000_ir_init()
436 INIT_DELAYED_WORK(&ir->work, tm6000_ir_int_work); in tm6000_ir_init()
440 ir->polling = 50; in tm6000_ir_init()
441 INIT_DELAYED_WORK(&ir->work, tm6000_ir_handle_key); in tm6000_ir_init()
444 snprintf(ir->name, sizeof(ir->name), "tm5600/60x0 IR (%s)", in tm6000_ir_init()
447 usb_make_path(dev->udev, ir->phys, sizeof(ir->phys)); in tm6000_ir_init()
448 strlcat(ir->phys, "/input0", sizeof(ir->phys)); in tm6000_ir_init()
453 rc->device_name = ir->name; in tm6000_ir_init()
454 rc->input_phys = ir->phys; in tm6000_ir_init()
463 /* ir register */ in tm6000_ir_init()
471 dev->ir = NULL; in tm6000_ir_init()
473 kfree(ir); in tm6000_ir_init()
479 struct tm6000_IR *ir = dev->ir; in tm6000_ir_fini() local
483 if (!ir) in tm6000_ir_fini()
488 if (!ir->polling) in tm6000_ir_fini()
489 __tm6000_ir_int_stop(ir->rc); in tm6000_ir_fini()
491 tm6000_ir_stop(ir->rc); in tm6000_ir_fini()
495 ir->pwled = 0; in tm6000_ir_fini()
497 rc_unregister_device(ir->rc); in tm6000_ir_fini()
499 kfree(ir); in tm6000_ir_fini()
500 dev->ir = NULL; in tm6000_ir_fini()