Re: [PATCH v2 17/19] [media] lirc: implement reading scancode

2017-02-22 Thread Sean Young
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

2017-02-21 Thread kbuild test robot
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

2017-02-21 Thread kbuild test robot
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

2017-02-21 Thread Sean Young
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 {
+