Message ID | 20220907191547.19255-4-laurent.pinchart@ideasonboard.com |
---|---|
State | Accepted |
Commit | cccc08a95ca57624563daafd47df5691e8c38995 |
Headers | show |
Series | media: imx: imx7-media-csi: Small fix and cleanups | expand |
On Wed, Sep 07, 2022 at 10:15:47PM +0300, Laurent Pinchart wrote: > Commit 9babbbaaeb87 ("media: imx: imx7-media-csi: Use dual sampling for > YUV 1X16") set BIT_MIPI_DOUBLE_CMPNT in the CR18 register for 16-bit YUV > formats in imx7_csi_configure(). The CR18 register is always updated > with read-modify-write cycles, so if a 16-bit YUV format is selected, > the bit will stay set forever, even if the format is changed. Fix it by > clearing the bit at the beginning of the imx7_csi_configure() function. > > While at it, swap two of the bits being cleared to match the MSB to LSB > order. This doesn't cause any functional change. > > Fixes: 9babbbaaeb87 ("media: imx: imx7-media-csi: Use dual sampling for YUV 1X16") > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> > --- > drivers/staging/media/imx/imx7-media-csi.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c > index 03986445c0da..21d6e56ffcd4 100644 > --- a/drivers/staging/media/imx/imx7-media-csi.c > +++ b/drivers/staging/media/imx/imx7-media-csi.c > @@ -522,9 +522,9 @@ static void imx7_csi_configure(struct imx7_csi *csi) > cr18 = imx7_csi_reg_read(csi, CSI_CSICR18); > > cr18 &= ~(BIT_CSI_HW_ENABLE | BIT_MIPI_DATA_FORMAT_MASK | > - BIT_DATA_FROM_MIPI | BIT_BASEADDR_CHG_ERR_EN | > - BIT_BASEADDR_SWITCH_EN | BIT_BASEADDR_SWITCH_SEL | > - BIT_DEINTERLACE_EN); > + BIT_DATA_FROM_MIPI | BIT_MIPI_DOUBLE_CMPNT | > + BIT_BASEADDR_CHG_ERR_EN | BIT_BASEADDR_SWITCH_SEL | > + BIT_BASEADDR_SWITCH_EN | BIT_DEINTERLACE_EN); > > if (out_pix->field == V4L2_FIELD_INTERLACED) { > cr18 |= BIT_DEINTERLACE_EN;
diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c index 03986445c0da..21d6e56ffcd4 100644 --- a/drivers/staging/media/imx/imx7-media-csi.c +++ b/drivers/staging/media/imx/imx7-media-csi.c @@ -522,9 +522,9 @@ static void imx7_csi_configure(struct imx7_csi *csi) cr18 = imx7_csi_reg_read(csi, CSI_CSICR18); cr18 &= ~(BIT_CSI_HW_ENABLE | BIT_MIPI_DATA_FORMAT_MASK | - BIT_DATA_FROM_MIPI | BIT_BASEADDR_CHG_ERR_EN | - BIT_BASEADDR_SWITCH_EN | BIT_BASEADDR_SWITCH_SEL | - BIT_DEINTERLACE_EN); + BIT_DATA_FROM_MIPI | BIT_MIPI_DOUBLE_CMPNT | + BIT_BASEADDR_CHG_ERR_EN | BIT_BASEADDR_SWITCH_SEL | + BIT_BASEADDR_SWITCH_EN | BIT_DEINTERLACE_EN); if (out_pix->field == V4L2_FIELD_INTERLACED) { cr18 |= BIT_DEINTERLACE_EN;
Commit 9babbbaaeb87 ("media: imx: imx7-media-csi: Use dual sampling for YUV 1X16") set BIT_MIPI_DOUBLE_CMPNT in the CR18 register for 16-bit YUV formats in imx7_csi_configure(). The CR18 register is always updated with read-modify-write cycles, so if a 16-bit YUV format is selected, the bit will stay set forever, even if the format is changed. Fix it by clearing the bit at the beginning of the imx7_csi_configure() function. While at it, swap two of the bits being cleared to match the MSB to LSB order. This doesn't cause any functional change. Fixes: 9babbbaaeb87 ("media: imx: imx7-media-csi: Use dual sampling for YUV 1X16") Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- drivers/staging/media/imx/imx7-media-csi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)