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

From: kbuild test robot
Date: Tue May 22 2018 - 09:15:08 EST


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