18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Generic serial GNSS receiver driver
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2018 Johan Hovold <johan@kernel.org>
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef _LINUX_GNSS_SERIAL_H
98c2ecf20Sopenharmony_ci#define _LINUX_GNSS_SERIAL_H
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <asm/termbits.h>
128c2ecf20Sopenharmony_ci#include <linux/pm.h>
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_cistruct gnss_serial {
158c2ecf20Sopenharmony_ci	struct serdev_device *serdev;
168c2ecf20Sopenharmony_ci	struct gnss_device *gdev;
178c2ecf20Sopenharmony_ci	speed_t	speed;
188c2ecf20Sopenharmony_ci	const struct gnss_serial_ops *ops;
198c2ecf20Sopenharmony_ci	unsigned long drvdata[];
208c2ecf20Sopenharmony_ci};
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_cienum gnss_serial_pm_state {
238c2ecf20Sopenharmony_ci	GNSS_SERIAL_OFF,
248c2ecf20Sopenharmony_ci	GNSS_SERIAL_ACTIVE,
258c2ecf20Sopenharmony_ci	GNSS_SERIAL_STANDBY,
268c2ecf20Sopenharmony_ci};
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_cistruct gnss_serial_ops {
298c2ecf20Sopenharmony_ci	int (*set_power)(struct gnss_serial *gserial,
308c2ecf20Sopenharmony_ci				enum gnss_serial_pm_state state);
318c2ecf20Sopenharmony_ci};
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ciextern const struct dev_pm_ops gnss_serial_pm_ops;
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_cistruct gnss_serial *gnss_serial_allocate(struct serdev_device *gserial,
368c2ecf20Sopenharmony_ci						size_t data_size);
378c2ecf20Sopenharmony_civoid gnss_serial_free(struct gnss_serial *gserial);
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ciint gnss_serial_register(struct gnss_serial *gserial);
408c2ecf20Sopenharmony_civoid gnss_serial_deregister(struct gnss_serial *gserial);
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_cistatic inline void *gnss_serial_get_drvdata(struct gnss_serial *gserial)
438c2ecf20Sopenharmony_ci{
448c2ecf20Sopenharmony_ci	return gserial->drvdata;
458c2ecf20Sopenharmony_ci}
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci#endif /* _LINUX_GNSS_SERIAL_H */
48