Re: [PATCH v6 3/8] media: qcom: camss: Prepare CSID for C-PHY support
Frank Li <[email protected]>
| Newsgroups | org.kernel.vger.phone-devel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel,org.kernel.vger.linux-media |
|---|---|
| Message-ID | <aiHM94-IDjiJWeqe@lizhi-Precision-Tower-5810> |
On Thu, Jun 04, 2026 at 02:34:49PM +0200, David Heidelberg wrote: > On 03/06/2026 23:47, Frank Li wrote: > > On Wed, Jun 03, 2026 at 01:30:41AM +0200, David Heidelberg wrote: > > > Inherit C-PHY information from CSIPHY, so we can configure CSID > > > properly. > > > > > > CSI2_RX_CFG0_PHY_TYPE_SEL must be set to 1, when C-PHY mode is used. > > > > > > Reviewed-by: Bryan O'Donoghue <[email protected]> > > > Acked-by: Cory Keitz <[email protected]> > > > Signed-off-by: David Heidelberg <[email protected]> > > > --- > > > drivers/media/platform/qcom/camss/camss-csid-gen2.c | 1 + > > > drivers/media/platform/qcom/camss/camss-csid.c | 1 + > > > drivers/media/platform/qcom/camss/camss-csid.h | 1 + > > > 3 files changed, 3 insertions(+) > > > > > > diff --git a/drivers/media/platform/qcom/camss/camss-csid-gen2.c b/drivers/media/platform/qcom/camss/camss-csid-gen2.c > > > index eadcb2f7e3aaa..52ef730b10553 100644 > > > --- a/drivers/media/platform/qcom/camss/camss-csid-gen2.c > > > +++ b/drivers/media/platform/qcom/camss/camss-csid-gen2.c > > > @@ -178,16 +178,17 @@ static void __csid_configure_rx(struct csid_device *csid, > > > int val; > > > > > > if (!lane_cnt) > > > lane_cnt = 4; > > > > > > val = (lane_cnt - 1) << CSI2_RX_CFG0_NUM_ACTIVE_LANES; > > > val |= phy->lane_assign << CSI2_RX_CFG0_DL0_INPUT_SEL; > > > val |= phy->csiphy_id << CSI2_RX_CFG0_PHY_NUM_SEL; > > > + val |= csid->phy.cphy << CSI2_RX_CFG0_PHY_TYPE_SEL; > > > > shift a bool type is not good habbit. some compiler may treat as undefine > > beheavor. > > > > Frank > > Oh I found out Bryan commented on the older revisions about the boolean usage. > > So idea is convert this to: > > +enum csid_phy_sel { > + CSID_PHY_SEL_DPHY = 0, > + CSID_PHY_SEL_CPHY = 1 > +}; > + > > [...] > > struct csid_phy_config { > u8 csiphy_id; > u8 lane_cnt; > u32 lane_assign; > u32 en_vc; > u8 need_vc_update; > - bool cphy; > + enum csid_phy_sel phy_sel; > }; > > Frank, Bryan, snds good? good for me Frank > > > > > > writel_relaxed(val, csid->base + CSID_CSI2_RX_CFG0); > > > > > > val = 1 << CSI2_RX_CFG1_PACKET_ECC_CORRECTION_EN; > > > if (vc > 3) > > > val |= 1 << CSI2_RX_CFG1_VC_MODE; > > > val |= 1 << CSI2_RX_CFG1_MISR_EN; > > > writel_relaxed(val, csid->base + CSID_CSI2_RX_CFG1); > > > } > > > diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media/platform/qcom/camss/camss-csid.c > > > index 48459b46a981b..8d5c872f84ed5 100644 > > > --- a/drivers/media/platform/qcom/camss/camss-csid.c > > > +++ b/drivers/media/platform/qcom/camss/camss-csid.c > > > @@ -1286,16 +1286,17 @@ static int csid_link_setup(struct media_entity *entity, > > > /* do no allow a link from CSIPHY to CSID */ > > > if (!csiphy->cfg.csi2) > > > return -EPERM; > > > > > > csid->phy.csiphy_id = csiphy->id; > > > > > > lane_cfg = &csiphy->cfg.csi2->lane_cfg; > > > csid->phy.lane_cnt = lane_cfg->num_data; > > > + csid->phy.cphy = (lane_cfg->phy_cfg == V4L2_MBUS_CSI2_CPHY); > > > csid->phy.lane_assign = csid_get_lane_assign(lane_cfg, lane_cfg->num_data); > > > csid->tpg_linked = false; > > > } > > > } > > > /* Decide which virtual channels to enable based on which source pads are enabled */ > > > if (local->flags & MEDIA_PAD_FL_SOURCE) { > > > struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity); > > > struct csid_device *csid = v4l2_get_subdevdata(sd); > > > diff --git a/drivers/media/platform/qcom/camss/camss-csid.h b/drivers/media/platform/qcom/camss/camss-csid.h > > > index 5296b10f6bac8..00e2669db64c9 100644 > > > --- a/drivers/media/platform/qcom/camss/camss-csid.h > > > +++ b/drivers/media/platform/qcom/camss/camss-csid.h > > > @@ -65,16 +65,17 @@ struct csid_testgen_config { > > > }; > > > > > > struct csid_phy_config { > > > u8 csiphy_id; > > > u8 lane_cnt; > > > u32 lane_assign; > > > u32 en_vc; > > > u8 need_vc_update; > > > + bool cphy; > > > }; > > > > > > struct csid_device; > > > > > > struct csid_hw_ops { > > > /* > > > * configure_stream - Configures and starts CSID input stream > > > * @csid: CSID device > > > > > > -- > > > 2.53.0 > > > > > -- > David Heidelberg >