blob: 945aa3a1e4088cffde4f5e5264d8f49b760d4570 [file] [log] [blame]
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#ifndef _VOUT_REG_H
#define _VOUT_REG_H
#ifndef REG_BASE_VCBUS
#define REG_BASE_VCBUS (0xff900000L)
#endif
#define REG_OFFSET_VCBUS(reg) ((reg << 2))
#define REG_ADDR_VCBUS(reg) (REG_BASE_VCBUS + REG_OFFSET_VCBUS(reg) + 0L)
#define REG_CLK_ADDR(reg) (reg + 0L)
#define REG_VOUT_ADDR(reg) (reg + 0L)
#ifndef HHI_VPU_CLKC_CNTL
#define HHI_VPU_CLKC_CNTL (0xff63c000L + (0x06d << 2))
#endif
#ifndef CLKCTRL_VPU_CLKC_CTRL
#define CLKCTRL_VPU_CLKC_CTRL ((0x003c << 2) + 0xfe000000L)
#endif
#ifndef VPU_VIU_VENC_MUX_CTRL
#define VPU_VIU_VENC_MUX_CTRL ((0x271a << 2) + 0xff000000L)
#endif
#ifndef VPU_VENCX_CLK_CTRL
#define VPU_VENCX_CLK_CTRL ((0x2785 << 2) + 0xff000000L)
#endif
#ifndef VPU_VENC_CTRL
#define VPU_VENC_CTRL ((0x1cef << 2) + 0xff000000L)
#endif
static inline unsigned int vout_reg_read(u32 reg)
{
unsigned int val;
if (reg > 0x10000)
val = *(volatile unsigned int *)REG_VOUT_ADDR(reg);
else
val = *(volatile unsigned int *)REG_ADDR_VCBUS(reg);
return val;
}
static inline void vout_reg_write(u32 reg, const u32 val)
{
if (reg > 0x10000)
*(volatile unsigned int *)REG_VOUT_ADDR(reg) = (val);
else
*(volatile unsigned int *)REG_ADDR_VCBUS(reg) = (val);
}
static inline void vout_reg_setb(unsigned int reg, unsigned int val,
unsigned int start, unsigned int len)
{
vout_reg_write(reg, ((vout_reg_read(reg) &
~(((1L << (len))-1) << (start))) |
(((val)&((1L<<(len))-1)) << (start))));
}
static inline unsigned int vout_clk_read(u32 reg)
{
return *(volatile unsigned int *)(REG_CLK_ADDR(reg));
}
static inline void vout_clk_write(u32 reg, const u32 val)
{
*(volatile unsigned int *)REG_CLK_ADDR(reg) = (val);
}
static inline void vout_clk_setb(unsigned int reg, unsigned int val,
unsigned int start, unsigned int len)
{
vout_clk_write(reg, ((vout_clk_read(reg) &
~(((1L << (len))-1) << (start))) |
(((val)&((1L<<(len))-1)) << (start))));
}
#endif