media: rockchip: isp: add isp reg cache read/write api

Change-Id: I9db97c3ae4dc3f0a9418f427026a5689ee73750f
Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
Cai YiWei
2022-03-31 11:48:10 +08:00
committed by Tao Huang
parent cb62fa6675
commit 4bcf50f7a6
2 changed files with 64 additions and 12 deletions

View File

@@ -58,16 +58,6 @@ u32 rkisp_next_read(struct rkisp_device *dev, u32 reg, bool is_direct)
return val;
}
u32 rkisp_read_reg_cache(struct rkisp_device *dev, u32 reg)
{
return *(u32 *)(dev->sw_base_addr + reg);
}
u32 rkisp_next_read_reg_cache(struct rkisp_device *dev, u32 reg)
{
return *(u32 *)(dev->sw_base_addr + RKISP_ISP_SW_MAX_SIZE + reg);
}
void rkisp_set_bits(struct rkisp_device *dev, u32 reg, u32 mask, u32 val, bool is_direct)
{
u32 tmp = rkisp_read(dev, reg, is_direct) & ~mask;
@@ -96,6 +86,59 @@ void rkisp_next_clear_bits(struct rkisp_device *dev, u32 reg, u32 mask, bool is_
rkisp_next_write(dev, reg, tmp & ~mask, is_direct);
}
void rkisp_write_reg_cache(struct rkisp_device *dev, u32 reg, u32 val)
{
u32 *mem = dev->sw_base_addr + reg;
*mem = val;
}
void rkisp_next_write_reg_cache(struct rkisp_device *dev, u32 reg, u32 val)
{
u32 offset = RKISP_ISP_SW_MAX_SIZE + reg;
u32 *mem = dev->sw_base_addr + offset;
*mem = val;
}
u32 rkisp_read_reg_cache(struct rkisp_device *dev, u32 reg)
{
return *(u32 *)(dev->sw_base_addr + reg);
}
u32 rkisp_next_read_reg_cache(struct rkisp_device *dev, u32 reg)
{
return *(u32 *)(dev->sw_base_addr + RKISP_ISP_SW_MAX_SIZE + reg);
}
void rkisp_set_reg_cache_bits(struct rkisp_device *dev, u32 reg, u32 mask, u32 val)
{
u32 tmp = rkisp_read_reg_cache(dev, reg) & ~mask;
rkisp_write_reg_cache(dev, reg, val | tmp);
}
void rkisp_next_set_reg_cache_bits(struct rkisp_device *dev, u32 reg, u32 mask, u32 val)
{
u32 tmp = rkisp_next_read_reg_cache(dev, reg) & ~mask;
rkisp_next_write_reg_cache(dev, reg, val | tmp);
}
void rkisp_clear_reg_cache_bits(struct rkisp_device *dev, u32 reg, u32 mask)
{
u32 tmp = rkisp_read_reg_cache(dev, reg);
rkisp_write_reg_cache(dev, reg, tmp & ~mask);
}
void rkisp_next_clear_reg_cache_bits(struct rkisp_device *dev, u32 reg, u32 mask)
{
u32 tmp = rkisp_next_read_reg_cache(dev, reg);
rkisp_next_write_reg_cache(dev, reg, tmp & ~mask);
}
void rkisp_update_regs(struct rkisp_device *dev, u32 start, u32 end)
{
void __iomem *base = dev->hw_dev->base_addr;

View File

@@ -160,16 +160,25 @@ static inline struct vb2_queue *to_vb2_queue(struct file *file)
void rkisp_write(struct rkisp_device *dev, u32 reg, u32 val, bool is_direct);
u32 rkisp_read(struct rkisp_device *dev, u32 reg, bool is_direct);
u32 rkisp_read_reg_cache(struct rkisp_device *dev, u32 reg);
void rkisp_set_bits(struct rkisp_device *dev, u32 reg, u32 mask, u32 val, bool is_direct);
void rkisp_clear_bits(struct rkisp_device *dev, u32 reg, u32 mask, bool is_direct);
void rkisp_write_reg_cache(struct rkisp_device *dev, u32 reg, u32 val);
u32 rkisp_read_reg_cache(struct rkisp_device *dev, u32 reg);
void rkisp_set_reg_cache_bits(struct rkisp_device *dev, u32 reg, u32 mask, u32 val);
void rkisp_clear_reg_cache_bits(struct rkisp_device *dev, u32 reg, u32 mask);
/* for dual isp, config for next isp reg */
void rkisp_next_write(struct rkisp_device *dev, u32 reg, u32 val, bool is_direct);
u32 rkisp_next_read(struct rkisp_device *dev, u32 reg, bool is_direct);
u32 rkisp_next_read_reg_cache(struct rkisp_device *dev, u32 reg);
void rkisp_next_set_bits(struct rkisp_device *dev, u32 reg, u32 mask, u32 val, bool is_direct);
void rkisp_next_clear_bits(struct rkisp_device *dev, u32 reg, u32 mask, bool is_direct);
void rkisp_next_write_reg_cache(struct rkisp_device *dev, u32 reg, u32 val);
u32 rkisp_next_read_reg_cache(struct rkisp_device *dev, u32 reg);
void rkisp_next_set_reg_cache_bits(struct rkisp_device *dev, u32 reg, u32 mask, u32 val);
void rkisp_next_clear_reg_cache_bits(struct rkisp_device *dev, u32 reg, u32 mask);
static inline void
rkisp_unite_write(struct rkisp_device *dev, u32 reg, u32 val, bool is_direct, bool is_unite)
{