Commit 323a98db authored by John W. Linville's avatar John W. Linville
Browse files

Samuel Ortiz <sameo@linux.intel.com> says:

"Merge tag 'nfc-fixes-3.10-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/nfc-fixes



This is the first batch of NFC fixes for 3.10, and it contains:

- 3 fixes for the NFC MEI support:
	* We now depend on the correct Kconfig symbol.
	* We register an MEI event callback whenever we enable an NFC device,
	  otherwise we fail to read anything after an enable/disable cycle.
	* We only disable an MEI device from its disable mey_phy_ops,
	  preventing useless consecutive disable calls.

- An NFC Makefile cleanup, as I forgot to remove a commented out line when
  moving the LLCP code to the NFC top level directory."

Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parents 6bb4880d e3a6b14c
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -28,7 +28,7 @@ config NFC_WILINK


config NFC_MEI_PHY
config NFC_MEI_PHY
	tristate "MEI bus NFC device support"
	tristate "MEI bus NFC device support"
	depends on INTEL_MEI_BUS_NFC && NFC_HCI
	depends on INTEL_MEI && NFC_HCI
	help
	help
	  This adds support to use an mei bus nfc device. Select this if you
	  This adds support to use an mei bus nfc device. Select this if you
	  will use an HCI NFC driver for an NFC chip connected behind an
	  will use an HCI NFC driver for an NFC chip connected behind an
+9 −0
Original line number Original line Diff line number Diff line
@@ -64,6 +64,15 @@ int nfc_mei_phy_enable(void *phy_id)
                return r;
                return r;
	}
	}


	r = mei_cl_register_event_cb(phy->device, nfc_mei_event_cb, phy);
	if (r) {
		pr_err("MEY_PHY: Event cb registration failed\n");
		mei_cl_disable_device(phy->device);
		phy->powered = 0;

		return r;
	}

	phy->powered = 1;
	phy->powered = 1;


	return 0;
	return 0;
+5 −15
Original line number Original line Diff line number Diff line
@@ -43,26 +43,18 @@ static int microread_mei_probe(struct mei_cl_device *device,
		return -ENOMEM;
		return -ENOMEM;
	}
	}


	r = mei_cl_register_event_cb(device, nfc_mei_event_cb, phy);
	if (r) {
		pr_err(MICROREAD_DRIVER_NAME ": event cb registration failed\n");
		goto err_out;
	}

	r = microread_probe(phy, &mei_phy_ops, LLC_NOP_NAME,
	r = microread_probe(phy, &mei_phy_ops, LLC_NOP_NAME,
			    MEI_NFC_HEADER_SIZE, 0, MEI_NFC_MAX_HCI_PAYLOAD,
			    MEI_NFC_HEADER_SIZE, 0, MEI_NFC_MAX_HCI_PAYLOAD,
			    &phy->hdev);
			    &phy->hdev);
	if (r < 0)
	if (r < 0) {
		goto err_out;

	return 0;

err_out:
		nfc_mei_phy_free(phy);
		nfc_mei_phy_free(phy);


		return r;
		return r;
	}
	}


	return 0;
}

static int microread_mei_remove(struct mei_cl_device *device)
static int microread_mei_remove(struct mei_cl_device *device)
{
{
	struct nfc_mei_phy *phy = mei_cl_get_drvdata(device);
	struct nfc_mei_phy *phy = mei_cl_get_drvdata(device);
@@ -71,8 +63,6 @@ static int microread_mei_remove(struct mei_cl_device *device)


	microread_remove(phy->hdev);
	microread_remove(phy->hdev);


	nfc_mei_phy_disable(phy);

	nfc_mei_phy_free(phy);
	nfc_mei_phy_free(phy);


	return 0;
	return 0;
+5 −15
Original line number Original line Diff line number Diff line
@@ -43,26 +43,18 @@ static int pn544_mei_probe(struct mei_cl_device *device,
		return -ENOMEM;
		return -ENOMEM;
	}
	}


	r = mei_cl_register_event_cb(device, nfc_mei_event_cb, phy);
	if (r) {
		pr_err(PN544_DRIVER_NAME ": event cb registration failed\n");
		goto err_out;
	}

	r = pn544_hci_probe(phy, &mei_phy_ops, LLC_NOP_NAME,
	r = pn544_hci_probe(phy, &mei_phy_ops, LLC_NOP_NAME,
			    MEI_NFC_HEADER_SIZE, 0, MEI_NFC_MAX_HCI_PAYLOAD,
			    MEI_NFC_HEADER_SIZE, 0, MEI_NFC_MAX_HCI_PAYLOAD,
			    &phy->hdev);
			    &phy->hdev);
	if (r < 0)
	if (r < 0) {
		goto err_out;

	return 0;

err_out:
		nfc_mei_phy_free(phy);
		nfc_mei_phy_free(phy);


		return r;
		return r;
	}
	}


	return 0;
}

static int pn544_mei_remove(struct mei_cl_device *device)
static int pn544_mei_remove(struct mei_cl_device *device)
{
{
	struct nfc_mei_phy *phy = mei_cl_get_drvdata(device);
	struct nfc_mei_phy *phy = mei_cl_get_drvdata(device);
@@ -71,8 +63,6 @@ static int pn544_mei_remove(struct mei_cl_device *device)


	pn544_hci_remove(phy->hdev);
	pn544_hci_remove(phy->hdev);


	nfc_mei_phy_disable(phy);

	nfc_mei_phy_free(phy);
	nfc_mei_phy_free(phy);


	return 0;
	return 0;
+0 −1
Original line number Original line Diff line number Diff line
@@ -5,7 +5,6 @@
obj-$(CONFIG_NFC) += nfc.o
obj-$(CONFIG_NFC) += nfc.o
obj-$(CONFIG_NFC_NCI) += nci/
obj-$(CONFIG_NFC_NCI) += nci/
obj-$(CONFIG_NFC_HCI) += hci/
obj-$(CONFIG_NFC_HCI) += hci/
#obj-$(CONFIG_NFC_LLCP) += llcp/


nfc-objs := core.o netlink.o af_nfc.o rawsock.o llcp_core.o llcp_commands.o \
nfc-objs := core.o netlink.o af_nfc.o rawsock.o llcp_core.o llcp_commands.o \
		llcp_sock.o
		llcp_sock.o