diff --git a/drivers/media/platform/rockchip/isp/common.c b/drivers/media/platform/rockchip/isp/common.c index 957179d7a46b..c84deb0cf614 100644 --- a/drivers/media/platform/rockchip/isp/common.c +++ b/drivers/media/platform/rockchip/isp/common.c @@ -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; diff --git a/drivers/media/platform/rockchip/isp/common.h b/drivers/media/platform/rockchip/isp/common.h index 37285089f464..7b6cac3d5e93 100644 --- a/drivers/media/platform/rockchip/isp/common.h +++ b/drivers/media/platform/rockchip/isp/common.h @@ -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) {