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