Permalink
Browse files

spark_sti7111: stv090x: Minimum latence TS FIFO mode for DVB-S2.

  • Loading branch information...
1 parent bbd690d commit b831c1a22b96ece05d0af1cc1e55d5e34d2ca13b @crazycat69 crazycat69 committed Oct 4, 2015
Showing with 44 additions and 4 deletions.
  1. +28 −4 frontends/spark_dvbapi5/stv090x.c
  2. +16 −0 frontends/spark_dvbapi5/stv090x_reg.h
@@ -4199,6 +4199,12 @@ static int stv090x_optimize_track(struct stv090x_state *state)
case STV090x_DSS:
dprintk(50, "STV090x_DVBS1\n");
+
+ reg = stv090x_read_reg(state, STV090x_P1_TSSTATEM);
+ STV090x_SETFIELD_Px(reg, TSOUT_NOSYNC, 0);
+ if (stv090x_write_reg(state, STV090x_P1_TSSTATEM, reg) < 0)
+ goto err;
+
if (state->algo == (enum stv090x_algo)STV090x_SEARCH_AUTO)
{
reg = STV090x_READ_DEMOD(state, DMDCFGMD);
@@ -4240,6 +4246,16 @@ static int stv090x_optimize_track(struct stv090x_state *state)
case STV090x_DVBS2:
dprintk(50, "STV090x_DVBS2\n");
+ reg = stv090x_read_reg(state, STV090x_P1_TSSTATEM);
+ STV090x_SETFIELD_Px(reg, TSOUT_NOSYNC, 1);
+ if (stv090x_write_reg(state, STV090x_P1_TSSTATEM, reg) < 0)
+ goto err;
+
+ reg = stv090x_read_reg(state, STV090x_P1_TSSYNC);
+ STV090x_SETFIELD_Px(reg, TSFIFO_SYNCMODE, 2);
+ if (stv090x_write_reg(state, STV090x_P1_TSSYNC, reg) < 0)
+ goto err;
+
reg = STV090x_READ_DEMOD(state, DMDCFGMD);
STV090x_SETFIELD_Px(reg, DVBS1_ENABLE_FIELD, 0);
STV090x_SETFIELD_Px(reg, DVBS2_ENABLE_FIELD, 1);
@@ -5839,10 +5855,6 @@ static int stv090x_set_tspath(struct stv090x_state *state)
case STV090x_TSMODE_DVBCI:
if (stv090x_write_reg(state, STV090x_TSGENERAL, 0x06) < 0) /* Mux'd stream mode */
goto err;
- reg = stv090x_read_reg(state, STV090x_P1_TSCFGM);
- STV090x_SETFIELD_Px(reg, TSFIFO_MANSPEED_FIELD, 3);
- if (stv090x_write_reg(state, STV090x_P1_TSCFGM, reg) < 0)
- goto err;
reg = stv090x_read_reg(state, STV090x_P2_TSCFGM);
STV090x_SETFIELD_Px(reg, TSFIFO_MANSPEED_FIELD, 3);
if (stv090x_write_reg(state, STV090x_P2_TSCFGM, reg) < 0)
@@ -6100,6 +6112,18 @@ static int stv090x_init(struct dvb_frontend *fe)
dprintk(10, "%s >\n", __FUNCTION__);
+ if (state->device == STX7111) {
+ printk("%s demodulator Cut=0x%02x\n",
+ "STV090x(STX711x)",
+ state->dev_ver);
+ }
+ else {
+ printk(10, "%s demodulator Cut=0x%02x\n",
+ state->device == STV0900 ? "STV0900" : "STV0903",
+ state->dev_ver);
+ }
+
+
if (state->mclk == 0)
{
/* call tuner init to configure the tuner's clock output
@@ -2110,6 +2110,14 @@
#define STV090x_WIDTH_Px_TSDIL_ON_FIELD 1
#define STV090x_OFFST_Px_TSRS_ON_FIELD 5
#define STV090x_WIDTH_Px_TSRS_ON_FIELD 1
+#define STV090x_OFFST_Px_TSDESCRAMB_ON 4
+#define STV090x_WIDTH_Px_TSDESCRAMB_ON 1
+#define STV090x_OFFST_Px_TSFRAME_MODE 3
+#define STV090x_WIDTH_Px_TSFRAME_MODE 1
+#define STV090x_OFFST_Px_TS_DISABLE 2
+#define STV090x_WIDTH_Px_TS_DISABLE 1
+#define STV090x_OFFST_Px_TSOUT_NOSYNC 0
+#define STV090x_WIDTH_Px_TSOUT_NOSYNC 1
#define STV090x_Px_TSCFGH(__x) (0xF572 - (__x - 1) * 0x200)
#define STV090x_P1_TSCFGH STV090x_Px_TSCFGH(1)
@@ -2153,6 +2161,14 @@
#define STV090x_OFFST_Px_TSFIFO_DPUNACT_FIELD 1
#define STV090x_WIDTH_Px_TSFIFO_DPUNACT_FIELD 1
+#define STV090x_Px_TSSYNC(__x) (0xF575 - (__x - 1) * 0x200)
+#define STV090x_P1_TSSYNC STV090x_Px_TSSYNC(1)
+#define STV090x_P2_TSSYNC STV090x_Px_TSSYNC(2)
+#define STV090x_OFFST_Px_TSFIFO_FISCR3B 5
+#define STV090x_WIDTH_Px_TSFIFO_FISCR3B 2
+#define STV090x_OFFST_Px_TSFIFO_SYNCMODE 3
+#define STV090x_WIDTH_Px_TSFIFO_SYNCMODE 2
+
#define STV090x_Px_TSINSDELH(__x) (0xF576 - (__x - 1) * 0x200)
#define STV090x_P1_TSINSDELH STV090x_Px_TSINSDELH(1)
#define STV090x_P2_TSINSDELH STV090x_Px_TSINSDELH(2)

0 comments on commit b831c1a

Please sign in to comment.