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