Skip to content

Commit 072cb92

Browse files
Niklas Söderlundmorimoto
authored andcommitted
media: rcar-csi2: Prepare for Gen4 support
Prepare the driver for supporting R-Car Gen4. The starting of the receiver and how to enter standby differs between Gen3 and Gen4, create function pointers in the device info structure to control the different behavior. Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> (cherry picked from commit a73116d) Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
1 parent a9ecdcd commit 072cb92

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

drivers/media/platform/renesas/rcar-vin/rcar-csi2.c

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,8 @@ enum rcar_csi2_pads {
483483
struct rcar_csi2_info {
484484
int (*init_phtw)(struct rcar_csi2 *priv, unsigned int mbps);
485485
int (*phy_post_init)(struct rcar_csi2 *priv);
486+
int (*start_receiver)(struct rcar_csi2 *priv);
487+
void (*enter_standby)(struct rcar_csi2 *priv);
486488
const struct rcsi2_mbps_reg *hsfreqrange;
487489
unsigned int csi0clkfreqrange;
488490
unsigned int num_channels;
@@ -533,10 +535,17 @@ static void rcsi2_write(struct rcar_csi2 *priv, unsigned int reg, u32 data)
533535
iowrite32(data, priv->base + reg);
534536
}
535537

536-
static void rcsi2_enter_standby(struct rcar_csi2 *priv)
538+
static void rcsi2_enter_standby_gen3(struct rcar_csi2 *priv)
537539
{
538540
rcsi2_write(priv, PHYCNT_REG, 0);
539541
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+
540549
reset_control_assert(priv->rstc);
541550
usleep_range(100, 150);
542551
pm_runtime_put(priv->dev);
@@ -674,7 +683,7 @@ static int rcsi2_get_active_lanes(struct rcar_csi2 *priv,
674683
return 0;
675684
}
676685

677-
static int rcsi2_start_receiver(struct rcar_csi2 *priv)
686+
static int rcsi2_start_receiver_gen3(struct rcar_csi2 *priv)
678687
{
679688
const struct rcar_csi2_format *format;
680689
u32 phycnt, vcdt = 0, vcdt2 = 0, fld = 0;
@@ -821,7 +830,7 @@ static int rcsi2_start(struct rcar_csi2 *priv)
821830
if (ret < 0)
822831
return ret;
823832

824-
ret = rcsi2_start_receiver(priv);
833+
ret = priv->info->start_receiver(priv);
825834
if (ret) {
826835
rcsi2_enter_standby(priv);
827836
return ret;
@@ -1363,6 +1372,8 @@ static int rcsi2_probe_resources(struct rcar_csi2 *priv,
13631372

13641373
static const struct rcar_csi2_info rcar_csi2_info_r8a7795 = {
13651374
.init_phtw = rcsi2_init_phtw_h3_v3h_m3n,
1375+
.start_receiver = rcsi2_start_receiver_gen3,
1376+
.enter_standby = rcsi2_enter_standby_gen3,
13661377
.hsfreqrange = hsfreqrange_h3_v3h_m3n,
13671378
.csi0clkfreqrange = 0x20,
13681379
.num_channels = 4,
@@ -1371,24 +1382,32 @@ static const struct rcar_csi2_info rcar_csi2_info_r8a7795 = {
13711382

13721383
static const struct rcar_csi2_info rcar_csi2_info_r8a7795es2 = {
13731384
.init_phtw = rcsi2_init_phtw_h3es2,
1385+
.start_receiver = rcsi2_start_receiver_gen3,
1386+
.enter_standby = rcsi2_enter_standby_gen3,
13741387
.hsfreqrange = hsfreqrange_h3_v3h_m3n,
13751388
.csi0clkfreqrange = 0x20,
13761389
.num_channels = 4,
13771390
.clear_ulps = true,
13781391
};
13791392

13801393
static const struct rcar_csi2_info rcar_csi2_info_r8a7796 = {
1394+
.start_receiver = rcsi2_start_receiver_gen3,
1395+
.enter_standby = rcsi2_enter_standby_gen3,
13811396
.hsfreqrange = hsfreqrange_m3w,
13821397
.num_channels = 4,
13831398
};
13841399

13851400
static const struct rcar_csi2_info rcar_csi2_info_r8a77961 = {
1401+
.start_receiver = rcsi2_start_receiver_gen3,
1402+
.enter_standby = rcsi2_enter_standby_gen3,
13861403
.hsfreqrange = hsfreqrange_m3w,
13871404
.num_channels = 4,
13881405
};
13891406

13901407
static const struct rcar_csi2_info rcar_csi2_info_r8a77965 = {
13911408
.init_phtw = rcsi2_init_phtw_h3_v3h_m3n,
1409+
.start_receiver = rcsi2_start_receiver_gen3,
1410+
.enter_standby = rcsi2_enter_standby_gen3,
13921411
.hsfreqrange = hsfreqrange_h3_v3h_m3n,
13931412
.csi0clkfreqrange = 0x20,
13941413
.num_channels = 4,
@@ -1398,11 +1417,15 @@ static const struct rcar_csi2_info rcar_csi2_info_r8a77965 = {
13981417
static const struct rcar_csi2_info rcar_csi2_info_r8a77970 = {
13991418
.init_phtw = rcsi2_init_phtw_v3m_e3,
14001419
.phy_post_init = rcsi2_phy_post_init_v3m_e3,
1420+
.start_receiver = rcsi2_start_receiver_gen3,
1421+
.enter_standby = rcsi2_enter_standby_gen3,
14011422
.num_channels = 4,
14021423
};
14031424

14041425
static const struct rcar_csi2_info rcar_csi2_info_r8a77980 = {
14051426
.init_phtw = rcsi2_init_phtw_h3_v3h_m3n,
1427+
.start_receiver = rcsi2_start_receiver_gen3,
1428+
.enter_standby = rcsi2_enter_standby_gen3,
14061429
.hsfreqrange = hsfreqrange_h3_v3h_m3n,
14071430
.csi0clkfreqrange = 0x20,
14081431
.clear_ulps = true,
@@ -1411,11 +1434,15 @@ static const struct rcar_csi2_info rcar_csi2_info_r8a77980 = {
14111434
static const struct rcar_csi2_info rcar_csi2_info_r8a77990 = {
14121435
.init_phtw = rcsi2_init_phtw_v3m_e3,
14131436
.phy_post_init = rcsi2_phy_post_init_v3m_e3,
1437+
.start_receiver = rcsi2_start_receiver_gen3,
1438+
.enter_standby = rcsi2_enter_standby_gen3,
14141439
.num_channels = 2,
14151440
};
14161441

14171442
static const struct rcar_csi2_info rcar_csi2_info_r8a779a0 = {
14181443
.init_phtw = rcsi2_init_phtw_v3u,
1444+
.start_receiver = rcsi2_start_receiver_gen3,
1445+
.enter_standby = rcsi2_enter_standby_gen3,
14191446
.hsfreqrange = hsfreqrange_v3u,
14201447
.csi0clkfreqrange = 0x20,
14211448
.clear_ulps = true,

0 commit comments

Comments
 (0)