Lines Matching refs:ir

51 #include <media/i2c/ir-kbd-i2c.h>
59 static int get_key_haup_common(struct IR_i2c *ir, enum rc_proto *protocol,
66 if (size != i2c_master_recv(ir->c, buf, size))
96 dev_dbg(&ir->rc->dev,
97 "ir hauppauge (rc5): s%d r%d t%d dev=%d code=%d\n",
114 dev_dbg(&ir->rc->dev,
115 "ir hauppauge (rc6-mce): t%d vendor=%d dev=%d code=%d\n",
120 dev_dbg(&ir->rc->dev,
121 "ir hauppauge (rc6-6a-32): vendor=%d dev=%d code=%d\n",
133 static int get_key_haup(struct IR_i2c *ir, enum rc_proto *protocol,
136 return get_key_haup_common(ir, protocol, scancode, toggle, 3);
139 static int get_key_haup_xvr(struct IR_i2c *ir, enum rc_proto *protocol,
151 ret = i2c_master_send(ir->c, buf, 1);
155 return get_key_haup_common(ir, protocol, scancode, toggle, 6);
158 static int get_key_pixelview(struct IR_i2c *ir, enum rc_proto *protocol,
165 rc = i2c_master_recv(ir->c, &b, 1);
167 dev_dbg(&ir->rc->dev, "read error\n");
179 static int get_key_fusionhdtv(struct IR_i2c *ir, enum rc_proto *protocol,
186 rc = i2c_master_recv(ir->c, buf, 4);
188 dev_dbg(&ir->rc->dev, "read error\n");
195 dev_dbg(&ir->rc->dev, "%s: %*ph\n", __func__, 4, buf);
197 /* no key pressed or signal from other ir remote */
207 static int get_key_knc1(struct IR_i2c *ir, enum rc_proto *protocol,
214 rc = i2c_master_recv(ir->c, &b, 1);
216 dev_dbg(&ir->rc->dev, "read error\n");
226 dev_dbg(&ir->rc->dev, "key %02x\n", b);
241 static int get_key_geniatech(struct IR_i2c *ir, enum rc_proto *protocol,
249 rc = i2c_master_recv(ir->c, &b, 1);
255 dev_dbg(&ir->rc->dev, "read error\n");
262 if (ir->old == b)
264 ir->old = b;
270 dev_dbg(&ir->rc->dev, "key %02x\n", b);
274 *toggle = ir->old >> 7;
278 static int get_key_avermedia_cardbus(struct IR_i2c *ir, enum rc_proto *protocol,
282 struct i2c_msg msg[] = { { .addr = ir->c->addr, .flags = 0,
284 { .addr = ir->c->addr, .flags = I2C_M_RD,
287 if (2 != i2c_transfer(ir->c->adapter, msg, 2)) {
288 dev_dbg(&ir->rc->dev, "read error\n");
297 if (2 != i2c_transfer(ir->c->adapter, msg, 2)) {
298 dev_dbg(&ir->rc->dev, "read error\n");
305 dev_dbg(&ir->rc->dev, "read key 0x%02x/0x%02x\n", key, keygroup);
307 dev_warn(&ir->rc->dev, "warning: invalid key group 0x%02x for key 0x%02x\n",
314 if (ir->c->addr == 0x41) /* AVerMedia EM78P153 */
322 static int ir_key_poll(struct IR_i2c *ir)
329 dev_dbg(&ir->rc->dev, "%s\n", __func__);
330 rc = ir->get_key(ir, &protocol, &scancode, &toggle);
332 dev_warn(&ir->rc->dev, "error %d\n", rc);
337 dev_dbg(&ir->rc->dev, "%s: proto = 0x%04x, scancode = 0x%08x\n",
339 rc_keydown(ir->rc, protocol, scancode, toggle);
347 struct IR_i2c *ir = container_of(work, struct IR_i2c, work.work);
353 if (mutex_trylock(&ir->lock)) {
354 rc = ir_key_poll(ir);
355 mutex_unlock(&ir->lock);
357 rc_unregister_device(ir->rc);
358 ir->rc = NULL;
363 schedule_delayed_work(&ir->work, msecs_to_jiffies(ir->polling_interval));
368 struct IR_i2c *ir = dev->priv;
370 schedule_delayed_work(&ir->work, 0);
377 struct IR_i2c *ir = dev->priv;
379 cancel_delayed_work_sync(&ir->work);
397 * recorded IR. It's best to work with generated IR, like from ir-ctl or
410 static int send_data_block(struct IR_i2c *ir, int cmd,
430 dev_dbg(&ir->rc->dev, "%*ph", tosend + 1, buf);
431 ret = i2c_master_send(ir->tx_c, buf, tosend + 1);
433 dev_dbg(&ir->rc->dev,
442 ret = i2c_master_send(ir->tx_c, buf, 2);
444 dev_err(&ir->rc->dev, "i2c_master_send failed with %d\n", ret);
450 ret = i2c_master_send(ir->tx_c, buf, 1);
452 dev_err(&ir->rc->dev, "i2c_master_send failed with %d\n", ret);
459 static int zilog_init(struct IR_i2c *ir)
467 ret = send_data_block(ir, ZILOG_INIT_END, &code_block);
471 ret = i2c_master_recv(ir->tx_c, buf, 4);
473 dev_err(&ir->c->dev, "failed to retrieve firmware version: %d\n",
478 dev_info(&ir->c->dev, "Zilog/Hauppauge IR blaster firmware version %d.%d.%d\n",
536 struct IR_i2c *ir = rcdev->priv;
542 ir->duty_cycle * XTAL_FREQ / 1000, ir->carrier);
544 (100 - ir->duty_cycle) * XTAL_FREQ / 1000, ir->carrier);
647 struct IR_i2c *ir = rcdev->priv;
656 ret = mutex_lock_interruptible(&ir->lock);
660 ret = send_data_block(ir, ZILOG_UIR_END, &code_block);
664 ret = i2c_master_recv(ir->tx_c, buf, 1);
666 dev_err(&ir->rc->dev, "i2c_master_recv failed with %d\n", ret);
670 dev_dbg(&ir->rc->dev, "code set status: %02x\n", buf[0]);
673 dev_err(&ir->rc->dev, "unexpected IR TX response %02x\n",
682 ret = i2c_master_send(ir->tx_c, buf, 2);
684 dev_err(&ir->rc->dev, "i2c_master_send failed with %d\n", ret);
690 dev_dbg(&ir->rc->dev, "send command sent\n");
701 ret = i2c_master_send(ir->tx_c, buf, 1);
704 dev_dbg(&ir->rc->dev,
710 dev_err(&ir->rc->dev,
718 ret = i2c_master_recv(ir->tx_c, buf, 1);
720 dev_err(&ir->rc->dev, "i2c_master_recv failed with %d\n", ret);
724 dev_err(&ir->rc->dev, "unexpected IR TX response #2: %02x\n",
729 dev_dbg(&ir->rc->dev, "transmit complete\n");
734 mutex_unlock(&ir->lock);
741 struct IR_i2c *ir = dev->priv;
746 ir->carrier = carrier;
753 struct IR_i2c *ir = dev->priv;
755 ir->duty_cycle = duty_cycle;
766 struct IR_i2c *ir;
778 ir = devm_kzalloc(&client->dev, sizeof(*ir), GFP_KERNEL);
779 if (!ir)
782 ir->c = client;
783 ir->polling_interval = DEFAULT_POLLING_INTERVAL;
784 i2c_set_clientdata(client, ir);
789 ir->get_key = get_key_pixelview;
797 ir->get_key = get_key_haup;
803 ir->get_key = get_key_knc1;
809 ir->get_key = get_key_geniatech;
812 ir->old = 0xfc;
816 ir->get_key = get_key_fusionhdtv;
822 ir->get_key = get_key_avermedia_cardbus;
828 ir->get_key = get_key_avermedia_cardbus;
835 ir->get_key = get_key_haup_xvr;
839 ir->polling_interval = 125;
857 ir->polling_interval = init_data->polling_interval;
862 ir->get_key = init_data->get_key;
865 ir->get_key = get_key_pixelview;
868 ir->get_key = get_key_haup;
871 ir->get_key = get_key_knc1;
874 ir->get_key = get_key_geniatech;
877 ir->get_key = get_key_fusionhdtv;
880 ir->get_key = get_key_haup_xvr;
883 ir->get_key = get_key_avermedia_cardbus;
897 ir->rc = rc;
900 if (!name || !ir->get_key || !rc_proto || !ir_codes) {
907 ir->ir_codes = ir_codes;
909 snprintf(ir->phys, sizeof(ir->phys), "%s/%s", dev_name(&adap->dev),
917 rc->input_phys = ir->phys;
920 rc->priv = ir;
927 rc->map_name = ir->ir_codes;
932 mutex_init(&ir->lock);
934 INIT_DELAYED_WORK(&ir->work, ir_work);
937 ir->tx_c = i2c_new_dummy_device(client->adapter, 0x70);
938 if (IS_ERR(ir->tx_c)) {
940 err = PTR_ERR(ir->tx_c);
942 } else if (!zilog_init(ir)) {
943 ir->carrier = 38000;
944 ir->duty_cycle = 40;
958 if (!IS_ERR(ir->tx_c))
959 i2c_unregister_device(ir->tx_c);
968 struct IR_i2c *ir = i2c_get_clientdata(client);
970 cancel_delayed_work_sync(&ir->work);
972 i2c_unregister_device(ir->tx_c);
974 rc_unregister_device(ir->rc);
989 .name = "ir-kbd-i2c",