xref: /openbmc/linux/drivers/gnss/serial.h (revision 9b5816b5)
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;
199b5816b5SGustavo 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 Hovold static 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