Devicetree
 help / color / mirror / Atom feed
* [PATCH 00/10] Clean up, DTS and ISO15693 support
@ 2014-04-24 21:19 Christophe Ricard
       [not found] ` <1398374379-17133-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
  0 siblings, 1 reply; 12+ messages in thread
From: Christophe Ricard @ 2014-04-24 21:19 UTC (permalink / raw)
  To: linux-nfc-hn68Rpc1hR1g9hUCZPvPmw, sameo-VuQAYsv1563Yd54FQh9/CA
  Cc: devicetree-u79uwXL29TY76Z2rM5mHXA,
	christophe.ricard-Re5JQEeQqe8AvxtiuMwx3w,
	christophe-h.ricard-qxv4g6HH51o

This patchset applies on top of:
18d2c624f9c08a80ac317eacea75d136cf59c459
NFC: st21nfca: Improve st21nfca initialization by handling reboot properly

Best Regards
Christophe

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH 01/10] NFC: st21nfca: Remove few useless include.
       [not found] ` <1398374379-17133-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
@ 2014-04-24 21:19   ` Christophe Ricard
  2014-04-24 21:19   ` [PATCH 02/10] NFC: st21nfca: Fix incorrect TAILROOM and st21nfca_hci_remove_len_crc Christophe Ricard
                     ` (9 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Christophe Ricard @ 2014-04-24 21:19 UTC (permalink / raw)
  To: linux-nfc-hn68Rpc1hR1g9hUCZPvPmw, sameo-VuQAYsv1563Yd54FQh9/CA
  Cc: devicetree-u79uwXL29TY76Z2rM5mHXA,
	christophe.ricard-Re5JQEeQqe8AvxtiuMwx3w,
	christophe-h.ricard-qxv4g6HH51o

Remove include done in i2c.c

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/nfc/st21nfca/st21nfca.c | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/drivers/nfc/st21nfca/st21nfca.c b/drivers/nfc/st21nfca/st21nfca.c
index d001e6a..201a3ea 100644
--- a/drivers/nfc/st21nfca/st21nfca.c
+++ b/drivers/nfc/st21nfca/st21nfca.c
@@ -16,23 +16,12 @@
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <linux/crc-ccitt.h>
 #include <linux/module.h>
-#include <linux/delay.h>
-#include <linux/slab.h>
-#include <linux/miscdevice.h>
-#include <linux/interrupt.h>
-#include <linux/gpio.h>
-#include <linux/i2c.h>
-
 #include <linux/nfc.h>
 #include <net/nfc/hci.h>
 #include <net/nfc/llc.h>
 
-#include <uapi/linux/nfc.h>
-
 #include "st21nfca.h"
-#include <linux/platform_data/st21nfca.h>
 
 #define DRIVER_DESC "HCI NFC driver for ST21NFCA"
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH 02/10] NFC: st21nfca: Fix incorrect TAILROOM and st21nfca_hci_remove_len_crc.
       [not found] ` <1398374379-17133-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
  2014-04-24 21:19   ` [PATCH 01/10] NFC: st21nfca: Remove few useless include Christophe Ricard
@ 2014-04-24 21:19   ` Christophe Ricard
  2014-04-24 21:19   ` [PATCH 03/10] NFC: st21nfca: Fix incorrect byte stuffing revocation Christophe Ricard
                     ` (8 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Christophe Ricard @ 2014-04-24 21:19 UTC (permalink / raw)
  To: linux-nfc-hn68Rpc1hR1g9hUCZPvPmw, sameo-VuQAYsv1563Yd54FQh9/CA
  Cc: devicetree-u79uwXL29TY76Z2rM5mHXA,
	christophe.ricard-Re5JQEeQqe8AvxtiuMwx3w,
	christophe-h.ricard-qxv4g6HH51o

There is no byte stuffing when data are storred in skb.
TAILROOM is 2 byte crc + 1 byte eof.

st21nfca_hci_remove_len_crc was doing an incorrect operation on
the TAILROOM data.
If shdlc timer T2 is triggered, it will request to send the same data.
Before every hci data was lost after st21nfca_hci_remove_len_crc.

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/nfc/st21nfca/i2c.c | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/drivers/nfc/st21nfca/i2c.c b/drivers/nfc/st21nfca/i2c.c
index 6c4d0a0..5535d02 100644
--- a/drivers/nfc/st21nfca/i2c.c
+++ b/drivers/nfc/st21nfca/i2c.c
@@ -48,11 +48,11 @@
 #define ST21NFCA_BYTE_STUFFING_MASK	0x20
 #define ST21NFCA_ESCAPE_BYTE_STUFFING	0x7d
 
-/* SOF + 00 fill size */
+/* SOF + 00 */
 #define ST21NFCA_FRAME_HEADROOM			2
 
-/* 4 bytes crc (worst case byte stuffing) + EOF */
-#define ST21NFCA_FRAME_TAILROOM 5
+/* 2 bytes crc + EOF */
+#define ST21NFCA_FRAME_TAILROOM 3
 
 #define ST21NFCA_HCI_I2C_DRIVER_NAME "st21nfca_hci_i2c"
 
@@ -166,9 +166,8 @@ static void st21nfca_hci_i2c_disable(void *phy_id)
 	phy->powered = 0;
 }
 
