From: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>
To: jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org
Cc: i2c list <linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Feng Tang <feng.tang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Ben Dooks <ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>
Subject: Re: [PATCH] i2c: skip address detection if provided in board_info
Date: Tue, 12 Oct 2010 09:28:22 +0200 [thread overview]
Message-ID: <20101012092822.6f4e4aa5@endymion.delvare> (raw)
In-Reply-To: <1286838635-16474-1-git-send-email-jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
Hi Jacob,
On Mon, 11 Oct 2010 16:10:35 -0700, jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org wrote:
> From: Jacob Pan <jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
>
> If the address of a given device is already provided by platform init
> code, e.g. from system firmware, there is no need to call the driver's
> detect() function for finding the matching address from the driver's
> address list.
>
> Avoiding such detection might save boot time.
i2c_detect() is a no-op if adapter->class is 0, and if you have
platform init data describing the chips on your I2C adapter then you
certainly don't want to set the adapter class to anything other than 0.
So I'd rather avoid optimizing a case which isn't supposed to happen in
the first place.
The only optimization which I think would be valuable is checking the
class before allocating the temporary i2c_client structure. I'll send a
patch doing that in a minute.
>
> Signed-off-by: Jacob Pan <jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
> ---
> drivers/i2c/i2c-core.c | 32 ++++++++++++++++++++++++++++++++
> 1 files changed, 32 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
> index 6649176..e4f7feb 100644
> --- a/drivers/i2c/i2c-core.c
> +++ b/drivers/i2c/i2c-core.c
> @@ -1499,6 +1499,31 @@ static int i2c_detect_address(struct i2c_client *temp_client,
> return 0;
> }
>
> +static int i2c_scan_board_info(struct i2c_adapter *adapter, struct i2c_driver *driver)
> +{
> + struct i2c_devinfo *devinfo;
> + int ret = -ENODEV;
> +
> + down_read(&__i2c_board_lock);
> + list_for_each_entry(devinfo, &__i2c_board_list, list) {
> + if (!strncmp(devinfo->board_info.type, driver->driver.name,
> + I2C_NAME_SIZE)) {
This is wrong anyway. Comparing device names with driver names only
works in rare cases and shouldn't be relied upon.
> + dev_info(&adapter->dev, "found i2c board info %s\n",
> + driver->driver.name);
> + if (devinfo->board_info.addr) {
> + ret = 0;
> + goto scan_exit;
> + }
> + }
> + }
> +
> +scan_exit:
> + up_read(&__i2c_board_lock);
> +
> + return ret;
> +}
> +
> +
> static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver)
> {
> const unsigned short *address_list;
> @@ -1506,6 +1531,13 @@ static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver)
> int i, err = 0;
> int adap_id = i2c_adapter_id(adapter);
>
> + /* There is no need to detect i2c address if board info is provided */
> + if (!i2c_scan_board_info(adapter, driver)) {
> + dev_info(&adapter->dev, "Skip address detection for %s\n",
> + driver->driver.name);
> + return 0;
> + }
> +
> address_list = driver->address_list;
> if (!driver->detect || !address_list)
> return 0;
--
Jean Delvare
next prev parent reply other threads:[~2010-10-12 7:28 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-11 23:10 [PATCH] i2c: skip address detection if provided in board_info jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA
[not found] ` <1286838635-16474-1-git-send-email-jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2010-10-12 7:28 ` Jean Delvare [this message]
[not found] ` <20101012092822.6f4e4aa5-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2010-10-12 8:21 ` Feng Tang
2010-10-12 8:47 ` Jean Delvare
[not found] ` <20101012104707.3318511d-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2010-10-12 9:30 ` Feng Tang
2010-10-12 11:34 ` Jean Delvare
[not found] ` <20101012133425.490e3c4c-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2010-10-12 18:01 ` Jacob Pan
2010-10-13 7:26 ` Jean Delvare
[not found] ` <20101013092654.7e26fa00-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2010-10-13 15:54 ` Jacob Pan
2010-10-13 16:07 ` Jean Delvare
[not found] ` <20101013180751.2d37c513-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2010-10-13 17:01 ` Jacob Pan
2010-10-13 17:04 ` Feng Tang
2010-10-13 9:29 ` Jean Delvare
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20101012092822.6f4e4aa5@endymion.delvare \
--to=khali-puyad+kwke1g9huczpvpmw@public.gmane.org \
--cc=ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org \
--cc=feng.tang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox