mei.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2013 Intel Corporation. All rights reserved.
  4. *
  5. * HCI based Driver for Inside Secure microread NFC Chip
  6. */
  7. #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  8. #include <linux/module.h>
  9. #include <linux/mod_devicetable.h>
  10. #include <linux/nfc.h>
  11. #include <net/nfc/llc.h>
  12. #include "../mei_phy.h"
  13. #include "microread.h"
  14. #define MICROREAD_DRIVER_NAME "microread"
  15. static int microread_mei_probe(struct mei_cl_device *cldev,
  16. const struct mei_cl_device_id *id)
  17. {
  18. struct nfc_mei_phy *phy;
  19. int r;
  20. phy = nfc_mei_phy_alloc(cldev);
  21. if (!phy)
  22. return -ENOMEM;
  23. r = microread_probe(phy, &mei_phy_ops, LLC_NOP_NAME,
  24. MEI_NFC_HEADER_SIZE, 0, MEI_NFC_MAX_HCI_PAYLOAD,
  25. &phy->hdev);
  26. if (r < 0) {
  27. nfc_mei_phy_free(phy);
  28. return r;
  29. }
  30. return 0;
  31. }
  32. static void microread_mei_remove(struct mei_cl_device *cldev)
  33. {
  34. struct nfc_mei_phy *phy = mei_cldev_get_drvdata(cldev);
  35. microread_remove(phy->hdev);
  36. nfc_mei_phy_free(phy);
  37. }
  38. static struct mei_cl_device_id microread_mei_tbl[] = {
  39. { MICROREAD_DRIVER_NAME, MEI_NFC_UUID, MEI_CL_VERSION_ANY},
  40. /* required last entry */
  41. { }
  42. };
  43. MODULE_DEVICE_TABLE(mei, microread_mei_tbl);
  44. static struct mei_cl_driver microread_driver = {
  45. .id_table = microread_mei_tbl,
  46. .name = MICROREAD_DRIVER_NAME,
  47. .probe = microread_mei_probe,
  48. .remove = microread_mei_remove,
  49. };
  50. module_mei_cl_driver(microread_driver);
  51. MODULE_LICENSE("GPL");
  52. MODULE_DESCRIPTION(DRIVER_DESC);