@@ -483,6 +483,8 @@ enum rcar_csi2_pads {
483
483
struct rcar_csi2_info {
484
484
int (* init_phtw )(struct rcar_csi2 * priv , unsigned int mbps );
485
485
int (* phy_post_init )(struct rcar_csi2 * priv );
486
+ int (* start_receiver )(struct rcar_csi2 * priv );
487
+ void (* enter_standby )(struct rcar_csi2 * priv );
486
488
const struct rcsi2_mbps_reg * hsfreqrange ;
487
489
unsigned int csi0clkfreqrange ;
488
490
unsigned int num_channels ;
@@ -533,10 +535,17 @@ static void rcsi2_write(struct rcar_csi2 *priv, unsigned int reg, u32 data)
533
535
iowrite32 (data , priv -> base + reg );
534
536
}
535
537
536
- static void rcsi2_enter_standby (struct rcar_csi2 * priv )
538
+ static void rcsi2_enter_standby_gen3 (struct rcar_csi2 * priv )
537
539
{
538
540
rcsi2_write (priv , PHYCNT_REG , 0 );
539
541
rcsi2_write (priv , PHTC_REG , PHTC_TESTCLR );
542
+ }
543
+
544
+ static void rcsi2_enter_standby (struct rcar_csi2 * priv )
545
+ {
546
+ if (priv -> info -> enter_standby )
547
+ priv -> info -> enter_standby (priv );
548
+
540
549
reset_control_assert (priv -> rstc );
541
550
usleep_range (100 , 150 );
542
551
pm_runtime_put (priv -> dev );
@@ -674,7 +683,7 @@ static int rcsi2_get_active_lanes(struct rcar_csi2 *priv,
674
683
return 0 ;
675
684
}
676
685
677
- static int rcsi2_start_receiver (struct rcar_csi2 * priv )
686
+ static int rcsi2_start_receiver_gen3 (struct rcar_csi2 * priv )
678
687
{
679
688
const struct rcar_csi2_format * format ;
680
689
u32 phycnt , vcdt = 0 , vcdt2 = 0 , fld = 0 ;
@@ -821,7 +830,7 @@ static int rcsi2_start(struct rcar_csi2 *priv)
821
830
if (ret < 0 )
822
831
return ret ;
823
832
824
- ret = rcsi2_start_receiver (priv );
833
+ ret = priv -> info -> start_receiver (priv );
825
834
if (ret ) {
826
835
rcsi2_enter_standby (priv );
827
836
return ret ;
@@ -1363,6 +1372,8 @@ static int rcsi2_probe_resources(struct rcar_csi2 *priv,
1363
1372
1364
1373
static const struct rcar_csi2_info rcar_csi2_info_r8a7795 = {
1365
1374
.init_phtw = rcsi2_init_phtw_h3_v3h_m3n ,
1375
+ .start_receiver = rcsi2_start_receiver_gen3 ,
1376
+ .enter_standby = rcsi2_enter_standby_gen3 ,
1366
1377
.hsfreqrange = hsfreqrange_h3_v3h_m3n ,
1367
1378
.csi0clkfreqrange = 0x20 ,
1368
1379
.num_channels = 4 ,
@@ -1371,24 +1382,32 @@ static const struct rcar_csi2_info rcar_csi2_info_r8a7795 = {
1371
1382
1372
1383
static const struct rcar_csi2_info rcar_csi2_info_r8a7795es2 = {
1373
1384
.init_phtw = rcsi2_init_phtw_h3es2 ,
1385
+ .start_receiver = rcsi2_start_receiver_gen3 ,
1386
+ .enter_standby = rcsi2_enter_standby_gen3 ,
1374
1387
.hsfreqrange = hsfreqrange_h3_v3h_m3n ,
1375
1388
.csi0clkfreqrange = 0x20 ,
1376
1389
.num_channels = 4 ,
1377
1390
.clear_ulps = true,
1378
1391
};
1379
1392
1380
1393
static const struct rcar_csi2_info rcar_csi2_info_r8a7796 = {
1394
+ .start_receiver = rcsi2_start_receiver_gen3 ,
1395
+ .enter_standby = rcsi2_enter_standby_gen3 ,
1381
1396
.hsfreqrange = hsfreqrange_m3w ,
1382
1397
.num_channels = 4 ,
1383
1398
};
1384
1399
1385
1400
static const struct rcar_csi2_info rcar_csi2_info_r8a77961 = {
1401
+ .start_receiver = rcsi2_start_receiver_gen3 ,
1402
+ .enter_standby = rcsi2_enter_standby_gen3 ,
1386
1403
.hsfreqrange = hsfreqrange_m3w ,
1387
1404
.num_channels = 4 ,
1388
1405
};
1389
1406
1390
1407
static const struct rcar_csi2_info rcar_csi2_info_r8a77965 = {
1391
1408
.init_phtw = rcsi2_init_phtw_h3_v3h_m3n ,
1409
+ .start_receiver = rcsi2_start_receiver_gen3 ,
1410
+ .enter_standby = rcsi2_enter_standby_gen3 ,
1392
1411
.hsfreqrange = hsfreqrange_h3_v3h_m3n ,
1393
1412
.csi0clkfreqrange = 0x20 ,
1394
1413
.num_channels = 4 ,
@@ -1398,11 +1417,15 @@ static const struct rcar_csi2_info rcar_csi2_info_r8a77965 = {
1398
1417
static const struct rcar_csi2_info rcar_csi2_info_r8a77970 = {
1399
1418
.init_phtw = rcsi2_init_phtw_v3m_e3 ,
1400
1419
.phy_post_init = rcsi2_phy_post_init_v3m_e3 ,
1420
+ .start_receiver = rcsi2_start_receiver_gen3 ,
1421
+ .enter_standby = rcsi2_enter_standby_gen3 ,
1401
1422
.num_channels = 4 ,
1402
1423
};
1403
1424
1404
1425
static const struct rcar_csi2_info rcar_csi2_info_r8a77980 = {
1405
1426
.init_phtw = rcsi2_init_phtw_h3_v3h_m3n ,
1427
+ .start_receiver = rcsi2_start_receiver_gen3 ,
1428
+ .enter_standby = rcsi2_enter_standby_gen3 ,
1406
1429
.hsfreqrange = hsfreqrange_h3_v3h_m3n ,
1407
1430
.csi0clkfreqrange = 0x20 ,
1408
1431
.clear_ulps = true,
@@ -1411,11 +1434,15 @@ static const struct rcar_csi2_info rcar_csi2_info_r8a77980 = {
1411
1434
static const struct rcar_csi2_info rcar_csi2_info_r8a77990 = {
1412
1435
.init_phtw = rcsi2_init_phtw_v3m_e3 ,
1413
1436
.phy_post_init = rcsi2_phy_post_init_v3m_e3 ,
1437
+ .start_receiver = rcsi2_start_receiver_gen3 ,
1438
+ .enter_standby = rcsi2_enter_standby_gen3 ,
1414
1439
.num_channels = 2 ,
1415
1440
};
1416
1441
1417
1442
static const struct rcar_csi2_info rcar_csi2_info_r8a779a0 = {
1418
1443
.init_phtw = rcsi2_init_phtw_v3u ,
1444
+ .start_receiver = rcsi2_start_receiver_gen3 ,
1445
+ .enter_standby = rcsi2_enter_standby_gen3 ,
1419
1446
.hsfreqrange = hsfreqrange_v3u ,
1420
1447
.csi0clkfreqrange = 0x20 ,
1421
1448
.clear_ulps = true,
0 commit comments