Message ID | 20170317095527.10487-14-hdegoede@redhat.com |
---|---|
State | Superseded |
Headers | show |
On Fri, 2017-03-17 at 10:55 +0100, Hans de Goede wrote: > Some of or ACPI declared / enumerated devices may have multiple irq > resources declared and the driver may want to use a different irq then > the one with index 0. > > This commit adds a new irq_index field to struct i2c_driver and makes > the i2c-core pass this to of_irq_get / acpi_dev_gpio_irq_get. > > This is esp. useful for ACPI declared devices where the irq with > index 0 may be entirely useless and cause i2c_device_probe to fail > with > -EPROBE_DEFER. > --- a/include/linux/i2c.h > +++ b/include/linux/i2c.h > @@ -212,6 +212,9 @@ struct i2c_driver { > int (*detect)(struct i2c_client *, struct i2c_board_info *); > const unsigned short *address_list; > struct list_head clients; > + > + /* IRQ index for retreiving irq from ACPI resources */ We have kernel doc. > + int irq_index; Not sure about name (would like it to be shorter, but Friday evening doesn't allow to be creative). > }; > #define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
Hi Hans,
[auto build test WARNING on wsa/i2c/for-next]
[also build test WARNING on v4.11-rc3 next-20170310]
[cannot apply to battery/master]
[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/Hans-de-Goede/Add-Intel-Cherry-Trail-Whiskey-Cove-PMIC-support/20170320-144648
base: https://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/for-next
reproduce: make htmldocs
All warnings (new ones prefixed by >>):
include/linux/init.h:1: warning: no structured comments found
kernel/sched/core.c:2085: warning: No description found for parameter 'rf'
kernel/sched/core.c:2085: warning: Excess function parameter 'cookie' description in 'try_to_wake_up_local'
include/linux/kthread.h:26: warning: Excess function parameter '...' description in 'kthread_create'
kernel/sys.c:1: warning: no structured comments found
include/linux/device.h:969: warning: No description found for parameter 'dma_ops'
drivers/dma-buf/seqno-fence.c:1: warning: no structured comments found
>> include/linux/i2c.h:219: warning: No description found for parameter 'irq_index'
include/linux/iio/iio.h:597: warning: No description found for parameter 'trig_readonly'
include/linux/iio/trigger.h:151: warning: No description found for parameter 'indio_dev'
include/linux/iio/trigger.h:151: warning: No description found for parameter 'trig'
include/linux/device.h:970: warning: No description found for parameter 'dma_ops'
drivers/regulator/core.c:1467: warning: Excess function parameter 'ret' description in 'regulator_dev_lookup'
include/drm/drm_drv.h:438: warning: No description found for parameter 'open'
include/drm/drm_drv.h:438: warning: No description found for parameter 'preclose'
include/drm/drm_drv.h:438: warning: No description found for parameter 'postclose'
include/drm/drm_drv.h:438: warning: No description found for parameter 'lastclose'
include/drm/drm_drv.h:438: warning: No description found for parameter 'set_busid'
include/drm/drm_drv.h:438: warning: No description found for parameter 'irq_handler'
include/drm/drm_drv.h:438: warning: No description found for parameter 'irq_preinstall'
include/drm/drm_drv.h:438: warning: No description found for parameter 'irq_postinstall'
include/drm/drm_drv.h:438: warning: No description found for parameter 'irq_uninstall'
include/drm/drm_drv.h:438: warning: No description found for parameter 'debugfs_init'
include/drm/drm_drv.h:438: warning: No description found for parameter 'debugfs_cleanup'
include/drm/drm_drv.h:438: warning: No description found for parameter 'gem_open_object'
include/drm/drm_drv.h:438: warning: No description found for parameter 'gem_close_object'
include/drm/drm_drv.h:438: warning: No description found for parameter 'prime_handle_to_fd'
include/drm/drm_drv.h:438: warning: No description found for parameter 'prime_fd_to_handle'
include/drm/drm_drv.h:438: warning: No description found for parameter 'gem_prime_export'
include/drm/drm_drv.h:438: warning: No description found for parameter 'gem_prime_import'
include/drm/drm_drv.h:438: warning: No description found for parameter 'gem_prime_pin'
include/drm/drm_drv.h:438: warning: No description found for parameter 'gem_prime_unpin'
include/drm/drm_drv.h:438: warning: No description found for parameter 'gem_prime_res_obj'
include/drm/drm_drv.h:438: warning: No description found for parameter 'gem_prime_get_sg_table'
include/drm/drm_drv.h:438: warning: No description found for parameter 'gem_prime_import_sg_table'
include/drm/drm_drv.h:438: warning: No description found for parameter 'gem_prime_vmap'
include/drm/drm_drv.h:438: warning: No description found for parameter 'gem_prime_vunmap'
include/drm/drm_drv.h:438: warning: No description found for parameter 'gem_prime_mmap'
include/drm/drm_drv.h:438: warning: No description found for parameter 'gem_vm_ops'
include/drm/drm_drv.h:438: warning: No description found for parameter 'major'
include/drm/drm_drv.h:438: warning: No description found for parameter 'minor'
include/drm/drm_drv.h:438: warning: No description found for parameter 'patchlevel'
include/drm/drm_drv.h:438: warning: No description found for parameter 'name'
include/drm/drm_drv.h:438: warning: No description found for parameter 'desc'
include/drm/drm_drv.h:438: warning: No description found for parameter 'date'
include/drm/drm_drv.h:438: warning: No description found for parameter 'driver_features'
include/drm/drm_drv.h:438: warning: No description found for parameter 'ioctls'
include/drm/drm_drv.h:438: warning: No description found for parameter 'num_ioctls'
include/drm/drm_drv.h:438: warning: No description found for parameter 'fops'
include/drm/drm_color_mgmt.h:1: warning: no structured comments found
drivers/gpu/drm/drm_fb_cma_helper.c:557: warning: Excess function parameter 'num_crtc' description in 'drm_fbdev_cma_init'
drivers/gpu/drm/drm_fb_cma_helper.c:558: warning: Excess function parameter 'num_crtc' description in 'drm_fbdev_cma_init'
drivers/gpu/drm/i915/intel_lpe_audio.c:342: warning: No description found for parameter 'pipe'
drivers/gpu/drm/i915/intel_lpe_audio.c:342: warning: No description found for parameter 'dp_output'
drivers/gpu/drm/i915/intel_lpe_audio.c:342: warning: No description found for parameter 'link_rate'
drivers/gpu/drm/i915/intel_lpe_audio.c:343: warning: No description found for parameter 'pipe'
drivers/gpu/drm/i915/intel_lpe_audio.c:343: warning: No description found for parameter 'dp_output'
drivers/gpu/drm/i915/intel_lpe_audio.c:343: warning: No description found for parameter 'link_rate'
drivers/media/dvb-core/dvb_frontend.h:677: warning: No description found for parameter 'refcount'
Documentation/core-api/assoc_array.rst:13: WARNING: Enumerated list ends without a blank line; unexpected unindent.
Documentation/doc-guide/sphinx.rst:110: ERROR: Unknown target name: "sphinx c domain".
kernel/sched/fair.c:7616: WARNING: Inline emphasis start-string without end-string.
kernel/time/timer.c:1200: ERROR: Unexpected indentation.
kernel/time/timer.c:1202: ERROR: Unexpected indentation.
kernel/time/timer.c:1203: WARNING: Block quote ends without a blank line; unexpected unindent.
include/linux/wait.h:122: WARNING: Block quote ends without a blank line; unexpected unindent.
include/linux/wait.h:125: ERROR: Unexpected indentation.
include/linux/wait.h:127: WARNING: Block quote ends without a blank line; unexpected unindent.
kernel/time/hrtimer.c:990: WARNING: Block quote ends without a blank line; unexpected unindent.
kernel/signal.c:322: WARNING: Inline literal start-string without end-string.
include/linux/iio/iio.h:219: ERROR: Unexpected indentation.
include/linux/iio/iio.h:220: WARNING: Block quote ends without a blank line; unexpected unindent.
include/linux/iio/iio.h:226: WARNING: Definition list ends without a blank line; unexpected unindent.
drivers/iio/industrialio-core.c:639: ERROR: Unknown target name: "iio_val".
drivers/iio/industrialio-core.c:646: ERROR: Unknown target name: "iio_val".
drivers/message/fusion/mptbase.c:5051: WARNING: Definition list ends without a blank line; unexpected unindent.
drivers/tty/serial/serial_core.c:1898: WARNING: Definition list ends without a blank line; unexpected unindent.
include/linux/regulator/driver.h:271: ERROR: Unknown target name: "regulator_regmap_x_voltage".
include/linux/spi/spi.h:369: ERROR: Unexpected indentation.
drivers/usb/core/message.c:478: ERROR: Unexpected indentation.
drivers/usb/core/message.c:479: WARNING: Block quote ends without a blank line; unexpected unindent.
Documentation/driver-api/usb.rst:623: ERROR: Unknown target name: "usb_type".
Documentation/driver-api/usb.rst:623: ERROR: Unknown target name: "usb_dir".
Documentation/driver-api/usb.rst:623: ERROR: Unknown target name: "usb_recip".
Documentation/driver-api/usb.rst:689: ERROR: Unknown target name: "usbdevfs_urb_type".
sound/soc/soc-core.c:2670: ERROR: Unknown target name: "snd_soc_daifmt".
sound/core/jack.c:312: ERROR: Unknown target name: "snd_jack_btn".
WARNING: dvipng command 'dvipng' cannot be run (needed for math display), check the imgmath_dvipng setting
vim +/irq_index +219 include/linux/i2c.h
^1da177e Linus Torvalds 2005-04-16 203 /* a ioctl like command that can be used to perform specific functions
^1da177e Linus Torvalds 2005-04-16 204 * with the device.
^1da177e Linus Torvalds 2005-04-16 205 */
^1da177e Linus Torvalds 2005-04-16 206 int (*command)(struct i2c_client *client, unsigned int cmd, void *arg);
^1da177e Linus Torvalds 2005-04-16 207
^1da177e Linus Torvalds 2005-04-16 208 struct device_driver driver;
d2653e92 Jean Delvare 2008-04-29 209 const struct i2c_device_id *id_table;
4735c98f Jean Delvare 2008-07-14 210
4735c98f Jean Delvare 2008-07-14 211 /* Device detection callback for automatic device creation */
310ec792 Jean Delvare 2009-12-14 212 int (*detect)(struct i2c_client *, struct i2c_board_info *);
c3813d6a Jean Delvare 2009-12-14 213 const unsigned short *address_list;
4735c98f Jean Delvare 2008-07-14 214 struct list_head clients;
f55c71b4 Hans de Goede 2017-03-17 215
f55c71b4 Hans de Goede 2017-03-17 216 /* IRQ index for retreiving irq from ACPI resources */
f55c71b4 Hans de Goede 2017-03-17 217 int irq_index;
^1da177e Linus Torvalds 2005-04-16 218 };
^1da177e Linus Torvalds 2005-04-16 @219 #define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
^1da177e Linus Torvalds 2005-04-16 220
2096b956 David Brownell 2007-05-01 221 /**
2096b956 David Brownell 2007-05-01 222 * struct i2c_client - represent an I2C slave device
d64f73be David Brownell 2007-07-12 223 * @flags: I2C_CLIENT_TEN indicates the device uses a ten bit chip address;
d64f73be David Brownell 2007-07-12 224 * I2C_CLIENT_PEC indicates it uses SMBus Packet Error Checking
2096b956 David Brownell 2007-05-01 225 * @addr: Address used on the I2C bus connected to the parent adapter.
2096b956 David Brownell 2007-05-01 226 * @name: Indicates the type of the device, usually a chip name that's
2096b956 David Brownell 2007-05-01 227 * generic enough to hide second-sourcing and compatible revisions.
:::::: The code at line 219 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2
:::::: TO: Linus Torvalds <torvalds@ppc970.osdl.org>
:::::: CC: Linus Torvalds <torvalds@ppc970.osdl.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index fd45207..2457995 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c @@ -984,6 +984,8 @@ static int i2c_device_probe(struct device *dev) if (!client) return 0; + driver = to_i2c_driver(dev->driver); + if (!client->irq) { int irq = -ENOENT; @@ -993,9 +995,11 @@ static int i2c_device_probe(struct device *dev) } else if (dev->of_node) { irq = of_irq_get_byname(dev->of_node, "irq"); if (irq == -EINVAL || irq == -ENODATA) - irq = of_irq_get(dev->of_node, 0); + irq = of_irq_get(dev->of_node, + driver->irq_index); } else if (ACPI_COMPANION(dev)) { - irq = acpi_dev_gpio_irq_get(ACPI_COMPANION(dev), 0); + irq = acpi_dev_gpio_irq_get(ACPI_COMPANION(dev), + driver->irq_index); } if (irq == -EPROBE_DEFER) return irq; diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 369ebfa..a5ffe29 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h @@ -212,6 +212,9 @@ struct i2c_driver { int (*detect)(struct i2c_client *, struct i2c_board_info *); const unsigned short *address_list; struct list_head clients; + + /* IRQ index for retreiving irq from ACPI resources */ + int irq_index; }; #define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
Some of or ACPI declared / enumerated devices may have multiple irq resources declared and the driver may want to use a different irq then the one with index 0. This commit adds a new irq_index field to struct i2c_driver and makes the i2c-core pass this to of_irq_get / acpi_dev_gpio_irq_get. This is esp. useful for ACPI declared devices where the irq with index 0 may be entirely useless and cause i2c_device_probe to fail with -EPROBE_DEFER. Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- Changes in v2: -Actually also use the irq_index for of interrupts --- drivers/i2c/i2c-core.c | 8 ++++++-- include/linux/i2c.h | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-)