Re: [PATCH] gpio: mxc: add clock operation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux