@@ -260,6 +260,7 @@ static const int imx214_test_pattern_val[] = {
260
260
struct imx214 {
261
261
struct device * dev ;
262
262
struct clk * xclk ;
263
+ u32 xclk_freq ;
263
264
struct regmap * regmap ;
264
265
265
266
struct v4l2_subdev sd ;
@@ -312,9 +313,6 @@ static const struct cci_reg_sequence mode_4096x2304[] = {
312
313
{ IMX214_REG_DIG_CROP_WIDTH , 4096 },
313
314
{ IMX214_REG_DIG_CROP_HEIGHT , 2304 },
314
315
315
- { IMX214_REG_REQ_LINK_BIT_RATE ,
316
- IMX214_LINK_BIT_RATE_MBPS (IMX214_LINK_BIT_RATE (IMX214_DEFAULT_CLK_FREQ )) },
317
-
318
316
{ CCI_REG8 (0x3A03 ), 0x09 },
319
317
{ CCI_REG8 (0x3A04 ), 0x50 },
320
318
{ CCI_REG8 (0x3A05 ), 0x01 },
@@ -368,9 +366,6 @@ static const struct cci_reg_sequence mode_1920x1080[] = {
368
366
{ IMX214_REG_DIG_CROP_WIDTH , 1920 },
369
367
{ IMX214_REG_DIG_CROP_HEIGHT , 1080 },
370
368
371
- { IMX214_REG_REQ_LINK_BIT_RATE ,
372
- IMX214_LINK_BIT_RATE_MBPS (IMX214_LINK_BIT_RATE (IMX214_DEFAULT_CLK_FREQ )) },
373
-
374
369
{ CCI_REG8 (0x3A03 ), 0x04 },
375
370
{ CCI_REG8 (0x3A04 ), 0xF8 },
376
371
{ CCI_REG8 (0x3A05 ), 0x02 },
@@ -1029,6 +1024,7 @@ static int imx214_start_streaming(struct imx214 *imx214)
1029
1024
const struct v4l2_mbus_framefmt * fmt ;
1030
1025
struct v4l2_subdev_state * state ;
1031
1026
const struct imx214_mode * mode ;
1027
+ int link_bit_rate ;
1032
1028
int ret ;
1033
1029
1034
1030
ret = cci_multi_reg_write (imx214 -> regmap , mode_table_common ,
@@ -1044,6 +1040,14 @@ static int imx214_start_streaming(struct imx214 *imx214)
1044
1040
return ret ;
1045
1041
}
1046
1042
1043
+ link_bit_rate = IMX214_LINK_BIT_RATE (imx214 -> xclk_freq );
1044
+ ret = cci_write (imx214 -> regmap , IMX214_REG_REQ_LINK_BIT_RATE ,
1045
+ IMX214_LINK_BIT_RATE_MBPS (link_bit_rate ), NULL );
1046
+ if (ret ) {
1047
+ dev_err (imx214 -> dev , "failed to configure link bit rate\n" );
1048
+ return ret ;
1049
+ }
1050
+
1047
1051
ret = cci_write (imx214 -> regmap , IMX214_REG_CSI_LANE_MODE ,
1048
1052
IMX214_CSI_4_LANE_MODE , NULL );
1049
1053
if (ret ) {
@@ -1300,7 +1304,14 @@ static int imx214_probe(struct i2c_client *client)
1300
1304
return dev_err_probe (dev , PTR_ERR (imx214 -> xclk ),
1301
1305
"failed to get xclk\n" );
1302
1306
1303
- ret = clk_set_rate (imx214 -> xclk , IMX214_DEFAULT_CLK_FREQ );
1307
+ ret = device_property_read_u32 (dev , "clock-frequency" , & imx214 -> xclk_freq );
1308
+ if (ret ) {
1309
+ dev_warn (dev ,
1310
+ "clock-frequency not set, please review your DT. Fallback to default\n" );
1311
+ imx214 -> xclk_freq = IMX214_DEFAULT_CLK_FREQ ;
1312
+ }
1313
+
1314
+ ret = clk_set_rate (imx214 -> xclk , imx214 -> xclk_freq );
1304
1315
if (ret )
1305
1316
return dev_err_probe (dev , ret ,
1306
1317
"failed to set xclk frequency\n" );
0 commit comments