-static int st21nfca_hci_add_len_crc(struct sk_buff *skb)
+static void st21nfca_hci_add_len_crc(struct sk_buff *skb)
 {
-	int ret = 2;
 	u16 crc;
 	u8 tmp;
 
@@ -182,14 +181,12 @@ static int st21nfca_hci_add_len_crc(struct sk_buff *skb)
 
 	tmp = (crc >> 8) & 0x00ff;
 	*skb_put(skb, 1) = tmp;
-
-	return ret;
 }
 
-static void st21nfca_hci_remove_len_crc(struct sk_buff *skb, int crc_len)
+static void st21nfca_hci_remove_len_crc(struct sk_buff *skb)
 {
 	skb_pull(skb, ST21NFCA_FRAME_HEADROOM);
-	skb_trim(skb, crc_len);
+	skb_trim(skb, skb->len - ST21NFCA_FRAME_TAILROOM);
 }
 
 /*
@@ -199,7 +196,7 @@ static void st21nfca_hci_remove_len_crc(struct sk_buff *skb, int crc_len)
  */
 static int st21nfca_hci_i2c_write(void *phy_id, struct sk_buff *skb)
 {
-	int r = -1, i, j, len;
+	int r = -1, i, j;
 	struct st21nfca_i2c_phy *phy = phy_id;
 	struct i2c_client *client = phy->i2c_dev;
 	u8 tmp[ST21NFCA_HCI_LLC_MAX_SIZE * 2];
@@ -215,7 +212,7 @@ static int st21nfca_hci_i2c_write(void *phy_id, struct sk_buff *skb)
 	 * Note st21nfca_hci_add_len_crc is doing a byte stuffing
 	 * on its own value
 	 */
-	len = st21nfca_hci_add_len_crc(skb);
+	st21nfca_hci_add_len_crc(skb);
 
 	/* add ST21NFCA_SOF_EOF on tail */
 	*skb_put(skb, 1) = ST21NFCA_SOF_EOF;
@@ -259,7 +256,7 @@ static int st21nfca_hci_i2c_write(void *phy_id, struct sk_buff *skb)
 			r = 0;
 	}
 
