diff options
Diffstat (limited to 'drivers/media/dvb/frontends/zl10353.c')
-rw-r--r-- | drivers/media/dvb/frontends/zl10353.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/drivers/media/dvb/frontends/zl10353.c b/drivers/media/dvb/frontends/zl10353.c index 73fe40b50fc4..1234eb0070d6 100644 --- a/drivers/media/dvb/frontends/zl10353.c +++ b/drivers/media/dvb/frontends/zl10353.c | |||
@@ -125,6 +125,8 @@ static int zl10353_sleep(struct dvb_frontend *fe) | |||
125 | static int zl10353_set_parameters(struct dvb_frontend *fe, | 125 | static int zl10353_set_parameters(struct dvb_frontend *fe, |
126 | struct dvb_frontend_parameters *param) | 126 | struct dvb_frontend_parameters *param) |
127 | { | 127 | { |
128 | struct zl10353_state *state = fe->demodulator_priv; | ||
129 | |||
128 | u8 pllbuf[6] = { 0x67 }; | 130 | u8 pllbuf[6] = { 0x67 }; |
129 | 131 | ||
130 | /* These settings set "auto-everything" and start the FSM. */ | 132 | /* These settings set "auto-everything" and start the FSM. */ |
@@ -141,12 +143,32 @@ static int zl10353_set_parameters(struct dvb_frontend *fe, | |||
141 | zl10353_single_write(fe, 0x66, 0xE9); | 143 | zl10353_single_write(fe, 0x66, 0xE9); |
142 | zl10353_single_write(fe, 0x62, 0x0A); | 144 | zl10353_single_write(fe, 0x62, 0x0A); |
143 | 145 | ||
146 | // if there is no attached secondary tuner, we call set_params to program | ||
147 | // a potential tuner attached somewhere else | ||
148 | if (state->config.no_tuner) { | ||
149 | if (fe->ops->tuner_ops.set_params) { | ||
150 | fe->ops->tuner_ops.set_params(fe, param); | ||
151 | if (fe->ops->i2c_gate_ctrl) fe->ops->i2c_gate_ctrl(fe, 0); | ||
152 | } | ||
153 | } | ||
154 | |||
155 | // if pllbuf is defined, retrieve the settings | ||
144 | if (fe->ops->tuner_ops.pllbuf) { | 156 | if (fe->ops->tuner_ops.pllbuf) { |
145 | fe->ops->tuner_ops.pllbuf(fe, param, pllbuf+1, 5); | 157 | fe->ops->tuner_ops.pllbuf(fe, param, pllbuf+1, 5); |
146 | pllbuf[1] <<= 1; | 158 | pllbuf[1] <<= 1; |
147 | zl10353_write(fe, pllbuf, sizeof(pllbuf)); | 159 | } else { |
160 | // fake pllbuf settings | ||
161 | pllbuf[1] = 0x61 << 1; | ||
162 | pllbuf[2] = 0; | ||
163 | pllbuf[3] = 0; | ||
164 | pllbuf[3] = 0; | ||
165 | pllbuf[4] = 0; | ||
148 | } | 166 | } |
149 | 167 | ||
168 | // there is no call to _just_ start decoding, so we send the pllbuf anyway | ||
169 | // even if there isn't a PLL attached to the secondary bus | ||
170 | zl10353_write(fe, pllbuf, sizeof(pllbuf)); | ||
171 | |||
150 | zl10353_single_write(fe, 0x70, 0x01); | 172 | zl10353_single_write(fe, 0x70, 0x01); |
151 | udelay(250); | 173 | udelay(250); |
152 | zl10353_single_write(fe, 0xE4, 0x00); | 174 | zl10353_single_write(fe, 0xE4, 0x00); |