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