1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Copyright (c) 2022 Rockchip Electronics Co., Ltd
4*4882a593Smuzhiyun */
5*4882a593Smuzhiyun #ifndef __SOC_ROCKCHIP_DVBM_H
6*4882a593Smuzhiyun #define __SOC_ROCKCHIP_DVBM_H
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun #include <linux/dma-buf.h>
9*4882a593Smuzhiyun #include <linux/platform_device.h>
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun enum dvbm_port_dir {
12*4882a593Smuzhiyun DVBM_ISP_PORT,
13*4882a593Smuzhiyun DVBM_VEPU_PORT,
14*4882a593Smuzhiyun };
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun enum dvbm_cmd {
17*4882a593Smuzhiyun DVBM_ISP_CMD_BASE = 0,
18*4882a593Smuzhiyun DVBM_ISP_SET_CFG,
19*4882a593Smuzhiyun DVBM_ISP_FRM_START,
20*4882a593Smuzhiyun DVBM_ISP_FRM_END,
21*4882a593Smuzhiyun DVBM_ISP_FRM_QUARTER,
22*4882a593Smuzhiyun DVBM_ISP_FRM_HALF,
23*4882a593Smuzhiyun DVBM_ISP_FRM_THREE_QUARTERS,
24*4882a593Smuzhiyun DVBM_ISP_CMD_BUTT,
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun DVBM_VEPU_CMD_BASE = 0x10,
27*4882a593Smuzhiyun DVBM_VEPU_SET_RESYNC,
28*4882a593Smuzhiyun DVBM_VEPU_SET_CFG,
29*4882a593Smuzhiyun DVBM_VEPU_GET_ADR,
30*4882a593Smuzhiyun DVBM_VEPU_GET_FRAME_INFO,
31*4882a593Smuzhiyun DVBM_VEPU_DUMP_REGS,
32*4882a593Smuzhiyun DVBM_VEPU_CMD_BUTT,
33*4882a593Smuzhiyun };
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun enum isp_frame_status {
36*4882a593Smuzhiyun ISP_FRAME_START,
37*4882a593Smuzhiyun ISP_FRAME_ONE_QUARTER,
38*4882a593Smuzhiyun ISP_FRAME_HALF,
39*4882a593Smuzhiyun ISP_FRAME_THREE_QUARTERS,
40*4882a593Smuzhiyun ISP_FRAME_FINISH,
41*4882a593Smuzhiyun };
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun enum dvbm_cb_event {
44*4882a593Smuzhiyun DVBM_ISP_EVENT_BASE = 0,
45*4882a593Smuzhiyun DVBM_ISP_EVENT_BUTT,
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun DVBM_VEPU_EVENT_BASE = 0x10,
48*4882a593Smuzhiyun DVBM_VEPU_NOTIFY_ADDR,
49*4882a593Smuzhiyun DVBM_VEPU_NOTIFY_DUMP,
50*4882a593Smuzhiyun DVBM_VEPU_REQ_CONNECT,
51*4882a593Smuzhiyun DVBM_VEPU_NOTIFY_FRM_STR,
52*4882a593Smuzhiyun DVBM_VEPU_NOTIFY_FRM_END,
53*4882a593Smuzhiyun DVBM_VEPU_NOTIFY_FRM_INFO,
54*4882a593Smuzhiyun DVBM_VEPU_EVENT_BUTT,
55*4882a593Smuzhiyun };
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun struct dvbm_port {
58*4882a593Smuzhiyun enum dvbm_port_dir dir;
59*4882a593Smuzhiyun u32 linked;
60*4882a593Smuzhiyun };
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun struct dvbm_isp_cfg_t {
63*4882a593Smuzhiyun u32 fmt;
64*4882a593Smuzhiyun u32 timeout;
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun struct dmabuf *buf;
67*4882a593Smuzhiyun dma_addr_t dma_addr;
68*4882a593Smuzhiyun u32 ybuf_top;
69*4882a593Smuzhiyun u32 ybuf_bot;
70*4882a593Smuzhiyun u32 ybuf_lstd;
71*4882a593Smuzhiyun u32 ybuf_fstd;
72*4882a593Smuzhiyun u32 cbuf_top;
73*4882a593Smuzhiyun u32 cbuf_bot;
74*4882a593Smuzhiyun u32 cbuf_lstd;
75*4882a593Smuzhiyun u32 cbuf_fstd;
76*4882a593Smuzhiyun };
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun struct dvbm_isp_frm_cfg {
79*4882a593Smuzhiyun s32 frm_idx;
80*4882a593Smuzhiyun u32 ybuf_start;
81*4882a593Smuzhiyun u32 cbuf_start;
82*4882a593Smuzhiyun };
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun struct dvbm_isp_frm_info {
85*4882a593Smuzhiyun u32 frame_cnt;
86*4882a593Smuzhiyun u32 line_cnt;
87*4882a593Smuzhiyun u32 wrap_line;
88*4882a593Smuzhiyun u32 max_line_cnt;
89*4882a593Smuzhiyun };
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun struct dvbm_addr_cfg {
92*4882a593Smuzhiyun u32 ybuf_top;
93*4882a593Smuzhiyun u32 ybuf_bot;
94*4882a593Smuzhiyun u32 ybuf_sadr;
95*4882a593Smuzhiyun u32 cbuf_top;
96*4882a593Smuzhiyun u32 cbuf_bot;
97*4882a593Smuzhiyun u32 cbuf_sadr;
98*4882a593Smuzhiyun u32 frame_id;
99*4882a593Smuzhiyun u32 line_cnt;
100*4882a593Smuzhiyun u32 overflow;
101*4882a593Smuzhiyun };
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun struct dvbm_vepu_cfg {
104*4882a593Smuzhiyun u32 auto_resyn;
105*4882a593Smuzhiyun u32 ignore_vepu_cnct_ack;
106*4882a593Smuzhiyun u32 start_point_after_vepu_cnct;
107*4882a593Smuzhiyun };
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun typedef int (*dvbm_callback)(void *ctx, enum dvbm_cb_event event, void *arg);
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun struct dvbm_cb {
112*4882a593Smuzhiyun dvbm_callback cb;
113*4882a593Smuzhiyun void *ctx;
114*4882a593Smuzhiyun int event;
115*4882a593Smuzhiyun };
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun #if IS_ENABLED(CONFIG_ROCKCHIP_DVBM)
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun struct dvbm_port *rk_dvbm_get_port(struct platform_device *pdev,
120*4882a593Smuzhiyun enum dvbm_port_dir dir);
121*4882a593Smuzhiyun int rk_dvbm_put(struct dvbm_port *port);
122*4882a593Smuzhiyun int rk_dvbm_link(struct dvbm_port *port);
123*4882a593Smuzhiyun int rk_dvbm_unlink(struct dvbm_port *port);
124*4882a593Smuzhiyun int rk_dvbm_set_cb(struct dvbm_port *port, struct dvbm_cb *cb);
125*4882a593Smuzhiyun int rk_dvbm_ctrl(struct dvbm_port *port, enum dvbm_cmd cmd, void *arg);
126*4882a593Smuzhiyun
127*4882a593Smuzhiyun #else
128*4882a593Smuzhiyun
rk_dvbm_get_port(struct platform_device * pdev,enum dvbm_port_dir dir)129*4882a593Smuzhiyun static inline struct dvbm_port *rk_dvbm_get_port(struct platform_device *pdev,
130*4882a593Smuzhiyun enum dvbm_port_dir dir)
131*4882a593Smuzhiyun {
132*4882a593Smuzhiyun return ERR_PTR(-ENODEV);
133*4882a593Smuzhiyun }
134*4882a593Smuzhiyun
rk_dvbm_put(struct dvbm_port * port)135*4882a593Smuzhiyun static inline int rk_dvbm_put(struct dvbm_port *port)
136*4882a593Smuzhiyun {
137*4882a593Smuzhiyun return -ENODEV;
138*4882a593Smuzhiyun }
139*4882a593Smuzhiyun
rk_dvbm_link(struct dvbm_port * port)140*4882a593Smuzhiyun static inline int rk_dvbm_link(struct dvbm_port *port)
141*4882a593Smuzhiyun {
142*4882a593Smuzhiyun return -ENODEV;
143*4882a593Smuzhiyun }
rk_dvbm_unlink(struct dvbm_port * port)144*4882a593Smuzhiyun static inline int rk_dvbm_unlink(struct dvbm_port *port)
145*4882a593Smuzhiyun {
146*4882a593Smuzhiyun return -ENODEV;
147*4882a593Smuzhiyun }
148*4882a593Smuzhiyun
rk_dvbm_set_cb(struct dvbm_port * port,struct dvbm_cb * cb)149*4882a593Smuzhiyun static inline int rk_dvbm_set_cb(struct dvbm_port *port, struct dvbm_cb *cb)
150*4882a593Smuzhiyun {
151*4882a593Smuzhiyun return -ENODEV;
152*4882a593Smuzhiyun }
153*4882a593Smuzhiyun
rk_dvbm_ctrl(struct dvbm_port * port,enum dvbm_cmd cmd,void * arg)154*4882a593Smuzhiyun static inline int rk_dvbm_ctrl(struct dvbm_port *port, enum dvbm_cmd cmd, void *arg)
155*4882a593Smuzhiyun {
156*4882a593Smuzhiyun return -ENODEV;
157*4882a593Smuzhiyun }
158*4882a593Smuzhiyun
159*4882a593Smuzhiyun #endif
160*4882a593Smuzhiyun
161*4882a593Smuzhiyun #endif
162