Re: [PATCH v2 17/19] [media] lirc: implement reading scancode
On Wed, Feb 22, 2017 at 08:14:50AM +0800, kbuild test robot wrote: > Hi Sean, > > [auto build test ERROR on linuxtv-media/master] > [also build test ERROR on next-20170221] > [cannot apply to v4.10] > [if your patch is applied to the wrong git tree, please drop us a note to > help improve the system] > > url: > https://github.com/0day-ci/linux/commits/Sean-Young/Teach-lirc-how-to-send-and-receive-scancodes/20170222-073718 > base: git://linuxtv.org/media_tree.git master > config: i386-randconfig-x015-201708 (attached as .config) > compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 > reproduce: > # save the attached .config to linux build tree > make ARCH=i386 > > Note: the > linux-review/Sean-Young/Teach-lirc-how-to-send-and-receive-scancodes/20170222-073718 > HEAD 9a4d3444d507190ad7996731c8c7e4ef80979de4 builds fine. > It only hurts bisectibility. > > All error/warnings (new ones prefixed by >>): > >drivers/media/rc/ir-lirc-codec.c: In function 'ir_lirc_poll': > >> drivers/media/rc/ir-lirc-codec.c:393:7: error: 'drv' undeclared (first use > >> in this function) > if (!drv->attached) { Oops, too much rebasing without testing. :( The final commit compiles fine, I'll have to do some better testing of each commit and resend. Sean
Re: [PATCH v2 17/19] [media] lirc: implement reading scancode
Hi Sean, [auto build test WARNING on linuxtv-media/master] [also build test WARNING on next-20170221] [cannot apply to v4.10] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Sean-Young/Teach-lirc-how-to-send-and-receive-scancodes/20170222-073718 base: git://linuxtv.org/media_tree.git master reproduce: make htmldocs All warnings (new ones prefixed by >>): make[3]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule. include/linux/init.h:1: warning: no structured comments found include/linux/kthread.h:26: warning: Excess function parameter '...' description in 'kthread_create' kernel/sys.c:1: warning: no structured comments found drivers/dma-buf/seqno-fence.c:1: warning: no structured comments found include/drm/drm_drv.h:409: warning: No description found for parameter 'load' include/drm/drm_drv.h:409: warning: No description found for parameter 'firstopen' include/drm/drm_drv.h:409: warning: No description found for parameter 'open' include/drm/drm_drv.h:409: warning: No description found for parameter 'preclose' include/drm/drm_drv.h:409: warning: No description found for parameter 'postclose' include/drm/drm_drv.h:409: warning: No description found for parameter 'lastclose' include/drm/drm_drv.h:409: warning: No description found for parameter 'unload' include/drm/drm_drv.h:409: warning: No description found for parameter 'dma_ioctl' include/drm/drm_drv.h:409: warning: No description found for parameter 'dma_quiescent' include/drm/drm_drv.h:409: warning: No description found for parameter 'context_dtor' include/drm/drm_drv.h:409: warning: No description found for parameter 'set_busid' include/drm/drm_drv.h:409: warning: No description found for parameter 'irq_handler' include/drm/drm_drv.h:409: warning: No description found for parameter 'irq_preinstall' include/drm/drm_drv.h:409: warning: No description found for parameter 'irq_postinstall' include/drm/drm_drv.h:409: warning: No description found for parameter 'irq_uninstall' include/drm/drm_drv.h:409: warning: No description found for parameter 'debugfs_init' include/drm/drm_drv.h:409: warning: No description found for parameter 'debugfs_cleanup' include/drm/drm_drv.h:409: warning: No description found for parameter 'gem_open_object' include/drm/drm_drv.h:409: warning: No description found for parameter 'gem_close_object' include/drm/drm_drv.h:409: warning: No description found for parameter 'prime_handle_to_fd' include/drm/drm_drv.h:409: warning: No description found for parameter 'prime_fd_to_handle' include/drm/drm_drv.h:409: warning: No description found for parameter 'gem_prime_export' include/drm/drm_drv.h:409: warning: No description found for parameter 'gem_prime_import' include/drm/drm_drv.h:409: warning: No description found for parameter 'gem_prime_pin' include/drm/drm_drv.h:409: warning: No description found for parameter 'gem_prime_unpin' include/drm/drm_drv.h:409: warning: No description found for parameter 'gem_prime_res_obj' include/drm/drm_drv.h:409: warning: No description found for parameter 'gem_prime_get_sg_table' include/drm/drm_drv.h:409: warning: No description found for parameter 'gem_prime_import_sg_table' include/drm/drm_drv.h:409: warning: No description found for parameter 'gem_prime_vmap' include/drm/drm_drv.h:409: warning: No description found for parameter 'gem_prime_vunmap' include/drm/drm_drv.h:409: warning: No description found for parameter 'gem_prime_mmap' include/drm/drm_drv.h:409: warning: No description found for parameter 'vgaarb_irq' include/drm/drm_drv.h:409: warning: No description found for parameter 'gem_vm_ops' include/drm/drm_drv.h:409: warning: No description found for parameter 'major' include/drm/drm_drv.h:409: warning: No description found for parameter 'minor' include/drm/drm_drv.h:409: warning: No description found for parameter 'patchlevel' include/drm/drm_drv.h:409: warning: No description found for parameter 'name' include/drm/drm_drv.h:409: warning: No description found for parameter 'desc' include/drm/drm_drv.h:409: warning: No description found for parameter 'date' include/drm/drm_drv.h:409: warning: No description found for parameter 'driver_features' include/drm/drm_drv.h:409: warning: No description found for parameter 'dev_priv_size' include/drm/drm_drv.h:409: warning: No description found for parameter 'ioctls' include/drm/drm_drv.h:409: warning: No description found for parameter 'num_ioctls' include/drm/drm_drv.h:409: warning: No description found for parameter 'fops' include/drm/drm_drv.h:409: warning: No description found for parameter 'legacy_dev_list' drivers/media/dvb-core/dvb_frontend.h:677: warning: No description found for parameter 'refcount' >>
Re: [PATCH v2 17/19] [media] lirc: implement reading scancode
Hi Sean, [auto build test ERROR on linuxtv-media/master] [also build test ERROR on next-20170221] [cannot apply to v4.10] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Sean-Young/Teach-lirc-how-to-send-and-receive-scancodes/20170222-073718 base: git://linuxtv.org/media_tree.git master config: i386-randconfig-x015-201708 (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: # save the attached .config to linux build tree make ARCH=i386 Note: the linux-review/Sean-Young/Teach-lirc-how-to-send-and-receive-scancodes/20170222-073718 HEAD 9a4d3444d507190ad7996731c8c7e4ef80979de4 builds fine. It only hurts bisectibility. All error/warnings (new ones prefixed by >>): drivers/media/rc/ir-lirc-codec.c: In function 'ir_lirc_poll': >> drivers/media/rc/ir-lirc-codec.c:393:7: error: 'drv' undeclared (first use >> in this function) if (!drv->attached) { ^~~ drivers/media/rc/ir-lirc-codec.c:393:7: note: each undeclared identifier is reported only once for each function it appears in >> drivers/media/rc/ir-lirc-codec.c:395:13: error: 'dev' undeclared (first use >> in this function) } else if (dev->rec_mode == LIRC_MODE_SCANCODE) { ^~~ In file included from include/media/lirc_dev.h:23:0, from drivers/media/rc/ir-lirc-codec.c:18: >> include/linux/kfifo.h:259:8: error: invalid type argument of '->' (have >> 'int') __tmpq->kfifo.in == __tmpq->kfifo.out; \ ^ >> drivers/media/rc/ir-lirc-codec.c:396:8: note: in expansion of macro >> 'kfifo_is_empty' if (!kfifo_is_empty(>kfifo)) ^~ include/linux/kfifo.h:259:28: error: invalid type argument of '->' (have 'int') __tmpq->kfifo.in == __tmpq->kfifo.out; \ ^ >> drivers/media/rc/ir-lirc-codec.c:396:8: note: in expansion of macro >> 'kfifo_is_empty' if (!kfifo_is_empty(>kfifo)) ^~ >> include/linux/kfifo.h:259:8: error: invalid type argument of '->' (have >> 'int') __tmpq->kfifo.in == __tmpq->kfifo.out; \ ^ drivers/media/rc/ir-lirc-codec.c:399:8: note: in expansion of macro 'kfifo_is_empty' if (!kfifo_is_empty(>raw->lirc.kfifo)) ^~ include/linux/kfifo.h:259:28: error: invalid type argument of '->' (have 'int') __tmpq->kfifo.in == __tmpq->kfifo.out; \ ^ drivers/media/rc/ir-lirc-codec.c:399:8: note: in expansion of macro 'kfifo_is_empty' if (!kfifo_is_empty(>raw->lirc.kfifo)) ^~ vim +/drv +393 drivers/media/rc/ir-lirc-codec.c 387 { 388 struct lirc_codec *lirc = lirc_get_pdata(filep); 389 unsigned int events = 0; 390 391 poll_wait(filep, >wait_poll, wait); 392 > 393 if (!drv->attached) { 394 events = POLLERR; > 395 } else if (dev->rec_mode == LIRC_MODE_SCANCODE) { > 396 if (!kfifo_is_empty(>kfifo)) 397 events = POLLIN | POLLRDNORM; 398 } else if (dev->rec_mode == LIRC_MODE_MODE2) { 399 if (!kfifo_is_empty(>raw->lirc.kfifo)) --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: application/gzip
[PATCH v2 17/19] [media] lirc: implement reading scancode
This implements LIRC_MODE_SCANCODE reading from the lirc device. The scancode can be read from the input device too, but with this interface you get the rc protocol, toggle and repeat status in addition too just the scancode. int main() { int fd, mode, rc; fd = open("/dev/lirc0", O_RDWR); mode = LIRC_MODE_SCANCODE; if (ioctl(fd, LIRC_SET_REC_MODE, )) { // kernel too old or lirc does not support transmit } struct lirc_scancode scancode; while (read(fd, , sizeof(scancode)) == sizeof(scancode)) { printf("protocol:%d scancode:0x%x toggle:%d repeat:%d\n", scancode.rc_type, scancode.scancode, !!(scancode.flags & LIRC_SCANCODE_FLAG_TOGGLE), !!(scancode.flags & LIRC_SCANCODE_FLAG_REPEAT)); } close(fd); } Note that the translated KEY_* is not included, that information is published to the input device. Signed-off-by: Sean Young--- drivers/media/rc/ir-lirc-codec.c | 107 +++--- drivers/media/rc/ir-mce_kbd-decoder.c | 7 +++ drivers/media/rc/rc-core-priv.h | 11 drivers/media/rc/rc-main.c| 17 ++ include/media/rc-core.h | 4 +- 5 files changed, 123 insertions(+), 23 deletions(-) diff --git a/drivers/media/rc/ir-lirc-codec.c b/drivers/media/rc/ir-lirc-codec.c index 2189321..1847f5f 100644 --- a/drivers/media/rc/ir-lirc-codec.c +++ b/drivers/media/rc/ir-lirc-codec.c @@ -231,8 +231,31 @@ static long ir_lirc_ioctl(struct file *filep, unsigned int cmd, } switch (cmd) { + case LIRC_GET_REC_MODE: + if (dev->driver_type == RC_DRIVER_IR_RAW_TX) + return -ENOTTY; + + val = lirc->rec_mode; + break; + + case LIRC_SET_REC_MODE: + switch (dev->driver_type) { + case RC_DRIVER_SCANCODE: + if (val != LIRC_MODE_SCANCODE) + return -EINVAL; + break; + case RC_DRIVER_IR_RAW: + if (!(val == LIRC_MODE_SCANCODE || + val == LIRC_MODE_MODE2)) + return -EINVAL; + break; + default: + return -ENOTTY; + } + + lirc->rec_mode = val; + return 0; - /* legacy support */ case LIRC_GET_SEND_MODE: if (!dev->tx_ir) return -ENOTTY; @@ -367,10 +390,15 @@ static unsigned int ir_lirc_poll(struct file *filep, poll_wait(filep, >wait_poll, wait); - if (!lirc->drv->attached) + if (!drv->attached) { events = POLLERR; - else if (!kfifo_is_empty(>kfifo)) - events = POLLIN | POLLRDNORM; + } else if (dev->rec_mode == LIRC_MODE_SCANCODE) { + if (!kfifo_is_empty(>kfifo)) + events = POLLIN | POLLRDNORM; + } else if (dev->rec_mode == LIRC_MODE_MODE2) { + if (!kfifo_is_empty(>raw->lirc.kfifo)) + events = POLLIN | POLLRDNORM; + } return events; } @@ -382,31 +410,60 @@ static ssize_t ir_lirc_read(struct file *filep, char __user *buffer, unsigned int copied; int ret; - if (length % sizeof(unsigned int)) - return -EINVAL; - if (!lirc->drv->attached) return -ENODEV; - do { - if (kfifo_is_empty(>kfifo)) { - if (filep->f_flags & O_NONBLOCK) - return -EAGAIN; + if (lirc->rec_mode == LIRC_MODE_SCANCODE) { + struct rc_dev *rcdev = lirc->dev; - ret = wait_event_interruptible(lirc->wait_poll, - !kfifo_is_empty(>kfifo) || + if (length % sizeof(struct lirc_scancode)) + return -EINVAL; + + do { + if (kfifo_is_empty(>kfifo)) { + if (filep->f_flags & O_NONBLOCK) + return -EAGAIN; + + ret = wait_event_interruptible(lirc->wait_poll, + !kfifo_is_empty(>kfifo) || !lirc->drv->attached); + if (ret) + return ret; + } + + if (!lirc->drv->attached) + return -ENODEV; + + ret = kfifo_to_user(>kfifo, buffer, length, + ); if (ret) return ret; - } + } while (copied == 0); + } else { +