162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Generic serial GNSS receiver driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2018 Johan Hovold <johan@kernel.org> 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef _LINUX_GNSS_SERIAL_H 962306a36Sopenharmony_ci#define _LINUX_GNSS_SERIAL_H 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <asm/termbits.h> 1262306a36Sopenharmony_ci#include <linux/pm.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistruct gnss_serial { 1562306a36Sopenharmony_ci struct serdev_device *serdev; 1662306a36Sopenharmony_ci struct gnss_device *gdev; 1762306a36Sopenharmony_ci speed_t speed; 1862306a36Sopenharmony_ci const struct gnss_serial_ops *ops; 1962306a36Sopenharmony_ci unsigned long drvdata[]; 2062306a36Sopenharmony_ci}; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cienum gnss_serial_pm_state { 2362306a36Sopenharmony_ci GNSS_SERIAL_OFF, 2462306a36Sopenharmony_ci GNSS_SERIAL_ACTIVE, 2562306a36Sopenharmony_ci GNSS_SERIAL_STANDBY, 2662306a36Sopenharmony_ci}; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistruct gnss_serial_ops { 2962306a36Sopenharmony_ci int (*set_power)(struct gnss_serial *gserial, 3062306a36Sopenharmony_ci enum gnss_serial_pm_state state); 3162306a36Sopenharmony_ci}; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ciextern const struct dev_pm_ops gnss_serial_pm_ops; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_cistruct gnss_serial *gnss_serial_allocate(struct serdev_device *gserial, 3662306a36Sopenharmony_ci size_t data_size); 3762306a36Sopenharmony_civoid gnss_serial_free(struct gnss_serial *gserial); 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ciint gnss_serial_register(struct gnss_serial *gserial); 4062306a36Sopenharmony_civoid gnss_serial_deregister(struct gnss_serial *gserial); 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_cistatic inline void *gnss_serial_get_drvdata(struct gnss_serial *gserial) 4362306a36Sopenharmony_ci{ 4462306a36Sopenharmony_ci return gserial->drvdata; 4562306a36Sopenharmony_ci} 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#endif /* _LINUX_GNSS_SERIAL_H */ 48