100 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * PPS sysfs support4 *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 functions16 */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};100