75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| /* Copyright (C) 2023 Rockchip Electronics Co., Ltd. */
 | |
| 
 | |
| #ifndef _RKVPSS_HW_H
 | |
| #define _RKVPSS_HW_H
 | |
| 
 | |
| #include "common.h"
 | |
| #include "vpss_offline.h"
 | |
| 
 | |
| #define VPSS_MAX_BUS_CLK 4
 | |
| #define VPSS_MAX_DEV	 8
 | |
| 
 | |
| struct vpss_clk_info {
 | |
| 	u32 clk_rate;
 | |
| 	u32 refer_data;
 | |
| };
 | |
| 
 | |
| struct vpss_match_data {
 | |
| 	int clks_num;
 | |
| 	const char * const *clks;
 | |
| 	enum rkvpss_ver vpss_ver;
 | |
| 	struct irqs_data *irqs;
 | |
| 	int num_irqs;
 | |
| };
 | |
| 
 | |
| struct rkvpss_hw_dev {
 | |
| 	struct device *dev;
 | |
| 	void __iomem *base_addr;
 | |
| 	const struct vpss_match_data *match_data;
 | |
| 	const struct vpss_clk_info *clk_rate_tbl;
 | |
| 	struct reset_control *reset;
 | |
| 	struct clk *clks[VPSS_MAX_BUS_CLK];
 | |
| 	struct rkvpss_device *vpss[VPSS_MAX_DEV];
 | |
| 	struct rkvpss_offline_dev ofl_dev;
 | |
| 	struct list_head list;
 | |
| 	void *sw_reg;
 | |
| 	int clk_rate_tbl_num;
 | |
| 	int clks_num;
 | |
| 	int dev_num;
 | |
| 	int cur_dev_id;
 | |
| 	int pre_dev_id;
 | |
| 	unsigned long core_clk_min;
 | |
| 	unsigned long core_clk_max;
 | |
| 	enum rkvpss_ver	vpss_ver;
 | |
| 	/* lock for multi dev */
 | |
| 	struct mutex dev_lock;
 | |
| 	spinlock_t reg_lock;
 | |
| 	atomic_t refcnt;
 | |
| 	const struct vb2_mem_ops *mem_ops;
 | |
| 	bool is_ofl_ch[RKVPSS_OUTPUT_MAX];
 | |
| 	bool is_ofl_cmsc;
 | |
| 	bool is_mmu;
 | |
| 	bool is_single;
 | |
| 	bool is_dma_contig;
 | |
| 	bool is_shutdown;
 | |
| 	bool is_suspend;
 | |
| };
 | |
| 
 | |
| #define RKVPSS_ZME_TAP_COE(x, y) (((x) & 0x3ff) | (((y) & 0x3ff) << 16))
 | |
| extern const s16 rkvpss_zme_tap8_coe[11][17][8];
 | |
| extern const s16 rkvpss_zme_tap6_coe[11][17][8];
 | |
| int rkvpss_get_zme_tap_coe_index(int ratio);
 | |
| void rkvpss_cmsc_slop(struct rkvpss_cmsc_point *p0,
 | |
| 		      struct rkvpss_cmsc_point *p1,
 | |
| 		      int *k, int *hor);
 | |
| 
 | |
| void rkvpss_soft_reset(struct rkvpss_hw_dev *hw_dev);
 | |
| void rkvpss_hw_write(struct rkvpss_hw_dev *hw_dev, u32 reg, u32 val);
 | |
| u32 rkvpss_hw_read(struct rkvpss_hw_dev *hw_dev, u32 reg);
 | |
| void rkvpss_hw_set_bits(struct rkvpss_hw_dev *hw, u32 reg, u32 mask, u32 val);
 | |
| void rkvpss_hw_clear_bits(struct rkvpss_hw_dev *hw, u32 reg, u32 mask);
 | |
| void rkvpss_hw_reg_save(struct rkvpss_hw_dev *dev);
 | |
| void rkvpss_hw_reg_restore(struct rkvpss_hw_dev *dev);
 | |
| #endif
 |