From 80e41212d0ad931da262942e5487a28b12c026ce Mon Sep 17 00:00:00 2001 From: Malcolm Priestley Date: Sat, 1 Oct 2011 09:24:16 -0300 Subject: [PATCH] --- yaml --- r: 271942 b: refs/heads/master c: e30528854797f057aa6ffb6dc9f890e923c467fd h: refs/heads/master v: v3 --- [refs] | 2 +- .../media/dvb/frontends/it913x-fe-priv.h | 10 ++++++- trunk/drivers/media/dvb/frontends/it913x-fe.c | 27 ++++++++++++++----- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 9141e0e66170..1c62b04600ec 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 64933337e3cb61ca555969a35ab68b477db34ee2 +refs/heads/master: e30528854797f057aa6ffb6dc9f890e923c467fd diff --git a/trunk/drivers/media/dvb/frontends/it913x-fe-priv.h b/trunk/drivers/media/dvb/frontends/it913x-fe-priv.h index 40e1d9b266e3..1c6fb4b66255 100644 --- a/trunk/drivers/media/dvb/frontends/it913x-fe-priv.h +++ b/trunk/drivers/media/dvb/frontends/it913x-fe-priv.h @@ -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 */ }; diff --git a/trunk/drivers/media/dvb/frontends/it913x-fe.c b/trunk/drivers/media/dvb/frontends/it913x-fe.c index 02839a8b7b29..d4bd24eb4700 100644 --- a/trunk/drivers/media/dvb/frontends/it913x-fe.c +++ b/trunk/drivers/media/dvb/frontends/it913x-fe.c @@ -626,7 +626,7 @@ 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; @@ -634,18 +634,23 @@ static int it913x_fe_suspend(struct it913x_fe_state *state) 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; @@ -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; } @@ -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");