Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * Copyright (C) 2013 Intel Corporation. All rights reserved.
0004  *
0005  * HCI based Driver for Inside Secure microread NFC Chip
0006  */
0007 
0008 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0009 
0010 #include <linux/module.h>
0011 #include <linux/mod_devicetable.h>
0012 #include <linux/nfc.h>
0013 #include <net/nfc/llc.h>
0014 
0015 #include "../mei_phy.h"
0016 #include "microread.h"
0017 
0018 #define MICROREAD_DRIVER_NAME "microread"
0019 
0020 static int microread_mei_probe(struct mei_cl_device *cldev,
0021                    const struct mei_cl_device_id *id)
0022 {
0023     struct nfc_mei_phy *phy;
0024     int r;
0025 
0026     phy = nfc_mei_phy_alloc(cldev);
0027     if (!phy)
0028         return -ENOMEM;
0029 
0030     r = microread_probe(phy, &mei_phy_ops, LLC_NOP_NAME,
0031                 MEI_NFC_HEADER_SIZE, 0, MEI_NFC_MAX_HCI_PAYLOAD,
0032                 &phy->hdev);
0033     if (r < 0) {
0034         nfc_mei_phy_free(phy);
0035 
0036         return r;
0037     }
0038 
0039     return 0;
0040 }
0041 
0042 static void microread_mei_remove(struct mei_cl_device *cldev)
0043 {
0044     struct nfc_mei_phy *phy = mei_cldev_get_drvdata(cldev);
0045 
0046     microread_remove(phy->hdev);
0047 
0048     nfc_mei_phy_free(phy);
0049 }
0050 
0051 static struct mei_cl_device_id microread_mei_tbl[] = {
0052     { MICROREAD_DRIVER_NAME, MEI_NFC_UUID, MEI_CL_VERSION_ANY},
0053 
0054     /* required last entry */
0055     { }
0056 };
0057 MODULE_DEVICE_TABLE(mei, microread_mei_tbl);
0058 
0059 static struct mei_cl_driver microread_driver = {
0060     .id_table = microread_mei_tbl,
0061     .name = MICROREAD_DRIVER_NAME,
0062 
0063     .probe = microread_mei_probe,
0064     .remove = microread_mei_remove,
0065 };
0066 
0067 module_mei_cl_driver(microread_driver);
0068 
0069 MODULE_LICENSE("GPL");
0070 MODULE_DESCRIPTION(DRIVER_DESC);