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