Lines Matching +full:i2c +full:- +full:polling
43 #define DEVNAME "bttv-input"
47 /* ---------------------------------------------------------------------- */
51 struct bttv_ir *ir = btv->remote; in ir_handle_key()
55 gpio = bttv_gpio_read(&btv->c); in ir_handle_key()
56 if (ir->polling) { in ir_handle_key()
57 if (ir->last_gpio == gpio) in ir_handle_key()
59 ir->last_gpio = gpio; in ir_handle_key()
63 data = ir_extract_bits(gpio, ir->mask_keycode); in ir_handle_key()
66 ir->polling ? "poll" : "irq", in ir_handle_key()
67 (gpio & ir->mask_keydown) ? " down" : "", in ir_handle_key()
68 (gpio & ir->mask_keyup) ? " up" : ""); in ir_handle_key()
70 if ((ir->mask_keydown && (gpio & ir->mask_keydown)) || in ir_handle_key()
71 (ir->mask_keyup && !(gpio & ir->mask_keyup))) { in ir_handle_key()
72 rc_keydown_notimeout(ir->dev, RC_PROTO_UNKNOWN, data, 0); in ir_handle_key()
74 /* HACK: Probably, ir->mask_keydown is missing in ir_handle_key()
76 if (btv->c.type == BTTV_BOARD_WINFAST2000) in ir_handle_key()
77 rc_keydown_notimeout(ir->dev, RC_PROTO_UNKNOWN, data, in ir_handle_key()
80 rc_keyup(ir->dev); in ir_handle_key()
86 struct bttv_ir *ir = btv->remote; in ir_enltv_handle_key()
90 gpio = bttv_gpio_read(&btv->c); in ir_enltv_handle_key()
93 data = ir_extract_bits(gpio, ir->mask_keycode); in ir_enltv_handle_key()
96 keyup = (gpio & ir->mask_keyup) ? 1 << 31 : 0; in ir_enltv_handle_key()
98 if ((ir->last_gpio & 0x7f) != data) { in ir_enltv_handle_key()
101 (gpio & ir->mask_keyup) ? " up" : "up/down"); in ir_enltv_handle_key()
103 rc_keydown_notimeout(ir->dev, RC_PROTO_UNKNOWN, data, 0); in ir_enltv_handle_key()
105 rc_keyup(ir->dev); in ir_enltv_handle_key()
107 if ((ir->last_gpio & 1 << 31) == keyup) in ir_enltv_handle_key()
112 (gpio & ir->mask_keyup) ? " up" : "down"); in ir_enltv_handle_key()
115 rc_keyup(ir->dev); in ir_enltv_handle_key()
117 rc_keydown_notimeout(ir->dev, RC_PROTO_UNKNOWN, data, in ir_enltv_handle_key()
121 ir->last_gpio = data | keyup; in ir_enltv_handle_key()
128 struct bttv_ir *ir = btv->remote; in bttv_input_irq()
130 if (ir->rc5_gpio) in bttv_input_irq()
132 else if (!ir->polling) in bttv_input_irq()
139 struct bttv *btv = ir->btv; in bttv_input_timer()
141 if (btv->c.type == BTTV_BOARD_ENLTV_FM_2) in bttv_input_timer()
145 mod_timer(&ir->timer, jiffies + msecs_to_jiffies(ir->polling)); in bttv_input_timer()
150 * on the rc-core way. As we need to be sure that both IRQ transitions are
202 gap = ktime_to_us(ktime_sub(tv, ir->base_time)); in bttv_rc5_timer_end()
208 ir->active = false; in bttv_rc5_timer_end()
216 if (ir->last_bit < 20) { in bttv_rc5_timer_end()
218 dprintk("short code: %x\n", ir->code); in bttv_rc5_timer_end()
222 ir->code = (ir->code << ir->shift_by) | 1; in bttv_rc5_timer_end()
223 rc5 = bttv_rc5_decode(ir->code); in bttv_rc5_timer_end()
240 rc_keydown(ir->dev, RC_PROTO_RC5, scancode, toggle); in bttv_rc5_timer_end()
246 struct bttv_ir *ir = btv->remote; in bttv_rc5_irq()
253 gpio = bttv_gpio_read(&btv->c); in bttv_rc5_irq()
259 gap = ktime_to_us(ktime_sub(tv, ir->base_time)); in bttv_rc5_irq()
273 if (ir->active) { in bttv_rc5_irq()
276 if (ir->last_bit < 28) { in bttv_rc5_irq()
277 ir->last_bit = (gap - ir_rc5_remote_gap / 2) / in bttv_rc5_irq()
279 ir->code |= 1 << ir->last_bit; in bttv_rc5_irq()
283 ir->active = true; in bttv_rc5_irq()
284 ir->code = 0; in bttv_rc5_irq()
285 ir->base_time = tv; in bttv_rc5_irq()
286 ir->last_bit = 0; in bttv_rc5_irq()
288 mod_timer(&ir->timer, current_jiffies + msecs_to_jiffies(30)); in bttv_rc5_irq()
292 bttv_gpio_write(&btv->c, gpio & ~(1 << 4)); in bttv_rc5_irq()
293 bttv_gpio_write(&btv->c, gpio | (1 << 4)); in bttv_rc5_irq()
297 /* ---------------------------------------------------------------------- */
301 if (ir->polling) { in bttv_ir_start()
302 timer_setup(&ir->timer, bttv_input_timer, 0); in bttv_ir_start()
303 ir->timer.expires = jiffies + msecs_to_jiffies(1000); in bttv_ir_start()
304 add_timer(&ir->timer); in bttv_ir_start()
305 } else if (ir->rc5_gpio) { in bttv_ir_start()
307 timer_setup(&ir->timer, bttv_rc5_timer_end, 0); in bttv_ir_start()
308 ir->shift_by = 1; in bttv_ir_start()
309 ir->rc5_remote_gap = ir_rc5_remote_gap; in bttv_ir_start()
315 if (btv->remote->polling) in bttv_ir_stop()
316 del_timer_sync(&btv->remote->timer); in bttv_ir_stop()
318 if (btv->remote->rc5_gpio) { in bttv_ir_stop()
321 del_timer_sync(&btv->remote->timer); in bttv_ir_stop()
323 gpio = bttv_gpio_read(&btv->c); in bttv_ir_stop()
324 bttv_gpio_write(&btv->c, gpio & ~(1 << 4)); in bttv_ir_stop()
329 * Get_key functions used by I2C remotes
339 rc = i2c_master_recv(ir->c, &b, 1); in get_key_pv951()
344 return -EIO; in get_key_pv951()
360 * 2) As the addr is not reported via I2C, nor can be changed, in get_key_pv951()
361 * the device is bound to the vendor-provided RC. in get_key_pv951()
370 /* Instantiate the I2C IR receiver device, if present */
380 if (0 != btv->i2c_rc) in init_bttv_i2c_ir()
384 memset(&btv->init_data, 0, sizeof(btv->init_data)); in init_bttv_i2c_ir()
387 switch (btv->c.type) { in init_bttv_i2c_ir()
389 btv->init_data.name = "PV951"; in init_bttv_i2c_ir()
390 btv->init_data.get_key = get_key_pv951; in init_bttv_i2c_ir()
391 btv->init_data.ir_codes = RC_MAP_PV951; in init_bttv_i2c_ir()
396 if (btv->init_data.name) { in init_bttv_i2c_ir()
397 info.platform_data = &btv->init_data; in init_bttv_i2c_ir()
398 i2c_dev = i2c_new_device(&btv->c.i2c_adap, &info); in init_bttv_i2c_ir()
401 * The external IR receiver is at i2c address 0x34 (0x35 for in init_bttv_i2c_ir()
408 i2c_dev = i2c_new_probed_device(&btv->c.i2c_adap, &info, addr_list, NULL); in init_bttv_i2c_ir()
414 request_module("ir-kbd-i2c"); in init_bttv_i2c_ir()
423 int err = -ENOMEM; in bttv_input_init()
425 if (!btv->has_remote) in bttv_input_init()
426 return -ENODEV; in bttv_input_init()
434 switch (btv->c.type) { in bttv_input_init()
439 ir->mask_keycode = 0xf88000; in bttv_input_init()
440 ir->mask_keydown = 0x010000; in bttv_input_init()
441 ir->polling = 50; // ms in bttv_input_init()
447 ir->mask_keycode = 0x0f00c0; in bttv_input_init()
448 ir->mask_keydown = 0x000020; in bttv_input_init()
449 ir->polling = 50; // ms in bttv_input_init()
454 ir->mask_keycode = 0x003e00; in bttv_input_init()
455 ir->mask_keyup = 0x010000; in bttv_input_init()
456 ir->polling = 50; // ms in bttv_input_init()
462 ir->mask_keycode = 0x001f00; in bttv_input_init()
463 ir->mask_keyup = 0x008000; in bttv_input_init()
464 ir->polling = 50; // ms in bttv_input_init()
469 ir->mask_keycode = 0x1f8; in bttv_input_init()
474 ir->mask_keycode = 0x0008e000; in bttv_input_init()
475 ir->mask_keydown = 0x00200000; in bttv_input_init()
479 ir->mask_keycode = 0x001f00; in bttv_input_init()
480 ir->mask_keyup = 0x008000; in bttv_input_init()
481 ir->polling = 50; // ms in bttv_input_init()
488 ir->mask_keycode = 0x001F00; in bttv_input_init()
489 ir->mask_keyup = 0x006000; in bttv_input_init()
490 ir->polling = 50; // ms in bttv_input_init()
494 ir->rc5_gpio = true; in bttv_input_init()
498 ir->mask_keycode = 0x001F00; in bttv_input_init()
499 ir->mask_keyup = 0x004000; in bttv_input_init()
500 ir->polling = 50; /* ms */ in bttv_input_init()
504 ir->mask_keycode = 0x001f00; in bttv_input_init()
505 ir->mask_keyup = 0x006000; in bttv_input_init()
506 ir->polling = 50; /* ms */ in bttv_input_init()
510 ir->mask_keycode = 0x00fd00; in bttv_input_init()
511 ir->mask_keyup = 0x000080; in bttv_input_init()
512 ir->polling = 1; /* ms */ in bttv_input_init()
513 ir->last_gpio = ir_extract_bits(bttv_gpio_read(&btv->c), in bttv_input_init()
514 ir->mask_keycode); in bttv_input_init()
519 dprintk("Ooops: IR config error [card=%d]\n", btv->c.type); in bttv_input_init()
520 err = -ENODEV; in bttv_input_init()
524 if (ir->rc5_gpio) { in bttv_input_init()
527 bttv_gpio_inout(&btv->c, (1 << 4), 1 << 4); in bttv_input_init()
528 gpio = bttv_gpio_read(&btv->c); in bttv_input_init()
529 bttv_gpio_write(&btv->c, gpio & ~(1 << 4)); in bttv_input_init()
530 bttv_gpio_write(&btv->c, gpio | (1 << 4)); in bttv_input_init()
532 /* init hardware-specific stuff */ in bttv_input_init()
533 bttv_gpio_inout(&btv->c, ir->mask_keycode | ir->mask_keydown, 0); in bttv_input_init()
537 ir->dev = rc; in bttv_input_init()
538 ir->btv = btv; in bttv_input_init()
540 snprintf(ir->name, sizeof(ir->name), "bttv IR (card=%d)", in bttv_input_init()
541 btv->c.type); in bttv_input_init()
542 snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0", in bttv_input_init()
543 pci_name(btv->c.pci)); in bttv_input_init()
545 rc->device_name = ir->name; in bttv_input_init()
546 rc->input_phys = ir->phys; in bttv_input_init()
547 rc->input_id.bustype = BUS_PCI; in bttv_input_init()
548 rc->input_id.version = 1; in bttv_input_init()
549 if (btv->c.pci->subsystem_vendor) { in bttv_input_init()
550 rc->input_id.vendor = btv->c.pci->subsystem_vendor; in bttv_input_init()
551 rc->input_id.product = btv->c.pci->subsystem_device; in bttv_input_init()
553 rc->input_id.vendor = btv->c.pci->vendor; in bttv_input_init()
554 rc->input_id.product = btv->c.pci->device; in bttv_input_init()
556 rc->dev.parent = &btv->c.pci->dev; in bttv_input_init()
557 rc->map_name = ir_codes; in bttv_input_init()
558 rc->driver_name = MODULE_NAME; in bttv_input_init()
560 btv->remote = ir; in bttv_input_init()
572 btv->remote = NULL; in bttv_input_init()
581 if (btv->remote == NULL) in bttv_input_fini()
585 rc_unregister_device(btv->remote->dev); in bttv_input_fini()
586 kfree(btv->remote); in bttv_input_fini()
587 btv->remote = NULL; in bttv_input_fini()