at v3.5 2.7 kB view raw
1/* 2 * PPS sysfs support 3 * 4 * 5 * Copyright (C) 2007-2009 Rodolfo Giometti <giometti@linux.it> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 */ 21 22 23#include <linux/device.h> 24#include <linux/module.h> 25#include <linux/string.h> 26#include <linux/pps_kernel.h> 27 28/* 29 * Attribute functions 30 */ 31 32static ssize_t pps_show_assert(struct device *dev, 33 struct device_attribute *attr, char *buf) 34{ 35 struct pps_device *pps = dev_get_drvdata(dev); 36 37 if (!(pps->info.mode & PPS_CAPTUREASSERT)) 38 return 0; 39 40 return sprintf(buf, "%lld.%09d#%d\n", 41 (long long) pps->assert_tu.sec, pps->assert_tu.nsec, 42 pps->assert_sequence); 43} 44 45static ssize_t pps_show_clear(struct device *dev, 46 struct device_attribute *attr, char *buf) 47{ 48 struct pps_device *pps = dev_get_drvdata(dev); 49 50 if (!(pps->info.mode & PPS_CAPTURECLEAR)) 51 return 0; 52 53 return sprintf(buf, "%lld.%09d#%d\n", 54 (long long) pps->clear_tu.sec, pps->clear_tu.nsec, 55 pps->clear_sequence); 56} 57 58static ssize_t pps_show_mode(struct device *dev, 59 struct device_attribute *attr, char *buf) 60{ 61 struct pps_device *pps = dev_get_drvdata(dev); 62 63 return sprintf(buf, "%4x\n", pps->info.mode); 64} 65 66static ssize_t pps_show_echo(struct device *dev, 67 struct device_attribute *attr, char *buf) 68{ 69 struct pps_device *pps = dev_get_drvdata(dev); 70 71 return sprintf(buf, "%d\n", !!pps->info.echo); 72} 73 74static ssize_t pps_show_name(struct device *dev, 75 struct device_attribute *attr, char *buf) 76{ 77 struct pps_device *pps = dev_get_drvdata(dev); 78 79 return sprintf(buf, "%s\n", pps->info.name); 80} 81 82static ssize_t pps_show_path(struct device *dev, 83 struct device_attribute *attr, char *buf) 84{ 85 struct pps_device *pps = dev_get_drvdata(dev); 86 87 return sprintf(buf, "%s\n", pps->info.path); 88} 89 90struct device_attribute pps_attrs[] = { 91 __ATTR(assert, S_IRUGO, pps_show_assert, NULL), 92 __ATTR(clear, S_IRUGO, pps_show_clear, NULL), 93 __ATTR(mode, S_IRUGO, pps_show_mode, NULL), 94 __ATTR(echo, S_IRUGO, pps_show_echo, NULL), 95 __ATTR(name, S_IRUGO, pps_show_name, NULL), 96 __ATTR(path, S_IRUGO, pps_show_path, NULL), 97 __ATTR_NULL, 98};