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