137768b05SJohan Hovold /* SPDX-License-Identifier: GPL-2.0 */ 237768b05SJohan Hovold /* 337768b05SJohan Hovold * Generic serial GNSS receiver driver 437768b05SJohan Hovold * 537768b05SJohan Hovold * Copyright (C) 2018 Johan Hovold <johan@kernel.org> 637768b05SJohan Hovold */ 737768b05SJohan Hovold 837768b05SJohan Hovold #ifndef _LINUX_GNSS_SERIAL_H 937768b05SJohan Hovold #define _LINUX_GNSS_SERIAL_H 1037768b05SJohan Hovold 1137768b05SJohan Hovold #include <asm/termbits.h> 1237768b05SJohan Hovold #include <linux/pm.h> 1337768b05SJohan Hovold 1437768b05SJohan Hovold struct gnss_serial { 1537768b05SJohan Hovold struct serdev_device *serdev; 1637768b05SJohan Hovold struct gnss_device *gdev; 1737768b05SJohan Hovold speed_t speed; 1837768b05SJohan Hovold const struct gnss_serial_ops *ops; 19*9b5816b5SGustavo A. R. Silva unsigned long drvdata[]; 2037768b05SJohan Hovold }; 2137768b05SJohan Hovold 2237768b05SJohan Hovold enum gnss_serial_pm_state { 2337768b05SJohan Hovold GNSS_SERIAL_OFF, 2437768b05SJohan Hovold GNSS_SERIAL_ACTIVE, 2537768b05SJohan Hovold GNSS_SERIAL_STANDBY, 2637768b05SJohan Hovold }; 2737768b05SJohan Hovold 2837768b05SJohan Hovold struct gnss_serial_ops { 2937768b05SJohan Hovold int (*set_power)(struct gnss_serial *gserial, 3037768b05SJohan Hovold enum gnss_serial_pm_state state); 3137768b05SJohan Hovold }; 3237768b05SJohan Hovold 3337768b05SJohan Hovold extern const struct dev_pm_ops gnss_serial_pm_ops; 3437768b05SJohan Hovold 3537768b05SJohan Hovold struct gnss_serial *gnss_serial_allocate(struct serdev_device *gserial, 3637768b05SJohan Hovold size_t data_size); 3737768b05SJohan Hovold void gnss_serial_free(struct gnss_serial *gserial); 3837768b05SJohan Hovold 3937768b05SJohan Hovold int gnss_serial_register(struct gnss_serial *gserial); 4037768b05SJohan Hovold void gnss_serial_deregister(struct gnss_serial *gserial); 4137768b05SJohan Hovold gnss_serial_get_drvdata(struct gnss_serial * gserial)4237768b05SJohan Hovoldstatic inline void *gnss_serial_get_drvdata(struct gnss_serial *gserial) 4337768b05SJohan Hovold { 4437768b05SJohan Hovold return gserial->drvdata; 4537768b05SJohan Hovold } 4637768b05SJohan Hovold 4737768b05SJohan Hovold #endif /* _LINUX_GNSS_SERIAL_H */ 48