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
|