Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1595438 > unrolled thread

[PATCH 1/2] i2c: do not leave semaphore armed when copying properties fails

Started byDmitry Torokhov <dmitry.torokhov@gmail.com>
First post2017-03-08 19:50 +0100
Last post2017-03-10 00:20 +0100
Articles 5 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 1/2] i2c: do not leave semaphore armed when copying properties fails Dmitry Torokhov <dmitry.torokhov@gmail.com> - 2017-03-08 19:50 +0100
    [PATCH 2/2] i2c: allow attaching IRQ resources to i2c_board_info Dmitry Torokhov <dmitry.torokhov@gmail.com> - 2017-03-08 19:50 +0100
    Re: [PATCH 1/2] i2c: do not leave semaphore armed when copying  properties fails Wolfram Sang <wsa@the-dreams.de> - 2017-03-09 15:50 +0100
      Re: [PATCH 1/2] i2c: do not leave semaphore armed when copying  properties fails Dmitry Torokhov <dmitry.torokhov@gmail.com> - 2017-03-09 18:50 +0100
        Re: [PATCH 1/2] i2c: do not leave semaphore armed when copying  properties fails Wolfram Sang <wsa@the-dreams.de> - 2017-03-10 00:20 +0100

#1595438 — [PATCH 1/2] i2c: do not leave semaphore armed when copying properties fails

FromDmitry Torokhov <dmitry.torokhov@gmail.com>
Date2017-03-08 19:50 +0100
Subject[PATCH 1/2] i2c: do not leave semaphore armed when copying properties fails
Message-ID<tiOOS-1ZF-1@gated-at.bofh.it>
We should not leave i2c_register_board_info() early, without unlocking the
__i2c_board_lock.

Fixes: b0c1e95ab44f ("i2c: copy device properties when using ...")
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
 drivers/i2c/i2c-boardinfo.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/i2c-boardinfo.c b/drivers/i2c/i2c-boardinfo.c
index 5b8f6c3a6950..0e285c68b2ff 100644
--- a/drivers/i2c/i2c-boardinfo.c
+++ b/drivers/i2c/i2c-boardinfo.c
@@ -84,8 +84,10 @@ int i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsig
 		if (info->properties) {
 			devinfo->board_info.properties =
 					property_entries_dup(info->properties);
-			if (IS_ERR(devinfo->board_info.properties))
-				return PTR_ERR(devinfo->board_info.properties);
+			if (IS_ERR(devinfo->board_info.properties)) {
+				status = PTR_ERR(devinfo->board_info.properties);
+				break;
+			}
 		}
 
 		list_add_tail(&devinfo->list, &__i2c_board_list);
-- 
2.12.0.246.ga2ecc84866-goog

[toc] | [next] | [standalone]


#1595441 — [PATCH 2/2] i2c: allow attaching IRQ resources to i2c_board_info

FromDmitry Torokhov <dmitry.torokhov@gmail.com>
Date2017-03-08 19:50 +0100
Subject[PATCH 2/2] i2c: allow attaching IRQ resources to i2c_board_info
Message-ID<tiOOS-1ZF-9@gated-at.bofh.it>
In reply to#1595438
Simple integer for interrupt number is not expressive enough, as it does
not convey interrupt trigger type that should be used. Let's allow
attaching array of resources to the board info and have i2c core parse
first IRQ resource and set up interrupt trigger as needed.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
 drivers/i2c/i2c-boardinfo.c | 12 ++++++++++++
 drivers/i2c/i2c-core.c      | 30 ++++++++++++++++++++++++++++++
 include/linux/i2c.h         |  4 ++++
 3 files changed, 46 insertions(+)

diff --git a/drivers/i2c/i2c-boardinfo.c b/drivers/i2c/i2c-boardinfo.c
index 0e285c68b2ff..31186ead5a40 100644
--- a/drivers/i2c/i2c-boardinfo.c
+++ b/drivers/i2c/i2c-boardinfo.c
@@ -90,6 +90,18 @@ int i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsig
 			}
 		}
 
+		if (info->resources) {
+			devinfo->board_info.resources =
+				kmemdup(info->resources,
+					info->num_resources *
+						sizeof(*info->resources),
+					GFP_KERNEL);
+			if (!devinfo->board_info.resources) {
+				status = -ENOMEM;
+				break;
+			}
+		}
+
 		list_add_tail(&devinfo->list, &__i2c_board_list);
 	}
 
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 3897e78e5e9a..34a5115484dd 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -1277,6 +1277,32 @@ static void i2c_dev_set_name(struct i2c_adapter *adap,
 		     i2c_encode_flags_to_addr(client));
 }
 
