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; |
19 | unsigned long drvdata[]; |
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 */ |
48 | |