Johan Hovold | 37768b0 | 2018-06-01 10:22:54 +0200 | [diff] [blame] | 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[0]; |
| 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 */ |