xref: /OK3568_Linux_fs/kernel/drivers/media/platform/rockchip/isp/hw.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (C) 2020 Rockchip Electronics Co., Ltd. */
3 
4 #ifndef _RKISP_HW_H
5 #define _RKISP_HW_H
6 
7 #include "bridge.h"
8 
9 #define RKISP_MAX_BUS_CLK 10
10 #define RKISP_MAX_RETRY_CNT 5
11 
12 struct isp_clk_info {
13 	u32 clk_rate;
14 	u32 refer_data;
15 };
16 
17 struct isp_match_data {
18 	const char * const *clks;
19 	int num_clks;
20 	enum rkisp_isp_ver isp_ver;
21 	const struct isp_clk_info  *clk_rate_tbl;
22 	int num_clk_rate_tbl;
23 	struct isp_irqs_data *irqs;
24 	int num_irqs;
25 	bool unite;
26 };
27 
28 struct rkisp_monitor {
29 	struct rkisp_hw_dev *dev;
30 	struct work_struct work;
31 	struct completion cmpl;
32 	int (*reset_handle)(struct rkisp_device *dev);
33 	u32 state;
34 	u8 retry;
35 	bool is_en;
36 };
37 
38 struct rkisp_sram {
39 	dma_addr_t dma_addr;
40 	u32 size;
41 };
42 
43 struct rkisp_size_info {
44 	u32 w;
45 	u32 h;
46 	u32 size;
47 	u32 fps;
48 	bool is_on;
49 };
50 
51 struct rkisp_hw_dev {
52 	const struct isp_match_data *match_data;
53 	struct platform_device *pdev;
54 	struct device *dev;
55 	struct regmap *grf;
56 	void __iomem *base_addr;
57 	void __iomem *base_next_addr;
58 	struct clk *clks[RKISP_MAX_BUS_CLK];
59 	int num_clks;
60 	const struct isp_clk_info *clk_rate_tbl;
61 	int num_clk_rate_tbl;
62 	struct reset_control *reset;
63 	int mipi_irq;
64 	enum rkisp_isp_ver isp_ver;
65 	struct rkisp_device *isp[DEV_MAX];
66 	struct rkisp_size_info isp_size[DEV_MAX];
67 	int dev_num;
68 	int dev_link_num;
69 	int cur_dev_id;
70 	int pre_dev_id;
71 	int mipi_dev_id;
72 	struct max_input max_in;
73 	/* lock for multi dev */
74 	struct mutex dev_lock;
75 	spinlock_t rdbk_lock;
76 	atomic_t refcnt;
77 
78 	struct rkisp_sram sram;
79 
80 	/* share buf for multi dev */
81 	spinlock_t buf_lock;
82 	struct rkisp_bridge_buf bufs[BRIDGE_BUF_MAX];
83 	struct rkisp_ispp_buf *cur_buf;
84 	struct rkisp_ispp_buf *nxt_buf;
85 	struct list_head list;
86 	struct list_head rpt_list;
87 	struct rkisp_dummy_buffer dummy_buf;
88 	const struct vb2_mem_ops *mem_ops;
89 	struct rkisp_monitor monitor;
90 	u64 iq_feature;
91 	int buf_init_cnt;
92 	bool is_feature_on;
93 	bool is_dma_contig;
94 	bool is_dma_sg_ops;
95 	bool is_mmu;
96 	bool is_idle;
97 	bool is_single;
98 	bool is_mi_update;
99 	bool is_thunderboot;
100 	bool is_buf_init;
101 	bool is_shutdown;
102 	bool is_unite;
103 	bool is_multi_overflow;
104 	bool is_runing;
105 	bool is_frm_buf;
106 	bool is_dvfs;
107 	bool is_assigned_clk;
108 };
109 
110 int rkisp_register_irq(struct rkisp_hw_dev *dev);
111 void rkisp_soft_reset(struct rkisp_hw_dev *dev, bool is_secure);
112 void rkisp_hw_enum_isp_size(struct rkisp_hw_dev *hw_dev);
113 #endif
114