linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC] [PATCH 0/2 v2] NFC RFKILL support
@ 2013-04-11 11:09 Samuel Ortiz
  2013-04-11 11:09 ` [RFC] [PATCH 1/2 v2] rfkill: Add NFC to the list of supported radios Samuel Ortiz
  2013-04-11 11:09 ` [RFC] [PATCH 2/2 v2] NFC: RFKILL support Samuel Ortiz
  0 siblings, 2 replies; 6+ messages in thread
From: Samuel Ortiz @ 2013-04-11 11:09 UTC (permalink / raw)
  To: John W. Linville, Johannes Berg
  Cc: Marcel Holtmann, Linux NFC, Linux Wireless, Samuel Ortiz

This is a RFC for adding RFKILL support to NFC>
As I said in v1, I'd like to pass this one through my next NFC pull request,
I'm looking for Johannes and/or Marcel ACKs before doing so.

v2:
	* Split the initial patch into 2: One for the core rfkill parts,
	  another one for the NFC bits.
	* Added a comment line for RFKILL_TYPE_NFC in rfkill.h

Samuel Ortiz (2):
  rfkill: Add NFC to the list of supported radios
  NFC: RFKILL support

 include/net/nfc/nfc.h       |    2 ++
 include/uapi/linux/rfkill.h |    2 ++
 net/nfc/core.c              |   38 ++++++++++++++++++++++++++++++++++++++
 net/rfkill/core.c           |    4 +++-
 4 files changed, 45 insertions(+), 1 deletion(-)

-- 
1.7.10.4


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

* [RFC] [PATCH 1/2 v2] rfkill: Add NFC to the list of supported radios
  2013-04-11 11:09 [RFC] [PATCH 0/2 v2] NFC RFKILL support Samuel Ortiz
@ 2013-04-11 11:09 ` Samuel Ortiz
  2013-04-11 12:34   ` Johannes Berg
  2013-04-11 17:28   ` Marcel Holtmann
  2013-04-11 11:09 ` [RFC] [PATCH 2/2 v2] NFC: RFKILL support Samuel Ortiz
  1 sibling, 2 replies; 6+ messages in thread
From: Samuel Ortiz @ 2013-04-11 11:09 UTC (permalink / raw)
  To: John W. Linville, Johannes Berg
  Cc: Marcel Holtmann, Linux NFC, Linux Wireless, Samuel Ortiz

And return the proper string for it.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
---
 include/uapi/linux/rfkill.h |    2 ++
 net/rfkill/core.c           |    4 +++-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/include/uapi/linux/rfkill.h b/include/uapi/linux/rfkill.h
index 2753c6c..058757f 100644
--- a/include/uapi/linux/rfkill.h
+++ b/include/uapi/linux/rfkill.h
@@ -37,6 +37,7 @@
  * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device.
  * @RFKILL_TYPE_GPS: switch is on a GPS device.
  * @RFKILL_TYPE_FM: switch is on a FM radio device.
