• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_hw_dev {
39 	const struct isp_match_data *match_data;
40 	struct platform_device *pdev;
41 	struct device *dev;
42 	struct regmap *grf;
43 	void __iomem *base_addr;
44 	void __iomem *base_next_addr;
45 	struct clk *clks[RKISP_MAX_BUS_CLK];
46 	int num_clks;
47 	const struct isp_clk_info *clk_rate_tbl;
48 	int num_clk_rate_tbl;
49 	struct reset_control *reset;
50 	int mipi_irq;
51 	enum rkisp_isp_ver isp_ver;
52 	struct rkisp_device *isp[DEV_MAX];
53 	int dev_num;
54 	int cur_dev_id;
55 	int mipi_dev_id;
56 	struct max_input max_in;
57 	/* lock for multi dev */
58 	struct mutex dev_lock;
59 	spinlock_t rdbk_lock;
60 	atomic_t refcnt;
61 
62 	/* share buf for multi dev */
63 	spinlock_t buf_lock;
64 	struct rkisp_bridge_buf bufs[BRIDGE_BUF_MAX];
65 	struct rkisp_ispp_buf *cur_buf;
66 	struct rkisp_ispp_buf *nxt_buf;
67 	struct list_head list;
68 	struct list_head rpt_list;
69 	struct rkisp_dummy_buffer dummy_buf;
70 	const struct vb2_mem_ops *mem_ops;
71 	struct rkisp_monitor monitor;
72 	u64 iq_feature;
73 	int buf_init_cnt;
74 	bool is_feature_on;
75 	bool is_dma_contig;
76 	bool is_dma_sg_ops;
77 	bool is_mmu;
78 	bool is_idle;
79 	bool is_single;
80 	bool is_mi_update;
81 	bool is_thunderboot;
82 	bool is_buf_init;
83 	bool is_shutdown;
84 	bool is_unite;
85 };
86 
87 int rkisp_register_irq(struct rkisp_hw_dev *dev);
88 void rkisp_soft_reset(struct rkisp_hw_dev *dev, bool is_secure);
89 #endif
90