Lines Matching refs:stv6110x

42 static int stv6110x_read_reg(struct stv6110x_state *stv6110x, u8 reg, u8 *data)  in stv6110x_read_reg()  argument
45 const struct stv6110x_config *config = stv6110x->config; in stv6110x_read_reg()
53 ret = i2c_transfer(stv6110x->i2c, msg, 2); in stv6110x_read_reg()
63 static int stv6110x_write_regs(struct stv6110x_state *stv6110x, int start, u8 data[], int len) in stv6110x_write_regs() argument
66 const struct stv6110x_config *config = stv6110x->config; in stv6110x_write_regs()
89 ret = i2c_transfer(stv6110x->i2c, &msg, 1); in stv6110x_write_regs()
98 static int stv6110x_write_reg(struct stv6110x_state *stv6110x, u8 reg, u8 data) in stv6110x_write_reg() argument
100 return stv6110x_write_regs(stv6110x, reg, &data, 1); in stv6110x_write_reg()
105 struct stv6110x_state *stv6110x = fe->tuner_priv; in stv6110x_init() local
108 ret = stv6110x_write_regs(stv6110x, 0, stv6110x->regs, in stv6110x_init()
109 ARRAY_SIZE(stv6110x->regs)); in stv6110x_init()
120 struct stv6110x_state *stv6110x = fe->tuner_priv; in stv6110x_set_frequency() local
125 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL1], CTRL1_K, (REFCLOCK_MHz - 16)); in stv6110x_set_frequency()
128 STV6110x_SETFIELD(stv6110x->regs[STV6110x_TNG1], TNG1_DIV4SEL, 1); in stv6110x_set_frequency()
129 STV6110x_SETFIELD(stv6110x->regs[STV6110x_TNG1], TNG1_PRESC32_ON, 0); in stv6110x_set_frequency()
132 STV6110x_SETFIELD(stv6110x->regs[STV6110x_TNG1], TNG1_DIV4SEL, 1); in stv6110x_set_frequency()
133 STV6110x_SETFIELD(stv6110x->regs[STV6110x_TNG1], TNG1_PRESC32_ON, 1); in stv6110x_set_frequency()
136 STV6110x_SETFIELD(stv6110x->regs[STV6110x_TNG1], TNG1_DIV4SEL, 0); in stv6110x_set_frequency()
137 STV6110x_SETFIELD(stv6110x->regs[STV6110x_TNG1], TNG1_PRESC32_ON, 0); in stv6110x_set_frequency()
140 STV6110x_SETFIELD(stv6110x->regs[STV6110x_TNG1], TNG1_DIV4SEL, 0); in stv6110x_set_frequency()
141 STV6110x_SETFIELD(stv6110x->regs[STV6110x_TNG1], TNG1_PRESC32_ON, 1); in stv6110x_set_frequency()
157 STV6110x_SETFIELD(stv6110x->regs[STV6110x_TNG1], TNG1_R_DIV, rDivOpt); in stv6110x_set_frequency()
158 STV6110x_SETFIELD(stv6110x->regs[STV6110x_TNG1], TNG1_N_DIV_11_8, MSB(divider)); in stv6110x_set_frequency()
159 STV6110x_SETFIELD(stv6110x->regs[STV6110x_TNG0], TNG0_N_DIV_7_0, LSB(divider)); in stv6110x_set_frequency()
162 STV6110x_SETFIELD(stv6110x->regs[STV6110x_STAT1], STAT1_CALVCO_STRT, 1); in stv6110x_set_frequency()
164 stv6110x_write_reg(stv6110x, STV6110x_CTRL1, stv6110x->regs[STV6110x_CTRL1]); in stv6110x_set_frequency()
165 stv6110x_write_reg(stv6110x, STV6110x_TNG1, stv6110x->regs[STV6110x_TNG1]); in stv6110x_set_frequency()
166 stv6110x_write_reg(stv6110x, STV6110x_TNG0, stv6110x->regs[STV6110x_TNG0]); in stv6110x_set_frequency()
167 stv6110x_write_reg(stv6110x, STV6110x_STAT1, stv6110x->regs[STV6110x_STAT1]); in stv6110x_set_frequency()
170 stv6110x_read_reg(stv6110x, STV6110x_STAT1, &stv6110x->regs[STV6110x_STAT1]); in stv6110x_set_frequency()
171 if (!STV6110x_GETFIELD(STAT1_CALVCO_STRT, stv6110x->regs[STV6110x_STAT1])) in stv6110x_set_frequency()
181 struct stv6110x_state *stv6110x = fe->tuner_priv; in stv6110x_get_frequency() local
183 stv6110x_read_reg(stv6110x, STV6110x_TNG1, &stv6110x->regs[STV6110x_TNG1]); in stv6110x_get_frequency()
184 stv6110x_read_reg(stv6110x, STV6110x_TNG0, &stv6110x->regs[STV6110x_TNG0]); in stv6110x_get_frequency()
186 *frequency = (MAKEWORD16(STV6110x_GETFIELD(TNG1_N_DIV_11_8, stv6110x->regs[STV6110x_TNG1]), in stv6110x_get_frequency()
187 STV6110x_GETFIELD(TNG0_N_DIV_7_0, stv6110x->regs[STV6110x_TNG0]))) * REFCLOCK_kHz; in stv6110x_get_frequency()
189 *frequency /= (1 << (STV6110x_GETFIELD(TNG1_R_DIV, stv6110x->regs[STV6110x_TNG1]) + in stv6110x_get_frequency()
190 STV6110x_GETFIELD(TNG1_DIV4SEL, stv6110x->regs[STV6110x_TNG1]))); in stv6110x_get_frequency()
199 struct stv6110x_state *stv6110x = fe->tuner_priv; in stv6110x_set_bandwidth() local
206 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL3], CTRL3_CF, 31); /* LPF */ in stv6110x_set_bandwidth()
208 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL3], CTRL3_CF, 0); /* LPF */ in stv6110x_set_bandwidth()
210 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL3], CTRL3_CF, ((halfbw / 1000000) - 5)); /* LPF */ in stv6110x_set_bandwidth()
213 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL3], CTRL3_RCCLK_OFF, 0x0); /* cal. clk activated */ in stv6110x_set_bandwidth()
214 STV6110x_SETFIELD(stv6110x->regs[STV6110x_STAT1], STAT1_CALRC_STRT, 0x1); /* LPF auto cal */ in stv6110x_set_bandwidth()
216 stv6110x_write_reg(stv6110x, STV6110x_CTRL3, stv6110x->regs[STV6110x_CTRL3]); in stv6110x_set_bandwidth()
217 stv6110x_write_reg(stv6110x, STV6110x_STAT1, stv6110x->regs[STV6110x_STAT1]); in stv6110x_set_bandwidth()
220 stv6110x_read_reg(stv6110x, STV6110x_STAT1, &stv6110x->regs[STV6110x_STAT1]); in stv6110x_set_bandwidth()
221 if (!STV6110x_GETFIELD(STAT1_CALRC_STRT, stv6110x->regs[STV6110x_STAT1])) in stv6110x_set_bandwidth()
225 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL3], CTRL3_RCCLK_OFF, 0x1); /* cal. done */ in stv6110x_set_bandwidth()
226 stv6110x_write_reg(stv6110x, STV6110x_CTRL3, stv6110x->regs[STV6110x_CTRL3]); in stv6110x_set_bandwidth()
233 struct stv6110x_state *stv6110x = fe->tuner_priv; in stv6110x_get_bandwidth() local
235 stv6110x_read_reg(stv6110x, STV6110x_CTRL3, &stv6110x->regs[STV6110x_CTRL3]); in stv6110x_get_bandwidth()
236 *bandwidth = (STV6110x_GETFIELD(CTRL3_CF, stv6110x->regs[STV6110x_CTRL3]) + 5) * 2000000; in stv6110x_get_bandwidth()
243 struct stv6110x_state *stv6110x = fe->tuner_priv; in stv6110x_set_refclock() local
249 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL2], CTRL2_CO_DIV, 0); in stv6110x_set_refclock()
252 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL2], CTRL2_CO_DIV, 1); in stv6110x_set_refclock()
255 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL2], CTRL2_CO_DIV, 2); in stv6110x_set_refclock()
259 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL2], CTRL2_CO_DIV, 3); in stv6110x_set_refclock()
262 stv6110x_write_reg(stv6110x, STV6110x_CTRL2, stv6110x->regs[STV6110x_CTRL2]); in stv6110x_set_refclock()
269 struct stv6110x_state *stv6110x = fe->tuner_priv; in stv6110x_get_bbgain() local
271 stv6110x_read_reg(stv6110x, STV6110x_CTRL2, &stv6110x->regs[STV6110x_CTRL2]); in stv6110x_get_bbgain()
272 *gain = 2 * STV6110x_GETFIELD(CTRL2_BBGAIN, stv6110x->regs[STV6110x_CTRL2]); in stv6110x_get_bbgain()
279 struct stv6110x_state *stv6110x = fe->tuner_priv; in stv6110x_set_bbgain() local
281 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL2], CTRL2_BBGAIN, gain / 2); in stv6110x_set_bbgain()
282 stv6110x_write_reg(stv6110x, STV6110x_CTRL2, stv6110x->regs[STV6110x_CTRL2]); in stv6110x_set_bbgain()
289 struct stv6110x_state *stv6110x = fe->tuner_priv; in stv6110x_set_mode() local
294 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL1], CTRL1_SYN, 0); in stv6110x_set_mode()
295 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL1], CTRL1_RX, 0); in stv6110x_set_mode()
296 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL1], CTRL1_LPT, 0); in stv6110x_set_mode()
300 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL1], CTRL1_SYN, 1); in stv6110x_set_mode()
301 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL1], CTRL1_RX, 1); in stv6110x_set_mode()
302 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL1], CTRL1_LPT, 1); in stv6110x_set_mode()
306 ret = stv6110x_write_reg(stv6110x, STV6110x_CTRL1, stv6110x->regs[STV6110x_CTRL1]); in stv6110x_set_mode()
325 struct stv6110x_state *stv6110x = fe->tuner_priv; in stv6110x_get_status() local
327 stv6110x_read_reg(stv6110x, STV6110x_STAT1, &stv6110x->regs[STV6110x_STAT1]); in stv6110x_get_status()
329 if (STV6110x_GETFIELD(STAT1_LOCK, stv6110x->regs[STV6110x_STAT1])) in stv6110x_get_status()
340 struct stv6110x_state *stv6110x = fe->tuner_priv; in stv6110x_release() local
343 kfree(stv6110x); in stv6110x_release()
376 struct stv6110x_state *stv6110x; in stv6110x_attach() local
379 stv6110x = kzalloc(sizeof (struct stv6110x_state), GFP_KERNEL); in stv6110x_attach()
380 if (!stv6110x) in stv6110x_attach()
383 stv6110x->i2c = i2c; in stv6110x_attach()
384 stv6110x->config = config; in stv6110x_attach()
385 stv6110x->devctl = &stv6110x_ctl; in stv6110x_attach()
386 memcpy(stv6110x->regs, default_regs, 8); in stv6110x_attach()
389 switch (stv6110x->config->clk_div) { in stv6110x_attach()
392 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL2], CTRL2_CO_DIV, 0); in stv6110x_attach()
395 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL2], CTRL2_CO_DIV, 1); in stv6110x_attach()
398 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL2], CTRL2_CO_DIV, 2); in stv6110x_attach()
402 STV6110x_SETFIELD(stv6110x->regs[STV6110x_CTRL2], CTRL2_CO_DIV, 3); in stv6110x_attach()
406 fe->tuner_priv = stv6110x; in stv6110x_attach()
410 return stv6110x->devctl; in stv6110x_attach()