blob: 6092978b945e00ca2f842f963acffc650bb8eef8 [file] [log] [blame]
/*
* Copyright (c) 2014--2016 Intel Corporation.
*
* Author: Archana Vohra <archana.vohra@intel.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef MIPI_TOP_H_
#define MIPI_TOP_H_
#include <linux/mutex.h>
/*NOTE: This include file has structures used in MIPI Top APIs */
#include <linux/mipibridge.h>
#include "mipicsi_dc_dphy.h"
#include "mipi_dev.h"
/* External Clocks */
#define AHB_APB_CLK_MHZ 100
#define FPCLK_MHZ 100
#define REFCLK_MHZ 25
#define CFGCLK_MHZ 50
#define EXTCLK_MHZ 1000
/* PLL and Bitrates for Daughtercard and Gen3 DPhy*/
#define DC_PLL_MIN_MHZ 80
#define DC_PLL_MAX_MHZ 2000
#define DC_MIN_BITRATE DC_PLL_MIN_MHZ
#define DC_MAX_BITRATE DC_PLL_MAX_MHZ
#define G3_PLL_MIN_MHZ 40
#define G3_PLL_MAX_MHZ 1250
#define G3_MIN_BITRATE (G3_PLL_MIN_MHZ*2)
#define G3_MAX_BITRATE (G3_PLL_MAX_MHZ*2)
/* CSI Device Controller Parameters */
#define CSI2_DEVICE_DATAINTERFACE IDI
#define CSI2_DEVICE_NUM_OF_LANES 4
#define CSI2_DEVICE_DFLT_F_SYNC_TYPE 2
#define CSI2_DEVICE_IDI_PLD_FIFO_DEPTH 4096
#define CSI2_DEVICE_IDI_PLD_RAM_DEPTH 4096
#define CSI2_DEVICE_IDI_HD_FIFO_DEPTH 8
/* CSI Host Controller Parameters */
#define CSI2_DATAINTERFACE 2
#define IDI_64_DATA_IF 1
#define CSI2_HOST_NUM_OF_LANES 4
#define CSI2_HOST_DFLT_F_SYNC_TYPE 2
#define CSI2_HOST_N_DATA_IDS 1
#define CSI2_HOST_SNPS_PHY 1
#define CSI2_EXT_PPIP 0
#define CSI2_PPI_PD 2
#define CSI2_PCLK_FREE 1
#define BIT0_MASK 0x0001
#define BIT1_MASK 0x0002
#define BIT2_MASK 0x0004
#define BIT3_MASK 0x0008
#define BIT4_MASK 0x0010
#define BIT5_MASK 0x0020
#define BIT6_MASK 0x0040
#define BIT7_MASK 0x0080
#define BIT8_MASK 0x0100
#define BIT9_MASK 0x0200
#define BIT10_MASK 0x0400
#define BIT11_MASK 0x0800
#define BIT12_MASK 0x1000
#define BIT13_MASK 0x2000
#define BIT14_MASK 0x4000
#define BIT15_MASK 0x8000
#define RX_MODE_IPU_EN_MASK BIT3_MASK
#define RX_MODE_TX0_BYP_EN_MASK BIT4_MASK
#define RX_MODE_TX1_BYP_EN_MASK BIT5_MASK
#define TX_CMODE_IPU_EN_MASK BIT3_MASK
#define TX_CMODE_RX0_BYP_EN_MASK BIT4_MASK
#define TX_CMODE_RX1_BYP_EN_MASK BIT5_MASK
enum TX_BYP_SEL_VALUES {
TX_POWER_OFF = 0,
TX_BYPASS_RX0 = 1,
TX_BYPASS_RX1 = 2,
TX_BYPASS_RX2 = 3
};
struct mipicsi_top_bist {
enum mipicsi_top_dev dev; /* Rx0, Rx1, Rx2, Tx0, Tx1 */
bool done;
bool ok;
};
int mipicsi_top_start(struct mipicsi_top_cfg *config);
int mipicsi_top_stop(enum mipicsi_top_dev dev);
int mipicsi_top_set_mux(struct mipicsi_top_mux *mux);
int mipicsi_top_disable_mux(struct mipicsi_top_mux *mux);
void mipicsi_top_get_mux(struct mipicsi_top_mux_data *mux_data);
int mipicsi_top_get_mux_status(struct mipicsi_top_mux *mux);
int mipicsi_top_reset(enum mipicsi_top_dev dev);
int mipicsi_top_reset_all(void);
int mipicsi_top_set_irq_mask(uint8_t mask);
int mipicsi_top_read(struct mipicsi_top_reg *reg);
int mipicsi_top_write(struct mipicsi_top_reg *reg);
int mipicsi_top_dphy_read(struct mipicsi_top_reg *reg);
int mipicsi_top_dphy_write(struct mipicsi_top_reg *reg);
int mipicsi_top_debug_bist_start(enum mipicsi_top_dev dev);
int mipicsi_top_debug_bist_status(struct mipicsi_top_bist *bist);
int mipicsi_top_debug_vpg(struct mipicsi_top_vpg *vpg);
void mipicsi_set_device(enum mipicsi_top_dev devid, struct mipi_dev *dev);
struct mipi_dev *mipicsi_get_device(enum mipicsi_top_dev devid);
enum mipicsi_top_dev get_device_id(const char *device_name);
#endif /* MIPI_TOP_H_ */