• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (C) 2020 Rockchip Electronics Co., Ltd. */
3 
4 #ifndef _RKISPP_HW_H
5 #define _RKISPP_HW_H
6 
7 #include "common.h"
8 #include "fec.h"
9 #include "../isp/isp_ispp.h"
10 
11 #define ISPP_MAX_BUS_CLK 4
12 
13 struct ispp_clk_info {
14 	u32 clk_rate;
15 	u32 refer_data;
16 };
17 
18 struct ispp_match_data {
19 	int clks_num;
20 	const char * const *clks;
21 	int clk_rate_tbl_num;
22 	const struct ispp_clk_info *clk_rate_tbl;
23 	enum rkispp_ver ispp_ver;
24 	struct irqs_data *irqs;
25 	int num_irqs;
26 };
27 
28 struct rkispp_hw_dev {
29 	struct device *dev;
30 	void __iomem *base_addr;
31 	const struct ispp_match_data *match_data;
32 	const struct ispp_clk_info *clk_rate_tbl;
33 	struct reset_control *reset;
34 	struct clk *clks[ISPP_MAX_BUS_CLK];
35 	struct rkispp_device *ispp[DEV_MAX];
36 	struct rkispp_isp_buf_pool pool[RKISPP_BUF_POOL_MAX];
37 	struct rkispp_dummy_buffer dummy_buf;
38 	struct rkispp_fec_dev fec_dev;
39 	struct max_input max_in;
40 	struct list_head list;
41 	int clk_rate_tbl_num;
42 	int clks_num;
43 	int dev_num;
44 	int cur_dev_id;
45 	unsigned long core_clk_min;
46 	unsigned long core_clk_max;
47 	enum rkispp_ver	ispp_ver;
48 	/* lock for irq */
49 	spinlock_t irq_lock;
50 	/* lock for multi dev */
51 	struct mutex dev_lock;
52 	spinlock_t buf_lock;
53 	atomic_t refcnt;
54 	const struct vb2_mem_ops *mem_ops;
55 	struct rkisp_ispp_reg *reg_buf;
56 	bool is_mmu;
57 	bool is_idle;
58 	bool is_single;
59 	bool is_fec_ext;
60 	bool is_dma_contig;
61 	bool is_dma_sg_ops;
62 	bool is_shutdown;
63 	bool is_first;
64 };
65 
66 void rkispp_soft_reset(struct rkispp_hw_dev *hw_dev);
67 #endif
68