-	st21nfca_hci_remove_len_crc(skb, len);
+	st21nfca_hci_remove_len_crc(skb);
 
 	return r;
 }
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH 03/10] NFC: st21nfca: Fix incorrect byte stuffing revocation.
       [not found] ` <1398374379-17133-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
  2014-04-24 21:19   ` [PATCH 01/10] NFC: st21nfca: Remove few useless include Christophe Ricard
  2014-04-24 21:19   ` [PATCH 02/10] NFC: st21nfca: Fix incorrect TAILROOM and st21nfca_hci_remove_len_crc Christophe Ricard
@ 2014-04-24 21:19   ` Christophe Ricard
  2014-04-24 21:19   ` [PATCH 04/10] NFC: st21nfca: Improved check for correct data reception on i2c bus Christophe Ricard
                     ` (7 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Christophe Ricard @ 2014-04-24 21:19 UTC (permalink / raw)
  To: linux-nfc-hn68Rpc1hR1g9hUCZPvPmw, sameo-VuQAYsv1563Yd54FQh9/CA
  Cc: devicetree-u79uwXL29TY76Z2rM5mHXA,
	christophe.ricard-Re5JQEeQqe8AvxtiuMwx3w,
	christophe-h.ricard-qxv4g6HH51o

Byte stuffing was not correctly removed after a i2c read operation.
This was causing improper crc calculation when byte stuffing was
applied to more than 1 byte.

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/nfc/st21nfca/i2c.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/nfc/st21nfca/i2c.c b/drivers/nfc/st21nfca/i2c.c
index 5535d02..e29351c 100644
--- a/drivers/nfc/st21nfca/i2c.c
+++ b/drivers/nfc/st21nfca/i2c.c
@@ -312,11 +312,10 @@ static int st21nfca_hci_i2c_repack(struct sk_buff *skb)
 		skb_trim(skb, size);
 		/* remove ST21NFCA byte stuffing for upper layer */
 		for (i = 1, j = 0; i < skb->len; i++) {
-			if (skb->data[i] ==
+			if (skb->data[i + j] ==
 					(u8) ST21NFCA_ESCAPE_BYTE_STUFFING) {
-				skb->data[i] =
-				    skb->data[i +
-					      1] | ST21NFCA_BYTE_STUFFING_MASK;
+				skb->data[i] = skb->data[i + j + 1]
+						| ST21NFCA_BYTE_STUFFING_MASK;
 				i++;
 				j++;
 			}
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH 04/10] NFC: st21nfca: Improved check for correct data reception on i2c bus.
       [not found] ` <1398374379-17133-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
                     ` (2 preceding siblings ...)
  2014-04-24 21:19   ` [PATCH 03/10] NFC: st21nfca: Fix incorrect byte stuffing revocation Christophe Ricard
@ 2014-04-24 21:19   ` Christophe Ricard
  2014-04-24 21:19   ` [PATCH 05/10] NFC: st21nfca: Add mutex to force a successful i2c transaction Christophe Ricard
                     ` (6 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Christophe Ricard @ 2014-04-24 21:19 UTC (permalink / raw)
  To: linux-nfc-hn68Rpc1hR1g9hUCZPvPmw, sameo-VuQAYsv1563Yd54FQh9/CA
  Cc: devicetree-u79uwXL29TY76Z2rM5mHXA,
	christophe.ricard-Re5JQEeQqe8AvxtiuMwx3w,
	christophe-h.ricard-qxv4g6HH51o

A frame starts with ST21NFCA_SOF_EOF(0x7e) + 0x00.
A frame ends with ST21NFCA_SOF_EOF(0x7e).
It is possible that the i2c macrocell is stopped for other
communication interfaces with highest priority(RF or SWP).
This can be seen with some 0xFF data at the end of a received shdlc buffer.
If this happen we need to discard the frame because the CLF will repeat it.

In order to push accurate data to hci layer, we add the following fix:
- Instead of looking for the first 0x7e in the frame, check that the last
received byte is 0x7e.
- Check that the first frame reception block start with start of
frame(0x7e 0x00). If not, clear the buffer.
- Check that the next frame reception block do not start with start of
frame(0x7e). If so, clear the buffer.

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/nfc/st21nfca/i2c.c | 28 +++++++++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/drivers/nfc/st21nfca/i2c.c b/drivers/nfc/st21nfca/i2c.c
index e29351c..dece61f 100644
--- a/drivers/nfc/st21nfca/i2c.c
+++ b/drivers/nfc/st21nfca/i2c.c
@@ -53,6 +53,8 @@
 
 /* 2 bytes crc + EOF */
 #define ST21NFCA_FRAME_TAILROOM 3
+#define IS_START_OF_FRAME(buf) (buf[0] == ST21NFCA_SOF_EOF && \
+				buf[1] == 0)
 
 #define ST21NFCA_HCI_I2C_DRIVER_NAME "st21nfca_hci_i2c"
 
@@ -361,6 +363,7 @@ static int st21nfca_hci_i2c_read(struct st21nfca_i2c_phy *phy,
 {
 	int r, i;
 	u8 len;
+	u8 buf[ST21NFCA_HCI_LLC_MAX_PAYLOAD];
 	struct i2c_client *client = phy->i2c_dev;
 
 	if (phy->current_read_len < ARRAY_SIZE(len_seq)) {
@@ -373,7 +376,7 @@ static int st21nfca_hci_i2c_read(struct st21nfca_i2c_phy *phy,
 		 */
 		r = 0;
 		for (i = 0; i < ARRAY_SIZE(wait_tab) && r <= 0; i++) {
-			r = i2c_master_recv(client, skb_put(skb, len), len);
+			r = i2c_master_recv(client, buf, len);
 			if (r < 0)
 				msleep(wait_tab[i]);
 		}
@@ -383,8 +386,27 @@ static int st21nfca_hci_i2c_read(struct st21nfca_i2c_phy *phy,
 			return -EREMOTEIO;
 		}
 
-		if (memchr(skb->data + 2, ST21NFCA_SOF_EOF,
-				skb->len - 2) != NULL) {
+		/*
+		 * The first read sequence does not start with SOF.
+		 * Data are corrupeted. Drop them.
+		 */
+		if (!phy->current_read_len && buf[0] != ST21NFCA_SOF_EOF) {
+			skb_trim(skb, 0);
+			phy->current_read_len = 0;
+			return -EIO;
+		} else if (phy->current_read_len &&
+			IS_START_OF_FRAME(buf)) {
+			/*
+			 * Previous frame transmission was interrupted and
+			 * the frame got repeated.
+			 * Received frame start with ST21NFCA_SOF_EOF + 00.
+			 */
+			skb_trim(skb, 0);
+			phy->current_read_len = 0;
+		}
+		memcpy(skb_put(skb, len), buf, len);
+
+		if (skb->data[skb->len - 1] == ST21NFCA_SOF_EOF) {
 			phy->current_read_len = 0;
 			return st21nfca_hci_i2c_repack(skb);
 		}
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH 05/10] NFC: st21nfca: Add mutex to force a successful i2c transaction.
       [not found] ` <1398374379-17133-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
                     ` (3 preceding siblings ...)
  2014-04-24 21:19   ` [PATCH 04/10] NFC: st21nfca: Improved check for correct data reception on i2c bus Christophe Ricard
@ 2014-04-24 21:19   ` Christophe Ricard
  2014-04-24 21:19   ` [PATCH 06/10] NFC: st21nfca: Free buffer when a bad frame is detected Christophe Ricard
                     ` (5 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Christophe Ricard @ 2014-04-24 21:19 UTC (permalink / raw)
  To: linux-nfc-hn68Rpc1hR1g9hUCZPvPmw, sameo-VuQAYsv1563Yd54FQh9/CA
  Cc: devicetree-u79uwXL29TY76Z2rM5mHXA,
	christophe.ricard-Re5JQEeQqe8AvxtiuMwx3w,
	christophe-h.ricard-qxv4g6HH51o

Stabilize communication in case of i2c transaction failure.
This avoid a write transaction during a read retry or a read
transaction during a write retry.

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/nfc/st21nfca/i2c.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/nfc/st21nfca/i2c.c b/drivers/nfc/st21nfca/i2c.c
index dece61f..ef5e648 100644
--- a/drivers/nfc/st21nfca/i2c.c
+++ b/drivers/nfc/st21nfca/i2c.c
@@ -89,6 +89,7 @@ struct st21nfca_i2c_phy {
 	 * and prevents normal operation.
 	 */
 	int hard_fault;
+	struct mutex phy_lock;
 };
 static u8 len_seq[] = { 13, 24, 15, 29 };
 static u16 wait_tab[] = { 2, 3, 5, 15, 20, 40};
@@ -245,11 +246,13 @@ static int st21nfca_hci_i2c_write(void *phy_id, struct sk_buff *skb)
 	 * Manage sleep mode
 	 * Try 3 times to send data with delay between each
 	 */
+	mutex_lock(&phy->phy_lock);
 	for (i = 0; i < ARRAY_SIZE(wait_tab) && r < 0; i++) {
 		r = i2c_master_send(client, tmp, j);
 		if (r < 0)
 			msleep(wait_tab[i]);
 	}
+	mutex_unlock(&phy->phy_lock);
 
 	if (r >= 0) {
 		if (r != j)
@@ -375,11 +378,13 @@ static int st21nfca_hci_i2c_read(struct st21nfca_i2c_phy *phy,
 		 * RF or SWP interface
 		 */
 		r = 0;
+		mutex_lock(&phy->phy_lock);
 		for (i = 0; i < ARRAY_SIZE(wait_tab) && r <= 0; i++) {
 			r = i2c_master_recv(client, buf, len);
 			if (r < 0)
 				msleep(wait_tab[i]);
 		}
+		mutex_unlock(&phy->phy_lock);
 
 		if (r != len) {
 			phy->current_read_len = 0;
@@ -574,6 +579,7 @@ static int st21nfca_hci_i2c_probe(struct i2c_client *client,
 
 	phy->current_read_len = 0;
 	phy->crc_trials = 0;
+	mutex_init(&phy->phy_lock);
 	i2c_set_clientdata(client, phy);
 
 	pdata = client->dev.platform_data;
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH 06/10] NFC: st21nfca: Free buffer when a bad frame is detected
       [not found] ` <1398374379-17133-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
                     ` (4 preceding siblings ...)
  2014-04-24 21:19   ` [PATCH 05/10] NFC: st21nfca: Add mutex to force a successful i2c transaction Christophe Ricard
@ 2014-04-24 21:19   ` Christophe Ricard
  2014-04-24 21:19   ` [PATCH 07/10] NFC: dts: st21nfca: Add device-tree (Open Firmware) support to st21nfca Christophe Ricard
                     ` (4 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Christophe Ricard @ 2014-04-24 21:19 UTC (permalink / raw)
  To: linux-nfc-hn68Rpc1hR1g9hUCZPvPmw, sameo-VuQAYsv1563Yd54FQh9/CA
  Cc: devicetree-u79uwXL29TY76Z2rM5mHXA,
	christophe.ricard-Re5JQEeQqe8AvxtiuMwx3w,
	christophe-h.ricard-qxv4g6HH51o

When a bad frame is detected for a bad crc.
We were reallocating and loosing the previous frame pointer.

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/nfc/st21nfca/i2c.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/nfc/st21nfca/i2c.c b/drivers/nfc/st21nfca/i2c.c
index ef5e648..9a7f190 100644
--- a/drivers/nfc/st21nfca/i2c.c
+++ b/drivers/nfc/st21nfca/i2c.c
@@ -475,6 +475,7 @@ static irqreturn_t st21nfca_hci_irq_thread_fn(int irq, void *phy_id)
 		msleep(wait_tab[phy->crc_trials]);
 		phy->crc_trials++;
 		phy->current_read_len = 0;
+		kfree_skb(phy->pending_skb);
 	} else if (r > 0) {
 		/*
 		 * We succeeded to read data from the CLF and
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH 07/10] NFC: dts: st21nfca: Add device-tree (Open Firmware) support to st21nfca
       [not found] ` <1398374379-17133-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
                     ` (5 preceding siblings ...)
  2014-04-24 21:19   ` [PATCH 06/10] NFC: st21nfca: Free buffer when a bad frame is detected Christophe Ricard
@ 2014-04-24 21:19   ` Christophe Ricard
  2014-04-24 21:19   ` [PATCH 08/10] NFC: dts: st21nfca_i2c: Add DTS Documentation Christophe Ricard
                     ` (3 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Christophe Ricard @ 2014-04-24 21:19 UTC (permalink / raw)
  To: linux-nfc-hn68Rpc1hR1g9hUCZPvPmw, sameo-VuQAYsv1563Yd54FQh9/CA
  Cc: devicetree-u79uwXL29TY76Z2rM5mHXA,
	christophe.ricard-Re5JQEeQqe8AvxtiuMwx3w,
	christophe-h.ricard-qxv4g6HH51o

Add functions to recover hardware resources from the device-tree
when not provided by the platform data.

Based on pn544 devicetree implementation

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/nfc/st21nfca/i2c.c | 106 +++++++++++++++++++++++++++++++++++++--------
 1 file changed, 87 insertions(+), 19 deletions(-)

diff --git a/drivers/nfc/st21nfca/i2c.c b/drivers/nfc/st21nfca/i2c.c
index 9a7f190..4e696f0 100644
--- a/drivers/nfc/st21nfca/i2c.c
+++ b/drivers/nfc/st21nfca/i2c.c
@@ -21,6 +21,8 @@
 #include <linux/module.h>
 #include <linux/i2c.h>
 #include <linux/gpio.h>
+#include <linux/of_irq.h>
+#include <linux/of_gpio.h>
 #include <linux/miscdevice.h>
 #include <linux/interrupt.h>
 #include <linux/delay.h>
@@ -501,11 +503,65 @@ static struct nfc_phy_ops i2c_phy_ops = {
 	.disable = st21nfca_hci_i2c_disable,
 };
 
+#ifdef CONFIG_OF
+static int st21nfca_hci_i2c_of_request_resources(struct i2c_client *client)
+{
+	struct st21nfca_i2c_phy *phy = i2c_get_clientdata(client);
+	struct device_node *pp;
+	int gpio;
+	int r;
+
+	pp = client->dev.of_node;
+	if (!pp)
+		return -ENODEV;
+
+	/* Get GPIO from device tree */
+	gpio = of_get_named_gpio(pp, "enable-gpios", 0);
+	if (gpio < 0) {
+		nfc_err(&client->dev, "Failed to retrieve enable-gpios from device tree\n");
+		return gpio;
+	}
+
+	/* GPIO request and configuration */
+	r = devm_gpio_request(&client->dev, gpio, "clf_enable");
+	if (r) {
+		nfc_err(&client->dev, "Failed to request enable pin\n");
+		return -ENODEV;
+	}
+
+	r = gpio_direction_output(gpio, 1);
+	if (r) {
+		nfc_err(&client->dev, "Failed to set enable pin direction as output\n");
+		return -ENODEV;
+	}
+	phy->gpio_ena = gpio;
+
+	/* IRQ */
+	r = irq_of_parse_and_map(pp, 0);
+	if (r < 0) {
+		nfc_err(&client->dev,
+				"Unable to get irq, error: %d\n", r);
+		return r;
+	}
+
+	phy->irq_polarity = irq_get_trigger_type(r);
+	client->irq = r;
+
+	return 0;
+}
+#else
+static int st21nfca_hci_i2c_of_request_resources(struct i2c_client *client)
+{
+	return -ENODEV;
+}
+#endif
+
 static int st21nfca_hci_i2c_request_resources(struct i2c_client *client)
 {
 	struct st21nfca_nfc_platform_data *pdata;
 	struct st21nfca_i2c_phy *phy = i2c_get_clientdata(client);
 	int r;
+	int irq;
 
 	pdata = client->dev.platform_data;
 	if (pdata == NULL) {
@@ -546,6 +602,16 @@ static int st21nfca_hci_i2c_request_resources(struct i2c_client *client)
 		}
 	}
 
+	/* IRQ */
+	irq = gpio_to_irq(phy->gpio_irq);
+	if (irq < 0) {
+		nfc_err(&client->dev,
+				"Unable to get irq number for GPIO %d error %d\n",
+				phy->gpio_irq, r);
+		return -ENODEV;
+	}
+	client->irq = irq;
+
 	return 0;
 }
 
@@ -555,7 +621,6 @@ static int st21nfca_hci_i2c_probe(struct i2c_client *client,
 	struct st21nfca_i2c_phy *phy;
 	struct st21nfca_nfc_platform_data *pdata;
 	int r;
-	int irq;
 
 	dev_dbg(&client->dev, "%s\n", __func__);
 	dev_dbg(&client->dev, "IRQ: %d\n", client->irq);
@@ -584,26 +649,22 @@ static int st21nfca_hci_i2c_probe(struct i2c_client *client,
 	i2c_set_clientdata(client, phy);
 
 	pdata = client->dev.platform_data;
-	if (!pdata) {
-		nfc_err(&client->dev, "No platform data\n");
-		return -EINVAL;
-	}
-
-	r = st21nfca_hci_i2c_request_resources(client);
-	if (r) {
-		nfc_err(&client->dev, "Cannot get platform resources\n");
-		return r;
-	}
-
-	/* IRQ */
-	irq = gpio_to_irq(phy->gpio_irq);
-	if (irq < 0) {
-		nfc_err(&client->dev,
-				"Unable to get irq number for GPIO %d error %d\n",
-				phy->gpio_irq, r);
+	if (!pdata && client->dev.of_node) {
+		r = st21nfca_hci_i2c_of_request_resources(client);
+		if (r) {
+			nfc_err(&client->dev, "No platform data\n");
+			return r;
+		}
+	} else if (pdata) {
+		r = st21nfca_hci_i2c_request_resources(client);
+		if (r) {
+			nfc_err(&client->dev, "Cannot get platform resources\n");
+			return r;
+		}
+	} else {
+		nfc_err(&client->dev, "st21nfca platform resources not available\n");
 		return -ENODEV;
 	}
-	client->irq = irq;
 
 	r = st21nfca_hci_platform_init(phy);
 	if (r < 0) {
@@ -639,10 +700,17 @@ static int st21nfca_hci_i2c_remove(struct i2c_client *client)
 	return 0;
 }
 
+static const struct of_device_id of_st21nfca_i2c_match[] = {
+	{ .compatible = "st,st21nfca_i2c", },
+	{}
+};
+
 static struct i2c_driver st21nfca_hci_i2c_driver = {
 	.driver = {
 		.owner = THIS_MODULE,
 		.name = ST21NFCA_HCI_I2C_DRIVER_NAME,
+		.owner = THIS_MODULE,
+		.of_match_table = of_match_ptr(of_st21nfca_i2c_match),
 	},
 	.probe = st21nfca_hci_i2c_probe,
 	.id_table = st21nfca_hci_i2c_id_table,
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH 08/10] NFC: dts: st21nfca_i2c: Add DTS Documentation
       [not found] ` <1398374379-17133-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
                     ` (6 preceding siblings ...)
  2014-04-24 21:19   ` [PATCH 07/10] NFC: dts: st21nfca: Add device-tree (Open Firmware) support to st21nfca Christophe Ricard
@ 2014-04-24 21:19   ` Christophe Ricard
  2014-04-24 21:19   ` [PATCH 09/10] NFC: st21nfca: Improve load_session in order to create pipe when it does not exists Christophe Ricard
                     ` (2 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Christophe Ricard @ 2014-04-24 21:19 UTC (permalink / raw)
  To: linux-nfc-hn68Rpc1hR1g9hUCZPvPmw, sameo-VuQAYsv1563Yd54FQh9/CA
  Cc: devicetree-u79uwXL29TY76Z2rM5mHXA,
	christophe.ricard-Re5JQEeQqe8AvxtiuMwx3w,
	christophe-h.ricard-qxv4g6HH51o

Describe the properties used by the st21nfca NFC controller driver.

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 .../devicetree/bindings/net/nfc/st21nfca.txt       | 33 ++++++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/net/nfc/st21nfca.txt

diff --git a/Documentation/devicetree/bindings/net/nfc/st21nfca.txt b/Documentation/devicetree/bindings/net/nfc/st21nfca.txt
new file mode 100644
index 0000000..4724fe6
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/nfc/st21nfca.txt
@@ -0,0 +1,33 @@
+* STMicroelectronics SAS. ST21NFCA NFC Controller
+
+Required properties:
+- compatible: Should be "st,st21nfca-i2c".
+- clock-frequency: I²C work frequency.
+- reg: address on the bus
+- interrupt-parent: phandle for the interrupt gpio controller
+- interrupts: GPIO interrupt to which the chip is connected
+- enable-gpios: Output GPIO pin used for enabling/disabling the ST21NFCA
+
+Optional SoC Specific Properties:
+- pinctrl-names: Contains only one value - "default".
+- pintctrl-0: Specifies the pin control groups used for this controller.
+
+Example (for ARM-based BeagleBoard xM with ST21NFCA on I2C2):
+
+&i2c2 {
+
+	status = "okay";
+
+	st21nfca: st21nfca@1 {
+
+		compatible = "st,st21nfca_i2c";
+
+		reg = <0x01>;
+		clock-frequency = <400000>;
+
+		interrupt-parent = <&gpio5>;
+		interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
+
+		enable-gpios = <&gpio5 29 GPIO_ACTIVE_HIGH>;
+	};
+};
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH 09/10] NFC: st21nfca: Improve load_session in order to create pipe when it does not exists
       [not found] ` <1398374379-17133-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
                     ` (7 preceding siblings ...)
  2014-04-24 21:19   ` [PATCH 08/10] NFC: dts: st21nfca_i2c: Add DTS Documentation Christophe Ricard
@ 2014-04-24 21:19   ` Christophe Ricard
  2014-04-24 21:19   ` [PATCH 10/10] NFC: st21nfca: Add ISO15693 Reader/Writer support Christophe Ricard
  2014-05-04 23:09   ` [PATCH 00/10] Clean up, DTS and ISO15693 support Samuel Ortiz
  10 siblings, 0 replies; 12+ messages in thread
From: Christophe Ricard @ 2014-04-24 21:19 UTC (permalink / raw)
  To: linux-nfc-hn68Rpc1hR1g9hUCZPvPmw, sameo-VuQAYsv1563Yd54FQh9/CA
  Cc: devicetree-u79uwXL29TY76Z2rM5mHXA,
	christophe.ricard-Re5JQEeQqe8AvxtiuMwx3w,
	christophe-h.ricard-qxv4g6HH51o

In case anybody uses previous patchset with the CLF, add a check to make sure
missing pipe are created.
st21nfca returns its pipe list in the creation order (most recent latest).

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/nfc/st21nfca/st21nfca.c | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/drivers/nfc/st21nfca/st21nfca.c b/drivers/nfc/st21nfca/st21nfca.c
index 201a3ea..d9ee3d0 100644
--- a/drivers/nfc/st21nfca/st21nfca.c
+++ b/drivers/nfc/st21nfca/st21nfca.c
@@ -61,10 +61,10 @@
 static DECLARE_BITMAP(dev_mask, ST21NFCA_NUM_DEVICES);
 
 static struct nfc_hci_gate st21nfca_gates[] = {
-	{NFC_HCI_ADMIN_GATE, NFC_HCI_INVALID_PIPE},
+	{NFC_HCI_ADMIN_GATE, NFC_HCI_ADMIN_PIPE},
 	{NFC_HCI_LOOPBACK_GATE, NFC_HCI_INVALID_PIPE},
 	{NFC_HCI_ID_MGMT_GATE, NFC_HCI_INVALID_PIPE},
-	{NFC_HCI_LINK_MGMT_GATE, NFC_HCI_INVALID_PIPE},
+	{NFC_HCI_LINK_MGMT_GATE, NFC_HCI_LINK_MGMT_PIPE},
 	{NFC_HCI_RF_READER_B_GATE, NFC_HCI_INVALID_PIPE},
 	{NFC_HCI_RF_READER_A_GATE, NFC_HCI_INVALID_PIPE},
 	{ST21NFCA_DEVICE_MGNT_GATE, ST21NFCA_DEVICE_MGNT_PIPE},
@@ -170,6 +170,23 @@ static int st21nfca_hci_load_session(struct nfc_hci_dev *hdev)
 				st21nfca_gates[j].pipe;
 		}
 	}
+
+	/*
+	 * 3 gates have a well known pipe ID.
+	 * They will never appear in the pipe list
+	 */
+	if (skb_pipe_list->len + 3 < ARRAY_SIZE(st21nfca_gates)) {
+		for (i = skb_pipe_list->len + 3;
+				i < ARRAY_SIZE(st21nfca_gates); i++) {
+			r = nfc_hci_connect_gate(hdev,
+					NFC_HCI_HOST_CONTROLLER_ID,
+					st21nfca_gates[i].gate,
+					st21nfca_gates[i].pipe);
+			if (r < 0)
+				goto free_info;
+		}
+	}
+
 	memcpy(hdev->init_data.gates, st21nfca_gates, sizeof(st21nfca_gates));
 free_info:
 	kfree_skb(skb_pipe_info);
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH 10/10] NFC: st21nfca: Add ISO15693 Reader/Writer support
       [not found] ` <1398374379-17133-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
                     ` (8 preceding siblings ...)
  2014-04-24 21:19   ` [PATCH 09/10] NFC: st21nfca: Improve load_session in order to create pipe when it does not exists Christophe Ricard
@ 2014-04-24 21:19   ` Christophe Ricard
  2014-05-04 23:09   ` [PATCH 00/10] Clean up, DTS and ISO15693 support Samuel Ortiz
  10 siblings, 0 replies; 12+ messages in thread
From: Christophe Ricard @ 2014-04-24 21:19 UTC (permalink / raw)
  To: linux-nfc-hn68Rpc1hR1g9hUCZPvPmw, sameo-VuQAYsv1563Yd54FQh9/CA
  Cc: devicetree-u79uwXL29TY76Z2rM5mHXA,
	christophe.ricard-Re5JQEeQqe8AvxtiuMwx3w,
	christophe-h.ricard-qxv4g6HH51o

Add support for ISO/IEC 15693 RF technology and Type 5 tags.
ISO15963 is using proprietary gate 12.

Signed-off-by: Christophe Ricard <christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
---
 drivers/nfc/st21nfca/st21nfca.c | 73 ++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 72 insertions(+), 1 deletion(-)

diff --git a/drivers/nfc/st21nfca/st21nfca.c b/drivers/nfc/st21nfca/st21nfca.c
index d9ee3d0..51e0f00b 100644
--- a/drivers/nfc/st21nfca/st21nfca.c
+++ b/drivers/nfc/st21nfca/st21nfca.c
@@ -33,6 +33,7 @@
 #define ST21NFCA_RF_READER_CMD_PRESENCE_CHECK	0x30
 
 #define ST21NFCA_RF_READER_ISO15693_GATE	0x12
+#define ST21NFCA_RF_READER_ISO15693_INVENTORY 0x01
 
 /*
  * Reader gate for communication with contact-less cards using Type A
@@ -70,6 +71,7 @@ static struct nfc_hci_gate st21nfca_gates[] = {
 	{ST21NFCA_DEVICE_MGNT_GATE, ST21NFCA_DEVICE_MGNT_PIPE},
 	{ST21NFCA_RF_READER_F_GATE, NFC_HCI_INVALID_PIPE},
 	{ST21NFCA_RF_READER_14443_3_A_GATE, NFC_HCI_INVALID_PIPE},
+	{ST21NFCA_RF_READER_ISO15693_GATE, NFC_HCI_INVALID_PIPE},
 };
 
 struct st21nfca_pipe_info {
@@ -421,6 +423,34 @@ exit:
 	return r;
 }
 
+static int st21nfca_get_iso15693_inventory(struct nfc_hci_dev *hdev,
+					   struct nfc_target *target)
+{
+	int r;
+	struct sk_buff *inventory_skb = NULL;
+
+	r = nfc_hci_get_param(hdev, ST21NFCA_RF_READER_ISO15693_GATE,
+			      ST21NFCA_RF_READER_ISO15693_INVENTORY,
+			      &inventory_skb);
+	if (r < 0)
+		goto exit;
+
+	skb_pull(inventory_skb, 2);
+
+	if (inventory_skb->len == 0 ||
+	    inventory_skb->len > NFC_ISO15693_UID_MAXSIZE) {
+		r = -EPROTO;
+		goto exit;
+	}
+
+	memcpy(target->iso15693_uid, inventory_skb->data, inventory_skb->len);
+	target->iso15693_dsfid	= inventory_skb->data[1];
+	target->is_iso15693 = 1;
+exit:
+	kfree_skb(inventory_skb);
+	return r;
+}
+
 static int st21nfca_hci_target_from_gate(struct nfc_hci_dev *hdev, u8 gate,
 					 struct nfc_target *target)
 {
@@ -462,6 +492,12 @@ static int st21nfca_hci_target_from_gate(struct nfc_hci_dev *hdev, u8 gate,
 		}
 
 		break;
+	case ST21NFCA_RF_READER_ISO15693_GATE:
+		target->supported_protocols = NFC_PROTO_ISO15693_MASK;
+		r = st21nfca_get_iso15693_inventory(hdev, target);
+		if (r < 0)
+			return r;
+		break;
 	default:
 		return -EPROTO;
 	}
@@ -469,6 +505,25 @@ static int st21nfca_hci_target_from_gate(struct nfc_hci_dev *hdev, u8 gate,
 	return 0;
 }
 
+#define ST21NFCA_CB_TYPE_READER_ISO15693 1
+static void st21nfca_hci_data_exchange_cb(void *context, struct sk_buff *skb,
+					  int err)
+{
+	struct st21nfca_hci_info *info = context;
+
+	switch (info->async_cb_type) {
+	case ST21NFCA_CB_TYPE_READER_ISO15693:
+		if (err == 0)
+			skb_trim(skb, skb->len - 1);
+		info->async_cb(info->async_cb_context, skb, err);
+		break;
+	default:
+		if (err == 0)
+			kfree_skb(skb);
+		break;
+	}
+}
+
 /*
  * Returns:
  * <= 0: driver handled the data exchange
@@ -479,6 +534,8 @@ static int st21nfca_hci_im_transceive(struct nfc_hci_dev *hdev,
 				      struct sk_buff *skb,
 				      data_exchange_cb_t cb, void *cb_context)
 {
+	struct st21nfca_hci_info *info = nfc_hci_get_clientdata(hdev);
+
 	pr_info(DRIVER_DESC ": %s for gate=%d len=%d\n", __func__,
 		target->hci_reader_gate, skb->len);
 
@@ -494,6 +551,19 @@ static int st21nfca_hci_im_transceive(struct nfc_hci_dev *hdev,
 		return nfc_hci_send_cmd_async(hdev, target->hci_reader_gate,
 					      ST21NFCA_WR_XCHG_DATA, skb->data,
 					      skb->len, cb, cb_context);
+	case ST21NFCA_RF_READER_ISO15693_GATE:
+		info->async_cb_type = ST21NFCA_CB_TYPE_READER_ISO15693;
+		info->async_cb = cb;
+		info->async_cb_context = cb_context;
+
+		*skb_push(skb, 1) = 0x17;
+
+		return nfc_hci_send_cmd_async(hdev, target->hci_reader_gate,
+					      ST21NFCA_WR_XCHG_DATA, skb->data,
+					      skb->len,
+					      st21nfca_hci_data_exchange_cb,
+					      info);
+		break;
 	default:
 		return 1;
 	}
@@ -577,7 +647,8 @@ int st21nfca_hci_probe(void *phy_id, struct nfc_phy_ops *phy_ops,
 	    NFC_PROTO_MIFARE_MASK |
 	    NFC_PROTO_FELICA_MASK |
 	    NFC_PROTO_ISO14443_MASK |
-	    NFC_PROTO_ISO14443_B_MASK;
+	    NFC_PROTO_ISO14443_B_MASK |
+	    NFC_PROTO_ISO15693_MASK;
 
 	set_bit(NFC_HCI_QUIRK_SHORT_CLEAR, &quirks);
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH 00/10] Clean up, DTS and ISO15693 support
       [not found] ` <1398374379-17133-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
                     ` (9 preceding siblings ...)
  2014-04-24 21:19   ` [PATCH 10/10] NFC: st21nfca: Add ISO15693 Reader/Writer support Christophe Ricard
@ 2014-05-04 23:09   ` Samuel Ortiz
  10 siblings, 0 replies; 12+ messages in thread
From: Samuel Ortiz @ 2014-05-04 23:09 UTC (permalink / raw)
  To: Christophe Ricard
  Cc: linux-nfc-hn68Rpc1hR1g9hUCZPvPmw,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	christophe-h.ricard-qxv4g6HH51o

Hi Christophe,

On Thu, Apr 24, 2014 at 11:19:29PM +0200, Christophe Ricard wrote:
> This patchset applies on top of:
> 18d2c624f9c08a80ac317eacea75d136cf59c459
> NFC: st21nfca: Improve st21nfca initialization by handling reboot properly
The first 6 patches are applied, I'll be looking at the DTS and the type
V ones next. Thanks.

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

end of thread, other threads:[~2014-05-04 23:09 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-24 21:19 [PATCH 00/10] Clean up, DTS and ISO15693 support Christophe Ricard
     [not found] ` <1398374379-17133-1-git-send-email-christophe-h.ricard-qxv4g6HH51o@public.gmane.org>
2014-04-24 21:19   ` [PATCH 01/10] NFC: st21nfca: Remove few useless include Christophe Ricard
2014-04-24 21:19   ` [PATCH 02/10] NFC: st21nfca: Fix incorrect TAILROOM and st21nfca_hci_remove_len_crc Christophe Ricard
2014-04-24 21:19   ` [PATCH 03/10] NFC: st21nfca: Fix incorrect byte stuffing revocation Christophe Ricard
2014-04-24 21:19   ` [PATCH 04/10] NFC: st21nfca: Improved check for correct data reception on i2c bus Christophe Ricard
2014-04-24 21:19   ` [PATCH 05/10] NFC: st21nfca: Add mutex to force a successful i2c transaction Christophe Ricard
2014-04-24 21:19   ` [PATCH 06/10] NFC: st21nfca: Free buffer when a bad frame is detected Christophe Ricard
2014-04-24 21:19   ` [PATCH 07/10] NFC: dts: st21nfca: Add device-tree (Open Firmware) support to st21nfca Christophe Ricard
2014-04-24 21:19   ` [PATCH 08/10] NFC: dts: st21nfca_i2c: Add DTS Documentation Christophe Ricard
2014-04-24 21:19   ` [PATCH 09/10] NFC: st21nfca: Improve load_session in order to create pipe when it does not exists Christophe Ricard
2014-04-24 21:19   ` [PATCH 10/10] NFC: st21nfca: Add ISO15693 Reader/Writer support Christophe Ricard
2014-05-04 23:09   ` [PATCH 00/10] Clean up, DTS and ISO15693 support Samuel Ortiz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox