sysfs.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * PPS sysfs support
  4. *
  5. * Copyright (C) 2007-2009 Rodolfo Giometti <giometti@linux.it>
  6. */
  7. #include <linux/device.h>
  8. #include <linux/module.h>
  9. #include <linux/string.h>
  10. #include <linux/pps_kernel.h>
  11. /*
  12. * Attribute functions
  13. */
  14. static ssize_t assert_show(struct device *dev, struct device_attribute *attr,
  15. char *buf)
  16. {
  17. struct pps_device *pps = dev_get_drvdata(dev);
  18. if (!(pps->info.mode & PPS_CAPTUREASSERT))
  19. return 0;
  20. return sprintf(buf, "%lld.%09d#%d\n",
  21. (long long) pps->assert_tu.sec, pps->assert_tu.nsec,
  22. pps->assert_sequence);
  23. }
  24. static DEVICE_ATTR_RO(assert);
  25. static ssize_t clear_show(struct device *dev, struct device_attribute *attr,
  26. char *buf)
  27. {
  28. struct pps_device *pps = dev_get_drvdata(dev);
  29. if (!(pps->info.mode & PPS_CAPTURECLEAR))
  30. return 0;
  31. return sprintf(buf, "%lld.%09d#%d\n",
  32. (long long) pps->clear_tu.sec, pps->clear_tu.nsec,
  33. pps->clear_sequence);
  34. }
  35. static DEVICE_ATTR_RO(clear);
  36. static ssize_t mode_show(struct device *dev, struct device_attribute *attr,
  37. char *buf)
  38. {
  39. struct pps_device *pps = dev_get_drvdata(dev);
  40. return sprintf(buf, "%4x\n", pps->info.mode);
  41. }
  42. static DEVICE_ATTR_RO(mode);
  43. static ssize_t echo_show(struct device *dev, struct device_attribute *attr,
  44. char *buf)
  45. {
  46. struct pps_device *pps = dev_get_drvdata(dev);
  47. return sprintf(buf, "%d\n", !!pps->info.echo);
  48. }
  49. static DEVICE_ATTR_RO(echo);
  50. static ssize_t name_show(struct device *dev, struct device_attribute *attr,
  51. char *buf)
  52. {
  53. struct pps_device *pps = dev_get_drvdata(dev);
  54. return sprintf(buf, "%s\n", pps->info.name);
  55. }
  56. static DEVICE_ATTR_RO(name);
  57. static ssize_t path_show(struct device *dev, struct device_attribute *attr,
  58. char *buf)
  59. {
  60. struct pps_device *pps = dev_get_drvdata(dev);
  61. return sprintf(buf, "%s\n", pps->info.path);
  62. }
  63. static DEVICE_ATTR_RO(path);
  64. static struct attribute *pps_attrs[] = {
  65. &dev_attr_assert.attr,
  66. &dev_attr_clear.attr,
  67. &dev_attr_mode.attr,
  68. &dev_attr_echo.attr,
  69. &dev_attr_name.attr,
  70. &dev_attr_path.attr,
  71. NULL,
  72. };
  73. static const struct attribute_group pps_group = {
  74. .attrs = pps_attrs,
  75. };
  76. const struct attribute_group *pps_groups[] = {
  77. &pps_group,
  78. NULL,
  79. };