Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a2d81803 authored by Robert P. J. Day's avatar Robert P. J. Day Committed by Linus Torvalds
Browse files

drivers/pps: aesthetic tweaks to PPS-related content

Collection of aesthetic adjustments to various PPS-related files,
directories and Documentation, some quite minor just for the sake of
consistency, including:

 * Updated example of pps device tree node (courtesy Rodolfo G.)
 * "PPS-API" -> "PPS API"
 * "pps_source_info_s" -> "pps_source_info"
 * "ktimer driver" -> "pps-ktimer driver"
 * "ppstest /dev/pps0" -> "ppstest /dev/pps1" to match example
 * Add missing PPS-related entries to MAINTAINERS file
 * Other trivialities

Link: http://lkml.kernel.org/r/alpine.LFD.2.20.1708261048220.8106@localhost.localdomain


Signed-off-by: default avatarRobert P. J. Day <rpjday@crashcourse.ca>
Acked-by: default avatarRodolfo Giometti <giometti@enneenne.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent f22ef333
Loading
Loading
Loading
Loading
+6 −2
Original line number Original line Diff line number Diff line
@@ -13,8 +13,12 @@ Optional properties:


Example:
Example:
	pps {
	pps {
		compatible = "pps-gpio";
		pinctrl-names = "default";
		gpios = <&gpio2 6 0>;
		pinctrl-0 = <&pinctrl_pps>;


		gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>;
		assert-falling-edge;
		assert-falling-edge;

		compatible = "pps-gpio";
		status = "okay";
	};
	};
+23 −21
Original line number Original line Diff line number Diff line
@@ -48,12 +48,12 @@ problem:
   time_pps_create().
   time_pps_create().


This implies that the source has a /dev/... entry. This assumption is
This implies that the source has a /dev/... entry. This assumption is
ok for the serial and parallel port, where you can do something
OK for the serial and parallel port, where you can do something
useful besides(!) the gathering of timestamps as it is the central
useful besides(!) the gathering of timestamps as it is the central
task for a PPS-API. But this assumption does not work for a single
task for a PPS API. But this assumption does not work for a single
purpose GPIO line. In this case even basic file-related functionality
purpose GPIO line. In this case even basic file-related functionality
(like read() and write()) makes no sense at all and should not be a
(like read() and write()) makes no sense at all and should not be a
precondition for the use of a PPS-API.
precondition for the use of a PPS API.


The problem can be simply solved if you consider that a PPS source is
The problem can be simply solved if you consider that a PPS source is
not always connected with a GPS data source.
not always connected with a GPS data source.
@@ -88,13 +88,13 @@ Coding example
--------------
--------------


