lkml.org 
[lkml]   [2013]   [Feb]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[char-misc-next 10/11] mei: nfc: Add NFC device to the MEI bus
    Date
    From: Samuel Ortiz <sameo@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 <sameo@linux.intel.com>
    Signed-off-by: Tomas Winkler <tomas.winkler@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


    \
     
     \ /
      Last update: 2013-02-07 22:43    [W:4.197 / U:0.292 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site