tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 
master
head:   f4788d37bc84e27ac9370be252afb451bf6ef718
commit: 71f49a8bf5c592413edb5c8839ec0e6d754db3e1 [5270/6646] media: ttpci: use 
rc-core for the IR receiver
config: x86_64-randconfig-a0-06161326 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        git checkout 71f49a8bf5c592413edb5c8839ec0e6d754db3e1
        # save the attached .config to linux build tree
        make ARCH=x86_64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <[email protected]>

All errors (new ones prefixed by >>):

   ld: drivers/media/pci/ttpci/av7110_ir.o: in function `av7110_ir_handler':
>> drivers/media/pci/ttpci/av7110_ir.c:69: undefined reference to `rc_keydown'
   ld: drivers/media/pci/ttpci/av7110_ir.o: in function `av7110_ir_init':
>> drivers/media/pci/ttpci/av7110_ir.c:113: undefined reference to 
>> `rc_allocate_device'
>> ld: drivers/media/pci/ttpci/av7110_ir.c:145: undefined reference to 
>> `rc_register_device'
>> ld: drivers/media/pci/ttpci/av7110_ir.c:148: undefined reference to 
>> `rc_free_device'
   ld: drivers/media/pci/ttpci/av7110_ir.o: in function `av7110_ir_exit':
>> drivers/media/pci/ttpci/av7110_ir.c:156: undefined reference to 
>> `rc_unregister_device'

vim +69 drivers/media/pci/ttpci/av7110_ir.c

    19  
    20  /* interrupt handler */
    21  void av7110_ir_handler(struct av7110 *av7110, u32 ircom)
    22  {
    23          struct rc_dev *rcdev = av7110->ir.rcdev;
    24          enum rc_proto proto;
    25          u32 command, addr, scancode;
    26          u32 toggle;
    27  
    28          dprintk(4, "ir command = %08x\n", ircom);
    29  
    30          if (rcdev) {
    31                  switch (av7110->ir.ir_config) {
    32                  case IR_RC5: /* RC5: 5 bits device address, 6 bits 
command */
    33                          command = ircom & 0x3f;
    34                          addr = (ircom >> 6) & 0x1f;
    35                          scancode = RC_SCANCODE_RC5(addr, command);
    36                          toggle = ircom & 0x0800;
    37                          proto = RC_PROTO_RC5;
    38                          break;
    39  
    40                  case IR_RCMM: /* RCMM: ? bits device address, ? bits 
command */
    41                          command = ircom & 0xff;
    42                          addr = (ircom >> 8) & 0x1f;
    43                          scancode = ircom;
    44                          toggle = ircom & 0x8000;
    45                          proto = RC_PROTO_UNKNOWN;
    46                          break;
    47  
    48                  case IR_RC5_EXT:
    49                          /*
    50                           * extended RC5: 5 bits device address, 7 bits 
command
    51                           *
    52                           * Extended RC5 uses only one start bit. The 
second
    53                           * start bit is re-assigned bit 6 of the 
command bit.
    54                           */
    55                          command = ircom & 0x3f;
    56                          addr = (ircom >> 6) & 0x1f;
    57                          if (!(ircom & 0x1000))
    58                                  command |= 0x40;
    59                          scancode = RC_SCANCODE_RC5(addr, command);
    60                          toggle = ircom & 0x0800;
    61                          proto = RC_PROTO_RC5;
    62                          break;
    63                  default:
    64                          dprintk(2, "unknown ir config %d\n",
    65                                  av7110->ir.ir_config);
    66                          return;
    67                  }
    68  
  > 69                  rc_keydown(rcdev, proto, scancode, toggle != 0);
    70          }
    71  }
    72  
    73  int av7110_set_ir_config(struct av7110 *av7110)
    74  {
    75          dprintk(4, "ir config = %08x\n", av7110->ir.ir_config);
    76  
    77          return av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, SetIR, 1,
    78                               av7110->ir.ir_config);
    79  }
    80  
    81  static int change_protocol(struct rc_dev *rcdev, u64 *rc_type)
    82  {
    83          struct av7110 *av7110 = rcdev->priv;
    84          u32 ir_config;
    85  
    86          if (*rc_type & RC_PROTO_BIT_UNKNOWN) {
    87                  ir_config = IR_RCMM;
    88                  *rc_type = RC_PROTO_UNKNOWN;
    89          } else if (*rc_type & RC_PROTO_BIT_RC5) {
    90                  if (FW_VERSION(av7110->arm_app) >= 0x2620)
    91                          ir_config = IR_RC5_EXT;
    92                  else
    93                          ir_config = IR_RC5;
    94                  *rc_type = RC_PROTO_BIT_RC5;
    95          } else {
    96                  return -EINVAL;
    97          }
    98  
    99          if (ir_config == av7110->ir.ir_config)
   100                  return 0;
   101  
   102          av7110->ir.ir_config = ir_config;
   103  
   104          return av7110_set_ir_config(av7110);
   105  }
   106  
   107  int av7110_ir_init(struct av7110 *av7110)
   108  {
   109          struct rc_dev *rcdev;
   110          struct pci_dev *pci;
   111          int ret;
   112  
 > 113          rcdev = rc_allocate_device(RC_DRIVER_SCANCODE);
   114          if (!rcdev)
   115                  return -ENOMEM;
   116  
   117          pci = av7110->dev->pci;
   118  
   119          snprintf(av7110->ir.input_phys, sizeof(av7110->ir.input_phys),
   120                   "pci-%s/ir0", pci_name(pci));
   121  
   122          rcdev->device_name = av7110->card_name;
   123          rcdev->driver_name = KBUILD_MODNAME;
   124          rcdev->input_phys = av7110->ir.input_phys;
   125          rcdev->input_id.bustype = BUS_PCI;
   126          rcdev->input_id.version = 2;
   127          if (pci->subsystem_vendor) {
   128                  rcdev->input_id.vendor  = pci->subsystem_vendor;
   129                  rcdev->input_id.product = pci->subsystem_device;
   130          } else {
   131                  rcdev->input_id.vendor  = pci->vendor;
   132                  rcdev->input_id.product = pci->device;
   133          }
   134  
   135          rcdev->dev.parent = &pci->dev;
   136          rcdev->allowed_protocols = RC_PROTO_BIT_RC5 | 
RC_PROTO_BIT_UNKNOWN;
   137          rcdev->change_protocol = change_protocol;
   138          rcdev->map_name = RC_MAP_HAUPPAUGE;
   139          rcdev->priv = av7110;
   140  
   141          av7110->ir.rcdev = rcdev;
   142          av7110->ir.ir_config = IR_RC5;
   143          av7110_set_ir_config(av7110);
   144  
 > 145          ret = rc_register_device(rcdev);
   146          if (ret) {
   147                  av7110->ir.rcdev = NULL;
 > 148                  rc_free_device(rcdev);
   149          }
   150  
   151          return ret;
   152  }
   153  
   154  void av7110_ir_exit(struct av7110 *av7110)
   155  {
 > 156          rc_unregister_device(av7110->ir.rcdev);
   157  }
   158  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to