To register a PPS source into the kernel you should define a struct
To register a PPS source into the kernel you should define a struct
pps_source_info_s as follows:
pps_source_info as follows:


    static struct pps_source_info pps_ktimer_info = {
    static struct pps_source_info pps_ktimer_info = {
	    .name         = "ktimer",
	    .name         = "ktimer",
	    .path         = "",
	    .path         = "",
	    .mode         = PPS_CAPTUREASSERT | PPS_OFFSETASSERT | \
	    .mode         = PPS_CAPTUREASSERT | PPS_OFFSETASSERT |
			    PPS_ECHOASSERT | \
			    PPS_ECHOASSERT |
			    PPS_CANWAIT | PPS_TSFMT_TSPEC,
			    PPS_CANWAIT | PPS_TSFMT_TSPEC,
	    .echo         = pps_ktimer_echo,
	    .echo         = pps_ktimer_echo,
	    .owner        = THIS_MODULE,
	    .owner        = THIS_MODULE,
@@ -108,13 +108,13 @@ initialization routine as follows:


The pps_register_source() prototype is:
The pps_register_source() prototype is:


  int pps_register_source(struct pps_source_info_s *info, int default_params)
  int pps_register_source(struct pps_source_info *info, int default_params)


where "info" is a pointer to a structure that describes a particular
where "info" is a pointer to a structure that describes a particular
PPS source, "default_params" tells the system what the initial default
PPS source, "default_params" tells the system what the initial default
parameters for the device should be (it is obvious that these parameters
parameters for the device should be (it is obvious that these parameters
must be a subset of ones defined in the struct
must be a subset of ones defined in the struct
pps_source_info_s which describe the capabilities of the driver).
pps_source_info which describe the capabilities of the driver).


Once you have registered a new PPS source into the system you can
Once you have registered a new PPS source into the system you can
signal an assert event (for example in the interrupt handler routine)
signal an assert event (for example in the interrupt handler routine)
@@ -142,8 +142,10 @@ If the SYSFS filesystem is enabled in the kernel it provides a new class:
Every directory is the ID of a PPS sources defined in the system and
Every directory is the ID of a PPS sources defined in the system and
inside you find several files:
inside you find several files:


   $ ls /sys/class/pps/pps0/
   $ ls -F /sys/class/pps/pps0/
   assert	clear  echo  mode  name  path  subsystem@  uevent
   assert     dev        mode       path       subsystem@
   clear      echo       name       power/     uevent



Inside each "assert" and "clear" file you can find the timestamp and a
Inside each "assert" and "clear" file you can find the timestamp and a
sequence number:
sequence number:
@@ -168,18 +170,18 @@ Testing the PPS support
-----------------------
-----------------------


In order to test the PPS support even without specific hardware you can use
In order to test the PPS support even without specific hardware you can use
the ktimer driver (see the client subsection in the PPS configuration menu)
the pps-ktimer driver (see the client subsection in the PPS configuration menu)
and the userland tools available in your distribution's pps-tools package,
and the userland tools available in your distribution's pps-tools package,
http://linuxpps.org , or https://github.com/ago/pps-tools .
http://linuxpps.org , or https://github.com/redlab-i/pps-tools.


Once you have enabled the compilation of ktimer just modprobe it (if
Once you have enabled the compilation of pps-ktimer just modprobe it (if
not statically compiled):
not statically compiled):


   # modprobe ktimer
   # modprobe pps-ktimer


and the run ppstest as follow:
and the run ppstest as follow:


   $ ./ppstest /dev/pps0
   $ ./ppstest /dev/pps1
   trying PPS source "/dev/pps1"
   trying PPS source "/dev/pps1"
   found PPS source "/dev/pps1"
   found PPS source "/dev/pps1"
   ok, found 1 source(s), now start fetching data...
   ok, found 1 source(s), now start fetching data...
@@ -187,7 +189,7 @@ and the run ppstest as follow:
   source 0 - assert 1186592700.388931295, sequence: 365 - clear  0.000000000, sequence: 0
   source 0 - assert 1186592700.388931295, sequence: 365 - clear  0.000000000, sequence: 0
   source 0 - assert 1186592701.389032765, sequence: 366 - clear  0.000000000, sequence: 0
   source 0 - assert 1186592701.389032765, sequence: 366 - clear  0.000000000, sequence: 0


Please, note that to compile userland programs you need the file timepps.h .
Please note that to compile userland programs, you need the file timepps.h.
This is available in the pps-tools repository mentioned above.
This is available in the pps-tools repository mentioned above.




+3 −0
Original line number Original line Diff line number Diff line
@@ -10725,8 +10725,11 @@ W: http://wiki.enneenne.com/index.php/LinuxPPS_support
L:	linuxpps@ml.enneenne.com (subscribers-only)
L:	linuxpps@ml.enneenne.com (subscribers-only)
S:	Maintained
S:	Maintained
F:	Documentation/pps/
F:	Documentation/pps/
F:	Documentation/devicetree/bindings/pps/pps-gpio.txt
F:	Documentation/ABI/testing/sysfs-pps
F:	drivers/pps/
F:	drivers/pps/
F:	include/linux/pps*.h
F:	include/linux/pps*.h
F:	include/uapi/linux/pps.h


PPTP DRIVER
PPTP DRIVER
M:	Dmitry Kozlov <xeb@mail.ru>
M:	Dmitry Kozlov <xeb@mail.ru>
+1 −1
Original line number Original line Diff line number Diff line
@@ -29,4 +29,4 @@ struct pps_gpio_platform_data {
	const char *gpio_label;
	const char *gpio_label;
};
};


#endif
#endif /* _PPS_GPIO_H */
+7 −9
Original line number Original line Diff line number Diff line
@@ -22,7 +22,6 @@
#define LINUX_PPS_KERNEL_H
#define LINUX_PPS_KERNEL_H


#include <linux/pps.h>
#include <linux/pps.h>

#include <linux/cdev.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/device.h>
#include <linux/time.h>
#include <linux/time.h>
@@ -35,9 +34,9 @@ struct pps_device;


/* The specific PPS source info */
/* The specific PPS source info */
struct pps_source_info {
struct pps_source_info {
	char name[PPS_MAX_NAME_LEN];		/* simbolic name */
	char name[PPS_MAX_NAME_LEN];		/* symbolic name */
	char path[PPS_MAX_NAME_LEN];		/* path of connected device */
	char path[PPS_MAX_NAME_LEN];		/* path of connected device */
	int mode;				/* PPS's allowed mode */
	int mode;				/* PPS allowed mode */


	void (*echo)(struct pps_device *pps,
	void (*echo)(struct pps_device *pps,
			int event, void *data);	/* PPS echo function */
			int event, void *data);	/* PPS echo function */
@@ -57,10 +56,10 @@ struct pps_event_time {
struct pps_device {
struct pps_device {
	struct pps_source_info info;		/* PSS source info */
	struct pps_source_info info;		/* PSS source info */


	struct pps_kparams params;		/* PPS's current params */
	struct pps_kparams params;		/* PPS current params */


	__u32 assert_sequence;			/* PPS' assert event seq # */
	__u32 assert_sequence;			/* PPS assert event seq # */
	__u32 clear_sequence;			/* PPS' clear event seq # */
	__u32 clear_sequence;			/* PPS clear event seq # */
	struct pps_ktime assert_tu;
	struct pps_ktime assert_tu;
	struct pps_ktime clear_tu;
	struct pps_ktime clear_tu;
	int current_mode;			/* PPS mode at event time */
	int current_mode;			/* PPS mode at event time */
@@ -69,7 +68,7 @@ struct pps_device {
	wait_queue_head_t queue;		/* PPS event queue */
	wait_queue_head_t queue;		/* PPS event queue */


	unsigned int id;			/* PPS source unique ID */
	unsigned int id;			/* PPS source unique ID */
	void const *lookup_cookie;		/* pps_lookup_dev only */
	void const *lookup_cookie;		/* For pps_lookup_dev() only */
	struct cdev cdev;
	struct cdev cdev;
	struct device *dev;
	struct device *dev;
	struct fasync_struct *async_queue;	/* fasync method */
	struct fasync_struct *async_queue;	/* fasync method */
@@ -101,7 +100,7 @@ extern struct pps_device *pps_register_source(
extern void pps_unregister_source(struct pps_device *pps);
extern void pps_unregister_source(struct pps_device *pps);
extern void pps_event(struct pps_device *pps,
extern void pps_event(struct pps_device *pps,
		struct pps_event_time *ts, int event, void *data);
		struct pps_event_time *ts, int event, void *data);
/* Look up a pps device by magic cookie */
/* Look up a pps_device by magic cookie */
struct pps_device *pps_lookup_dev(void const *cookie);
struct pps_device *pps_lookup_dev(void const *cookie);


static inline void timespec_to_pps_ktime(struct pps_ktime *kt,
static inline void timespec_to_pps_ktime(struct pps_ktime *kt,
@@ -132,4 +131,3 @@ static inline void pps_sub_ts(struct pps_event_time *ts, struct timespec64 delta
}
}


#endif /* LINUX_PPS_KERNEL_H */
#endif /* LINUX_PPS_KERNEL_H */
Loading