sysfs.c (2208B)
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 8 9#include <linux/device.h> 10#include <linux/module.h> 11#include <linux/string.h> 12#include <linux/pps_kernel.h> 13 14/* 15 * Attribute functions 16 */ 17 18static ssize_t assert_show(struct device *dev, struct device_attribute *attr, 19 char *buf) 20{ 21 struct pps_device *pps = dev_get_drvdata(dev); 22 23 if (!(pps->info.mode & PPS_CAPTUREASSERT)) 24 return 0; 25 26 return sprintf(buf, "%lld.%09d#%d\n", 27 (long long) pps->assert_tu.sec, pps->assert_tu.nsec, 28 pps->assert_sequence); 29} 30static DEVICE_ATTR_RO(assert); 31 32static ssize_t clear_show(struct device *dev, struct device_attribute *attr, 33 char *buf) 34{ 35 struct pps_device *pps = dev_get_drvdata(dev); 36 37 if (!(pps->info.mode & PPS_CAPTURECLEAR)) 38 return 0; 39 40 return sprintf(buf, "%lld.%09d#%d\n", 41 (long long) pps->clear_tu.sec, pps->clear_tu.nsec, 42 pps->clear_sequence); 43} 44static DEVICE_ATTR_RO(clear); 45 46static ssize_t mode_show(struct device *dev, struct device_attribute *attr, 47 char *buf) 48{ 49 struct pps_device *pps = dev_get_drvdata(dev); 50 51 return sprintf(buf, "%4x\n", pps->info.mode); 52} 53static DEVICE_ATTR_RO(mode); 54 55static ssize_t echo_show(struct device *dev, struct device_attribute *attr, 56 char *buf) 57{ 58 struct pps_device *pps = dev_get_drvdata(dev); 59 60 return sprintf(buf, "%d\n", !!pps->info.echo); 61} 62static DEVICE_ATTR_RO(echo); 63 64static ssize_t name_show(struct device *dev, struct device_attribute *attr, 65 char *buf) 66{ 67 struct pps_device *pps = dev_get_drvdata(dev); 68 69 return sprintf(buf, "%s\n", pps->info.name); 70} 71static DEVICE_ATTR_RO(name); 72 73static ssize_t path_show(struct device *dev, struct device_attribute *attr, 74 char *buf) 75{ 76 struct pps_device *pps = dev_get_drvdata(dev); 77 78 return sprintf(buf, "%s\n", pps->info.path); 79} 80static DEVICE_ATTR_RO(path); 81 82static struct attribute *pps_attrs[] = { 83 &dev_attr_assert.attr, 84 &dev_attr_clear.attr, 85 &dev_attr_mode.attr, 86 &dev_attr_echo.attr, 87 &dev_attr_name.attr, 88 &dev_attr_path.attr, 89 NULL, 90}; 91 92static const struct attribute_group pps_group = { 93 .attrs = pps_attrs, 94}; 95 96const struct attribute_group *pps_groups[] = { 97 &pps_group, 98 NULL, 99};