linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/8] i2c: Relax mandatory I2C ID table passing
@ 2015-09-09 18:33 Kieran Bingham
  2015-09-09 18:33 ` [PATCH v4 1/8] i2c: Add pointer dereference protection to i2c_match_id() Kieran Bingham
                   ` (7 more replies)
  0 siblings, 8 replies; 16+ messages in thread
From: Kieran Bingham @ 2015-09-09 18:33 UTC (permalink / raw)
  To: Wolfram Sang, Samuel Ortiz, Lee Jones
  Cc: linux-i2c, linux-kernel, linus.walleij, grant.likely, Kieran Bingham

Hi Wolfram,

I have picked this patchset [0] up from Lee to rebase it, with an aim to
get this series moving again.

A couple of minor issues were resolved in the rebase. As it stood, Javier
proposed [1] to merge this series, and use a follow up series to make sure
that all I2C drivers are using a MODLE_DEVICE_TABLE(of,...)

I have prepared a Coccinelle patch to work through the bulk of the changes
required for the conversion, which will assist the transition process.

[0] https://lkml.org/lkml/2014/8/28/283
[1] https://lkml.org/lkml/2014/9/12/496

Lee's most recent cover-letter (from 12 months ago) follows:

Hi Wolfram,

Placing this firmly back on your plate.  I truly hope we don't miss
another merge-window.  This patch-set has the support of some pretty
senior kernel maintainers, so I hope acceptance shouldn't be too
difficult.

As previously discussed I believe it should be okay for an I2C device
driver _not_ supply an I2C ID table to match to.  The I2C subsystem
should be able to match via other means, such as via OF tables.  The
blocking factor during our previous conversation was to keep
registering via sysfs up and running.  This set does that.

After thinking more deeply about the problem, it occurred to me that
any I2C device driver which uses the sysfs method and issues an
of_match_device() would also fail their probe().  Bolted on to this
set is a new, more generic way for these devices to match against
either of the I2C/OF tables.

I hope this ticks all of your boxes.

v4: [Kieran Bingham]
  - Rebase to v4.2
  - adapt for dev_pm_domain_{attach,detach}
  - strnicmp to strncasecmp

v3: [Lee Jones]
  - Insist on passing 'struct i2c_client' instead of 'struct device'
  - Remove hook from of_match_device()

v2: [Lee Jones]
  - Removal of ACPI support (this is really an OF issue).
  - Add a new .probe2( with will seamlessly replace
  - Supply a warning on devices matching via OF without a suitable compatible
  - Remove unified match_device() - bad idea as it subverts type-safe behaviour
  - Provide examples of the kind of clean-up possible after this set.
    - I already have the full support from the maintainer of these drivers =;-)

Lee Jones (8):
  i2c: Add pointer dereference protection to i2c_match_id()
  i2c: Add the ability to match device to compatible string without an
    of_node
  i2c: Match using traditional OF methods, then by vendor-less
    compatible strings
  i2c: Make I2C ID tables non-mandatory for DT'ed devices
  i2c: Export i2c_match_id() for direct use by device drivers
  i2c: Provide a temporary .probe2() call-back type
  mfd: 88pm860x: Move over to new I2C device .probe() call
  mfd: as3722: Rid driver of superfluous I2C device ID structure

 drivers/i2c/i2c-core.c      | 82 +++++++++++++++++++++++++++++++++++++--------
 drivers/mfd/88pm860x-core.c |  5 ++-
 drivers/mfd/as3722.c        | 12 ++-----
 include/linux/i2c.h         | 22 +++++++++++-
 4 files changed, 93 insertions(+), 28 deletions(-)

-- 
2.1.4


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH v4 1/8] i2c: Add pointer dereference protection to i2c_match_id()
  2015-09-09 18:33 [PATCH v4 0/8] i2c: Relax mandatory I2C ID table passing Kieran Bingham
@ 2015-09-09 18:33 ` Kieran Bingham
  2015-09-11  9:31   ` Lee Jones
  2015-09-09 18:33 ` [PATCH v4 2/8] i2c: Add the ability to match device to compatible string without an of_node Kieran Bingham
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 16+ messages in thread
From: Kieran Bingham @ 2015-09-09 18:33 UTC (permalink / raw)
  To: Wolfram Sang, Samuel Ortiz, Lee Jones
  Cc: linux-i2c, linux-kernel, linus.walleij, grant.likely

From: Lee Jones <lee.jones@linaro.org>

Here we're providing dereference protection for i2c_match_id(), which
saves us having to do it each time it's called.  We're also stripping
out the (now) needless checks in i2c_device_match().  This patch paves
the way for other, similar code trimming.

Acked-by: Grant Likely <grant.likely@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/i2c/i2c-core.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index c83e4d1..30d8a77 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -450,6 +450,9 @@ static inline int acpi_i2c_install_space_handler(struct i2c_adapter *adapter)
 static const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
 						const struct i2c_client *client)
 {
+	if (!(id && client))
+		return NULL;
+
 	while (id->name[0]) {
 		if (strcmp(client->name, id->name) == 0)
 			return id;
@@ -463,8 +466,6 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
 	struct i2c_client	*client = i2c_verify_client(dev);
 	struct i2c_driver	*driver;
 
-	if (!client)
-		return 0;
 
 	/* Attempt an OF style match */
 	if (of_driver_match_device(dev, drv))
@@ -475,9 +476,10 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
 		return 1;
 
 	driver = to_i2c_driver(drv);
-	/* match on an id table if there is one */
-	if (driver->id_table)
-		return i2c_match_id(driver->id_table, client) != NULL;
+
+	/* Finally an I2C match */
+	if (i2c_match_id(driver->id_table, client))
+		return 1;
 
 	return 0;
 }
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v4 2/8] i2c: Add the ability to match device to compatible string without an of_node
  2015-09-09 18:33 [PATCH v4 0/8] i2c: Relax mandatory I2C ID table passing Kieran Bingham
  2015-09-09 18:33 ` [PATCH v4 1/8] i2c: Add pointer dereference protection to i2c_match_id() Kieran Bingham
