Re: [PATCH v2 10/11] [media] marvell-ccic: use async notifier to get the sensor

From: kbuild test robot
Date: Mon Nov 12 2018 - 22:09:19 EST


Hi Lubomir,

I love your patch! Yet something to improve:

[auto build test ERROR on linuxtv-media/master]
[also build test ERROR on v4.20-rc1 next-20181112]
[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/Lubomir-Rintel/media-make-Marvell-camera-work-on-DT-based-OLPC-XO-1-75/20181112-163212
base: git://linuxtv.org/media_tree.git master
config: x86_64-randconfig-x003-11121005 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64

Note: the linux-review/Lubomir-Rintel/media-make-Marvell-camera-work-on-DT-based-OLPC-XO-1-75/20181112-163212 HEAD e78fa6428e22bbc61543f031695ad6f204f32344 builds fine.
It only hurts bisectibility.

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

drivers/media/platform/marvell-ccic/cafe-driver.c: In function 'cafe_pci_probe':
>> drivers/media/platform/marvell-ccic/cafe-driver.c:563:2: error: implicit declaration of function 'cafe_shutdown'; did you mean 'mccic_shutdown'? [-Werror=implicit-function-declaration]
cafe_shutdown(cam);
^~~~~~~~~~~~~
mccic_shutdown
drivers/media/platform/marvell-ccic/cafe-driver.c: At top level:
>> drivers/media/platform/marvell-ccic/cafe-driver.c:583:13: warning: conflicting types for 'cafe_shutdown'
static void cafe_shutdown(struct cafe_camera *cam)
^~~~~~~~~~~~~
>> drivers/media/platform/marvell-ccic/cafe-driver.c:583:13: error: static declaration of 'cafe_shutdown' follows non-static declaration
drivers/media/platform/marvell-ccic/cafe-driver.c:563:2: note: previous implicit declaration of 'cafe_shutdown' was here
cafe_shutdown(cam);
^~~~~~~~~~~~~
cc1: some warnings being treated as errors

vim +563 drivers/media/platform/marvell-ccic/cafe-driver.c

481
482 /* -------------------------------------------------------------------------- */
483 /*
484 * PCI interface stuff.
485 */
486
487 static int cafe_pci_probe(struct pci_dev *pdev,
488 const struct pci_device_id *id)
489 {
490 int ret;
491 struct cafe_camera *cam;
492 struct mcam_camera *mcam;
493
494 /*
495 * Start putting together one of our big camera structures.
496 */
497 ret = -ENOMEM;
498 cam = kzalloc(sizeof(struct cafe_camera), GFP_KERNEL);
499 if (cam == NULL)
500 goto out;
501 cam->pdev = pdev;
502 mcam = &cam->mcam;
503 mcam->chip_id = MCAM_CAFE;
504 spin_lock_init(&mcam->dev_lock);
505 init_waitqueue_head(&cam->smbus_wait);
506 mcam->plat_power_up = cafe_ctlr_power_up;
507 mcam->plat_power_down = cafe_ctlr_power_down;
508 mcam->dev = &pdev->dev;
509 snprintf(mcam->bus_info, sizeof(mcam->bus_info), "PCI:%s", pci_name(pdev));
510 /*
511 * Vmalloc mode for buffers is traditional with this driver.
512 * We *might* be able to run DMA_contig, especially on a system
513 * with CMA in it.
514 */
515 mcam->buffer_mode = B_vmalloc;
516 /*
517 * Get set up on the PCI bus.
518 */
519 ret = pci_enable_device(pdev);
520 if (ret)
521 goto out_free;
522 pci_set_master(pdev);
523
524 ret = -EIO;
525 mcam->regs = pci_iomap(pdev, 0, 0);
526 if (!mcam->regs) {
527 printk(KERN_ERR "Unable to ioremap cafe-ccic regs\n");
528 goto out_disable;
529 }
530 mcam->regs_size = pci_resource_len(pdev, 0);
531 ret = request_irq(pdev->irq, cafe_irq, IRQF_SHARED, "cafe-ccic", cam);
532 if (ret)
533 goto out_iounmap;
534
535 /*
536 * Initialize the controller and leave it powered up. It will
537 * stay that way until the sensor driver shows up.
538 */
539 cafe_ctlr_init(mcam);
540 cafe_ctlr_power_up(mcam);
541 /*
542 * Set up I2C/SMBUS communications. We have to drop the mutex here
543 * because the sensor could attach in this call chain, leading to
544 * unsightly deadlocks.
545 */
546 ret = cafe_smbus_setup(cam);
547 if (ret)
548 goto out_pdown;
549
550 mcam->asd.match_type = V4L2_ASYNC_MATCH_I2C;
551 mcam->asd.match.i2c.adapter_id = i2c_adapter_id(cam->i2c_adapter);
552 mcam->asd.match.i2c.address = ov7670_info.addr;
553
554 ret = mccic_register(mcam);
555 if (ret)
556 goto out_smbus_shutdown;
557
558 if (i2c_new_device(cam->i2c_adapter, &ov7670_info)) {
559 cam->registered = 1;
560 return 0;
561 }
562
> 563 cafe_shutdown(cam);
564 out_smbus_shutdown:
565 cafe_smbus_shutdown(cam);
566 out_pdown:
567 cafe_ctlr_power_down(mcam);
568 free_irq(pdev->irq, cam);
569 out_iounmap:
570 pci_iounmap(pdev, mcam->regs);
571 out_disable:
572 pci_disable_device(pdev);
573 out_free:
574 kfree(cam);
575 out:
576 return ret;
577 }
578
579
580 /*
581 * Shut down an initialized device
582 */
> 583 static void cafe_shutdown(struct cafe_camera *cam)
584 {
585 mccic_shutdown(&cam->mcam);
586 cafe_smbus_shutdown(cam);
587 free_irq(cam->pdev->irq, cam);
588 pci_iounmap(cam->pdev, cam->mcam.regs);
589 }
590

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

Attachment: .config.gz
Description: application/gzip