Hi, Louis: Louis Kuo <louis.kuo@xxxxxxxxxxxx> 於 2020年7月8日 週三 下午6:41寫道: > > This patch adds Mediatek's sensor interface driver. Sensor interface > driver is a MIPI-CSI2 host driver, namely, a HW camera interface controller. > It support a widely adopted, simple, high-speed protocol primarily intended > for point-to-point image and video transmission between cameras and host > devices. The mtk-isp directory will contain drivers for multiple IP blocks > found in Mediatek ISP system. It will include ISP Pass 1 driver, sensor > interface driver, DIP driver and face detection driver. > > Signed-off-by: Louis Kuo <louis.kuo@xxxxxxxxxxxx> > --- [snip] > + > +enum CFG_CSI_PORT { > + CFG_CSI_PORT_0 = 0x0, /* 4D1C */ > + CFG_CSI_PORT_1, /* 4D1C */ > + CFG_CSI_PORT_2, /* 4D1C */ > + CFG_CSI_PORT_0A, /* 2D1C */ > + CFG_CSI_PORT_0B, /* 2D1C */ > + CFG_CSI_PORT_MAX_NUM, > + CFG_CSI_PORT_NONE /*for non-MIPI sensor */ > +}; > + > +enum PIXEL_MODE { > + ONE_PIXEL_MODE = 0x0, > + TWO_PIXEL_MODE = 0x1, > + FOUR_PIXEL_MODE = 0x2, > +}; > + > +enum SENINF_ID { > + SENINF_1 = 0x0, > + SENINF_2 = 0x1, > + SENINF_3 = 0x2, > + SENINF_4 = 0x3, > + SENINF_5 = 0x4, > + SENINF_NUM, > +}; > + [snip] > + > +static int seninf_link_setup(struct media_entity *entity, > + const struct media_pad *local, > + const struct media_pad *remote, u32 flags) > +{ > + struct v4l2_subdev *sd; > + struct mtk_seninf *priv; > + struct device *dev; > + > + sd = media_entity_to_v4l2_subdev(entity); > + priv = v4l2_get_subdevdata(sd); > + dev = priv->dev; > + > + if (!(flags & MEDIA_LNK_FL_ENABLED)) > + return 0; > + > + if (local->flags & MEDIA_PAD_FL_SOURCE) { > + priv->mux_sel = local->index - CAM_MUX_IDX_MIN; > + } else { > + /* Select port */ > + priv->port = local->index; I don't understand V4L2 much, but the port definition is inside this file, how does the caller know what to pass to here? Could you explain how does it work? Regards, Chun-Kuang. > + if (priv->port >= NUM_SENSORS) { > + dev_err(dev, "port index is over number of ports\n"); > + return -EINVAL; > + } > + } > + > + return 0; > +} > +