@ 2015-09-09 18:33 ` Kieran Bingham
  2015-09-09 18:33 ` [PATCH v4 3/8] i2c: Match using traditional OF methods, then by vendor-less compatible strings Kieran Bingham
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 16+ messages in thread
From: Kieran Bingham @ 2015-09-09 18:33 UTC (permalink / raw)
  To: Wolfram Sang, Samuel Ortiz, Lee Jones
  Cc: linux-i2c, linux-kernel, linus.walleij, grant.likely, Kieran Bingham

From: Lee Jones <lee.jones@linaro.org>

A great deal of I2C devices are currently matched via DT node name, and
as such the compatible naming convention of '<vendor>,<device>' has gone
somewhat awry - some nodes don't supply one, some supply an arbitrary
string and others the correct device name with an arbitrary vendor prefix.

In an effort to correct this problem we have to supply a mechanism to
match a device by compatible string AND by simple device name.  This
function strips off the '<vendor>,' part of a supplied compatible string
and attempts to match without it.

The plan is to remove this function once all of the compatible strings
for each device have been brought into line.

Acked-by: Grant Likely <grant.likely@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
[Kieran: strnicmp to strncasecmp]
Signed-off-by: Kieran Bingham <kieranbingham@gmail.com>
---
 drivers/i2c/i2c-core.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 30d8a77..0788c1f 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -1373,6 +1373,27 @@ struct i2c_adapter *of_find_i2c_adapter_by_node(struct device_node *node)
 	return adapter;
 }
 EXPORT_SYMBOL(of_find_i2c_adapter_by_node);
+
+static const struct of_device_id*
+i2c_of_match_device_strip_vendor(const struct of_device_id *matches,
+				  struct i2c_client *client)
+{
+	const char *name;
+
+	for (; matches->compatible[0]; matches++) {
+		name = strchr(matches->compatible, ',');
+		if (!name)
+			name = matches->compatible;
+		else
+			name++;
+
+		if (!strncasecmp(client->name, name, strlen(client->name)))
+			return matches;
+	}
+
+	return NULL;
+}
+
 #else
 static void of_i2c_register_devices(struct i2c_adapter *adap) { }
 #endif /* CONFIG_OF */
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v4 3/8] i2c: Match using traditional OF methods, then by vendor-less compatible strings
  2015-09-09 18:33 [PATCH v4 0/8] i2c: Relax mandatory I2C ID table passing Kieran Bingham
  2015-09-09 18:33 ` [PATCH v4 1/8] i2c: Add pointer dereference protection to i2c_match_id() Kieran Bingham
  2015-09-09 18:33 ` [PATCH v4 2/8] i2c: Add the ability to match device to compatible string without an of_node Kieran Bingham
@ 2015-09-09 18:33 ` Kieran Bingham
  2015-09-11  9:31   ` Lee Jones
  2015-09-09 18:33 ` [PATCH v4 4/8] i2c: Make I2C ID tables non-mandatory for DT'ed devices Kieran Bingham
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 16+ messages in thread
From: Kieran Bingham @ 2015-09-09 18:33 UTC (permalink / raw)
  To: Wolfram Sang, Samuel Ortiz, Lee Jones
  Cc: linux-i2c, linux-kernel, linus.walleij, grant.likely

From: Lee Jones <lee.jones@linaro.org>

This function provides a single call for all I2C devices which need to
match firstly using traditional OF means i.e by of_node, then if that
fails we attempt to match using the supplied I2C client name with a
list of supplied compatible strings with the '<vendor>,' string
removed.  The latter is required due to the unruly naming conventions
used currently by I2C devices.

Acked-by: Grant Likely <grant.likely@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/i2c/i2c-core.c | 16 ++++++++++++++++
 include/linux/i2c.h    | 12 ++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 0788c1f..94ca76e 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -1394,6 +1394,22 @@ i2c_of_match_device_strip_vendor(const struct of_device_id *matches,
 	return NULL;
 }
 
+const struct of_device_id
+*i2c_of_match_device(const struct of_device_id *matches,
+		     struct i2c_client *client)
+{
+	const struct of_device_id *match;
+
+	if (!(client && matches))
+		return NULL;
+
+	match = of_match_device(matches, &client->dev);
+	if (match)
+		return match;
+
+	return i2c_of_match_device_strip_vendor(matches, client);
+}
+EXPORT_SYMBOL_GPL(i2c_of_match_device);
 #else
 static void of_i2c_register_devices(struct i2c_adapter *adap) { }
 #endif /* CONFIG_OF */
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index e83a738..48bbbab 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -638,6 +638,10 @@ extern struct i2c_client *of_find_i2c_device_by_node(struct device_node *node);
 /* must call put_device() when done with returned i2c_adapter device */
 extern struct i2c_adapter *of_find_i2c_adapter_by_node(struct device_node *node);
 
+extern const struct of_device_id
+*i2c_of_match_device(const struct of_device_id *matches,
+		     struct i2c_client *client);
+
 #else
 
 static inline struct i2c_client *of_find_i2c_device_by_node(struct device_node *node)
@@ -649,6 +653,14 @@ static inline struct i2c_adapter *of_find_i2c_adapter_by_node(struct device_node
 {
 	return NULL;
 }
+
+const struct of_device_id
+*i2c_of_match_device(const struct of_device_id *matches,
+		     struct i2c_client *client)
+{
+	return NULL;
+}
+
 #endif /* CONFIG_OF */
 
 #endif /* _LINUX_I2C_H */
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v4 4/8] i2c: Make I2C ID tables non-mandatory for DT'ed devices
  2015-09-09 18:33 [PATCH v4 0/8] i2c: Relax mandatory I2C ID table passing Kieran Bingham
                   ` (2 preceding siblings ...)
  2015-09-09 18:33 ` [PATCH v4 3/8] i2c: Match using traditional OF methods, then by vendor-less compatible strings Kieran Bingham
@ 2015-09-09 18:33 ` Kieran Bingham
  2015-09-11  9:31   ` Lee Jones
  2015-09-09 18:33 ` [PATCH v4 5/8] i2c: Export i2c_match_id() for direct use by device drivers Kieran Bingham
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 16+ messages in thread
From: Kieran Bingham @ 2015-09-09 18:33 UTC (permalink / raw)
  To: Wolfram Sang, Samuel Ortiz, Lee Jones
  Cc: linux-i2c, linux-kernel, linus.walleij, grant.likely

