/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* bsbe1.h - ALPS BSBE1 tuner support
*
* the project's page is at https://linuxtv.org
*/
#ifndef BSBE1_H
#define BSBE1_H
static u8 alps_bsbe1_inittab[] = {
0 x01,
0 x15,
/* XTAL = 4MHz, VCO = 352 MHz */
0 x02,
0 x30,
/* MCLK = 88 MHz */
0 x03,
0 x00,
/* ACR output 0 */
0 x04,
0 x7d,
/* F22FR = 0x7d, F22 = f_VCO / 128 / 0x7d = 22 kHz */
0 x05,
0 x05,
/* I2CT = 0, SCLT = 1, SDAT = 1 */
0 x06,
0 x00,
/* DAC output 0 */
0 x08,
0 x40,
/* DiSEqC off, LNB power on OP2/LOCK pin on */
0 x09,
0 x00,
/* FIFO */
0 x0c,
0 x51,
/* OP1/OP0 normal, val = 1 (LNB power on) */
0 x0d,
0 x82,
/* DC offset compensation = on, beta_agc1 = 2 */
0 x0f,
0 x92,
/* AGC1R */
0 x10,
0 x34,
/* AGC2O */
0 x11,
0 x84,
/* TLSR */
0 x12,
0 xb9,
/* CFD */
0 x15,
0 xc9,
/* lock detector threshold */
0 x28,
0 x00,
/* out imp: normal, type: parallel, FEC mode: QPSK */
0 x33,
0 xfc,
/* RS control */
0 x34,
0 x93,
/* count viterbi bit errors per 2E18 bytes */
0 xff,
0 xff
};
static int alps_bsbe1_set_symbol_rate(
struct dvb_frontend* fe, u32 srate, u32 ratio)
{
u8 aclk =
0 ;
u8 bclk =
0 ;
if (srate <
1500000 ) { aclk =
0 xb7; bclk =
0 x47; }
else if (srate <
3000000 ) { aclk =
0 xb7; bclk =
0 x4b; }
else if (srate <
7000000 ) { aclk =
0 xb7; bclk =
0 x4f; }
else if (srate <
14000000 ) { aclk =
0 xb7; bclk =
0 x53; }
else if (srate <
30000000 ) { aclk =
0 xb6; bclk =
0 x53; }
else if (srate <
45000000 ) { aclk =
0 xb4; bclk =
0 x51; }
stv0299_writereg(fe,
0 x13, aclk);
stv0299_writereg(fe,
0 x14, bclk);
stv0299_writereg(fe,
0 x1f, (ratio >>
16 ) &
0 xff);
stv0299_writereg(fe,
0 x20, (ratio >>
8 ) &
0 xff);
stv0299_writereg(fe,
0 x21, (ratio ) &
0 xf0);
return 0 ;
}
static int alps_bsbe1_tuner_set_params(
struct dvb_frontend *fe)
{
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
int ret;
u8 data[
4 ];
u32 div;
struct i2c_msg msg = { .addr =
0 x61, .flags =
0 , .buf = data, .len =
sizeof (data) };
struct i2c_adapter *i2c = fe->tuner_priv;
if ((p->frequency <
950000 ) || (p->frequency >
2150000 ))
return -EINVAL;
div = p->frequency /
1000 ;
data[
0 ] = (div >>
8 ) &
0 x7f;
data[
1 ] = div &
0 xff;
data[
2 ] =
0 x80 | ((div &
0 x18000) >>
10 ) |
0 x1;
data[
3 ] =
0 xe0;
if (fe->ops.i2c_gate_ctrl)
fe->ops.i2c_gate_ctrl(fe,
1 );
ret = i2c_transfer(i2c, &msg,
1 );
return (ret !=
1 ) ? -EIO :
0 ;
}
static struct stv0299_config alps_bsbe1_config = {
.demod_address =
0 x68,
.inittab = alps_bsbe1_inittab,
.mclk =
88000000 UL,
.invert =
1 ,
.skip_reinit =
0 ,
.min_delay_ms =
100 ,
.set_symbol_rate = alps_bsbe1_set_symbol_rate,
};
#endif
Messung V0.5 in Prozent C=95 H=88 G=91
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-05)
¤
*© Formatika GbR, Deutschland