+ * @RFKILL_TYPE_NFC: switch is on an NFC device.
  * @NUM_RFKILL_TYPES: number of defined rfkill types
  */
 enum rfkill_type {
@@ -48,6 +49,7 @@ enum rfkill_type {
 	RFKILL_TYPE_WWAN,
 	RFKILL_TYPE_GPS,
 	RFKILL_TYPE_FM,
+	RFKILL_TYPE_NFC,
 	NUM_RFKILL_TYPES,
 };
 
diff --git a/net/rfkill/core.c b/net/rfkill/core.c
index 9b9be52..1cec5e4 100644
--- a/net/rfkill/core.c
+++ b/net/rfkill/core.c
@@ -587,7 +587,7 @@ static ssize_t rfkill_name_show(struct device *dev,
 
 static const char *rfkill_get_type_str(enum rfkill_type type)
 {
-	BUILD_BUG_ON(NUM_RFKILL_TYPES != RFKILL_TYPE_FM + 1);
+	BUILD_BUG_ON(NUM_RFKILL_TYPES != RFKILL_TYPE_NFC + 1);
 
 	switch (type) {
 	case RFKILL_TYPE_WLAN:
@@ -604,6 +604,8 @@ static const char *rfkill_get_type_str(enum rfkill_type type)
 		return "gps";
 	case RFKILL_TYPE_FM:
 		return "fm";
+	case RFKILL_TYPE_NFC:
+		return "nfc";
 	default:
 		BUG();
 	}
-- 
1.7.10.4


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

* [RFC] [PATCH 2/2 v2] NFC: RFKILL support
  2013-04-11 11:09 [RFC] [PATCH 0/2 v2] NFC RFKILL support Samuel Ortiz
  2013-04-11 11:09 ` [RFC] [PATCH 1/2 v2] rfkill: Add NFC to the list of supported radios Samuel Ortiz
@ 2013-04-11 11:09 ` Samuel Ortiz
  2013-04-11 17:30   ` Marcel Holtmann
  1 sibling, 1 reply; 6+ messages in thread
From: Samuel Ortiz @ 2013-04-11 11:09 UTC (permalink / raw)
  To: John W. Linville, Johannes Berg
  Cc: Marcel Holtmann, Linux NFC, Linux Wireless, Samuel Ortiz

All NFC devices will now get proper RFKILL support as long as they provide
some dev_up and dev_down hooks. Rfkilling an NFC device will bring it down
while it is left to userspace to bring it back up when being rfkill unblocked.
This is very similar to what Bluetooth does.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
---
 include/net/nfc/nfc.h |    2 ++
 net/nfc/core.c        |   38 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+)

diff --git a/include/net/nfc/nfc.h b/include/net/nfc/nfc.h
index 87a6417..5eb80bb 100644
--- a/include/net/nfc/nfc.h
+++ b/include/net/nfc/nfc.h
@@ -122,6 +122,8 @@ struct nfc_dev {
 
 	bool shutting_down;
 
+	struct rfkill *rfkill;
+
 	struct nfc_ops *ops;
 };
 #define to_nfc_dev(_dev) container_of(_dev, struct nfc_dev, dev)
diff --git a/net/nfc/core.c b/net/nfc/core.c
index c571ca9..40d2527 100644
--- a/net/nfc/core.c
+++ b/net/nfc/core.c
@@ -27,6 +27,7 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/slab.h>
+#include <linux/rfkill.h>
 #include <linux/nfc.h>
 
 #include <net/genetlink.h>
@@ -58,6 +59,11 @@ int nfc_dev_up(struct nfc_dev *dev)
 
 	device_lock(&dev->dev);
 
+	if (dev->rfkill && rfkill_blocked(dev->rfkill)) {
+		rc = -ERFKILL;
+		goto error;
+	}
+
 	if (!device_is_registered(&dev->dev)) {
 		rc = -ENODEV;
 		goto error;
@@ -117,6 +123,24 @@ error:
 	return rc;
 }
 
+static int nfc_rfkill_set_block(void *data, bool blocked)
+{
+	struct nfc_dev *dev = data;
+
+	pr_debug("%s blocked %d", dev_name(&dev->dev), blocked);
+
+	if (!blocked)
+		return 0;
+
+	nfc_dev_down(dev);
+
+	return 0;
+}
+
+static const struct rfkill_ops nfc_rfkill_ops = {
+	.set_block = nfc_rfkill_set_block,
+};
+
 /**
  * nfc_start_poll - start polling for nfc targets
  *
@@ -840,6 +864,15 @@ int nfc_register_device(struct nfc_dev *dev)
 		pr_debug("The userspace won't be notified that the device %s was added\n",
 			 dev_name(&dev->dev));
 
+	dev->rfkill = rfkill_alloc(dev_name(&dev->dev), &dev->dev,
+				   RFKILL_TYPE_NFC, &nfc_rfkill_ops, dev);
+	if (dev->rfkill) {
+		if (rfkill_register(dev->rfkill) < 0) {
+			rfkill_destroy(dev->rfkill);
+			dev->rfkill = NULL;
+		}
+	}
+
 	return 0;
 }
 EXPORT_SYMBOL(nfc_register_device);
@@ -857,6 +890,11 @@ void nfc_unregister_device(struct nfc_dev *dev)
 
 	id = dev->idx;
 
+	if (dev->rfkill) {
+		rfkill_unregister(dev->rfkill);
+		rfkill_destroy(dev->rfkill);
+	}
+
 	if (dev->ops->check_presence) {
 		device_lock(&dev->dev);
 		dev->shutting_down = true;
-- 
1.7.10.4


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

* Re: [RFC] [PATCH 1/2 v2] rfkill: Add NFC to the list of supported radios
  2013-04-11 11:09 ` [RFC] [PATCH 1/2 v2] rfkill: Add NFC to the list of supported radios Samuel Ortiz
@ 2013-04-11 12:34   ` Johannes Berg
  2013-04-11 17:28   ` Marcel Holtmann
  1 sibling, 0 replies; 6+ messages in thread
From: Johannes Berg @ 2013-04-11 12:34 UTC (permalink / raw)
  To: Samuel Ortiz; +Cc: John W. Linville, Marcel Holtmann, Linux NFC, Linux Wireless

On Thu, 2013-04-11 at 13:09 +0200, Samuel Ortiz wrote:
> And return the proper string for it.
> 
> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>

Looks fine to me, feel free to take it through your tree.

Acked-by: Johannes Berg <johannes@sipsolutions.net>

johannes


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

* Re: [RFC] [PATCH 1/2 v2] rfkill: Add NFC to the list of supported radios
  2013-04-11 11:09 ` [RFC] [PATCH 1/2 v2] rfkill: Add NFC to the list of supported radios Samuel Ortiz
  2013-04-11 12:34   ` Johannes Berg
@ 2013-04-11 17:28   ` Marcel Holtmann
  1 sibling, 0 replies; 6+ messages in thread
From: Marcel Holtmann @ 2013-04-11 17:28 UTC (permalink / raw)
  To: Samuel Ortiz; +Cc: John W. Linville, Johannes Berg, Linux NFC, Linux Wireless

Hi Samuel,

> And return the proper string for it.
> 
> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
> ---
> include/uapi/linux/rfkill.h |    2 ++
> net/rfkill/core.c           |    4 +++-
> 2 files changed, 5 insertions(+), 1 deletion(-)

Acked-by: Marcel Holtmann <marcel@holtmann.org>

Regards



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

* Re: [RFC] [PATCH 2/2 v2] NFC: RFKILL support
  2013-04-11 11:09 ` [RFC] [PATCH 2/2 v2] NFC: RFKILL support Samuel Ortiz
@ 2013-04-11 17:30   ` Marcel Holtmann
  0 siblings, 0 replies; 6+ messages in thread
From: Marcel Holtmann @ 2013-04-11 17:30 UTC (permalink / raw)
  To: Samuel Ortiz; +Cc: John W. Linville, Johannes Berg, Linux NFC, Linux Wireless

Hi Samuel,

> All NFC devices will now get proper RFKILL support as long as they provide
> some dev_up and dev_down hooks. Rfkilling an NFC device will bring it down
> while it is left to userspace to bring it back up when being rfkill unblocked.
> This is very similar to what Bluetooth does.

this is almost a literal copy of my Bluetooth RFKILL patch ;)

> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
> ---
> include/net/nfc/nfc.h |    2 ++
> net/nfc/core.c        |   38 ++++++++++++++++++++++++++++++++++++++
> 2 files changed, 40 insertions(+)

Acked-by: Marcel Holtmann <marcel@holtmann.org>

Regards

Marcel


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

end of thread, other threads:[~2013-04-11 17:30 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-11 11:09 [RFC] [PATCH 0/2 v2] NFC RFKILL support Samuel Ortiz
2013-04-11 11:09 ` [RFC] [PATCH 1/2 v2] rfkill: Add NFC to the list of supported radios Samuel Ortiz
2013-04-11 12:34   ` Johannes Berg
2013-04-11 17:28   ` Marcel Holtmann
2013-04-11 11:09 ` [RFC] [PATCH 2/2 v2] NFC: RFKILL support Samuel Ortiz
2013-04-11 17:30   ` Marcel Holtmann

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).