56 lines
1.1 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (c) 2023 Rockchip Electronics Co., Ltd. */
#ifndef _RKVPSS_VPSS_H
#define _RKVPSS_VPSS_H
#include "common.h"
#define GRP_ID_VPSS BIT(0)
enum rkvpss_pad {
RKVPSS_PAD_SINK,
RKVPSS_PAD_SOURCE,
RKVPSS_PAD_MAX
};
enum rkvpss_state {
VPSS_STOP = 0,
VPSS_FS = BIT(0),
VPSS_FE = BIT(1),
VPSS_FRAME_END = BIT(2),
VPSS_FRAME_SCL0 = BIT(3),
VPSS_FRAME_SCL1 = BIT(4),
VPSS_FRAME_SCL2 = BIT(5),
VPSS_FRAME_SCL3 = BIT(6),
VPSS_START = BIT(8),
VPSS_RX_START = BIT(9),
};
struct vpsssd_fmt {
u32 mbus_code;
u32 fourcc;
u32 width;
u32 height;
u8 wr_fmt;
};
struct rkvpss_subdev {
struct rkvpss_device *dev;
struct v4l2_subdev sd;
struct media_pad pads[RKVPSS_PAD_MAX];
struct v4l2_mbus_framefmt in_fmt;
struct vpsssd_fmt out_fmt;
u32 frame_seq;
/* timestamp in ns */
u64 frame_timestamp;
enum rkvpss_state state;
};
int rkvpss_register_subdev(struct rkvpss_device *dev,
struct v4l2_device *v4l2_dev);
void rkvpss_unregister_subdev(struct rkvpss_device *dev);
void rkvpss_check_idle(struct rkvpss_device *dev, u32 irq);
#endif