#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_RDI2,
};
-static enum csid_iface csid_port_iface_map[CSID_MAX_RDI_SRC_STREAMS] = {
+static enum csid_iface csid_port_iface_map[MSM_CSID_MAX_SRC_STREAMS] = {
[0] = CSID_IFACE_RDI0,
[1] = CSID_IFACE_RDI1,
[2] = CSID_IFACE_RDI2,
+ [3] = CSID_IFACE_PIX,
};
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_configure_rdi_stream(struct csid_device *csid, u8 enable, u8 port, u8 vc)
+static void __csid_configure_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;
*/
dt_id = port & 0x03;
- val = CSID_CFG0_DECODE_FORMAT_NOP; /* only for RDI path */
+ if (iface == CSID_IFACE_PIX)
+ val = FIELD_PREP(CSID_CFG0_DECODE_FORMAT_MASK, format->decode_format);
+ else /* RDI is raw, no decoding */
+ val = CSID_CFG0_DECODE_FORMAT_NOP;
+
val |= FIELD_PREP(CSID_CFG0_DT_MASK, format->data_type);
val |= FIELD_PREP(CSID_CFG0_VC_MASK, vc);
val |= FIELD_PREP(CSID_CFG0_DTID_MASK, dt_id);
if (enable)
val |= CSID_CFG0_ENABLE;
- dev_dbg(csid->camss->dev, "CSID%u: Stream %s (dt:0x%x port=%u vc=%u)\n",
+ dev_dbg(csid->camss->dev, "CSID%u: Stream %s (dt:0x%x df=0x%x port=%u vc=%u)\n",
csid->id, enable ? "enable" : "disable", format->data_type,
- port, vc);
+ format->decode_format, port, vc);
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)
+static void csid_configure_streams(struct csid_device *csid, u8 enable)
{
int i;
__csid_configure_rx(csid, &csid->phy);
- /* RDIs */
- for (i = 0; i < CSID_MAX_RDI_SRC_STREAMS; i++) {
+ 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_configure_stream(csid, !!enable, i, 0);
}
}
const struct csid_hw_ops csid_ops_340 = {
.configure_testgen_pattern = csid_configure_testgen_pattern,
- .configure_stream = csid_configure_stream,
+ .configure_stream = csid_configure_streams,
.hw_version = csid_hw_version,
.isr = csid_isr,
.reset = csid_reset,