linux/drivers/media/platform/samsung/exynos4-is/fimc-is-regs.h

/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Samsung EXYNOS4x12 FIMC-IS (Imaging Subsystem) driver
 *
 * Copyright (C) 2013 Samsung Electronics Co., Ltd.
 *
 * Authors: Sylwester Nawrocki <[email protected]>
 *          Younghwan Joo <[email protected]>
 */
#ifndef FIMC_IS_REG_H_
#define FIMC_IS_REG_H_

/* WDT_ISP register */
#define REG_WDT_ISP

/* MCUCTL registers base offset */
#define MCUCTL_BASE

/* MCU Controller Register */
#define MCUCTL_REG_MCUCTRL
#define MCUCTRL_MSWRST

/* Boot Base Offset Address Register */
#define MCUCTL_REG_BBOAR

/* Interrupt Generation Register 0 from Host CPU to VIC */
#define MCUCTL_REG_INTGR0
/* __n = 0...9 */
#define INTGR0_INTGC(__n)
/* __n = 0...5 */
#define INTGR0_INTGD(__n)

/* Interrupt Clear Register 0 from Host CPU to VIC */
#define MCUCTL_REG_INTCR0
/* __n = 0...9 */
#define INTCR0_INTGC(__n)
/* __n = 0...5 */
#define INTCR0_INTCD(__n)

/* Interrupt Mask Register 0 from Host CPU to VIC */
#define MCUCTL_REG_INTMR0
/* __n = 0...9 */
#define INTMR0_INTMC(__n)
/* __n = 0...5 */
#define INTMR0_INTMD(__n)

/* Interrupt Status Register 0 from Host CPU to VIC */
#define MCUCTL_REG_INTSR0
/* __n (bit number) = 0...4 */
#define INTSR0_GET_INTSD(x, __n)
/* __n (bit number) = 0...9 */
#define INTSR0_GET_INTSC(x, __n)

/* Interrupt Mask Status Register 0 from Host CPU to VIC */
#define MCUCTL_REG_INTMSR0
/* __n (bit number) = 0...4 */
#define INTMSR0_GET_INTMSD(x, __n)
/* __n (bit number) = 0...9 */
#define INTMSR0_GET_INTMSC(x, __n)

/* Interrupt Generation Register 1 from ISP CPU to Host IC */
#define MCUCTL_REG_INTGR1
/* __n = 0...9 */
#define INTGR1_INTGC(__n)

/* Interrupt Clear Register 1 from ISP CPU to Host IC */
#define MCUCTL_REG_INTCR1
/* __n = 0...9 */
#define INTCR1_INTCC(__n)

/* Interrupt Mask Register 1 from ISP CPU to Host IC */
#define MCUCTL_REG_INTMR1
/* __n = 0...9 */
#define INTMR1_INTMC(__n)

/* Interrupt Status Register 1 from ISP CPU to Host IC */
#define MCUCTL_REG_INTSR1
/* Interrupt Mask Status Register 1 from ISP CPU to Host IC */
#define MCUCTL_REG_INTMSR1

/* Interrupt Clear Register 2 from ISP BLK's interrupts to Host IC */
#define MCUCTL_REG_INTCR2
/* __n = 0...5 */
#define INTCR2_INTCC(__n)

/* Interrupt Mask Register 2 from ISP BLK's interrupts to Host IC */
#define MCUCTL_REG_INTMR2
/* __n = 0...25 */
#define INTMR2_INTMCIS(__n)

/* Interrupt Status Register 2 from ISP BLK's interrupts to Host IC */
#define MCUCTL_REG_INTSR2
/* Interrupt Mask Status Register 2 from ISP BLK's interrupts to Host IC */
#define MCUCTL_REG_INTMSR2

/* General Purpose Output Control Register (0~17) */
#define MCUCTL_REG_GPOCTLR
/* __n = 0...17 */
#define GPOCTLR_GPOG(__n)

/* General Purpose Pad Output Enable Register (0~17) */
#define MCUCTL_REG_GPOENCTLR
/* __n = 0...17 */
#define GPOENCTLR_GPOEN(__n)

/* General Purpose Input Control Register (0~17) */
#define MCUCTL_REG_GPICTLR

/* Shared registers between ISP CPU and the host CPU - ISSRxx */

/* ISSR(1): Command Host -> IS */
/* ISSR(1): Sensor ID for Command, ISSR2...5 = Parameter 1...4 */

/* ISSR(10): Reply IS -> Host */
/* ISSR(11): Sensor ID for Reply, ISSR12...15 = Parameter 1...4 */

/* ISSR(20): ISP_FRAME_DONE : SENSOR ID */
/* ISSR(21): ISP_FRAME_DONE : PARAMETER 1 */

/* ISSR(24): SCALERC_FRAME_DONE : SENSOR ID */
/* ISSR(25): SCALERC_FRAME_DONE : PARAMETER 1 */

/* ISSR(28): 3DNR_FRAME_DONE : SENSOR ID */
/* ISSR(29): 3DNR_FRAME_DONE : PARAMETER 1 */

/* ISSR(32): SCALERP_FRAME_DONE : SENSOR ID */
/* ISSR(33): SCALERP_FRAME_DONE : PARAMETER 1 */

/* __n = 0...63 */
#define MCUCTL_REG_ISSR(__n)

/* PMU ISP register offsets */
#define REG_CMU_RESET_ISP_SYS_PWR_REG
#define REG_CMU_SYSCLK_ISP_SYS_PWR_REG
#define REG_PMU_ISP_ARM_SYS
#define REG_PMU_ISP_ARM_CONFIGURATION
#define REG_PMU_ISP_ARM_STATUS
#define REG_PMU_ISP_ARM_OPTION

void fimc_is_fw_clear_irq1(struct fimc_is *is, unsigned int bit);
void fimc_is_fw_clear_irq2(struct fimc_is *is);
int fimc_is_hw_get_params(struct fimc_is *is, unsigned int num);

void fimc_is_hw_set_intgr0_gd0(struct fimc_is *is);
int fimc_is_hw_wait_intmsr0_intmsd0(struct fimc_is *is);
void fimc_is_hw_set_sensor_num(struct fimc_is *is);
void fimc_is_hw_set_isp_buf_mask(struct fimc_is *is, unsigned int mask);
void fimc_is_hw_stream_on(struct fimc_is *is);
void fimc_is_hw_stream_off(struct fimc_is *is);
int fimc_is_hw_set_param(struct fimc_is *is);
int fimc_is_hw_change_mode(struct fimc_is *is);

void fimc_is_hw_close_sensor(struct fimc_is *is, unsigned int index);
void fimc_is_hw_get_setfile_addr(struct fimc_is *is);
void fimc_is_hw_load_setfile(struct fimc_is *is);
void fimc_is_hw_subip_power_off(struct fimc_is *is);

int fimc_is_itf_s_param(struct fimc_is *is, bool update);
int fimc_is_itf_mode_change(struct fimc_is *is);

#endif /* FIMC_IS_REG_H_ */