• Home
  • Raw
  • Download

Lines Matching +full:i2c +full:- +full:polling

18 #include "saa7134-reg.h"
46 printk(KERN_DEBUG pr_fmt("ir %s: " fmt), ir->rc->device_name, \
53 /* -------------------- GPIO generic keycode builder -------------------- */
57 struct saa7134_card_ir *ir = dev->remote; in build_key()
61 switch (dev->board) { in build_key()
72 if (ir->polling) { in build_key()
73 if (ir->last_gpio == gpio) in build_key()
75 ir->last_gpio = gpio; in build_key()
78 data = ir_extract_bits(gpio, ir->mask_keycode); in build_key()
80 gpio, ir->mask_keycode, data); in build_key()
82 switch (dev->board) { in build_key()
84 if (data == ir->mask_keycode) in build_key()
85 rc_keyup(ir->dev); in build_key()
87 rc_keydown_notimeout(ir->dev, RC_PROTO_UNKNOWN, data, in build_key()
92 if (ir->polling) { in build_key()
93 if ((ir->mask_keydown && (0 != (gpio & ir->mask_keydown))) || in build_key()
94 (ir->mask_keyup && (0 == (gpio & ir->mask_keyup)))) { in build_key()
95 rc_keydown_notimeout(ir->dev, RC_PROTO_UNKNOWN, data, in build_key()
98 rc_keyup(ir->dev); in build_key()
101 else { /* IRQ driven mode - handle key press and release in one go */ in build_key()
102 if ((ir->mask_keydown && (0 != (gpio & ir->mask_keydown))) || in build_key()
103 (ir->mask_keyup && (0 == (gpio & ir->mask_keyup)))) { in build_key()
104 rc_keydown_notimeout(ir->dev, RC_PROTO_UNKNOWN, data, in build_key()
106 rc_keyup(ir->dev); in build_key()
113 /* --------------------- Chip specific I2C key builders ----------------- */
123 struct saa7134_dev *dev = ir->c->adapter->algo_data; in get_key_flydvb_trio()
126 ir_dbg(ir, "get_key_flydvb_trio: ir->c->adapter->algo_data is NULL!\n"); in get_key_flydvb_trio()
127 return -EIO; in get_key_flydvb_trio()
143 while (1 != i2c_master_send(ir->c, &b, 1)) { in get_key_flydvb_trio()
146 * wait a bit for next attempt - in get_key_flydvb_trio()
154 return -EIO; in get_key_flydvb_trio()
156 rc = i2c_master_recv(ir->c, &b, 1); in get_key_flydvb_trio()
161 return -EIO; in get_key_flydvb_trio()
178 struct saa7134_dev *dev = ir->c->adapter->algo_data; in get_key_msi_tvanywhere_plus()
180 ir_dbg(ir, "get_key_msi_tvanywhere_plus: ir->c->adapter->algo_data is NULL!\n"); in get_key_msi_tvanywhere_plus()
181 return -EIO; in get_key_msi_tvanywhere_plus()
192 I2C receive if gpio&0x40 is not low. */ in get_key_msi_tvanywhere_plus()
199 rc = i2c_master_recv(ir->c, &b, 1); in get_key_msi_tvanywhere_plus()
204 return -EIO; in get_key_msi_tvanywhere_plus()
230 struct saa7134_dev *dev = ir->c->adapter->algo_data; in get_key_kworld_pc150u()
232 ir_dbg(ir, "get_key_kworld_pc150u: ir->c->adapter->algo_data is NULL!\n"); in get_key_kworld_pc150u()
233 return -EIO; in get_key_kworld_pc150u()
244 I2C receive if gpio&0x100 is not low. */ in get_key_kworld_pc150u()
251 rc = i2c_master_recv(ir->c, &b, 1); in get_key_kworld_pc150u()
256 return -EIO; in get_key_kworld_pc150u()
280 rc = i2c_master_recv(ir->c, &b, 1); in get_key_purpletv()
285 return -EIO; in get_key_purpletv()
309 rc = i2c_master_recv(ir->c, buf, 5); in get_key_hvr1110()
314 return -EIO; in get_key_hvr1110()
346 struct saa7134_dev *dev = ir->c->adapter->algo_data; in get_key_beholdm6xx()
357 ir->c->addr = 0x5a >> 1; in get_key_beholdm6xx()
359 rc = i2c_master_recv(ir->c, data, 12); in get_key_beholdm6xx()
364 return -EIO; in get_key_beholdm6xx()
388 rc = i2c_master_recv(ir->c, b, 4); in get_key_pinnacle()
393 return -EIO; in get_key_pinnacle()
408 if (ir->old == parity) in get_key_pinnacle()
411 ir->old = parity; in get_key_pinnacle()
431 * - I2c packet does not change when the same key is pressed quickly. The workaround
433 * in the i2c packet, and the function can distinguish key presses.
465 if (!dev || !dev->remote) in saa7134_input_irq()
468 ir = dev->remote; in saa7134_input_irq()
469 if (!ir->running) in saa7134_input_irq()
472 if (!ir->polling && !ir->raw_decode) { in saa7134_input_irq()
474 } else if (ir->raw_decode) { in saa7134_input_irq()
482 struct saa7134_dev *dev = ir->dev->priv; in saa7134_input_timer()
485 mod_timer(&ir->timer, jiffies + msecs_to_jiffies(ir->polling)); in saa7134_input_timer()
493 if (!dev || !dev->remote) in __saa7134_ir_start()
494 return -EINVAL; in __saa7134_ir_start()
496 ir = dev->remote; in __saa7134_ir_start()
497 if (ir->running) in __saa7134_ir_start()
502 switch (dev->board) { in __saa7134_ir_start()
536 ir->running = true; in __saa7134_ir_start()
538 if (ir->polling) { in __saa7134_ir_start()
539 timer_setup(&ir->timer, saa7134_input_timer, 0); in __saa7134_ir_start()
540 ir->timer.expires = jiffies + HZ; in __saa7134_ir_start()
541 add_timer(&ir->timer); in __saa7134_ir_start()
552 if (!dev || !dev->remote) in __saa7134_ir_stop()
555 ir = dev->remote; in __saa7134_ir_stop()
556 if (!ir->running) in __saa7134_ir_stop()
559 if (ir->polling) in __saa7134_ir_stop()
560 del_timer_sync(&ir->timer); in __saa7134_ir_stop()
562 ir->running = false; in __saa7134_ir_stop()
569 if (dev->remote->users) in saa7134_ir_start()
577 if (dev->remote->users) in saa7134_ir_stop()
583 struct saa7134_dev *dev = rc->priv; in saa7134_ir_open()
585 dev->remote->users++; in saa7134_ir_open()
591 struct saa7134_dev *dev = rc->priv; in saa7134_ir_close()
593 dev->remote->users--; in saa7134_ir_close()
594 if (!dev->remote->users) in saa7134_ir_close()
606 unsigned polling = 0; in saa7134_input_init1() local
610 if (dev->has_remote != SAA7134_REMOTE_GPIO) in saa7134_input_init1()
611 return -ENODEV; in saa7134_input_init1()
613 return -ENODEV; in saa7134_input_init1()
616 switch (dev->board) { in saa7134_input_init1()
638 polling = 50; // ms in saa7134_input_init1()
645 polling = 50; // ms in saa7134_input_init1()
663 polling = 50; // ms in saa7134_input_init1()
685 polling = 50; // ms in saa7134_input_init1()
692 polling = 50; /* ms */ in saa7134_input_init1()
699 polling = 50; // ms in saa7134_input_init1()
706 polling = 50; /* ms */ in saa7134_input_init1()
726 polling = 50; /* ms */ in saa7134_input_init1()
732 polling = 50; // ms in saa7134_input_init1()
738 polling = 50; // ms in saa7134_input_init1()
744 polling = 5; /* ms */ in saa7134_input_init1()
753 polling = 50; // ms in saa7134_input_init1()
759 polling = 50; // ms in saa7134_input_init1()
795 polling = 50; // ms in saa7134_input_init1()
809 polling = 50; //ms in saa7134_input_init1()
815 polling = 50; /* ms */ in saa7134_input_init1()
821 polling = 50; /* ms */ in saa7134_input_init1()
826 polling = 40; /* ms */ in saa7134_input_init1()
837 polling = 50; /* ms */ in saa7134_input_init1()
861 pr_err("Oops: IR config error [card=%d]\n", dev->board); in saa7134_input_init1()
862 return -ENODEV; in saa7134_input_init1()
868 err = -ENOMEM; in saa7134_input_init1()
872 ir->dev = rc; in saa7134_input_init1()
873 dev->remote = ir; in saa7134_input_init1()
875 /* init hardware-specific stuff */ in saa7134_input_init1()
876 ir->mask_keycode = mask_keycode; in saa7134_input_init1()
877 ir->mask_keydown = mask_keydown; in saa7134_input_init1()
878 ir->mask_keyup = mask_keyup; in saa7134_input_init1()
879 ir->polling = polling; in saa7134_input_init1()
880 ir->raw_decode = raw_decode; in saa7134_input_init1()
883 snprintf(ir->name, sizeof(ir->name), "saa7134 IR (%s)", in saa7134_input_init1()
884 saa7134_boards[dev->board].name); in saa7134_input_init1()
885 snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0", in saa7134_input_init1()
886 pci_name(dev->pci)); in saa7134_input_init1()
888 rc->priv = dev; in saa7134_input_init1()
889 rc->open = saa7134_ir_open; in saa7134_input_init1()
890 rc->close = saa7134_ir_close; in saa7134_input_init1()
892 rc->driver_type = RC_DRIVER_IR_RAW; in saa7134_input_init1()
893 rc->allowed_protocols = RC_PROTO_BIT_ALL_IR_DECODER; in saa7134_input_init1()
896 rc->device_name = ir->name; in saa7134_input_init1()
897 rc->input_phys = ir->phys; in saa7134_input_init1()
898 rc->input_id.bustype = BUS_PCI; in saa7134_input_init1()
899 rc->input_id.version = 1; in saa7134_input_init1()
900 if (dev->pci->subsystem_vendor) { in saa7134_input_init1()
901 rc->input_id.vendor = dev->pci->subsystem_vendor; in saa7134_input_init1()
902 rc->input_id.product = dev->pci->subsystem_device; in saa7134_input_init1()
904 rc->input_id.vendor = dev->pci->vendor; in saa7134_input_init1()
905 rc->input_id.product = dev->pci->device; in saa7134_input_init1()
907 rc->dev.parent = &dev->pci->dev; in saa7134_input_init1()
908 rc->map_name = ir_codes; in saa7134_input_init1()
909 rc->driver_name = MODULE_NAME; in saa7134_input_init1()
910 rc->min_timeout = 1; in saa7134_input_init1()
911 rc->timeout = IR_DEFAULT_TIMEOUT; in saa7134_input_init1()
912 rc->max_timeout = 10 * IR_DEFAULT_TIMEOUT; in saa7134_input_init1()
922 dev->remote = NULL; in saa7134_input_init1()
929 if (NULL == dev->remote) in saa7134_input_fini()
933 rc_unregister_device(dev->remote->dev); in saa7134_input_fini()
934 kfree(dev->remote); in saa7134_input_fini()
935 dev->remote = NULL; in saa7134_input_fini()
950 input_dbg("IR has been disabled, not probing for i2c remote\n"); in saa7134_probe_i2c_ir()
955 memset(&dev->init_data, 0, sizeof(dev->init_data)); in saa7134_probe_i2c_ir()
958 switch (dev->board) { in saa7134_probe_i2c_ir()
961 dev->init_data.name = "Pinnacle PCTV"; in saa7134_probe_i2c_ir()
963 dev->init_data.get_key = get_key_pinnacle_color; in saa7134_probe_i2c_ir()
964 dev->init_data.ir_codes = RC_MAP_PINNACLE_COLOR; in saa7134_probe_i2c_ir()
967 dev->init_data.get_key = get_key_pinnacle_grey; in saa7134_probe_i2c_ir()
968 dev->init_data.ir_codes = RC_MAP_PINNACLE_GREY; in saa7134_probe_i2c_ir()
973 dev->init_data.name = "Purple TV"; in saa7134_probe_i2c_ir()
974 dev->init_data.get_key = get_key_purpletv; in saa7134_probe_i2c_ir()
975 dev->init_data.ir_codes = RC_MAP_PURPLETV; in saa7134_probe_i2c_ir()
979 dev->init_data.name = "MSI TV@nywhere Plus"; in saa7134_probe_i2c_ir()
980 dev->init_data.get_key = get_key_msi_tvanywhere_plus; in saa7134_probe_i2c_ir()
981 dev->init_data.ir_codes = RC_MAP_MSI_TVANYWHERE_PLUS; in saa7134_probe_i2c_ir()
983 * MSI TV@nyware Plus requires more frequent polling in saa7134_probe_i2c_ir()
986 dev->init_data.polling_interval = 50; in saa7134_probe_i2c_ir()
992 rc = i2c_transfer(&dev->i2c_adap, &msg_msi, 1); in saa7134_probe_i2c_ir()
994 msg_msi.addr, dev->i2c_adap.name, in saa7134_probe_i2c_ir()
998 dev->init_data.name = "SnaZio* TVPVR PRO"; in saa7134_probe_i2c_ir()
999 dev->init_data.get_key = get_key_msi_tvanywhere_plus; in saa7134_probe_i2c_ir()
1000 dev->init_data.ir_codes = RC_MAP_MSI_TVANYWHERE_PLUS; in saa7134_probe_i2c_ir()
1002 * MSI TV@nyware Plus requires more frequent polling in saa7134_probe_i2c_ir()
1005 dev->init_data.polling_interval = 50; in saa7134_probe_i2c_ir()
1013 rc = i2c_transfer(&dev->i2c_adap, &msg_msi, 1); in saa7134_probe_i2c_ir()
1015 msg_msi.addr, dev->i2c_adap.name, in saa7134_probe_i2c_ir()
1020 dev->init_data.name = "Kworld PC150-U"; in saa7134_probe_i2c_ir()
1021 dev->init_data.get_key = get_key_kworld_pc150u; in saa7134_probe_i2c_ir()
1022 dev->init_data.ir_codes = RC_MAP_KWORLD_PC150U; in saa7134_probe_i2c_ir()
1028 rc = i2c_transfer(&dev->i2c_adap, &msg_msi, 1); in saa7134_probe_i2c_ir()
1030 msg_msi.addr, dev->i2c_adap.name, in saa7134_probe_i2c_ir()
1034 dev->init_data.name = "HVR 1110"; in saa7134_probe_i2c_ir()
1035 dev->init_data.get_key = get_key_hvr1110; in saa7134_probe_i2c_ir()
1036 dev->init_data.ir_codes = RC_MAP_HAUPPAUGE; in saa7134_probe_i2c_ir()
1054 dev->init_data.name = "BeholdTV"; in saa7134_probe_i2c_ir()
1055 dev->init_data.get_key = get_key_beholdm6xx; in saa7134_probe_i2c_ir()
1056 dev->init_data.ir_codes = RC_MAP_BEHOLD; in saa7134_probe_i2c_ir()
1057 dev->init_data.type = RC_PROTO_BIT_NECX; in saa7134_probe_i2c_ir()
1068 dev->init_data.name = "FlyDVB Trio"; in saa7134_probe_i2c_ir()
1069 dev->init_data.get_key = get_key_flydvb_trio; in saa7134_probe_i2c_ir()
1070 dev->init_data.ir_codes = RC_MAP_FLYDVB; in saa7134_probe_i2c_ir()
1074 input_dbg("No I2C IR support for board %x\n", dev->board); in saa7134_probe_i2c_ir()
1078 if (dev->init_data.name) in saa7134_probe_i2c_ir()
1079 info.platform_data = &dev->init_data; in saa7134_probe_i2c_ir()
1080 i2c_new_device(&dev->i2c_adap, &info); in saa7134_probe_i2c_ir()
1085 struct saa7134_card_ir *ir = dev->remote; in saa7134_raw_decode_irq()
1091 space = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2) & ir->mask_keydown; in saa7134_raw_decode_irq()
1092 ir_raw_event_store_edge(dev->remote->dev, !space); in saa7134_raw_decode_irq()