From: Lee Jones <lee.jones@linaro.org>

Currently the I2C framework insists on devices supplying an I2C ID
table.  Many of the devices which do so unnecessarily adding quite a
few wasted lines to kernel code.  This patch allows drivers a means
to 'not' supply the aforementioned table and match on DT match tables
instead.

Acked-by: Grant Likely <grant.likely@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/i2c/i2c-core.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 94ca76e..2ebc64d 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -468,7 +468,7 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
 
 
 	/* Attempt an OF style match */
-	if (of_driver_match_device(dev, drv))
+	if (i2c_of_match_device(drv->of_match_table, client))
 		return 1;
 
 	/* Then ACPI style match */
@@ -657,7 +657,15 @@ static int i2c_device_probe(struct device *dev)
 	}
 
 	driver = to_i2c_driver(dev->driver);
-	if (!driver->probe || !driver->id_table)
+	if (!driver->probe)
+		return -EINVAL;
+
+	/*
+	 * An I2C ID table is not mandatory, if and only if, a suitable Device
+	 * Tree match table entry is supplied for the probing device.
+	 */
+	if (!driver->id_table &&
+	    !i2c_of_match_device(dev->driver->of_match_table, client))
 		return -ENODEV;
 
 	if (!device_can_wakeup(&client->dev))
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v4 5/8] i2c: Export i2c_match_id() for direct use by device drivers
  2015-09-09 18:33 [PATCH v4 0/8] i2c: Relax mandatory I2C ID table passing Kieran Bingham
                   ` (3 preceding siblings ...)
  2015-09-09 18:33 ` [PATCH v4 4/8] i2c: Make I2C ID tables non-mandatory for DT'ed devices Kieran Bingham
@ 2015-09-09 18:33 ` Kieran Bingham
  2015-09-11  9:30   ` Lee Jones
  2015-09-09 18:33 ` [PATCH v4 6/8] i2c: Provide a temporary .probe2() call-back type Kieran Bingham
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 16+ messages in thread
From: Kieran Bingham @ 2015-09-09 18:33 UTC (permalink / raw)
  To: Wolfram Sang, Samuel Ortiz, Lee Jones
  Cc: linux-i2c, linux-kernel, linus.walleij, grant.likely

From: Lee Jones <lee.jones@linaro.org>

When there was no other way to match a I2C device to driver i2c_match_id()
was exclusively used.  However, now there are other types of tables which
are commonly supplied, matching on an i2c_device_id table is used less
frequently.  Instead of _always_ calling i2c_match_id() from within the
framework, we only need to do so from drivers which have no other way of
matching.  This patch makes i2c_match_id() available to the aforementioned
device drivers.

Acked-by: Grant Likely <grant.likely@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/i2c/i2c-core.c | 3 ++-
 include/linux/i2c.h    | 2 ++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 2ebc64d..0e40136 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -447,7 +447,7 @@ static inline int acpi_i2c_install_space_handler(struct i2c_adapter *adapter)
 
 /* ------------------------------------------------------------------------- */
 
-static const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
+const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
 						const struct i2c_client *client)
 {
 	if (!(id && client))
@@ -460,6 +460,7 @@ static const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
 	}
 	return NULL;
 }
+EXPORT_SYMBOL_GPL(i2c_match_id);
 
 static int i2c_device_match(struct device *dev, struct device_driver *drv)
 {
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index 48bbbab..126585c 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -232,6 +232,8 @@ struct i2c_client {
 
 extern struct i2c_client *i2c_verify_client(struct device *dev);
 extern struct i2c_adapter *i2c_verify_adapter(struct device *dev);
+extern const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
+					const struct i2c_client *client);
 
 static inline struct i2c_client *kobj_to_i2c_client(struct kobject *kobj)
 {
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v4 6/8] i2c: Provide a temporary .probe2() call-back type
  2015-09-09 18:33 [PATCH v4 0/8] i2c: Relax mandatory I2C ID table passing Kieran Bingham
                   ` (4 preceding siblings ...)
  2015-09-09 18:33 ` [PATCH v4 5/8] i2c: Export i2c_match_id() for direct use by device drivers Kieran Bingham
@ 2015-09-09 18:33 ` Kieran Bingham
  2015-09-09 18:33 ` [PATCH v4 7/8] mfd: 88pm860x: Move over to new I2C device .probe() call Kieran Bingham
  2015-09-09 18:33 ` [PATCH v4 8/8] mfd: as3722: Rid driver of superfluous I2C device ID structure Kieran Bingham
  7 siblings, 0 replies; 16+ messages in thread
