Hi Anson,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on gpio/for-next]
[also build test ERROR on v4.17-rc6 next-20180517]
[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/Anson-Huang/gpio-mxc-add-clock-operation/20180522-165520
base:   https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git 
for-next
config: arm-multi_v5_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/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=arm 

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

   drivers/gpio/gpio-mxc.c: In function 'mxc_gpio_probe':
>> drivers/gpio/gpio-mxc.c:439:14: error: implicit declaration of function 
>> 'devm_clk_get'; did you mean 'devm_kfree'? 
>> [-Werror=implicit-function-declaration]
     port->clk = devm_clk_get(&pdev->dev, NULL);
                 ^~~~~~~~~~~~
                 devm_kfree
>> drivers/gpio/gpio-mxc.c:439:12: warning: assignment makes pointer from 
>> integer without a cast [-Wint-conversion]
     port->clk = devm_clk_get(&pdev->dev, NULL);
               ^
>> drivers/gpio/gpio-mxc.c:443:8: error: implicit declaration of function 
>> 'clk_prepare_enable'; did you mean 'cpu_hotplug_enable'? 
>> [-Werror=implicit-function-declaration]
     err = clk_prepare_enable(port->clk);
           ^~~~~~~~~~~~~~~~~~
           cpu_hotplug_enable
>> drivers/gpio/gpio-mxc.c:517:2: error: implicit declaration of function 
>> 'clk_disable_unprepare' [-Werror=implicit-function-declaration]
     clk_disable_unprepare(port->clk);
     ^~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +439 drivers/gpio/gpio-mxc.c

   408  
   409  static int mxc_gpio_probe(struct platform_device *pdev)
   410  {
   411          struct device_node *np = pdev->dev.of_node;
   412          struct mxc_gpio_port *port;
   413          struct resource *iores;
   414          int irq_base;
   415          int err;
   416  
   417          mxc_gpio_get_hw(pdev);
   418  
   419          port = devm_kzalloc(&pdev->dev, sizeof(*port), GFP_KERNEL);
   420          if (!port)
   421                  return -ENOMEM;
   422  
   423          port->dev = &pdev->dev;
   424  
   425          iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
   426          port->base = devm_ioremap_resource(&pdev->dev, iores);
   427          if (IS_ERR(port->base))
   428                  return PTR_ERR(port->base);
   429  
   430          port->irq_high = platform_get_irq(pdev, 1);
   431          if (port->irq_high < 0)
   432                  port->irq_high = 0;
   433  
   434          port->irq = platform_get_irq(pdev, 0);
   435          if (port->irq < 0)
   436                  return port->irq;
   437  
   438          /* the controller clock is optional */
 > 439          port->clk = devm_clk_get(&pdev->dev, NULL);
   440          if (IS_ERR(port->clk))
   441                  port->clk = NULL;
   442  
 > 443          err = clk_prepare_enable(port->clk);
   444          if (err) {
   445                  dev_err(&pdev->dev, "Unable to enable clock.\n");
   446                  return err;
   447          }
   448  
   449          /* disable the interrupt and clear the status */
   450          writel(0, port->base + GPIO_IMR);
   451          writel(~0, port->base + GPIO_ISR);
   452  
   453          if (mxc_gpio_hwtype == IMX21_GPIO) {
   454                  /*
   455                   * Setup one handler for all GPIO interrupts. Actually 
setting
   456                   * the handler is needed only once, but doing it for 
every port
   457                   * is more robust and easier.
   458                   */
   459                  irq_set_chained_handler(port->irq, 
mx2_gpio_irq_handler);
   460          } else {
   461                  /* setup one handler for each entry */
   462                  irq_set_chained_handler_and_data(port->irq,
   463                                                   mx3_gpio_irq_handler, 
port);
   464                  if (port->irq_high > 0)
   465                          /* setup handler for GPIO 16 to 31 */
   466                          irq_set_chained_handler_and_data(port->irq_high,
   467                                                           
mx3_gpio_irq_handler,
   468                                                           port);
   469          }
   470  
   471          err = bgpio_init(&port->gc, &pdev->dev, 4,
   472                           port->base + GPIO_PSR,
   473                           port->base + GPIO_DR, NULL,
   474                           port->base + GPIO_GDIR, NULL,
   475                           BGPIOF_READ_OUTPUT_REG_SET);
   476          if (err)
   477                  goto out_bgio;
   478  
   479          if (of_property_read_bool(np, "gpio-ranges")) {
   480                  port->gc.request = gpiochip_generic_request;
   481                  port->gc.free = gpiochip_generic_free;
   482          }
   483  
   484          port->gc.to_irq = mxc_gpio_to_irq;
   485          port->gc.base = (pdev->id < 0) ? of_alias_get_id(np, "gpio") * 
32 :
   486                                               pdev->id * 32;
   487  
   488          err = devm_gpiochip_add_data(&pdev->dev, &port->gc, port);
   489          if (err)
   490                  goto out_bgio;
   491  
   492          irq_base = devm_irq_alloc_descs(&pdev->dev, -1, 0, 32, 
numa_node_id());
   493          if (irq_base < 0) {
   494                  err = irq_base;
   495                  goto out_bgio;
   496          }
   497  
   498          port->domain = irq_domain_add_legacy(np, 32, irq_base, 0,
   499                                               &irq_domain_simple_ops, 
NULL);
   500          if (!port->domain) {
   501                  err = -ENODEV;
   502                  goto out_bgio;
   503          }
   504  
   505          /* gpio-mxc can be a generic irq chip */
   506          err = mxc_gpio_init_gc(port, irq_base);
   507          if (err < 0)
   508                  goto out_irqdomain_remove;
   509  
   510          list_add_tail(&port->node, &mxc_gpio_ports);
   511  
   512          return 0;
   513  
   514  out_irqdomain_remove:
   515          irq_domain_remove(port->domain);
   516  out_bgio:
 > 517          clk_disable_unprepare(port->clk);
   518          dev_info(&pdev->dev, "%s failed with errno %d\n", __func__, 
err);
   519          return err;
   520  }
   521  

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