92 lines
1.8 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (c) 2023 Rockchip Electronics Co., Ltd. */
#ifndef _RKVPSS_DEV_H
#define _RKVPSS_DEV_H
#include <linux/rk-vpss-config.h>
#include "hw.h"
#include "procfs.h"
#include "stream.h"
#include "vpss.h"
#define DRIVER_NAME "rkvpss"
#define S0_VDEV_NAME DRIVER_NAME "_scale0"
#define S1_VDEV_NAME DRIVER_NAME "_scale1"
#define S2_VDEV_NAME DRIVER_NAME "_scale2"
#define S3_VDEV_NAME DRIVER_NAME "_scale3"
enum rkvpss_input {
INP_INVAL = 0,
INP_ISP,
};
enum {
T_CMD_QUEUE,
T_CMD_DEQUEUE,
T_CMD_LEN,
T_CMD_END,
};
enum {
VPSS_UNITE_LEFT = 0,
VPSS_UNITE_RIGHT,
VPSS_UNITE_MAX,
};
struct rkvpss_rdbk_info {
u64 timestamp;
u64 seq;
};
struct rkvpss_device {
char name[128];
struct device *dev;
void *sw_base_addr;
struct v4l2_device v4l2_dev;
struct media_device media_dev;
struct v4l2_async_notifier notifier;
struct v4l2_ctrl_handler ctrl_handler;
struct v4l2_subdev *remote_sd;
struct rkvpss_hw_dev *hw_dev;
struct rkvpss_subdev vpss_sdev;
struct rkvpss_stream_vdev stream_vdev;
struct proc_dir_entry *procfs;
atomic_t pipe_power_cnt;
atomic_t pipe_stream_cnt;
spinlock_t cmsc_lock;
struct rkvpss_cmsc_cfg cmsc_cfg;
enum rkvpss_ver vpss_ver;
/* mutex to serialize the calls from user */
struct mutex apilock;
enum rkvpss_input inp;
u32 dev_id;
u32 isr_cnt;
u32 isr_err_cnt;
bool mir_en;
bool cmsc_upd;
u32 unite_mode;
u8 unite_index;
bool stopping;
wait_queue_head_t stop_done;
unsigned int irq_ends;
unsigned int irq_ends_mask;
bool is_probe_end;
bool is_suspend;
bool is_idle;
struct completion pm_suspend_wait_fe;
};
void rkvpss_pipeline_default_fmt(struct rkvpss_device *dev);
int rkvpss_pipeline_open(struct rkvpss_device *dev);
int rkvpss_pipeline_close(struct rkvpss_device *dev);
int rkvpss_pipeline_stream(struct rkvpss_device *dev, bool on);
#endif