1 /* rc-ir-raw.c - handle IR pulse/space events 2 * 3 * Copyright (C) 2010 by Mauro Carvalho Chehab 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation version 2 of the License. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 */ 14 15 #include <linux/export.h> 16 #include <linux/kthread.h> 17 #include <linux/mutex.h> 18 #include <linux/kmod.h> 19 #include <linux/sched.h> 20 #include "rc-core-priv.h" 21 22 /* Used to keep track of IR raw clients, protected by ir_raw_handler_lock */ 23 static LIST_HEAD(ir_raw_client_list); 24 25 /* Used to handle IR raw handler extensions */ 26 static DEFINE_MUTEX(ir_raw_handler_lock); 27 static LIST_HEAD(ir_raw_handler_list); 28 static atomic64_t available_protocols = ATOMIC64_INIT(0); 29 30 static int ir_raw_event_thread(void *data) 31 { 32 struct ir_raw_event ev; 33 struct ir_raw_handler *handler; 34 struct ir_raw_event_ctrl *raw = (struct ir_raw_event_ctrl *)data; 35 36 while (1) { 37 mutex_lock(&ir_raw_handler_lock); 38 while (kfifo_out(&raw->kfifo, &ev, 1)) { 39 list_for_each_entry(handler, &ir_raw_handler_list, list) 40 if (raw->dev->enabled_protocols & 41 handler->protocols || !handler->protocols) 42 handler->decode(raw->dev, ev); 43 raw->prev_ev = ev; 44 } 45 mutex_unlock(&ir_raw_handler_lock); 46 47 set_current_state(TASK_INTERRUPTIBLE); 48 49 if (kthread_should_stop()) { 50 __set_current_state(TASK_RUNNING); 51 break; 52 } else if (!kfifo_is_empty(&raw->kfifo)) 53 set_current_state(TASK_RUNNING); 54 55 schedule(); 56 } 57 58 return 0; 59 } 60 61 /** 62 * ir_raw_event_store() - pass a pulse/space duration to the raw ir decoders 63 * @dev: the struct rc_dev device descriptor 64 * @ev: the struct ir_raw_event descriptor of the pulse/space 65 * 66 * This routine (which may be called from an interrupt context) stores a 67 * pulse/space duration for the raw ir decoding state machines. Pulses are 68 * signalled as positive values and spaces as negative values. A zero value 69 * will reset the decoding state machines. 70 */ 71 int ir_raw_event_store(struct rc_dev *dev, struct ir_raw_event *ev) 72 { 73 if (!dev->raw) 74 return -EINVAL; 75 76 IR_dprintk(2, "sample: (%05dus %s)\n", 77 TO_US(ev->duration), TO_STR(ev->pulse)); 78 79 if (!kfifo_put(&dev->raw->kfifo, *ev)) { 80 dev_err(&dev->dev, "IR event FIFO is full!\n"); 81 return -ENOSPC; 82 } 83 84 return 0; 85 } 86 EXPORT_SYMBOL_GPL(ir_raw_event_store); 87 88 /** 89 * ir_raw_event_store_edge() - notify raw ir decoders of the start of a pulse/space 90 * @dev: the struct rc_dev device descriptor 91 * @pulse: true for pulse, false for space 92 * 93 * This routine (which may be called from an interrupt context) is used to 94 * store the beginning of an ir pulse or space (or the start/end of ir 95 * reception) for the raw ir decoding state machines. This is used by 96 * hardware which does not provide durations directly but only interrupts 97 * (or similar events) on state change. 98 */ 99 int ir_raw_event_store_edge(struct rc_dev *dev, bool pulse) 100 { 101 ktime_t now; 102 DEFINE_IR_RAW_EVENT(ev); 103 int rc = 0; 104 105 if (!dev->raw) 106 return -EINVAL; 107 108 now = ktime_get(); 109 ev.duration = ktime_to_ns(ktime_sub(now, dev->raw->last_event)); 110 ev.pulse = !pulse; 111 112 rc = ir_raw_event_store(dev, &ev); 113 114 dev->raw->last_event = now; 115 116 /* timer could be set to timeout (125ms by default) */ 117 if (!timer_pending(&dev->raw->edge_handle) || 118 time_after(dev->raw->edge_handle.expires, 119 jiffies + msecs_to_jiffies(15))) { 120 mod_timer(&dev->raw->edge_handle, 121 jiffies + msecs_to_jiffies(15)); 122 } 123 124 return rc; 125 } 126 EXPORT_SYMBOL_GPL(ir_raw_event_store_edge); 127 128 /** 129 * ir_raw_event_store_with_filter() - pass next pulse/space to decoders with some processing 130 * @dev: the struct rc_dev device descriptor 131 * @type: the type of the event that has occurred 132 * 133 * This routine (which may be called from an interrupt context) works 134 * in similar manner to ir_raw_event_store_edge. 135 * This routine is intended for devices with limited internal buffer 136 * It automerges samples of same type, and handles timeouts. Returns non-zero 137 * if the event was added, and zero if the event was ignored due to idle 138 * processing. 139 */ 140 int ir_raw_event_store_with_filter(struct rc_dev *dev, struct ir_raw_event *ev) 141 { 142 if (!dev->raw) 143 return -EINVAL; 144 145 /* Ignore spaces in idle mode */ 146 if (dev->idle && !ev->pulse) 147 return 0; 148 else if (dev->idle) 149 ir_raw_event_set_idle(dev, false); 150 151 if (!dev->raw->this_ev.duration) 152 dev->raw->this_ev = *ev; 153 else if (ev->pulse == dev->raw->this_ev.pulse) 154 dev->raw->this_ev.duration += ev->duration; 155 else { 156 ir_raw_event_store(dev, &dev->raw->this_ev); 157 dev->raw->this_ev = *ev; 158 } 159 160 /* Enter idle mode if nessesary */ 161 if (!ev->pulse && dev->timeout && 162 dev->raw->this_ev.duration >= dev->timeout) 163 ir_raw_event_set_idle(dev, true); 164 165 return 1; 166 } 167 EXPORT_SYMBOL_GPL(ir_raw_event_store_with_filter); 168 169 /** 170 * ir_raw_event_set_idle() - provide hint to rc-core when the device is idle or not 171 * @dev: the struct rc_dev device descriptor 172 * @idle: whether the device is idle or not 173 */ 174 void ir_raw_event_set_idle(struct rc_dev *dev, bool idle) 175 { 176 if (!dev->raw) 177 return; 178 179 IR_dprintk(2, "%s idle mode\n", idle ? "enter" : "leave"); 180 181 if (idle) { 182 dev->raw->this_ev.timeout = true; 183 ir_raw_event_store(dev, &dev->raw->this_ev); 184 init_ir_raw_event(&dev->raw->this_ev); 185 } 186 187 if (dev->s_idle) 188 dev->s_idle(dev, idle); 189 190 dev->idle = idle; 191 } 192 EXPORT_SYMBOL_GPL(ir_raw_event_set_idle); 193 194 /** 195 * ir_raw_event_handle() - schedules the decoding of stored ir data 196 * @dev: the struct rc_dev device descriptor 197 * 198 * This routine will tell rc-core to start decoding stored ir data. 199 */ 200 void ir_raw_event_handle(struct rc_dev *dev) 201 { 202 if (!dev->raw || !dev->raw->thread) 203 return; 204 205 wake_up_process(dev->raw->thread); 206 } 207 EXPORT_SYMBOL_GPL(ir_raw_event_handle); 208 209 /* used internally by the sysfs interface */ 210 u64 211 ir_raw_get_allowed_protocols(void) 212 { 213 return atomic64_read(&available_protocols); 214 } 215 216 static int change_protocol(struct rc_dev *dev, u64 *rc_proto) 217 { 218 /* the caller will update dev->enabled_protocols */ 219 return 0; 220 } 221 222 static void ir_raw_disable_protocols(struct rc_dev *dev, u64 protocols) 223 { 224 mutex_lock(&dev->lock); 225 dev->enabled_protocols &= ~protocols; 226 mutex_unlock(&dev->lock); 227 } 228 229 /** 230 * ir_raw_gen_manchester() - Encode data with Manchester (bi-phase) modulation. 231 * @ev: Pointer to pointer to next free event. *@ev is incremented for 232 * each raw event filled. 233 * @max: Maximum number of raw events to fill. 234 * @timings: Manchester modulation timings. 235 * @n: Number of bits of data. 236 * @data: Data bits to encode. 237 * 238 * Encodes the @n least significant bits of @data using Manchester (bi-phase) 239 * modulation with the timing characteristics described by @timings, writing up 240 * to @max raw IR events using the *@ev pointer. 241 * 242 * Returns: 0 on success. 243 * -ENOBUFS if there isn't enough space in the array to fit the 244 * full encoded data. In this case all @max events will have been 245 * written. 246 */ 247 int ir_raw_gen_manchester(struct ir_raw_event **ev, unsigned int max, 248 const struct ir_raw_timings_manchester *timings, 249 unsigned int n, u64 data) 250 { 251 bool need_pulse; 252 u64 i; 253 int ret = -ENOBUFS; 254 255 i = BIT_ULL(n - 1); 256 257 if (timings->leader) { 258 if (!max--) 259 return ret; 260 if (timings->pulse_space_start) { 261 init_ir_raw_event_duration((*ev)++, 1, timings->leader); 262 263 if (!max--) 264 return ret; 265 init_ir_raw_event_duration((*ev), 0, timings->leader); 266 } else { 267 init_ir_raw_event_duration((*ev), 1, timings->leader); 268 } 269 i >>= 1; 270 } else { 271 /* continue existing signal */ 272 --(*ev); 273 } 274 /* from here on *ev will point to the last event rather than the next */ 275 276 while (n && i > 0) { 277 need_pulse = !(data & i); 278 if (timings->invert) 279 need_pulse = !need_pulse; 280 if (need_pulse == !!(*ev)->pulse) { 281 (*ev)->duration += timings->clock; 282 } else { 283 if (!max--) 284 goto nobufs; 285 init_ir_raw_event_duration(++(*ev), need_pulse, 286 timings->clock); 287 } 288 289 if (!max--) 290 goto nobufs; 291 init_ir_raw_event_duration(++(*ev), !need_pulse, 292 timings->clock); 293 i >>= 1; 294 } 295 296 if (timings->trailer_space) { 297 if (!(*ev)->pulse) 298 (*ev)->duration += timings->trailer_space; 299 else if (!max--) 300 goto nobufs; 301 else 302 init_ir_raw_event_duration(++(*ev), 0, 303 timings->trailer_space); 304 } 305 306 ret = 0; 307 nobufs: 308 /* point to the next event rather than last event before returning */ 309 ++(*ev); 310 return ret; 311 } 312 EXPORT_SYMBOL(ir_raw_gen_manchester); 313 314 /** 315 * ir_raw_gen_pd() - Encode data to raw events with pulse-distance modulation. 316 * @ev: Pointer to pointer to next free event. *@ev is incremented for 317 * each raw event filled. 318 * @max: Maximum number of raw events to fill. 319 * @timings: Pulse distance modulation timings. 320 * @n: Number of bits of data. 321 * @data: Data bits to encode. 322 * 323 * Encodes the @n least significant bits of @data using pulse-distance 324 * modulation with the timing characteristics described by @timings, writing up 325 * to @max raw IR events using the *@ev pointer. 326 * 327 * Returns: 0 on success. 328 * -ENOBUFS if there isn't enough space in the array to fit the 329 * full encoded data. In this case all @max events will have been 330 * written. 331 */ 332 int ir_raw_gen_pd(struct ir_raw_event **ev, unsigned int max, 333 const struct ir_raw_timings_pd *timings, 334 unsigned int n, u64 data) 335 { 336 int i; 337 int ret; 338 unsigned int space; 339 340 if (timings->header_pulse) { 341 ret = ir_raw_gen_pulse_space(ev, &max, timings->header_pulse, 342 timings->header_space); 343 if (ret) 344 return ret; 345 } 346 347 if (timings->msb_first) { 348 for (i = n - 1; i >= 0; --i) { 349 space = timings->bit_space[(data >> i) & 1]; 350 ret = ir_raw_gen_pulse_space(ev, &max, 351 timings->bit_pulse, 352 space); 353 if (ret) 354 return ret; 355 } 356 } else { 357 for (i = 0; i < n; ++i, data >>= 1) { 358 space = timings->bit_space[data & 1]; 359 ret = ir_raw_gen_pulse_space(ev, &max, 360 timings->bit_pulse, 361 space); 362 if (ret) 363 return ret; 364 } 365 } 366 367 ret = ir_raw_gen_pulse_space(ev, &max, timings->trailer_pulse, 368 timings->trailer_space); 369 return ret; 370 } 371 EXPORT_SYMBOL(ir_raw_gen_pd); 372 373 /** 374 * ir_raw_gen_pl() - Encode data to raw events with pulse-length modulation. 375 * @ev: Pointer to pointer to next free event. *@ev is incremented for 376 * each raw event filled. 377 * @max: Maximum number of raw events to fill. 378 * @timings: Pulse distance modulation timings. 379 * @n: Number of bits of data. 380 * @data: Data bits to encode. 381 * 382 * Encodes the @n least significant bits of @data using space-distance 383 * modulation with the timing characteristics described by @timings, writing up 384 * to @max raw IR events using the *@ev pointer. 385 * 386 * Returns: 0 on success. 387 * -ENOBUFS if there isn't enough space in the array to fit the 388 * full encoded data. In this case all @max events will have been 389 * written. 390 */ 391 int ir_raw_gen_pl(struct ir_raw_event **ev, unsigned int max, 392 const struct ir_raw_timings_pl *timings, 393 unsigned int n, u64 data) 394 { 395 int i; 396 int ret = -ENOBUFS; 397 unsigned int pulse; 398 399 if (!max--) 400 return ret; 401 402 init_ir_raw_event_duration((*ev)++, 1, timings->header_pulse); 403 404 if (timings->msb_first) { 405 for (i = n - 1; i >= 0; --i) { 406 if (!max--) 407 return ret; 408 init_ir_raw_event_duration((*ev)++, 0, 409 timings->bit_space); 410 if (!max--) 411 return ret; 412 pulse = timings->bit_pulse[(data >> i) & 1]; 413 init_ir_raw_event_duration((*ev)++, 1, pulse); 414 } 415 } else { 416 for (i = 0; i < n; ++i, data >>= 1) { 417 if (!max--) 418 return ret; 419 init_ir_raw_event_duration((*ev)++, 0, 420 timings->bit_space); 421 if (!max--) 422 return ret; 423 pulse = timings->bit_pulse[data & 1]; 424 init_ir_raw_event_duration((*ev)++, 1, pulse); 425 } 426 } 427 428 if (!max--) 429 return ret; 430 431 init_ir_raw_event_duration((*ev)++, 0, timings->trailer_space); 432 433 return 0; 434 } 435 EXPORT_SYMBOL(ir_raw_gen_pl); 436 437 /** 438 * ir_raw_encode_scancode() - Encode a scancode as raw events 439 * 440 * @protocol: protocol 441 * @scancode: scancode filter describing a single scancode 442 * @events: array of raw events to write into 443 * @max: max number of raw events 444 * 445 * Attempts to encode the scancode as raw events. 446 * 447 * Returns: The number of events written. 448 * -ENOBUFS if there isn't enough space in the array to fit the 449 * encoding. In this case all @max events will have been written. 450 * -EINVAL if the scancode is ambiguous or invalid, or if no 451 * compatible encoder was found. 452 */ 453 int ir_raw_encode_scancode(enum rc_proto protocol, u32 scancode, 454 struct ir_raw_event *events, unsigned int max) 455 { 456 struct ir_raw_handler *handler; 457 int ret = -EINVAL; 458 u64 mask = 1ULL << protocol; 459 460 mutex_lock(&ir_raw_handler_lock); 461 list_for_each_entry(handler, &ir_raw_handler_list, list) { 462 if (handler->protocols & mask && handler->encode) { 463 ret = handler->encode(protocol, scancode, events, max); 464 if (ret >= 0 || ret == -ENOBUFS) 465 break; 466 } 467 } 468 mutex_unlock(&ir_raw_handler_lock); 469 470 return ret; 471 } 472 EXPORT_SYMBOL(ir_raw_encode_scancode); 473 474 static void edge_handle(unsigned long arg) 475 { 476 struct rc_dev *dev = (struct rc_dev *)arg; 477 ktime_t interval = ktime_sub(ktime_get(), dev->raw->last_event); 478 479 if (ktime_to_ns(interval) >= dev->timeout) { 480 DEFINE_IR_RAW_EVENT(ev); 481 482 ev.timeout = true; 483 ev.duration = ktime_to_ns(interval); 484 485 ir_raw_event_store(dev, &ev); 486 } else { 487 mod_timer(&dev->raw->edge_handle, 488 jiffies + nsecs_to_jiffies(dev->timeout - 489 ktime_to_ns(interval))); 490 } 491 492 ir_raw_event_handle(dev); 493 } 494 495 /* 496 * Used to (un)register raw event clients 497 */ 498 int ir_raw_event_prepare(struct rc_dev *dev) 499 { 500 static bool raw_init; /* 'false' default value, raw decoders loaded? */ 501 502 if (!dev) 503 return -EINVAL; 504 505 if (!raw_init) { 506 request_module("ir-lirc-codec"); 507 raw_init = true; 508 } 509 510 dev->raw = kzalloc(sizeof(*dev->raw), GFP_KERNEL); 511 if (!dev->raw) 512 return -ENOMEM; 513 514 dev->raw->dev = dev; 515 dev->change_protocol = change_protocol; 516 setup_timer(&dev->raw->edge_handle, edge_handle, 517 (unsigned long)dev); 518 INIT_KFIFO(dev->raw->kfifo); 519 520 return 0; 521 } 522 523 int ir_raw_event_register(struct rc_dev *dev) 524 { 525 struct ir_raw_handler *handler; 526 struct task_struct *thread; 527 528 /* 529 * raw transmitters do not need any event registration 530 * because the event is coming from userspace 531 */ 532 if (dev->driver_type != RC_DRIVER_IR_RAW_TX) { 533 thread = kthread_run(ir_raw_event_thread, dev->raw, "rc%u", 534 dev->minor); 535 536 if (IS_ERR(thread)) 537 return PTR_ERR(thread); 538 539 dev->raw->thread = thread; 540 } 541 542 mutex_lock(&ir_raw_handler_lock); 543 list_add_tail(&dev->raw->list, &ir_raw_client_list); 544 list_for_each_entry(handler, &ir_raw_handler_list, list) 545 if (handler->raw_register) 546 handler->raw_register(dev); 547 mutex_unlock(&ir_raw_handler_lock); 548 549 return 0; 550 } 551 552 void ir_raw_event_free(struct rc_dev *dev) 553 { 554 if (!dev) 555 return; 556 557 kfree(dev->raw); 558 dev->raw = NULL; 559 } 560 561 void ir_raw_event_unregister(struct rc_dev *dev) 562 { 563 struct ir_raw_handler *handler; 564 565 if (!dev || !dev->raw) 566 return; 567 568 kthread_stop(dev->raw->thread); 569 del_timer_sync(&dev->raw->edge_handle); 570 571 mutex_lock(&ir_raw_handler_lock); 572 list_del(&dev->raw->list); 573 list_for_each_entry(handler, &ir_raw_handler_list, list) 574 if (handler->raw_unregister) 575 handler->raw_unregister(dev); 576 mutex_unlock(&ir_raw_handler_lock); 577 578 ir_raw_event_free(dev); 579 } 580 581 /* 582 * Extension interface - used to register the IR decoders 583 */ 584 585 int ir_raw_handler_register(struct ir_raw_handler *ir_raw_handler) 586 { 587 struct ir_raw_event_ctrl *raw; 588 589 mutex_lock(&ir_raw_handler_lock); 590 list_add_tail(&ir_raw_handler->list, &ir_raw_handler_list); 591 if (ir_raw_handler->raw_register) 592 list_for_each_entry(raw, &ir_raw_client_list, list) 593 ir_raw_handler->raw_register(raw->dev); 594 atomic64_or(ir_raw_handler->protocols, &available_protocols); 595 mutex_unlock(&ir_raw_handler_lock); 596 597 return 0; 598 } 599 EXPORT_SYMBOL(ir_raw_handler_register); 600 601 void ir_raw_handler_unregister(struct ir_raw_handler *ir_raw_handler) 602 { 603 struct ir_raw_event_ctrl *raw; 604 u64 protocols = ir_raw_handler->protocols; 605 606 mutex_lock(&ir_raw_handler_lock); 607 list_del(&ir_raw_handler->list); 608 list_for_each_entry(raw, &ir_raw_client_list, list) { 609 ir_raw_disable_protocols(raw->dev, protocols); 610 if (ir_raw_handler->raw_unregister) 611 ir_raw_handler->raw_unregister(raw->dev); 612 } 613 atomic64_andnot(protocols, &available_protocols); 614 mutex_unlock(&ir_raw_handler_lock); 615 } 616 EXPORT_SYMBOL(ir_raw_handler_unregister); 617