Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 124081
b: refs/heads/master
c: b168e35
h: refs/heads/master
i:
  124079: 486746c
v: v3
  • Loading branch information
Manu Abraham authored and Mauro Carvalho Chehab committed Dec 29, 2008
1 parent 86721d8 commit f289390
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 947881a999e8bcde98c9cb637316cb8026af4f71
refs/heads/master: b168e351a50086e582d3cb42eb4336387ce1ddab
34 changes: 34 additions & 0 deletions trunk/drivers/media/dvb/frontends/stb0899_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -580,11 +580,35 @@ static void stb0899_set_mclk(struct stb0899_state *state, u32 Mclk)
dprintk(verbose, FE_DEBUG, 1, "MasterCLOCK=%d", internal->master_clk);
}

static int stb0899_postproc(struct stb0899_state *state, u8 ctl, int enable)
{
struct stb0899_config *config = state->config;
struct stb0899_postproc *postproc = config->postproc;

/* post process event */
if (postproc) {
if (enable) {
if (postproc[STB0899_POSTPROC_GPIO_POWER].level == STB0899_GPIOPULLUP)
stb0899_write_reg(state, postproc[ctl].gpio, 0x02);
else
stb0899_write_reg(state, postproc[ctl].gpio, 0x82);
} else {
if (postproc[STB0899_POSTPROC_GPIO_POWER].level == STB0899_GPIOPULLUP)
stb0899_write_reg(state, postproc[ctl].gpio, 0x82);
else
stb0899_write_reg(state, postproc[ctl].gpio, 0x02);
}
}
return 0;
}

static void stb0899_release(struct dvb_frontend *fe)
{
struct stb0899_state *state = fe->demodulator_priv;

dprintk(verbose, FE_DEBUG, 1, "Release Frontend");
/* post process event */
stb0899_postproc(state, STB0899_POSTPROC_GPIO_POWER, 0);
kfree(state);
}

Expand Down Expand Up @@ -839,6 +863,9 @@ static int stb0899_sleep(struct dvb_frontend *fe)
u8 reg;

dprintk(verbose, FE_DEBUG, 1, "Going to Sleep .. (Really tired .. :-))");
/* post process event */
stb0899_postproc(state, STB0899_POSTPROC_GPIO_POWER, 0);

return 0;
}

Expand All @@ -855,6 +882,9 @@ static int stb0899_wakeup(struct dvb_frontend *fe)
if ((rc = stb0899_write_reg(state, STB0899_STOPCLK2, 0x00)))
return rc;

/* post process event */
stb0899_postproc(state, STB0899_POSTPROC_GPIO_POWER, 1);

return 0;
}

Expand Down Expand Up @@ -1050,6 +1080,8 @@ static int stb0899_read_status(struct dvb_frontend *fe, enum fe_status *status)
if (STB0899_GETFIELD(VITCURPUN, reg)) {
dprintk(state->verbose, FE_DEBUG, 1, "--------> FE_HAS_VITERBI | FE_HAS_SYNC");
*status |= FE_HAS_VITERBI | FE_HAS_SYNC;
/* post process event */
stb0899_postproc(state, STB0899_POSTPROC_GPIO_LOCK, 1);
}
}
}
Expand Down Expand Up @@ -1079,6 +1111,8 @@ static int stb0899_read_status(struct dvb_frontend *fe, enum fe_status *status)
*status |= FE_HAS_SYNC;
dprintk(state->verbose, FE_DEBUG, 1,
"Packet Delineator found SYNC ! -----> DVB-S2 FE_HAS_SYNC");
/* post process event */
stb0899_postproc(state, STB0899_POSTPROC_GPIO_LOCK, 1);
}
}
}
Expand Down
43 changes: 43 additions & 0 deletions trunk/drivers/media/dvb/frontends/stb0899_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,56 @@ enum stb0899_inversion {
IQ_SWAP_AUTO
};

#define STB0899_GPIO00 0xf140
#define STB0899_GPIO01 0xf141
#define STB0899_GPIO02 0xf142
#define STB0899_GPIO03 0xf143
#define STB0899_GPIO04 0xf144
#define STB0899_GPIO05 0xf145
#define STB0899_GPIO06 0xf146
#define STB0899_GPIO07 0xf147
#define STB0899_GPIO08 0xf148
#define STB0899_GPIO09 0xf149
#define STB0899_GPIO10 0xf14a
#define STB0899_GPIO11 0xf14b
#define STB0899_GPIO12 0xf14c
#define STB0899_GPIO13 0xf14d
#define STB0899_GPIO14 0xf14e
#define STB0899_GPIO15 0xf14f
#define STB0899_GPIO16 0xf150
#define STB0899_GPIO17 0xf151
#define STB0899_GPIO18 0xf152
#define STB0899_GPIO19 0xf153
#define STB0899_GPIO20 0xf154

#define STB0899_GPIOPULLUP 0x01 /* Output device is connected to Vdd */
#define STB0899_GPIOPULLDN 0x00 /* Output device is connected to Vss */

#define STB0899_POSTPROC_GPIO_POWER 0x00
#define STB0899_POSTPROC_GPIO_LOCK 0x01

/*
* Post process output configuration control
* 1. POWER ON/OFF (index 0)
* 2. FE_HAS_LOCK/LOCK_LOSS (index 1)
*
* @gpio = one of the above listed GPIO's
* @level = output state: pulled up or low
*/
struct stb0899_postproc {
u16 gpio;
u8 level;
};

struct stb0899_config {
const struct stb0899_s1_reg *init_dev;
const struct stb0899_s2_reg *init_s2_demod;
const struct stb0899_s1_reg *init_s1_demod;
const struct stb0899_s2_reg *init_s2_fec;
const struct stb0899_s1_reg *init_tst;

const struct stb0899_postproc *postproc;

enum stb0899_inversion inversion;

u32 xtal_freq;
Expand Down

0 comments on commit f289390

Please sign in to comment.