+static int i2c_dev_irq_from_resources(const struct resource *resources,
+				      unsigned int num_resources)
+{
+	struct irq_data *irqd;
+	int i;
+
+	for (i = 0; i < num_resources; i++) {
+		const struct resource *r = &resources[i];
+
+		if (resource_type(r) != IORESOURCE_IRQ)
+			continue;
+
+		if (r->flags & IORESOURCE_BITS) {
+			irqd = irq_get_irq_data(r->start);
+			if (!irqd)
+				break;
+
+			irqd_set_trigger_type(irqd, r->flags & IORESOURCE_BITS);
+		}
+
+		return r->start;
+	}
+
+	return 0;
+}
+
 /**
  * i2c_new_device - instantiate an i2c device
  * @adap: the adapter managing the device
@@ -1312,7 +1338,11 @@ i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
 
 	client->flags = info->flags;
 	client->addr = info->addr;
+
 	client->irq = info->irq;
+	if (!client->irq)
+		client->irq = i2c_dev_irq_from_resources(info->resources,
+							 info->num_resources);
 
 	strlcpy(client->name, info->type, sizeof(client->name));
 
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index ec8f866a5656..2cc3988d127b 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -312,6 +312,8 @@ static inline int i2c_slave_event(struct i2c_client *client,
  * @of_node: pointer to OpenFirmware device node
  * @fwnode: device node supplied by the platform firmware
  * @properties: additional device properties for the device
+ * @resources: resources associated with the device
+ * @num_resources: number of resources in the @resources array
  * @irq: stored in i2c_client.irq
  *
  * I2C doesn't actually support hardware probing, although controllers and
@@ -334,6 +336,8 @@ struct i2c_board_info {
 	struct device_node *of_node;
 	struct fwnode_handle *fwnode;
 	const struct property_entry *properties;
+	const struct resource *resources;
+	unsigned int	num_resources;
 	int		irq;
 };
 
-- 
2.12.0.246.ga2ecc84866-goog

[toc] | [prev] | [next] | [standalone]


#1596122 — Re: [PATCH 1/2] i2c: do not leave semaphore armed when copying properties fails

FromWolfram Sang <wsa@the-dreams.de>
Date2017-03-09 15:50 +0100
SubjectRe: [PATCH 1/2] i2c: do not leave semaphore armed when copying properties fails
Message-ID<tj7yb-6vj-37@gated-at.bofh.it>
In reply to#1595438

[Multipart message — attachments visible in raw view] — view raw

On Wed, Mar 08, 2017 at 10:41:01AM -0800, Dmitry Torokhov wrote:
> We should not leave i2c_register_board_info() early, without unlocking the
> __i2c_board_lock.
> 
> Fixes: b0c1e95ab44f ("i2c: copy device properties when using ...")
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

So, it seems that patches 1+2 are related. Because I'd like to have
patch 2 sitting in for-next for a whole cycle for sure, my plan is to
revert the faulty b0c1e95ab44f from for-current and apply the fixed
version (b0c1e95ab44f + this patch squashed) to for-next as well.

Is that okay with you?

[toc] | [prev] | [next] | [standalone]


#1596254 — Re: [PATCH 1/2] i2c: do not leave semaphore armed when copying properties fails

FromDmitry Torokhov <dmitry.torokhov@gmail.com>
Date2017-03-09 18:50 +0100
SubjectRe: [PATCH 1/2] i2c: do not leave semaphore armed when copying properties fails
Message-ID<tjamm-8rP-25@gated-at.bofh.it>
In reply to#1596122
Hi Wolfram,

> On Wed, Mar 08, 2017 at 10:41:01AM -0800, Dmitry Torokhov wrote:
> > We should not leave i2c_register_board_info() early, without unlocking the
> > __i2c_board_lock.
> > 
> > Fixes: b0c1e95ab44f ("i2c: copy device properties when using ...")
> > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> 
> So, it seems that patches 1+2 are related. Because I'd like to have
> patch 2 sitting in for-next for a whole cycle for sure, my plan is to
> revert the faulty b0c1e95ab44f from for-current and apply the fixed
> version (b0c1e95ab44f + this patch squashed) to for-next as well.
> 
> Is that okay with you?

I am perfectly fine with reverting b0c1e95ab44f from for-current,
however I wonder if we could have an immutable branch off 4.11-rc2 (or
-rc1) containing fixed version of patch copying property + patch adding
resources + patch exporting i2c_client_type (I will CC you on that
shortly), which we could share between your tree and mine so I can get
in changes to a few drivers on my side (eeti_ts, atmel, etc).

If you are OK with this I can prepare said branch.

Thanks!

-- 
Dmitry

[toc] | [prev] | [next] | [standalone]


#1596464 — Re: [PATCH 1/2] i2c: do not leave semaphore armed when copying properties fails

FromWolfram Sang <wsa@the-dreams.de>
Date2017-03-10 00:20 +0100
SubjectRe: [PATCH 1/2] i2c: do not leave semaphore armed when copying properties fails
Message-ID<tjfvH-3x7-3@gated-at.bofh.it>
In reply to#1596254

[Multipart message — attachments visible in raw view] — view raw

> I am perfectly fine with reverting b0c1e95ab44f from for-current,
> however I wonder if we could have an immutable branch off 4.11-rc2 (or

Yes, sure. Please prepare a branch and once I reviewed all patches
touching i2c core, we can (from my side at least) declare it immutable
and I will pull it into i2c. I'll try to review the resources patch this
weekend.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web