From: Samuel Ortiz <sa...@linux.intel.com> After building its bus name as a string based on its vendor id and radio type, we can add it to the bus.
Signed-off-by: Samuel Ortiz <sa...@linux.intel.com> Signed-off-by: Tomas Winkler <tomas.wink...@intel.com> --- drivers/misc/mei/nfc.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ drivers/misc/mei/nfc.h | 6 +++++ 2 files changed, 62 insertions(+), 0 deletions(-) diff --git a/drivers/misc/mei/nfc.c b/drivers/misc/mei/nfc.c index ab66944..c65bd44 100644 --- a/drivers/misc/mei/nfc.c +++ b/drivers/misc/mei/nfc.c @@ -43,6 +43,8 @@ struct mei_bus_dev_nfc { u8 fw_ivn; u8 vendor_id; u8 radio_type; + + char *bus_name; }; struct mei_bus_dev_nfc nfc_bdev; @@ -71,6 +73,39 @@ static void mei_nfc_free(struct mei_bus_dev_nfc *bdev) } } +static int mei_nfc_build_bus_name(struct mei_bus_dev_nfc *bdev) +{ + struct mei_device *dev; + + if (!bdev->cl) + return -ENODEV; + + dev = bdev->cl->dev; + + switch (bdev->vendor_id) { + case MEI_NFC_VENDOR_INSIDE: + switch (bdev->radio_type) { + case MEI_NFC_VENDOR_INSIDE_UREAD: + bdev->bus_name = "microread"; + return 0; + + default: + dev_err(&dev->pdev->dev, "Unknow radio type 0x%x\n", + bdev->radio_type); + + return -EINVAL; + } + + default: + dev_err(&dev->pdev->dev, "Unknow vendor ID 0x%x\n", + bdev->vendor_id); + + return -EINVAL; + } + + return 0; +} + static int mei_nfc_connect(struct mei_bus_dev_nfc *bdev) { struct mei_device *dev; @@ -192,6 +227,7 @@ err: static void mei_nfc_init(struct work_struct *work) { struct mei_device *dev; + struct mei_bus_client *bus_client; struct mei_bus_dev_nfc *bdev; struct mei_cl *cl_info, *cl; int ret; @@ -243,6 +279,23 @@ static void mei_nfc_init(struct work_struct *work) return; } + if (mei_nfc_build_bus_name(bdev) < 0) { + dev_err(&dev->pdev->dev, + "Could not build the bus ID name\n"); + return; + } + + bus_client = mei_add_device(dev, mei_nfc_guid, + bdev->bus_name); + if (!bus_client) { + dev_err(&dev->pdev->dev, + "Could not add the NFC device to the MEI bus\n"); + + goto err; + } + + bus_client->priv_data = bdev; + return; err: @@ -324,5 +377,8 @@ void mei_nfc_host_exit(void) { struct mei_bus_dev_nfc *bdev = &nfc_bdev; + if (bdev->cl && bdev->cl->client) + mei_remove_device(bdev->cl->client); + mei_nfc_free(bdev); } diff --git a/drivers/misc/mei/nfc.h b/drivers/misc/mei/nfc.h index 59e6703..4440436 100644 --- a/drivers/misc/mei/nfc.h +++ b/drivers/misc/mei/nfc.h @@ -119,4 +119,10 @@ struct mei_nfc_connect_resp { #define MEI_NFC_SUBCMD_CONNECT 0x00 #define MEI_NFC_SUBCMD_IF_VERSION 0x01 +/* Vendors */ +#define MEI_NFC_VENDOR_INSIDE 0x00 + +/* Radio types */ +#define MEI_NFC_VENDOR_INSIDE_UREAD 0x00 + #endif /* _MEI_NFC_H */ -- 1.7.4.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/