Lines Matching refs:ir
538 static void mceusb_dev_printdata(struct mceusb_dev *ir, char *buf, in mceusb_dev_printdata() argument
544 struct device *dev = ir->dev; in mceusb_dev_printdata()
549 if (ir->flags.microsoft_gen1 && !out && !offset) in mceusb_dev_printdata()
670 else if (ir->learning_enabled) in mceusb_dev_printdata()
697 dev_dbg(dev, "Raw IR data, %d pulse/space samples", ir->rem); in mceusb_dev_printdata()
703 struct mceusb_dev *ir; in mce_async_callback() local
709 ir = urb->context; in mce_async_callback()
716 mceusb_dev_printdata(ir, urb->transfer_buffer, 0, len, true); in mce_async_callback()
727 dev_err(ir->dev, "Error: request urb status = %d", urb->status); in mce_async_callback()
737 static void mce_request_packet(struct mceusb_dev *ir, unsigned char *data, in mce_request_packet() argument
742 struct device *dev = ir->dev; in mce_request_packet()
760 if (usb_endpoint_xfer_int(ir->usb_ep_out)) { in mce_request_packet()
761 pipe = usb_sndintpipe(ir->usbdev, in mce_request_packet()
762 ir->usb_ep_out->bEndpointAddress); in mce_request_packet()
763 usb_fill_int_urb(async_urb, ir->usbdev, pipe, async_buf, in mce_request_packet()
764 size, mce_async_callback, ir, in mce_request_packet()
765 ir->usb_ep_out->bInterval); in mce_request_packet()
767 pipe = usb_sndbulkpipe(ir->usbdev, in mce_request_packet()
768 ir->usb_ep_out->bEndpointAddress); in mce_request_packet()
769 usb_fill_bulk_urb(async_urb, ir->usbdev, pipe, in mce_request_packet()
771 ir); in mce_request_packet()
777 async_urb = ir->urb_in; in mce_request_packet()
778 ir->send_flags = RECV_FLAG_IN_PROGRESS; in mce_request_packet()
788 async_urb->dev = ir->usbdev; in mce_request_packet()
798 static void mce_async_out(struct mceusb_dev *ir, unsigned char *data, int size) in mce_async_out() argument
802 if (ir->need_reset) { in mce_async_out()
803 ir->need_reset = false; in mce_async_out()
804 mce_request_packet(ir, DEVICE_RESUME, rsize, MCEUSB_TX); in mce_async_out()
808 mce_request_packet(ir, data, size, MCEUSB_TX); in mce_async_out()
812 static void mce_flush_rx_buffer(struct mceusb_dev *ir, int size) in mce_flush_rx_buffer() argument
814 mce_request_packet(ir, NULL, size, MCEUSB_RX); in mce_flush_rx_buffer()
820 struct mceusb_dev *ir = dev->priv; in mceusb_tx_ir() local
828 cmdbuf[cmdcount++] = ir->tx_mask; in mceusb_tx_ir()
831 mce_async_out(ir, cmdbuf, cmdcount); in mceusb_tx_ir()
874 mce_async_out(ir, cmdbuf, cmdcount); in mceusb_tx_ir()
883 struct mceusb_dev *ir = dev->priv; in mceusb_set_tx_mask() local
885 if (ir->flags.tx_mask_normal) in mceusb_set_tx_mask()
886 ir->tx_mask = mask; in mceusb_set_tx_mask()
888 ir->tx_mask = (mask != MCE_DEFAULT_TX_MASK ? in mceusb_set_tx_mask()
897 struct mceusb_dev *ir = dev->priv; in mceusb_set_tx_carrier() local
904 if (ir->carrier != carrier) { in mceusb_set_tx_carrier()
907 ir->carrier = carrier; in mceusb_set_tx_carrier()
910 dev_dbg(ir->dev, "disabling carrier modulation"); in mceusb_set_tx_carrier()
911 mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); in mceusb_set_tx_carrier()
918 ir->carrier = carrier; in mceusb_set_tx_carrier()
921 dev_dbg(ir->dev, "requesting %u HZ carrier", in mceusb_set_tx_carrier()
925 mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); in mceusb_set_tx_carrier()
942 static void mceusb_handle_command(struct mceusb_dev *ir, int index) in mceusb_handle_command() argument
944 u8 hi = ir->buf_in[index + 1] & 0xff; in mceusb_handle_command()
945 u8 lo = ir->buf_in[index + 2] & 0xff; in mceusb_handle_command()
947 switch (ir->buf_in[index]) { in mceusb_handle_command()
950 if ((ir->buf_in[index + 4] & 0xff) == 0x00) in mceusb_handle_command()
951 ir->txports_cabled |= 1 << hi; in mceusb_handle_command()
956 ir->rc->timeout = US_TO_NS((hi << 8 | lo) * MCE_TIME_UNIT); in mceusb_handle_command()
959 ir->num_txports = hi; in mceusb_handle_command()
960 ir->num_rxports = lo; in mceusb_handle_command()
965 ir->emver = hi; in mceusb_handle_command()
968 ir->tx_mask = hi; in mceusb_handle_command()
971 ir->learning_enabled = ((hi & 0x02) == 0x02); in mceusb_handle_command()
972 ir->rxports_active = hi; in mceusb_handle_command()
975 ir->need_reset = true; in mceusb_handle_command()
982 static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len) in mceusb_process_ir_data() argument
989 if (ir->flags.microsoft_gen1) in mceusb_process_ir_data()
997 switch (ir->parser_state) { in mceusb_process_ir_data()
999 ir->rem = mceusb_cmd_datasize(ir->cmd, ir->buf_in[i]); in mceusb_process_ir_data()
1000 mceusb_dev_printdata(ir, ir->buf_in, i - 1, in mceusb_process_ir_data()
1001 ir->rem + 2, false); in mceusb_process_ir_data()
1002 mceusb_handle_command(ir, i); in mceusb_process_ir_data()
1003 ir->parser_state = CMD_DATA; in mceusb_process_ir_data()
1006 ir->rem--; in mceusb_process_ir_data()
1008 rawir.pulse = ((ir->buf_in[i] & MCE_PULSE_BIT) != 0); in mceusb_process_ir_data()
1009 rawir.duration = (ir->buf_in[i] & MCE_PULSE_MASK) in mceusb_process_ir_data()
1012 dev_dbg(ir->dev, "Storing %s with duration %d", in mceusb_process_ir_data()
1016 if (ir_raw_event_store_with_filter(ir->rc, &rawir)) in mceusb_process_ir_data()
1020 ir->rem--; in mceusb_process_ir_data()
1025 ir->cmd = ir->buf_in[i]; in mceusb_process_ir_data()
1026 if ((ir->cmd == MCE_CMD_PORT_IR) || in mceusb_process_ir_data()
1027 ((ir->cmd & MCE_PORT_MASK) != in mceusb_process_ir_data()
1029 ir->parser_state = SUBCMD; in mceusb_process_ir_data()
1032 ir->rem = (ir->cmd & MCE_PACKET_LENGTH_MASK); in mceusb_process_ir_data()
1033 mceusb_dev_printdata(ir, ir->buf_in, in mceusb_process_ir_data()
1034 i, ir->rem + 1, false); in mceusb_process_ir_data()
1035 if (ir->rem) in mceusb_process_ir_data()
1036 ir->parser_state = PARSE_IRDATA; in mceusb_process_ir_data()
1038 ir_raw_event_reset(ir->rc); in mceusb_process_ir_data()
1042 if (ir->parser_state != CMD_HEADER && !ir->rem) in mceusb_process_ir_data()
1043 ir->parser_state = CMD_HEADER; in mceusb_process_ir_data()
1046 dev_dbg(ir->dev, "processed IR data"); in mceusb_process_ir_data()
1047 ir_raw_event_handle(ir->rc); in mceusb_process_ir_data()
1053 struct mceusb_dev *ir; in mceusb_dev_recv() local
1059 ir = urb->context; in mceusb_dev_recv()
1060 if (!ir) { in mceusb_dev_recv()
1067 if (ir->send_flags == RECV_FLAG_IN_PROGRESS) { in mceusb_dev_recv()
1068 ir->send_flags = SEND_FLAG_COMPLETE; in mceusb_dev_recv()
1069 dev_dbg(ir->dev, "setup answer received %d bytes\n", in mceusb_dev_recv()
1076 mceusb_process_ir_data(ir, buf_len); in mceusb_dev_recv()
1088 dev_err(ir->dev, "Error: urb status = %d", urb->status); in mceusb_dev_recv()
1095 static void mceusb_get_emulator_version(struct mceusb_dev *ir) in mceusb_get_emulator_version() argument
1098 ir->emver = 1; in mceusb_get_emulator_version()
1099 mce_async_out(ir, GET_EMVER, sizeof(GET_EMVER)); in mceusb_get_emulator_version()
1102 static void mceusb_gen1_init(struct mceusb_dev *ir) in mceusb_gen1_init() argument
1105 struct device *dev = ir->dev; in mceusb_gen1_init()
1118 ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0), in mceusb_gen1_init()
1126 ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), in mceusb_gen1_init()
1133 ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), in mceusb_gen1_init()
1139 ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), in mceusb_gen1_init()
1145 mce_async_out(ir, DEVICE_RESUME, sizeof(DEVICE_RESUME)); in mceusb_gen1_init()
1148 mce_async_out(ir, GET_REVISION, sizeof(GET_REVISION)); in mceusb_gen1_init()
1153 static void mceusb_gen2_init(struct mceusb_dev *ir) in mceusb_gen2_init() argument
1156 mce_async_out(ir, DEVICE_RESUME, sizeof(DEVICE_RESUME)); in mceusb_gen2_init()
1159 mce_async_out(ir, GET_WAKEVERSION, sizeof(GET_WAKEVERSION)); in mceusb_gen2_init()
1162 mce_async_out(ir, GET_UNKNOWN2, sizeof(GET_UNKNOWN2)); in mceusb_gen2_init()
1165 static void mceusb_get_parameters(struct mceusb_dev *ir) in mceusb_get_parameters() argument
1172 ir->num_txports = 2; in mceusb_get_parameters()
1173 ir->num_rxports = 2; in mceusb_get_parameters()
1176 mce_async_out(ir, GET_NUM_PORTS, sizeof(GET_NUM_PORTS)); in mceusb_get_parameters()
1179 mce_async_out(ir, GET_CARRIER_FREQ, sizeof(GET_CARRIER_FREQ)); in mceusb_get_parameters()
1181 if (ir->num_txports && !ir->flags.no_tx) in mceusb_get_parameters()
1183 mce_async_out(ir, GET_TX_BITMASK, sizeof(GET_TX_BITMASK)); in mceusb_get_parameters()
1186 mce_async_out(ir, GET_RX_TIMEOUT, sizeof(GET_RX_TIMEOUT)); in mceusb_get_parameters()
1189 mce_async_out(ir, GET_RX_SENSOR, sizeof(GET_RX_SENSOR)); in mceusb_get_parameters()
1191 for (i = 0; i < ir->num_txports; i++) { in mceusb_get_parameters()
1193 mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); in mceusb_get_parameters()
1197 static void mceusb_flash_led(struct mceusb_dev *ir) in mceusb_flash_led() argument
1199 if (ir->emver < 2) in mceusb_flash_led()
1202 mce_async_out(ir, FLASH_LED, sizeof(FLASH_LED)); in mceusb_flash_led()
1205 static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir) in mceusb_init_rc_dev() argument
1207 struct usb_device *udev = ir->usbdev; in mceusb_init_rc_dev()
1208 struct device *dev = ir->dev; in mceusb_init_rc_dev()
1218 snprintf(ir->name, sizeof(ir->name), "%s (%04x:%04x)", in mceusb_init_rc_dev()
1219 mceusb_model[ir->model].name ? in mceusb_init_rc_dev()
1220 mceusb_model[ir->model].name : in mceusb_init_rc_dev()
1222 le16_to_cpu(ir->usbdev->descriptor.idVendor), in mceusb_init_rc_dev()
1223 le16_to_cpu(ir->usbdev->descriptor.idProduct)); in mceusb_init_rc_dev()
1225 usb_make_path(ir->usbdev, ir->phys, sizeof(ir->phys)); in mceusb_init_rc_dev()
1227 rc->input_name = ir->name; in mceusb_init_rc_dev()
1228 rc->input_phys = ir->phys; in mceusb_init_rc_dev()
1229 usb_to_input_id(ir->usbdev, &rc->input_id); in mceusb_init_rc_dev()
1231 rc->priv = ir; in mceusb_init_rc_dev()
1235 if (!ir->flags.no_tx) { in mceusb_init_rc_dev()
1252 if (mceusb_model[ir->model].rc_map) in mceusb_init_rc_dev()
1253 rc->map_name = mceusb_model[ir->model].rc_map; in mceusb_init_rc_dev()
1276 struct mceusb_dev *ir = NULL; in mceusb_dev_probe() local
1335 ir = kzalloc(sizeof(struct mceusb_dev), GFP_KERNEL); in mceusb_dev_probe()
1336 if (!ir) in mceusb_dev_probe()
1339 ir->buf_in = usb_alloc_coherent(dev, maxp, GFP_ATOMIC, &ir->dma_in); in mceusb_dev_probe()
1340 if (!ir->buf_in) in mceusb_dev_probe()
1343 ir->urb_in = usb_alloc_urb(0, GFP_KERNEL); in mceusb_dev_probe()
1344 if (!ir->urb_in) in mceusb_dev_probe()
1347 ir->usbdev = usb_get_dev(dev); in mceusb_dev_probe()
1348 ir->dev = &intf->dev; in mceusb_dev_probe()
1349 ir->len_in = maxp; in mceusb_dev_probe()
1350 ir->flags.microsoft_gen1 = is_microsoft_gen1; in mceusb_dev_probe()
1351 ir->flags.tx_mask_normal = tx_mask_normal; in mceusb_dev_probe()
1352 ir->flags.no_tx = mceusb_model[model].no_tx; in mceusb_dev_probe()
1353 ir->model = model; in mceusb_dev_probe()
1356 ir->usb_ep_out = ep_out; in mceusb_dev_probe()
1368 ir->rc = mceusb_init_rc_dev(ir); in mceusb_dev_probe()
1369 if (!ir->rc) in mceusb_dev_probe()
1373 usb_fill_int_urb(ir->urb_in, dev, pipe, ir->buf_in, maxp, in mceusb_dev_probe()
1374 mceusb_dev_recv, ir, ep_in->bInterval); in mceusb_dev_probe()
1375 ir->urb_in->transfer_dma = ir->dma_in; in mceusb_dev_probe()
1376 ir->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in mceusb_dev_probe()
1380 mce_flush_rx_buffer(ir, maxp); in mceusb_dev_probe()
1383 mceusb_get_emulator_version(ir); in mceusb_dev_probe()
1386 if (ir->flags.microsoft_gen1) in mceusb_dev_probe()
1387 mceusb_gen1_init(ir); in mceusb_dev_probe()
1389 mceusb_gen2_init(ir); in mceusb_dev_probe()
1391 mceusb_get_parameters(ir); in mceusb_dev_probe()
1393 mceusb_flash_led(ir); in mceusb_dev_probe()
1395 if (!ir->flags.no_tx) in mceusb_dev_probe()
1396 mceusb_set_tx_mask(ir->rc, MCE_DEFAULT_TX_MASK); in mceusb_dev_probe()
1398 usb_set_intfdata(intf, ir); in mceusb_dev_probe()
1401 device_set_wakeup_capable(ir->dev, true); in mceusb_dev_probe()
1402 device_set_wakeup_enable(ir->dev, true); in mceusb_dev_probe()
1405 name, ir->emver); in mceusb_dev_probe()
1407 ir->num_txports, ir->txports_cabled, in mceusb_dev_probe()
1408 ir->num_rxports, ir->rxports_active); in mceusb_dev_probe()
1414 usb_put_dev(ir->usbdev); in mceusb_dev_probe()
1415 usb_free_urb(ir->urb_in); in mceusb_dev_probe()
1417 usb_free_coherent(dev, maxp, ir->buf_in, ir->dma_in); in mceusb_dev_probe()
1419 kfree(ir); in mceusb_dev_probe()
1430 struct mceusb_dev *ir = usb_get_intfdata(intf); in mceusb_dev_disconnect() local
1434 if (!ir) in mceusb_dev_disconnect()
1437 ir->usbdev = NULL; in mceusb_dev_disconnect()
1438 rc_unregister_device(ir->rc); in mceusb_dev_disconnect()
1439 usb_kill_urb(ir->urb_in); in mceusb_dev_disconnect()
1440 usb_free_urb(ir->urb_in); in mceusb_dev_disconnect()
1441 usb_free_coherent(dev, ir->len_in, ir->buf_in, ir->dma_in); in mceusb_dev_disconnect()
1444 kfree(ir); in mceusb_dev_disconnect()
1449 struct mceusb_dev *ir = usb_get_intfdata(intf); in mceusb_dev_suspend() local
1450 dev_info(ir->dev, "suspend"); in mceusb_dev_suspend()
1451 usb_kill_urb(ir->urb_in); in mceusb_dev_suspend()
1457 struct mceusb_dev *ir = usb_get_intfdata(intf); in mceusb_dev_resume() local
1458 dev_info(ir->dev, "resume"); in mceusb_dev_resume()
1459 if (usb_submit_urb(ir->urb_in, GFP_ATOMIC)) in mceusb_dev_resume()