Skip to content

Commit

Permalink
[media] it913x-fe changes to power up and down of tuner
Browse files Browse the repository at this point in the history
Currently the tuner is constantly powered causing these effects.
1. Remembering last tune channel causing corruptions of changing channel.
2. Causing corruption on other frontend.
3. Higher current in standby of demodulator with clock running.

Power sequence now follows;
Power Up
Tuner on -> Frontend suspend off -> Tuner clk on
Power Down
Frontend suspend on -> Tuner clk off -> Tuner off

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Malcolm Priestley authored and Mauro Carvalho Chehab committed Oct 8, 2011
1 parent 6493333 commit e305288
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 7 deletions.
10 changes: 9 additions & 1 deletion drivers/media/dvb/frontends/it913x-fe-priv.h
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,15 @@ static struct it913xset it9137_set[] = {
{PRO_LINK, GPIOH5_EN, {0x01}, 0x01},
{PRO_LINK, GPIOH5_ON, {0x01}, 0x01},
{PRO_LINK, GPIOH5_O, {0x00}, 0x01},
{PRO_LINK, GPIOH5_O, {0x01}, 0x01},/* ?, but enable */
{PRO_LINK, GPIOH5_O, {0x01}, 0x01},
{0xff, 0x0000, {0x00}, 0x00}, /* Terminating Entry */
};

static struct it913xset it9137_tuner_off[] = {
{PRO_DMOD, 0xfba8, {0x01}, 0x01}, /* Tuner Clock Off */
{PRO_DMOD, 0xec40, {0x00}, 0x01}, /* Power Down Tuner */
{PRO_DMOD, 0xec02, {0x3f, 0x1f, 0x3f, 0x3f}, 0x04},
{PRO_DMOD, 0xec3f, {0x01}, 0x01},
{0xff, 0x0000, {0x00}, 0x00}, /* Terminating Entry */
};

Expand Down
27 changes: 21 additions & 6 deletions drivers/media/dvb/frontends/it913x-fe.c
Original file line number Diff line number Diff line change
Expand Up @@ -626,26 +626,31 @@ static int it913x_fe_suspend(struct it913x_fe_state *state)
for (i = 0; i < 128; i++) {
ret = it913x_read_reg(state, SUSPEND_FLAG, &b, 1);
if (ret < 0)
return -EINVAL;
return -ENODEV;
if (b == 0)
break;

}

ret |= it913x_write_reg(state, PRO_DMOD, AFE_MEM0, 0x8);
/* Turn LED off */
ret = it913x_write_reg(state, PRO_LINK, GPIOH3_O, 0x0);
ret |= it913x_write_reg(state, PRO_LINK, GPIOH3_O, 0x0);

return 0;
ret |= it913x_fe_script_loader(state, it9137_tuner_off);

return (ret < 0) ? -ENODEV : 0;
}

/* Power sequence */
/* Power Up Tuner on -> Frontend suspend off -> Tuner clk on */
/* Power Down Frontend suspend on -> Tuner clk off -> Tuner off */

static int it913x_fe_sleep(struct dvb_frontend *fe)
{
struct it913x_fe_state *state = fe->demodulator_priv;
return it913x_fe_suspend(state);
}


static u32 compute_div(u32 a, u32 b, u32 x)
{
u32 res = 0;
Expand Down Expand Up @@ -738,11 +743,21 @@ static int it913x_fe_init(struct dvb_frontend *fe)
{
struct it913x_fe_state *state = fe->demodulator_priv;
int ret = 0;
/* Power Up Tuner - common all versions */
ret = it913x_write_reg(state, PRO_DMOD, 0xec40, 0x1);

it913x_write_reg(state, PRO_DMOD, AFE_MEM0, 0x0);
ret |= it913x_write_reg(state, PRO_DMOD, AFE_MEM0, 0x0);

ret |= it913x_fe_script_loader(state, init_1);

switch (state->tuner_type) {
case IT9137:
ret |= it913x_write_reg(state, PRO_DMOD, 0xfba8, 0x0);
break;
default:
return -EINVAL;
}

return (ret < 0) ? -ENODEV : 0;
}

Expand Down Expand Up @@ -820,5 +835,5 @@ static struct dvb_frontend_ops it913x_fe_ofdm_ops = {

MODULE_DESCRIPTION("it913x Frontend and it9137 tuner");
MODULE_AUTHOR("Malcolm Priestley tvboxspy@gmail.com");
MODULE_VERSION("1.06");
MODULE_VERSION("1.07");
MODULE_LICENSE("GPL");

0 comments on commit e305288

Please sign in to comment.