xref: /openbmc/linux/drivers/gnss/serial.h (revision 37768b054f2074f40de3cacd492baed482f5d9da)
1*37768b05SJohan Hovold /* SPDX-License-Identifier: GPL-2.0 */
2*37768b05SJohan Hovold /*
3*37768b05SJohan Hovold  * Generic serial GNSS receiver driver
4*37768b05SJohan Hovold  *
5*37768b05SJohan Hovold  * Copyright (C) 2018 Johan Hovold <johan@kernel.org>
6*37768b05SJohan Hovold  */
7*37768b05SJohan Hovold 
8*37768b05SJohan Hovold #ifndef _LINUX_GNSS_SERIAL_H
9*37768b05SJohan Hovold #define _LINUX_GNSS_SERIAL_H
10*37768b05SJohan Hovold 
11*37768b05SJohan Hovold #include <asm/termbits.h>
12*37768b05SJohan Hovold #include <linux/pm.h>
13*37768b05SJohan Hovold 
14*37768b05SJohan Hovold struct gnss_serial {
15*37768b05SJohan Hovold 	struct serdev_device *serdev;
16*37768b05SJohan Hovold 	struct gnss_device *gdev;
17*37768b05SJohan Hovold 	speed_t	speed;
18*37768b05SJohan Hovold 	const struct gnss_serial_ops *ops;
19*37768b05SJohan Hovold 	unsigned long drvdata[0];
20*37768b05SJohan Hovold };
21*37768b05SJohan Hovold 
22*37768b05SJohan Hovold enum gnss_serial_pm_state {
23*37768b05SJohan Hovold 	GNSS_SERIAL_OFF,
24*37768b05SJohan Hovold 	GNSS_SERIAL_ACTIVE,
25*37768b05SJohan Hovold 	GNSS_SERIAL_STANDBY,
26*37768b05SJohan Hovold };
27*37768b05SJohan Hovold 
28*37768b05SJohan Hovold struct gnss_serial_ops {
29*37768b05SJohan Hovold 	int (*set_power)(struct gnss_serial *gserial,
30*37768b05SJohan Hovold 				enum gnss_serial_pm_state state);
31*37768b05SJohan Hovold };
32*37768b05SJohan Hovold 
33*37768b05SJohan Hovold extern const struct dev_pm_ops gnss_serial_pm_ops;
34*37768b05SJohan Hovold 
35*37768b05SJohan Hovold struct gnss_serial *gnss_serial_allocate(struct serdev_device *gserial,
36*37768b05SJohan Hovold 						size_t data_size);
37*37768b05SJohan Hovold void gnss_serial_free(struct gnss_serial *gserial);
38*37768b05SJohan Hovold 
39*37768b05SJohan Hovold int gnss_serial_register(struct gnss_serial *gserial);
40*37768b05SJohan Hovold void gnss_serial_deregister(struct gnss_serial *gserial);
41*37768b05SJohan Hovold 
42*37768b05SJohan Hovold static inline void *gnss_serial_get_drvdata(struct gnss_serial *gserial)
43*37768b05SJohan Hovold {
44*37768b05SJohan Hovold 	return gserial->drvdata;
45*37768b05SJohan Hovold }
46*37768b05SJohan Hovold 
47*37768b05SJohan Hovold #endif /* _LINUX_GNSS_SERIAL_H */
48