Skip to content

Commit cb92ace

Browse files
author
André Apitzsch
committed
media: i2c: imx214: Calculate link bit rate from clock frequency
Signed-off-by: André Apitzsch <[email protected]>
1 parent 0328da6 commit cb92ace

File tree

1 file changed

+29
-14
lines changed

1 file changed

+29
-14
lines changed

drivers/media/i2c/imx214.c

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@
3737
#define IMX214_DEFAULT_PIXEL_RATE ((IMX214_DEFAULT_LINK_FREQ * 8LL) / 10)
3838
#define IMX214_FPS 30
3939

40+
#define IMX214_DEFAULT_VTPXCK_DIV 5
41+
#define IMX214_DEFAULT_VTSYCK_DIV 2
42+
#define IMX214_DEFAULT_PREPLLCK_VT_DIV 3
43+
#define IMX214_DEFAULT_PLL_VT_MPY 150
44+
#define IMX214_DEFAULT_OPPXCK_DIV 10
45+
#define IMX214_DEFAULT_OPSYCK_DIV 1
46+
4047
/* V-TIMING internal */
4148
#define IMX214_REG_FRM_LENGTH_LINES CCI_REG16(0x0340)
4249
#define IMX214_VTS_MAX 0xffff
@@ -204,6 +211,12 @@
204211
#define IMX214_PIXEL_ARRAY_WIDTH 4208U
205212
#define IMX214_PIXEL_ARRAY_HEIGHT 3120U
206213

214+
#define IMX214_LINK_BIT_RATE(clk_freq) \
215+
((clk_freq) / 1000000) / IMX214_DEFAULT_PREPLLCK_VT_DIV \
216+
* IMX214_DEFAULT_PLL_VT_MPY / (IMX214_DEFAULT_OPSYCK_DIV \
217+
* IMX214_DEFAULT_OPPXCK_DIV) * (IMX214_CSI_DATA_FORMAT_RAW10 >> 8) \
218+
* (IMX214_CSI_4_LANE_MODE + 1)
219+
207220
static const char * const imx214_supply_name[] = {
208221
"vdda",
209222
"vddd",
@@ -299,15 +312,16 @@ static const struct cci_reg_sequence mode_4096x2304[] = {
299312
{ IMX214_REG_DIG_CROP_WIDTH, 4096 },
300313
{ IMX214_REG_DIG_CROP_HEIGHT, 2304 },
301314

302-
{ IMX214_REG_VTPXCK_DIV, 5 },
303-
{ IMX214_REG_VTSYCK_DIV, 2 },
304-
{ IMX214_REG_PREPLLCK_VT_DIV, 3 },
305-
{ IMX214_REG_PLL_VT_MPY, 150 },
306-
{ IMX214_REG_OPPXCK_DIV, 10 },
307-
{ IMX214_REG_OPSYCK_DIV, 1 },
315+
{ IMX214_REG_VTPXCK_DIV, IMX214_DEFAULT_VTPXCK_DIV },
316+
{ IMX214_REG_VTSYCK_DIV, IMX214_DEFAULT_VTSYCK_DIV },
317+
{ IMX214_REG_PREPLLCK_VT_DIV, IMX214_DEFAULT_PREPLLCK_VT_DIV },
318+
{ IMX214_REG_PLL_VT_MPY, IMX214_DEFAULT_PLL_VT_MPY },
319+
{ IMX214_REG_OPPXCK_DIV, IMX214_DEFAULT_OPPXCK_DIV },
320+
{ IMX214_REG_OPSYCK_DIV, IMX214_DEFAULT_OPSYCK_DIV },
308321
{ IMX214_REG_PLL_MULT_DRIV, IMX214_PLL_SINGLE },
309322

310-
{ IMX214_REG_REQ_LINK_BIT_RATE, IMX214_LINK_BIT_RATE_MBPS(4800) },
323+
{ IMX214_REG_REQ_LINK_BIT_RATE,
324+
IMX214_LINK_BIT_RATE_MBPS(IMX214_LINK_BIT_RATE(IMX214_DEFAULT_CLK_FREQ)) },
311325

312326
{ CCI_REG8(0x3A03), 0x09 },
313327
{ CCI_REG8(0x3A04), 0x50 },
@@ -362,15 +376,16 @@ static const struct cci_reg_sequence mode_1920x1080[] = {
362376
{ IMX214_REG_DIG_CROP_WIDTH, 1920 },
363377
{ IMX214_REG_DIG_CROP_HEIGHT, 1080 },
364378

365-
{ IMX214_REG_VTPXCK_DIV, 5 },
366-
{ IMX214_REG_VTSYCK_DIV, 2 },
367-
{ IMX214_REG_PREPLLCK_VT_DIV, 3 },
368-
{ IMX214_REG_PLL_VT_MPY, 150 },
369-
{ IMX214_REG_OPPXCK_DIV, 10 },
370-
{ IMX214_REG_OPSYCK_DIV, 1 },
379+
{ IMX214_REG_VTPXCK_DIV, IMX214_DEFAULT_VTPXCK_DIV },
380+
{ IMX214_REG_VTSYCK_DIV, IMX214_DEFAULT_VTSYCK_DIV },
381+
{ IMX214_REG_PREPLLCK_VT_DIV, IMX214_DEFAULT_PREPLLCK_VT_DIV },
382+
{ IMX214_REG_PLL_VT_MPY, IMX214_DEFAULT_PLL_VT_MPY },
383+
{ IMX214_REG_OPPXCK_DIV, IMX214_DEFAULT_OPPXCK_DIV },
384+
{ IMX214_REG_OPSYCK_DIV, IMX214_DEFAULT_OPSYCK_DIV },
371385
{ IMX214_REG_PLL_MULT_DRIV, IMX214_PLL_SINGLE },
372386

373-
{ IMX214_REG_REQ_LINK_BIT_RATE, IMX214_LINK_BIT_RATE_MBPS(4800) },
387+
{ IMX214_REG_REQ_LINK_BIT_RATE,
388+
IMX214_LINK_BIT_RATE_MBPS(IMX214_LINK_BIT_RATE(IMX214_DEFAULT_CLK_FREQ)) },
374389

375390
{ CCI_REG8(0x3A03), 0x04 },
376391
{ CCI_REG8(0x3A04), 0xF8 },

0 commit comments

Comments
 (0)