From: Kieran Bingham @ 2015-09-09 18:33 UTC (permalink / raw)
  To: Wolfram Sang, Samuel Ortiz, Lee Jones
  Cc: linux-i2c, linux-kernel, linus.walleij, grant.likely, Kieran Bingham

From: Lee Jones <lee.jones@linaro.org>

This will aid the seamless removal of the current probe()'s, more
commonly unused than used second parameter.  Most I2C drivers can
simply switch over to the new interface, others which have DT
support can use its own matching instead and others can call
i2c_match_id() themselves.  This brings I2C's device probe method
into line with other similar interfaces in the kernel and prevents
the requirement to pass an i2c_device_id table.

Suggested-by: Grant Likely <grant.likely@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
[Kieran: fix rebase conflicts and adapt for dev_pm_domain_{attach,detach}]
Signed-off-by: Kieran Bingham <kieranbingham@gmail.com>
---
 drivers/i2c/i2c-core.c | 22 ++++++++++++++--------
 include/linux/i2c.h    |  8 +++++++-
 2 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 0e40136..a28b423 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -658,8 +658,6 @@ static int i2c_device_probe(struct device *dev)
 	}
 
 	driver = to_i2c_driver(dev->driver);
-	if (!driver->probe)
-		return -EINVAL;
 
 	/*
 	 * An I2C ID table is not mandatory, if and only if, a suitable Device
@@ -679,12 +677,20 @@ static int i2c_device_probe(struct device *dev)
 		return status;
 
 	status = dev_pm_domain_attach(&client->dev, true);
-	if (status != -EPROBE_DEFER) {
-		status = driver->probe(client, i2c_match_id(driver->id_table,
-					client));
-		if (status)
-			dev_pm_domain_detach(&client->dev, true);
-	}
+	if (status == -EPROBE_DEFER)
+		return status;
+
+	/* When there are no more users of probe(), rename probe2 to probe. */
+	if (driver->probe2)
+		status = driver->probe2(client);
+	else if (driver->probe)
+		status = driver->probe(client,
+					i2c_match_id(driver->id_table, client));
+	else
+		status = -EINVAL;
+
+	if (status)
+		dev_pm_domain_detach(&client->dev, true);
 
 	return status;
 }
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index 126585c..cb25ae0 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -127,7 +127,8 @@ extern s32 i2c_smbus_write_i2c_block_data(const struct i2c_client *client,
  * struct i2c_driver - represent an I2C device driver
  * @class: What kind of i2c device we instantiate (for detect)
  * @attach_adapter: Callback for bus addition (deprecated)
- * @probe: Callback for device binding
+ * @probe: Callback for device binding - soon to be deprecated
+ * @probe2: New callback for device binding
  * @remove: Callback for device unbinding
  * @shutdown: Callback for device shutdown
  * @alert: Alert callback, for example for the SMBus alert protocol
@@ -170,6 +171,11 @@ struct i2c_driver {
 	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
 	int (*remove)(struct i2c_client *);
 
+	/* New driver model interface to aid the seamless removal of the
+	 * current probe()'s, more commonly unused than used second parameter.
+	 */
+	int (*probe2)(struct i2c_client *);
+
 	/* driver model interfaces that don't relate to enumeration  */
 	void (*shutdown)(struct i2c_client *);
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v4 7/8] mfd: 88pm860x: Move over to new I2C device .probe() call
  2015-09-09 18:33 [PATCH v4 0/8] i2c: Relax mandatory I2C ID table passing Kieran Bingham
                   ` (5 preceding siblings ...)
  2015-09-09 18:33 ` [PATCH v4 6/8] i2c: Provide a temporary .probe2() call-back type Kieran Bingham
@ 2015-09-09 18:33 ` Kieran Bingham
  2015-09-11  9:29   ` Lee Jones
  2015-09-09 18:33 ` [PATCH v4 8/8] mfd: as3722: Rid driver of superfluous I2C device ID structure Kieran Bingham
  7 siblings, 1 reply; 16+ messages in thread
From: Kieran Bingham @ 2015-09-09 18:33 UTC (permalink / raw)
  To: Wolfram Sang, Samuel Ortiz, Lee Jones
  Cc: linux-i2c, linux-kernel, linus.walleij, grant.likely

From: Lee Jones <lee.jones@linaro.org>

As part of an effort to rid the mostly unused second parameter for I2C
related .probe() functions and to conform to other existing frameworks
we're moving over to a temporary replacement .probe() call-back.

Acked-by: Grant Likely <grant.likely@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/mfd/88pm860x-core.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/mfd/88pm860x-core.c b/drivers/mfd/88pm860x-core.c
index 3269a99..a499d70 100644
--- a/drivers/mfd/88pm860x-core.c
+++ b/drivers/mfd/88pm860x-core.c
@@ -1130,8 +1130,7 @@ static int pm860x_dt_init(struct device_node *np,
 	return 0;
 }
 
-static int pm860x_probe(struct i2c_client *client,
-				  const struct i2c_device_id *id)
+static int pm860x_probe(struct i2c_client *client)
 {
 	struct pm860x_platform_data *pdata = dev_get_platdata(&client->dev);
 	struct device_node *node = client->dev.of_node;
@@ -1257,7 +1256,7 @@ static struct i2c_driver pm860x_driver = {
 		.pm     = &pm860x_pm_ops,
 		.of_match_table	= pm860x_dt_ids,
 	},
-	.probe		= pm860x_probe,
+	.probe2		= pm860x_probe,
 	.remove		= pm860x_remove,
 	.id_table	= pm860x_id_table,
 };
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v4 8/8] mfd: as3722: Rid driver of superfluous I2C device ID structure
  2015-09-09 18:33 [PATCH v4 0/8] i2c: Relax mandatory I2C ID table passing Kieran Bingham
                   ` (6 preceding siblings ...)
  2015-09-09 18:33 ` [PATCH v4 7/8] mfd: 88pm860x: Move over to new I2C device .probe() call Kieran Bingham
@ 2015-09-09 18:33 ` Kieran Bingham
  2015-09-11  9:29   ` Lee Jones
  7 siblings, 1 reply; 16+ messages in thread
From: Kieran Bingham @ 2015-09-09 18:33 UTC (permalink / raw)
  To: Wolfram Sang, Samuel Ortiz, Lee Jones
  Cc: linux-i2c, linux-kernel, linus.walleij, grant.likely

From: Lee Jones <lee.jones@linaro.org>

Also remove unused second probe() parameter 'i2c_device_id'.

Acked-by: Grant Likely <grant.likely@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 drivers/mfd/as3722.c | 12 ++----------
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/drivers/mfd/as3722.c b/drivers/mfd/as3722.c
index 924ea90..6ac4be3 100644
--- a/drivers/mfd/as3722.c
+++ b/drivers/mfd/as3722.c
@@ -354,8 +354,7 @@ static int as3722_i2c_of_probe(struct i2c_client *i2c,
 	return 0;
 }
 
-static int as3722_i2c_probe(struct i2c_client *i2c,
-			const struct i2c_device_id *id)
+static int as3722_i2c_probe(struct i2c_client *i2c)
 {
 	struct as3722 *as3722;
 	unsigned long irq_flags;
@@ -428,20 +427,13 @@ static const struct of_device_id as3722_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, as3722_of_match);
 
-static const struct i2c_device_id as3722_i2c_id[] = {
-	{ "as3722", 0 },
-	{},
-};
-MODULE_DEVICE_TABLE(i2c, as3722_i2c_id);
-
 static struct i2c_driver as3722_i2c_driver = {
 	.driver = {
 		.name = "as3722",
 		.of_match_table = as3722_of_match,
 	},
-	.probe = as3722_i2c_probe,
+	.probe2 = as3722_i2c_probe,
 	.remove = as3722_i2c_remove,
-	.id_table = as3722_i2c_id,
 };
 
 module_i2c_driver(as3722_i2c_driver);
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 8/8] mfd: as3722: Rid driver of superfluous I2C device ID structure
  2015-09-09 18:33 ` [PATCH v4 8/8] mfd: as3722: Rid driver of superfluous I2C device ID structure Kieran Bingham
@ 2015-09-11  9:29   ` Lee Jones
  0 siblings, 0 replies; 16+ messages in thread
From: Lee Jones @ 2015-09-11  9:29 UTC (permalink / raw)
  To: Kieran Bingham
  Cc: Wolfram Sang, Samuel Ortiz, linux-i2c, linux-kernel,
	linus.walleij, grant.likely

On Wed, 09 Sep 2015, Kieran Bingham wrote:

> From: Lee Jones <lee.jones@linaro.org>
> 
> Also remove unused second probe() parameter 'i2c_device_id'.
> 
> Acked-by: Grant Likely <grant.likely@linaro.org>
> Signed-off-by: Lee Jones <lee.jones@linaro.org>

SoB?

> ---
>  drivers/mfd/as3722.c | 12 ++----------
>  1 file changed, 2 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/mfd/as3722.c b/drivers/mfd/as3722.c
> index 924ea90..6ac4be3 100644
> --- a/drivers/mfd/as3722.c
> +++ b/drivers/mfd/as3722.c
> @@ -354,8 +354,7 @@ static int as3722_i2c_of_probe(struct i2c_client *i2c,
>  	return 0;
>  }
>  
> -static int as3722_i2c_probe(struct i2c_client *i2c,
> -			const struct i2c_device_id *id)
> +static int as3722_i2c_probe(struct i2c_client *i2c)
>  {
>  	struct as3722 *as3722;
>  	unsigned long irq_flags;
> @@ -428,20 +427,13 @@ static const struct of_device_id as3722_of_match[] = {
>  };
>  MODULE_DEVICE_TABLE(of, as3722_of_match);
>  
> -static const struct i2c_device_id as3722_i2c_id[] = {
> -	{ "as3722", 0 },
> -	{},
> -};
> -MODULE_DEVICE_TABLE(i2c, as3722_i2c_id);
> -
>  static struct i2c_driver as3722_i2c_driver = {
>  	.driver = {
>  		.name = "as3722",
>  		.of_match_table = as3722_of_match,
>  	},
> -	.probe = as3722_i2c_probe,
> +	.probe2 = as3722_i2c_probe,
>  	.remove = as3722_i2c_remove,
> -	.id_table = as3722_i2c_id,
>  };
>  
>  module_i2c_driver(as3722_i2c_driver);

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 7/8] mfd: 88pm860x: Move over to new I2C device .probe() call
  2015-09-09 18:33 ` [PATCH v4 7/8] mfd: 88pm860x: Move over to new I2C device .probe() call Kieran Bingham
@ 2015-09-11  9:29   ` Lee Jones
  0 siblings, 0 replies; 16+ messages in thread
From: Lee Jones @ 2015-09-11  9:29 UTC (permalink / raw)
  To: Kieran Bingham
  Cc: Wolfram Sang, Samuel Ortiz, linux-i2c, linux-kernel,
	linus.walleij, grant.likely

On Wed, 09 Sep 2015, Kieran Bingham wrote:

> From: Lee Jones <lee.jones@linaro.org>
> 
> As part of an effort to rid the mostly unused second parameter for I2C
> related .probe() functions and to conform to other existing frameworks
> we're moving over to a temporary replacement .probe() call-back.
> 
> Acked-by: Grant Likely <grant.likely@linaro.org>
> Signed-off-by: Lee Jones <lee.jones@linaro.org>

SoB?

> ---
>  drivers/mfd/88pm860x-core.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/mfd/88pm860x-core.c b/drivers/mfd/88pm860x-core.c
> index 3269a99..a499d70 100644
> --- a/drivers/mfd/88pm860x-core.c
> +++ b/drivers/mfd/88pm860x-core.c
> @@ -1130,8 +1130,7 @@ static int pm860x_dt_init(struct device_node *np,
>  	return 0;
>  }
>  
> -static int pm860x_probe(struct i2c_client *client,
> -				  const struct i2c_device_id *id)
> +static int pm860x_probe(struct i2c_client *client)
>  {
>  	struct pm860x_platform_data *pdata = dev_get_platdata(&client->dev);
>  	struct device_node *node = client->dev.of_node;
> @@ -1257,7 +1256,7 @@ static struct i2c_driver pm860x_driver = {
>  		.pm     = &pm860x_pm_ops,
>  		.of_match_table	= pm860x_dt_ids,
>  	},
> -	.probe		= pm860x_probe,
> +	.probe2		= pm860x_probe,
>  	.remove		= pm860x_remove,
>  	.id_table	= pm860x_id_table,
>  };

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 5/8] i2c: Export i2c_match_id() for direct use by device drivers
  2015-09-09 18:33 ` [PATCH v4 5/8] i2c: Export i2c_match_id() for direct use by device drivers Kieran Bingham
@ 2015-09-11  9:30   ` Lee Jones
  0 siblings, 0 replies; 16+ messages in thread
From: Lee Jones @ 2015-09-11  9:30 UTC (permalink / raw)
  To: Kieran Bingham
  Cc: Wolfram Sang, Samuel Ortiz, linux-i2c, linux-kernel,
	linus.walleij, grant.likely

On Wed, 09 Sep 2015, Kieran Bingham wrote:

> From: Lee Jones <lee.jones@linaro.org>
> 
> When there was no other way to match a I2C device to driver i2c_match_id()
> was exclusively used.  However, now there are other types of tables which
> are commonly supplied, matching on an i2c_device_id table is used less
> frequently.  Instead of _always_ calling i2c_match_id() from within the
> framework, we only need to do so from drivers which have no other way of
> matching.  This patch makes i2c_match_id() available to the aforementioned
> device drivers.
> 
> Acked-by: Grant Likely <grant.likely@linaro.org>
> Signed-off-by: Lee Jones <lee.jones@linaro.org>

SoB?

> ---
>  drivers/i2c/i2c-core.c | 3 ++-
>  include/linux/i2c.h    | 2 ++
>  2 files changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
> index 2ebc64d..0e40136 100644
> --- a/drivers/i2c/i2c-core.c
> +++ b/drivers/i2c/i2c-core.c
> @@ -447,7 +447,7 @@ static inline int acpi_i2c_install_space_handler(struct i2c_adapter *adapter)
>  
>  /* ------------------------------------------------------------------------- */
>  
> -static const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
> +const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
>  						const struct i2c_client *client)
>  {
>  	if (!(id && client))
> @@ -460,6 +460,7 @@ static const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
>  	}
>  	return NULL;
>  }
> +EXPORT_SYMBOL_GPL(i2c_match_id);
>  
>  static int i2c_device_match(struct device *dev, struct device_driver *drv)
>  {
> diff --git a/include/linux/i2c.h b/include/linux/i2c.h
> index 48bbbab..126585c 100644
> --- a/include/linux/i2c.h
> +++ b/include/linux/i2c.h
> @@ -232,6 +232,8 @@ struct i2c_client {
>  
>  extern struct i2c_client *i2c_verify_client(struct device *dev);
>  extern struct i2c_adapter *i2c_verify_adapter(struct device *dev);
> +extern const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
> +					const struct i2c_client *client);
>  
>  static inline struct i2c_client *kobj_to_i2c_client(struct kobject *kobj)
>  {

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 4/8] i2c: Make I2C ID tables non-mandatory for DT'ed devices
  2015-09-09 18:33 ` [PATCH v4 4/8] i2c: Make I2C ID tables non-mandatory for DT'ed devices Kieran Bingham
@ 2015-09-11  9:31   ` Lee Jones
  0 siblings, 0 replies; 16+ messages in thread
From: Lee Jones @ 2015-09-11  9:31 UTC (permalink / raw)
  To: Kieran Bingham
  Cc: Wolfram Sang, Samuel Ortiz, linux-i2c, linux-kernel,
	linus.walleij, grant.likely

On Wed, 09 Sep 2015, Kieran Bingham wrote:

> From: Lee Jones <lee.jones@linaro.org>
> 
> Currently the I2C framework insists on devices supplying an I2C ID
> table.  Many of the devices which do so unnecessarily adding quite a
> few wasted lines to kernel code.  This patch allows drivers a means
> to 'not' supply the aforementioned table and match on DT match tables
> instead.
> 
> Acked-by: Grant Likely <grant.likely@linaro.org>
> Signed-off-by: Lee Jones <lee.jones@linaro.org>

SoB?

> ---
>  drivers/i2c/i2c-core.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
> index 94ca76e..2ebc64d 100644
> --- a/drivers/i2c/i2c-core.c
> +++ b/drivers/i2c/i2c-core.c
> @@ -468,7 +468,7 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
>  
>  
>  	/* Attempt an OF style match */
> -	if (of_driver_match_device(dev, drv))
> +	if (i2c_of_match_device(drv->of_match_table, client))
>  		return 1;
>  
>  	/* Then ACPI style match */
> @@ -657,7 +657,15 @@ static int i2c_device_probe(struct device *dev)
>  	}
>  
>  	driver = to_i2c_driver(dev->driver);
> -	if (!driver->probe || !driver->id_table)
> +	if (!driver->probe)
> +		return -EINVAL;
> +
> +	/*
> +	 * An I2C ID table is not mandatory, if and only if, a suitable Device
> +	 * Tree match table entry is supplied for the probing device.
> +	 */
> +	if (!driver->id_table &&
> +	    !i2c_of_match_device(dev->driver->of_match_table, client))
>  		return -ENODEV;
>  
>  	if (!device_can_wakeup(&client->dev))

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 3/8] i2c: Match using traditional OF methods, then by vendor-less compatible strings
  2015-09-09 18:33 ` [PATCH v4 3/8] i2c: Match using traditional OF methods, then by vendor-less compatible strings Kieran Bingham
@ 2015-09-11  9:31   ` Lee Jones
  0 siblings, 0 replies; 16+ messages in thread
From: Lee Jones @ 2015-09-11  9:31 UTC (permalink / raw)
  To: Kieran Bingham
  Cc: Wolfram Sang, Samuel Ortiz, linux-i2c, linux-kernel,
	linus.walleij, grant.likely

On Wed, 09 Sep 2015, Kieran Bingham wrote:

> From: Lee Jones <lee.jones@linaro.org>
> 
> This function provides a single call for all I2C devices which need to
> match firstly using traditional OF means i.e by of_node, then if that
> fails we attempt to match using the supplied I2C client name with a
> list of supplied compatible strings with the '<vendor>,' string
> removed.  The latter is required due to the unruly naming conventions
> used currently by I2C devices.
> 
> Acked-by: Grant Likely <grant.likely@linaro.org>
> Signed-off-by: Lee Jones <lee.jones@linaro.org>

SoB?

> ---
>  drivers/i2c/i2c-core.c | 16 ++++++++++++++++
>  include/linux/i2c.h    | 12 ++++++++++++
>  2 files changed, 28 insertions(+)
> 
> diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
> index 0788c1f..94ca76e 100644
> --- a/drivers/i2c/i2c-core.c
> +++ b/drivers/i2c/i2c-core.c
> @@ -1394,6 +1394,22 @@ i2c_of_match_device_strip_vendor(const struct of_device_id *matches,
>  	return NULL;
>  }
>  
> +const struct of_device_id
> +*i2c_of_match_device(const struct of_device_id *matches,
> +		     struct i2c_client *client)
> +{
> +	const struct of_device_id *match;
> +
> +	if (!(client && matches))
> +		return NULL;
> +
> +	match = of_match_device(matches, &client->dev);
> +	if (match)
> +		return match;
> +
> +	return i2c_of_match_device_strip_vendor(matches, client);
> +}
> +EXPORT_SYMBOL_GPL(i2c_of_match_device);
>  #else
>  static void of_i2c_register_devices(struct i2c_adapter *adap) { }
>  #endif /* CONFIG_OF */
> diff --git a/include/linux/i2c.h b/include/linux/i2c.h
> index e83a738..48bbbab 100644
> --- a/include/linux/i2c.h
> +++ b/include/linux/i2c.h
> @@ -638,6 +638,10 @@ extern struct i2c_client *of_find_i2c_device_by_node(struct device_node *node);
>  /* must call put_device() when done with returned i2c_adapter device */
>  extern struct i2c_adapter *of_find_i2c_adapter_by_node(struct device_node *node);
>  
> +extern const struct of_device_id
> +*i2c_of_match_device(const struct of_device_id *matches,
> +		     struct i2c_client *client);
> +
>  #else
>  
>  static inline struct i2c_client *of_find_i2c_device_by_node(struct device_node *node)
> @@ -649,6 +653,14 @@ static inline struct i2c_adapter *of_find_i2c_adapter_by_node(struct device_node
>  {
>  	return NULL;
>  }
> +
> +const struct of_device_id
> +*i2c_of_match_device(const struct of_device_id *matches,
> +		     struct i2c_client *client)
> +{
> +	return NULL;
> +}
> +
>  #endif /* CONFIG_OF */
>  
>  #endif /* _LINUX_I2C_H */

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 1/8] i2c: Add pointer dereference protection to i2c_match_id()
  2015-09-09 18:33 ` [PATCH v4 1/8] i2c: Add pointer dereference protection to i2c_match_id() Kieran Bingham
@ 2015-09-11  9:31   ` Lee Jones
  2015-09-11  9:48     ` Kieran Bingham
  0 siblings, 1 reply; 16+ messages in thread
From: Lee Jones @ 2015-09-11  9:31 UTC (permalink / raw)
  To: Kieran Bingham
  Cc: Wolfram Sang, Samuel Ortiz, linux-i2c, linux-kernel,
	linus.walleij, grant.likely

On Wed, 09 Sep 2015, Kieran Bingham wrote:

> From: Lee Jones <lee.jones@linaro.org>
> 
> Here we're providing dereference protection for i2c_match_id(), which
> saves us having to do it each time it's called.  We're also stripping
> out the (now) needless checks in i2c_device_match().  This patch paves
> the way for other, similar code trimming.
> 
> Acked-by: Grant Likely <grant.likely@linaro.org>
> Signed-off-by: Lee Jones <lee.jones@linaro.org>

SoB?

> ---
>  drivers/i2c/i2c-core.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
> index c83e4d1..30d8a77 100644
> --- a/drivers/i2c/i2c-core.c
> +++ b/drivers/i2c/i2c-core.c
> @@ -450,6 +450,9 @@ static inline int acpi_i2c_install_space_handler(struct i2c_adapter *adapter)
>  static const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
>  						const struct i2c_client *client)
>  {
> +	if (!(id && client))
> +		return NULL;
> +
>  	while (id->name[0]) {
>  		if (strcmp(client->name, id->name) == 0)
>  			return id;
> @@ -463,8 +466,6 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
>  	struct i2c_client	*client = i2c_verify_client(dev);
>  	struct i2c_driver	*driver;
>  
> -	if (!client)
> -		return 0;
>  
>  	/* Attempt an OF style match */
>  	if (of_driver_match_device(dev, drv))
> @@ -475,9 +476,10 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
>  		return 1;
>  
>  	driver = to_i2c_driver(drv);
> -	/* match on an id table if there is one */
> -	if (driver->id_table)
> -		return i2c_match_id(driver->id_table, client) != NULL;
> +
> +	/* Finally an I2C match */
> +	if (i2c_match_id(driver->id_table, client))
> +		return 1;
>  
>  	return 0;
>  }

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4 1/8] i2c: Add pointer dereference protection to i2c_match_id()
  2015-09-11  9:31   ` Lee Jones
@ 2015-09-11  9:48     ` Kieran Bingham
  0 siblings, 0 replies; 16+ messages in thread
