diff options
author | Andreas Regel <andreas.regel@gmx.de> | 2010-01-05 17:22:07 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-02-26 13:10:36 -0500 |
commit | f91e59cb5e6add13d4e45c5cc8d45a614e1dc8e4 (patch) | |
tree | de4b04afb55fcaf55885dd725d891a4a86215766 /drivers/media | |
parent | c369b7c2820dcad91b1354362097f6d8f9cf9307 (diff) |
V4L/DVB (13979): [STV090x] Added possibility to set a fixed TS output clock.
This could be useful for p.e. Common Interface applications where data rate is limited.
Signed-off-by: Andreas Regel <andreas.regel@gmx.de>
Signed-off-by: Manu Abraham <manu@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/dvb/frontends/stv090x.c | 65 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/stv090x.h | 2 |
2 files changed, 67 insertions, 0 deletions
diff --git a/drivers/media/dvb/frontends/stv090x.c b/drivers/media/dvb/frontends/stv090x.c index 2a25dd15b7fd..93be76ced896 100644 --- a/drivers/media/dvb/frontends/stv090x.c +++ b/drivers/media/dvb/frontends/stv090x.c | |||
@@ -4199,6 +4199,71 @@ static int stv090x_set_tspath(struct stv090x_state *state) | |||
4199 | default: | 4199 | default: |
4200 | break; | 4200 | break; |
4201 | } | 4201 | } |
4202 | |||
4203 | if (state->config->ts1_clk > 0) { | ||
4204 | u32 speed; | ||
4205 | |||
4206 | switch (state->config->ts1_mode) { | ||
4207 | case STV090x_TSMODE_PARALLEL_PUNCTURED: | ||
4208 | case STV090x_TSMODE_DVBCI: | ||
4209 | default: | ||
4210 | speed = state->internal->mclk / | ||
4211 | (state->config->ts1_clk / 4); | ||
4212 | if (speed < 0x08) | ||
4213 | speed = 0x08; | ||
4214 | if (speed > 0xFF) | ||
4215 | speed = 0xFF; | ||
4216 | break; | ||
4217 | case STV090x_TSMODE_SERIAL_PUNCTURED: | ||
4218 | case STV090x_TSMODE_SERIAL_CONTINUOUS: | ||
4219 | speed = state->internal->mclk / | ||
4220 | (state->config->ts1_clk / 32); | ||
4221 | if (speed < 0x20) | ||
4222 | speed = 0x20; | ||
4223 | if (speed > 0xFF) | ||
4224 | speed = 0xFF; | ||
4225 | break; | ||
4226 | } | ||
4227 | reg = stv090x_read_reg(state, STV090x_P1_TSCFGM); | ||
4228 | STV090x_SETFIELD_Px(reg, TSFIFO_MANSPEED_FIELD, 3); | ||
4229 | if (stv090x_write_reg(state, STV090x_P1_TSCFGM, reg) < 0) | ||
4230 | goto err; | ||
4231 | if (stv090x_write_reg(state, STV090x_P1_TSSPEED, speed) < 0) | ||
4232 | goto err; | ||
4233 | } | ||
4234 | |||
4235 | if (state->config->ts2_clk > 0) { | ||
4236 | u32 speed; | ||
4237 | |||
4238 | switch (state->config->ts2_mode) { | ||
4239 | case STV090x_TSMODE_PARALLEL_PUNCTURED: | ||
4240 | case STV090x_TSMODE_DVBCI: | ||
4241 | default: | ||
4242 | speed = state->internal->mclk / | ||
4243 | (state->config->ts2_clk / 4); | ||
4244 | if (speed < 0x08) | ||
4245 | speed = 0x08; | ||
4246 | if (speed > 0xFF) | ||
4247 | speed = 0xFF; | ||
4248 | break; | ||
4249 | case STV090x_TSMODE_SERIAL_PUNCTURED: | ||
4250 | case STV090x_TSMODE_SERIAL_CONTINUOUS: | ||
4251 | speed = state->internal->mclk / | ||
4252 | (state->config->ts2_clk / 32); | ||
4253 | if (speed < 0x20) | ||
4254 | speed = 0x20; | ||
4255 | if (speed > 0xFF) | ||
4256 | speed = 0xFF; | ||
4257 | break; | ||
4258 | } | ||
4259 | reg = stv090x_read_reg(state, STV090x_P2_TSCFGM); | ||
4260 | STV090x_SETFIELD_Px(reg, TSFIFO_MANSPEED_FIELD, 3); | ||
4261 | if (stv090x_write_reg(state, STV090x_P2_TSCFGM, reg) < 0) | ||
4262 | goto err; | ||
4263 | if (stv090x_write_reg(state, STV090x_P2_TSSPEED, speed) < 0) | ||
4264 | goto err; | ||
4265 | } | ||
4266 | |||
4202 | reg = stv090x_read_reg(state, STV090x_P2_TSCFGH); | 4267 | reg = stv090x_read_reg(state, STV090x_P2_TSCFGH); |
4203 | STV090x_SETFIELD_Px(reg, RST_HWARE_FIELD, 0x01); | 4268 | STV090x_SETFIELD_Px(reg, RST_HWARE_FIELD, 0x01); |
4204 | if (stv090x_write_reg(state, STV090x_P2_TSCFGH, reg) < 0) | 4269 | if (stv090x_write_reg(state, STV090x_P2_TSCFGH, reg) < 0) |
diff --git a/drivers/media/dvb/frontends/stv090x.h b/drivers/media/dvb/frontends/stv090x.h index e009183ad772..96e3dc758e08 100644 --- a/drivers/media/dvb/frontends/stv090x.h +++ b/drivers/media/dvb/frontends/stv090x.h | |||
@@ -70,6 +70,8 @@ struct stv090x_config { | |||
70 | 70 | ||
71 | u8 ts1_mode; | 71 | u8 ts1_mode; |
72 | u8 ts2_mode; | 72 | u8 ts2_mode; |
73 | u32 ts1_clk; | ||
74 | u32 ts2_clk; | ||
73 | 75 | ||
74 | enum stv090x_i2crpt repeater_level; | 76 | enum stv090x_i2crpt repeater_level; |
75 | 77 | ||