Message ID | 20231018131729.1022521-1-umang.jain@ideasonboard.com |
---|---|
State | New |
Headers | show |
Series | media: css: Write LINE_LENGTH_PCK correctly | expand |
Hi Umang, On Wed, Oct 18, 2023 at 06:47:29PM +0530, Umang Jain wrote: > According to MIPI CCS v1.1 specification, the LINE_LENGTH_PCK > units is in VT pixel clocks (Section 8.2.6). > > To compute how many pixel clocks it takes, simply divide the > VT pixel clock frequency by the number of pixels in a single line. Have you hard of dimensional analysis (https://en.wikipedia.org/wiki/Dimensional_analysis) ? It's a very good and simple way of checking the validity of mathematical formulas. > Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> > --- > Testing: > > The patch is tested using IMX519 with CCS. > This patch makes the frame buffer being filled to the fullest > (instead of getting 1/3rd only previously) - without any workarounds. > --- > drivers/media/i2c/ccs/ccs-core.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/drivers/media/i2c/ccs/ccs-core.c b/drivers/media/i2c/ccs/ccs-core.c > index 16de66a37fad..12c75a843dfe 100644 > --- a/drivers/media/i2c/ccs/ccs-core.c > +++ b/drivers/media/i2c/ccs/ccs-core.c > @@ -734,9 +734,11 @@ static int ccs_set_ctrl(struct v4l2_ctrl *ctrl) > > break; > case V4L2_CID_HBLANK: > - rval = ccs_write(sensor, LINE_LENGTH_PCK, > - sensor->pixel_array->crop[CCS_PA_PAD_SRC].width > - + ctrl->val); > + /* LINE_LENGTH_PCK units are in VT pixel clocks. */ > + u16 line_length_pck = > + sensor->pll.vt_bk.pix_clk_freq_hz / > + (sensor->pixel_array->crop[CCS_PA_PAD_SRC].width + ctrl->val); > + rval = ccs_write(sensor, LINE_LENGTH_PCK, line_length_pck); > > break; > case V4L2_CID_TEST_PATTERN:
diff --git a/drivers/media/i2c/ccs/ccs-core.c b/drivers/media/i2c/ccs/ccs-core.c index 16de66a37fad..12c75a843dfe 100644 --- a/drivers/media/i2c/ccs/ccs-core.c +++ b/drivers/media/i2c/ccs/ccs-core.c @@ -734,9 +734,11 @@ static int ccs_set_ctrl(struct v4l2_ctrl *ctrl) break; case V4L2_CID_HBLANK: - rval = ccs_write(sensor, LINE_LENGTH_PCK, - sensor->pixel_array->crop[CCS_PA_PAD_SRC].width - + ctrl->val); + /* LINE_LENGTH_PCK units are in VT pixel clocks. */ + u16 line_length_pck = + sensor->pll.vt_bk.pix_clk_freq_hz / + (sensor->pixel_array->crop[CCS_PA_PAD_SRC].width + ctrl->val); + rval = ccs_write(sensor, LINE_LENGTH_PCK, line_length_pck); break; case V4L2_CID_TEST_PATTERN:
According to MIPI CCS v1.1 specification, the LINE_LENGTH_PCK units is in VT pixel clocks (Section 8.2.6). To compute how many pixel clocks it takes, simply divide the VT pixel clock frequency by the number of pixels in a single line. Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> --- Testing: The patch is tested using IMX519 with CCS. This patch makes the frame buffer being filled to the fullest (instead of getting 1/3rd only previously) - without any workarounds. --- drivers/media/i2c/ccs/ccs-core.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)