#define CSI2_RX_CFG1_MISR_EN BIT(6)
#define CSI2_RX_CFG1_CGC_MODE BIT(7)
-#define CSID_CFG0(iface) (0x300 + 0x100 * (iface))
+#define CSID_CFG0(iface) (0x200 + 0x100 * (iface))
#define CSID_CFG0_BYTE_CNTR_EN BIT(0)
#define CSID_CFG0_TIMESTAMP_EN BIT(1)
#define CSID_CFG0_DECODE_FORMAT_MASK GENMASK(15, 12)
#define CSID_CFG0_DTID_MASK GENMASK(28, 27)
#define CSID_CFG0_ENABLE BIT(31)
-#define CSID_CTRL(iface) (0x308 + 0x100 * (iface))
+#define CSID_CTRL(iface) (0x208 + 0x100 * (iface))
#define CSID_CTRL_HALT_AT_FRAME_BOUNDARY 0
#define CSID_CTRL_RESUME_AT_FRAME_BOUNDARY 1
+#define CSID_MAX_RDI_SRC_STREAMS (MSM_CSID_MAX_SRC_STREAMS - 1)
+
+enum csid_iface {
+ CSID_IFACE_PIX,
+ CSID_IFACE_RDI0,
+ CSID_IFACE_RDI1,
+ CSID_IFACE_RDI2,
+};
+
+static enum csid_iface csid_port_iface_map[CSID_MAX_RDI_SRC_STREAMS] = {
+ [0] = CSID_IFACE_RDI0,
+ [1] = CSID_IFACE_RDI1,
+ [2] = CSID_IFACE_RDI2,
+};
static void __csid_configure_rx(struct csid_device *csid, struct csid_phy_config *phy)
{
writel_relaxed(val, csid->base + CSID_CSI2_RX_CFG1);
}
-static void __csid_ctrl_rdi(struct csid_device *csid, int enable, u8 rdi)
-{
- writel_relaxed(!!enable, csid->base + CSID_CTRL(rdi));
-}
-
static void __csid_configure_rdi_stream(struct csid_device *csid, u8 enable, u8 port, u8 vc)
{
struct v4l2_mbus_framefmt *input_format = &csid->fmt[MSM_CSID_PAD_FIRST_SRC + port];
const struct csid_format_info *format = csid_get_fmt_entry(csid->res->formats->formats,
csid->res->formats->nformats,
input_format->code);
+ enum csid_iface iface = csid_port_iface_map[port];
u8 dt_id;
u32 val;
csid->id, enable ? "enable" : "disable", format->data_type,
port, vc);
- writel_relaxed(val, csid->base + CSID_CFG0(port));
+ writel_relaxed(val, csid->base + CSID_CFG0(iface));
+ writel_relaxed(enable, csid->base + CSID_CTRL(iface));
}
static void csid_configure_stream(struct csid_device *csid, u8 enable)
__csid_configure_rx(csid, &csid->phy);
- /* Loop through all enabled ports and configure a stream for each */
- for (i = 0; i < MSM_CSID_MAX_SRC_STREAMS; i++) {
- if (csid->phy.en_vc & BIT(i)) {
- __csid_configure_rdi_stream(csid, enable, i, 0);
- __csid_ctrl_rdi(csid, enable, i);
- }
+ /* RDIs */
+ for (i = 0; i < CSID_MAX_RDI_SRC_STREAMS; i++) {
+ if (csid->phy.en_vc & BIT(i))
+ __csid_configure_rdi_stream(csid, !!enable, i, 0);
}
}