Message ID | 20231224213629.395741-5-hdegoede@redhat.com |
---|---|
State | Superseded |
Headers | show |
Series | i2c-i801 / dell-smo8800: Move instantiation of lis3lv02d i2c_client from i2c-i801 to dell-smo8800 | expand |
Hi Hans, kernel test robot noticed the following build errors: [auto build test ERROR on linus/master] [also build test ERROR on v6.7] [cannot apply to wsa/i2c/for-next next-20240108] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Hans-de-Goede/platform-x86-dell-smo8800-Only-load-on-Dell-laptops/20231225-152720 base: linus/master patch link: https://lore.kernel.org/r/20231224213629.395741-5-hdegoede%40redhat.com patch subject: [PATCH 4/6] platform/x86: dell-smo8800: Pass the IRQ to the lis3lv02d i2c_client config: i386-randconfig-003-20240106 (https://download.01.org/0day-ci/archive/20240109/202401090124.XEXEJx2K-lkp@intel.com/config) compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240109/202401090124.XEXEJx2K-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202401090124.XEXEJx2K-lkp@intel.com/ All errors (new ones prefixed by >>): ld: drivers/platform/x86/dell/dell-smo8800.o: in function `smo8800_remove': drivers/platform/x86/dell/dell-smo8800.c:284: undefined reference to `i2c_unregister_device' >> ld: drivers/platform/x86/dell/dell-smo8800.c:284: undefined reference to `i2c_unregister_device' ld: drivers/platform/x86/dell/dell-smo8800.o: in function `smo8800_instantiate_i2c_client': drivers/platform/x86/dell/dell-smo8800.c:179: undefined reference to `i2c_bus_type' ld: drivers/platform/x86/dell/dell-smo8800.c:212: undefined reference to `i2c_put_adapter' >> ld: drivers/platform/x86/dell/dell-smo8800.c:202: undefined reference to `i2c_new_client_device' ld: drivers/platform/x86/dell/dell-smo8800.o: in function `smo8800_probe': drivers/platform/x86/dell/dell-smo8800.c:271: undefined reference to `i2c_unregister_device' ld: drivers/platform/x86/dell/dell-smo8800.o: in function `smo8800_find_i801': drivers/platform/x86/dell/dell-smo8800.c:126: undefined reference to `i2c_verify_adapter' ld: drivers/platform/x86/dell/dell-smo8800.c:140: undefined reference to `i2c_get_adapter'
diff --git a/drivers/platform/x86/dell/dell-smo8800.c b/drivers/platform/x86/dell/dell-smo8800.c index 416b399cb9a1..7f7c9452a983 100644 --- a/drivers/platform/x86/dell/dell-smo8800.c +++ b/drivers/platform/x86/dell/dell-smo8800.c @@ -196,6 +196,7 @@ static void smo8800_instantiate_i2c_client(struct smo8800_device *smo8800) } info.addr = addr; + info.irq = smo8800->irq; strscpy(info.type, "lis3lv02d", I2C_NAME_SIZE); smo8800->i2c_dev = i2c_new_client_device(adap, &info); @@ -239,21 +240,24 @@ static int smo8800_probe(struct platform_device *device) smo8800_instantiate_i2c_client(smo8800); - err = misc_register(&smo8800->miscdev); - if (err) { - dev_err(&device->dev, "failed to register misc dev: %d\n", err); - goto error_unregister_i2c_client; - } + /* smo8800->irq is passed to the i2c_client and its driver will take care of this */ + if (!smo8800->i2c_dev) { + err = misc_register(&smo8800->miscdev); + if (err) { + dev_err(&device->dev, "failed to register misc dev: %d\n", err); + goto error_unregister_i2c_client; + } - err = request_threaded_irq(smo8800->irq, smo8800_interrupt_quick, - smo8800_interrupt_thread, - IRQF_TRIGGER_RISING | IRQF_ONESHOT, - DRIVER_NAME, smo8800); - if (err) { - dev_err(&device->dev, - "failed to request thread for IRQ %d: %d\n", - smo8800->irq, err); - goto error; + err = request_threaded_irq(smo8800->irq, smo8800_interrupt_quick, + smo8800_interrupt_thread, + IRQF_TRIGGER_RISING | IRQF_ONESHOT, + DRIVER_NAME, smo8800); + if (err) { + dev_err(&device->dev, + "failed to request thread for IRQ %d: %d\n", + smo8800->irq, err); + goto error; + } } dev_dbg(&device->dev, "device /dev/freefall registered with IRQ %d\n", @@ -272,9 +276,11 @@ static void smo8800_remove(struct platform_device *device) { struct smo8800_device *smo8800 = platform_get_drvdata(device); - free_irq(smo8800->irq, smo8800); - misc_deregister(&smo8800->miscdev); - dev_dbg(&device->dev, "device /dev/freefall unregistered\n"); + if (!smo8800->i2c_dev) { + free_irq(smo8800->irq, smo8800); + misc_deregister(&smo8800->miscdev); + dev_dbg(&device->dev, "device /dev/freefall unregistered\n"); + } i2c_unregister_device(smo8800->i2c_dev); }
When a lis3lv02d i2c_client has been instantiated pass the IRQ to the i2c_client and let the lis3lv02d driver take care of registering /dev/freefall and handling the IRQ. Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- drivers/platform/x86/dell/dell-smo8800.c | 40 ++++++++++++++---------- 1 file changed, 23 insertions(+), 17 deletions(-)