Hi Maxime,

[auto build test ERROR on linuxtv-media/master]
[also build test ERROR on v4.13-rc1 next-20170721]
[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/Maxime-Ripard/media-v4l-Add-support-for-the-Cadence-MIPI-CSI2-RX/20170723-083419
base:   git://linuxtv.org/media_tree.git master
config: ia64-allmodconfig (attached as .config)
compiler: ia64-linux-gcc (GCC) 6.2.0
reproduce:
        wget 
https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=ia64 

All error/warnings (new ones prefixed by >>):

   drivers/media/platform/cadence/cdns-csi2rx.c: In function 
'csi2rx_async_bound':
>> drivers/media/platform/cadence/cdns-csi2rx.c:169:31: error: implicit 
>> declaration of function 'subnotifier_to_v4l2_subdev' 
>> [-Werror=implicit-function-declaration]
     struct v4l2_subdev *subdev = subnotifier_to_v4l2_subdev(notifier);
                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/media/platform/cadence/cdns-csi2rx.c:169:31: warning: initialization 
>> makes pointer from integer without a cast [-Wint-conversion]
   drivers/media/platform/cadence/cdns-csi2rx.c: In function 
'csi2rx_async_complete':
   drivers/media/platform/cadence/cdns-csi2rx.c:191:31: warning: initialization 
makes pointer from integer without a cast [-Wint-conversion]
     struct v4l2_subdev *subdev = subnotifier_to_v4l2_subdev(notifier);
                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/cadence/cdns-csi2rx.c: In function 
'csi2rx_async_unbind':
   drivers/media/platform/cadence/cdns-csi2rx.c:205:31: warning: initialization 
makes pointer from integer without a cast [-Wint-conversion]
     struct v4l2_subdev *subdev = subnotifier_to_v4l2_subdev(notifier);
                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/cadence/cdns-csi2rx.c: In function 'csi2rx_parse_dt':
>> drivers/media/platform/cadence/cdns-csi2rx.c:324:8: error: implicit 
>> declaration of function 'v4l2_async_subdev_notifier_register' 
>> [-Werror=implicit-function-declaration]
     ret = v4l2_async_subdev_notifier_register(&csi2rx->subdev, 1, subdevs,
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/subnotifier_to_v4l2_subdev +169 
drivers/media/platform/cadence/cdns-csi2rx.c

   164  
   165  static int csi2rx_async_bound(struct v4l2_async_notifier *notifier,
   166                                struct v4l2_subdev *s_subdev,
   167                                struct v4l2_async_subdev *asd)
   168  {
 > 169          struct v4l2_subdev *subdev = 
 > subnotifier_to_v4l2_subdev(notifier);
   170          struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev);
   171  
   172          csi2rx->sensor_pad = 
media_entity_get_fwnode_pad(&s_subdev->entity,
   173                                                           
&csi2rx->sensor_node->fwnode,
   174                                                           
MEDIA_PAD_FL_SOURCE);
   175          if (csi2rx->sensor_pad < 0) {
   176                  dev_err(csi2rx->dev, "Couldn't find output pad for 
subdev %s\n",
   177                          s_subdev->name);
   178                  return csi2rx->sensor_pad;
   179          }
   180  
   181          csi2rx->sensor_subdev = s_subdev;
   182  
   183          dev_dbg(csi2rx->dev, "Bound %s pad: %d\n", s_subdev->name,
   184                  csi2rx->sensor_pad);
   185  
   186          return 0;
   187  }
   188  
   189  static int csi2rx_async_complete(struct v4l2_async_notifier *notifier)
   190  {
 > 191          struct v4l2_subdev *subdev = 
 > subnotifier_to_v4l2_subdev(notifier);
   192          struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev);
   193  
   194          return media_create_pad_link(&csi2rx->sensor_subdev->entity,
   195                                       csi2rx->sensor_pad,
   196                                       &csi2rx->subdev.entity, 0,
   197                                       MEDIA_LNK_FL_ENABLED |
   198                                       MEDIA_LNK_FL_IMMUTABLE);
   199  }
   200  
   201  static void csi2rx_async_unbind(struct v4l2_async_notifier *notifier,
   202                                  struct v4l2_subdev *s_subdev,
   203                                  struct v4l2_async_subdev *asd)
   204  {
   205          struct v4l2_subdev *subdev = 
subnotifier_to_v4l2_subdev(notifier);
   206          struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev);
   207  
   208          dev_dbg(csi2rx->dev, "Unbound %s pad: %d\n", s_subdev->name,
   209                  csi2rx->sensor_pad);
   210  
   211          csi2rx->sensor_subdev = NULL;
   212          csi2rx->sensor_pad = -EINVAL;
   213  }
   214  
   215  static int csi2rx_get_resources(struct csi2rx_priv *csi2rx,
   216                                  struct platform_device *pdev)
   217  {
   218          struct resource *res;
   219          u32 reg;
   220          int i;
   221  
   222          res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
   223          csi2rx->base = devm_ioremap_resource(&pdev->dev, res);
   224          if (IS_ERR(csi2rx->base)) {
   225                  dev_err(&pdev->dev, "Couldn't map our registers\n");
   226                  return PTR_ERR(csi2rx->base);
   227          }
   228  
   229          reg = readl(csi2rx->base + CSI2RX_DEVICE_CFG_REG);
   230          csi2rx->max_lanes = (reg & 7) + 1;
   231          csi2rx->max_streams = ((reg >> 4) & 7);
   232          csi2rx->cdns_dphy = reg & BIT(3);
   233  
   234          csi2rx->sys_clk = devm_clk_get(&pdev->dev, "sys_clk");
   235          if (IS_ERR(csi2rx->sys_clk)) {
   236                  dev_err(&pdev->dev, "Couldn't get sys clock\n");
   237                  return PTR_ERR(csi2rx->sys_clk);
   238          }
   239  
   240          csi2rx->p_clk = devm_clk_get(&pdev->dev, "p_clk");
   241          if (IS_ERR(csi2rx->p_clk)) {
   242                  dev_err(&pdev->dev, "Couldn't get P clock\n");
   243                  return PTR_ERR(csi2rx->p_clk);
   244          }
   245  
   246          csi2rx->p_free_clk = devm_clk_get(&pdev->dev, "p_free_clk");
   247          if (IS_ERR(csi2rx->p_free_clk)) {
   248                  dev_err(&pdev->dev, "Couldn't get free running P 
clock\n");
   249                  return PTR_ERR(csi2rx->p_free_clk);
   250          }
   251  
   252          for (i = 0; i < csi2rx->max_streams; i++) {
   253                  char clk_name[16];
   254  
   255                  snprintf(clk_name, sizeof(clk_name), "pixel_if%u_clk", 
i);
   256                  csi2rx->pixel_clk[i] = devm_clk_get(&pdev->dev, 
clk_name);
   257                  if (IS_ERR(csi2rx->pixel_clk[i])) {
   258                          dev_err(&pdev->dev, "Couldn't get clock %s\n", 
clk_name);
   259                          return PTR_ERR(csi2rx->pixel_clk[i]);
   260                  }
   261          }
   262  
   263          if (csi2rx->cdns_dphy) {
   264                  csi2rx->dphy_rx_clk = devm_clk_get(&pdev->dev, 
"dphy_rx_clk");
   265                  if (IS_ERR(csi2rx->dphy_rx_clk)) {
   266                          dev_err(&pdev->dev, "Couldn't get D-PHY RX 
clock\n");
   267                          return PTR_ERR(csi2rx->dphy_rx_clk);
   268                  }
   269          }
   270  
   271          return 0;
   272  }
   273  
   274  static int csi2rx_parse_dt(struct csi2rx_priv *csi2rx)
   275  {
   276          struct v4l2_fwnode_endpoint v4l2_ep;
   277          struct v4l2_async_subdev **subdevs;
   278          struct device_node *ep, *remote;
   279          int ret = 0;
   280  
   281          ep = of_graph_get_endpoint_by_regs(csi2rx->dev->of_node, 0, 0);
   282          if (!ep)
   283                  return -EINVAL;
   284  
   285          ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(ep), 
&v4l2_ep);
   286          if (ret) {
   287                  dev_err(csi2rx->dev, "Could not parse v4l2 endpoint\n");
   288                  goto out;
   289          }
   290  
   291          if (v4l2_ep.bus_type != V4L2_MBUS_CSI2) {
   292                  dev_err(csi2rx->dev, "Unsupported media bus type: 
0x%x\n",
   293                          v4l2_ep.bus_type);
   294                  ret = -EINVAL;
   295                  goto out;
   296          }
   297  
   298          csi2rx->lanes = v4l2_ep.bus.mipi_csi2.num_data_lanes;
   299          if (csi2rx->lanes > csi2rx->max_lanes) {
   300                  dev_err(csi2rx->dev, "Unsupported number of data-lanes: 
%d\n",
   301                          csi2rx->lanes);
   302                  ret = -EINVAL;
   303                  goto out;
   304          }
   305  
   306          remote = of_graph_get_remote_port_parent(ep);
   307          if (!remote) {
   308                  dev_err(csi2rx->dev, "No device found for endpoint 
%pOF\n", ep);
   309                  ret = -EINVAL;
   310                  goto out;
   311          }
   312  
   313          dev_dbg(csi2rx->dev, "Found remote device %pOF\n", remote);
   314  
   315          csi2rx->sensor_node = remote;
   316          csi2rx->asd.match.fwnode.fwnode = &remote->fwnode;
   317          csi2rx->asd.match_type = V4L2_ASYNC_MATCH_FWNODE;
   318  
   319          subdevs = devm_kzalloc(csi2rx->dev, sizeof(*subdevs), 
GFP_KERNEL);
   320          if (subdevs == NULL)
   321                  return -ENOMEM;
   322          subdevs[0] = &csi2rx->asd;
   323  
 > 324          ret = v4l2_async_subdev_notifier_register(&csi2rx->subdev, 1, 
 > subdevs,
   325                                                    csi2rx_async_bound,
   326                                                    csi2rx_async_complete,
   327                                                    csi2rx_async_unbind);
   328          if (ret < 0) {
   329                  dev_err(csi2rx->dev, "Failed to register our 
notifier\n");
   330                  return ret;
   331          }
   332  
   333  out:
   334          of_node_put(ep);
   335          return ret;
   336  }
   337  

---
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