From: Kieran Bingham @ 2015-09-11  9:48 UTC (permalink / raw)
  To: Lee Jones
  Cc: Wolfram Sang, Samuel Ortiz, linux-i2c, linux-kernel,
	Linus Walleij, Grant Likely

Hi Lee,

On 11 September 2015 at 10:31, Lee Jones <lee.jones@linaro.org> wrote:
> On Wed, 09 Sep 2015, Kieran Bingham wrote:
>
>> From: Lee Jones <lee.jones@linaro.org>
>>
>> Here we're providing dereference protection for i2c_match_id(), which
>> saves us having to do it each time it's called.  We're also stripping
>> out the (now) needless checks in i2c_device_match().  This patch paves
>> the way for other, similar code trimming.
>>
>> Acked-by: Grant Likely <grant.likely@linaro.org>
>> Signed-off-by: Lee Jones <lee.jones@linaro.org>
>
> SoB?


My apologies, I only added SOB to the patches I had modified ...
I didn't realise it should go on the ones I didn't touch as well.

I'll update and resend.

--
Regards

>
>> ---
>>  drivers/i2c/i2c-core.c | 12 +++++++-----
>>  1 file changed, 7 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
>> index c83e4d1..30d8a77 100644
>> --- a/drivers/i2c/i2c-core.c
>> +++ b/drivers/i2c/i2c-core.c
>> @@ -450,6 +450,9 @@ static inline int acpi_i2c_install_space_handler(struct i2c_adapter *adapter)
>>  static const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
>>                                               const struct i2c_client *client)
>>  {
>> +     if (!(id && client))
>> +             return NULL;
>> +
>>       while (id->name[0]) {
>>               if (strcmp(client->name, id->name) == 0)
>>                       return id;
>> @@ -463,8 +466,6 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
>>       struct i2c_client       *client = i2c_verify_client(dev);
>>       struct i2c_driver       *driver;
>>
>> -     if (!client)
>> -             return 0;
>>
>>       /* Attempt an OF style match */
>>       if (of_driver_match_device(dev, drv))
>> @@ -475,9 +476,10 @@ static int i2c_device_match(struct device *dev, struct device_driver *drv)
>>               return 1;
>>
>>       driver = to_i2c_driver(drv);
>> -     /* match on an id table if there is one */
>> -     if (driver->id_table)
>> -             return i2c_match_id(driver->id_table, client) != NULL;
>> +
>> +     /* Finally an I2C match */
>> +     if (i2c_match_id(driver->id_table, client))
>> +             return 1;
>>
>>       return 0;
>>  }
>
> --
> Lee Jones
> Linaro STMicroelectronics Landing Team Lead
> Linaro.org │ Open source software for ARM SoCs
> Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2015-09-11  9:48 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-09 18:33 [PATCH v4 0/8] i2c: Relax mandatory I2C ID table passing Kieran Bingham
2015-09-09 18:33 ` [PATCH v4 1/8] i2c: Add pointer dereference protection to i2c_match_id() Kieran Bingham
2015-09-11  9:31   ` Lee Jones
2015-09-11  9:48     ` Kieran Bingham
2015-09-09 18:33 ` [PATCH v4 2/8] i2c: Add the ability to match device to compatible string without an of_node Kieran Bingham
2015-09-09 18:33 ` [PATCH v4 3/8] i2c: Match using traditional OF methods, then by vendor-less compatible strings Kieran Bingham
2015-09-11  9:31   ` Lee Jones
2015-09-09 18:33 ` [PATCH v4 4/8] i2c: Make I2C ID tables non-mandatory for DT'ed devices Kieran Bingham
2015-09-11  9:31   ` Lee Jones
2015-09-09 18:33 ` [PATCH v4 5/8] i2c: Export i2c_match_id() for direct use by device drivers Kieran Bingham
2015-09-11  9:30   ` Lee Jones
2015-09-09 18:33 ` [PATCH v4 6/8] i2c: Provide a temporary .probe2() call-back type Kieran Bingham
2015-09-09 18:33 ` [PATCH v4 7/8] mfd: 88pm860x: Move over to new I2C device .probe() call Kieran Bingham
2015-09-11  9:29   ` Lee Jones
2015-09-09 18:33 ` [PATCH v4 8/8] mfd: as3722: Rid driver of superfluous I2C device ID structure Kieran Bingham
2015-09-11  9:29   ` Lee Jones

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).