Hi, since there was no reply on the DVB ML: Is anyone maintaining the DVB part of the saa7134 driver? Can this patch be accepted? CU Oliver ---------- Forwarded Message ---------- Subject: [PATCH] Spezial Lifeview DVB-S Card without eeprom Date: Sunday 14 October 2007 22:12 From: Martin Dauskardt <md001@xxxxxx> To: linux-dvb@xxxxxxxxxxx The patch has already been posted in May by Michael Möhle without getting attention: http://linuxtv.org/pipermail/linux-dvb/2007-May/018007.html Several users in the german vdrportal forum use this card, therefore the patch is included in my LinVDR kernel package since months. To patch should really be included into the hg. I attach a diff against hg from today. It is still the same patch originally written by Ralph Metzler. Greets, Martin Dauskardt ------------------------------------------------------- -- ---------------------------------------------------------------- VDR Remote Plugin 0.4.0: http://www.escape-edv.de/endriss/vdr/ ----------------------------------------------------------------
diff -ur v4l-dvb-ea93c93f1547-orig/linux/drivers/media/video/saa7134/saa7134-cards.c v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134/saa7134-cards.c --- v4l-dvb-ea93c93f1547-orig/linux/drivers/media/video/saa7134/saa7134-cards.c 2007-10-11 14:09:06.000000000 +0200 +++ v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134/saa7134-cards.c 2007-10-14 17:48:49.000000000 +0200 @@ -3591,6 +3591,26 @@ .tv = 1, }}, }, + [SAA7134_BOARD_LIFEVIEW_DVBS] = { + /* LifeView FlyDVB-s */ + /* Ralph Metzler <rjkm@xxxxxxxxxxxxxx> */ + .name = "LifeView FlyDVB-S", + .audio_clock = 0x00200000, + .tuner_type = TUNER_ABSENT, + .radio_type = UNSET, + .tuner_addr = ADDR_UNSET, + .radio_addr = ADDR_UNSET, + .mpeg = SAA7134_MPEG_DVB, + .inputs = {{ + .name = name_comp1, /* Composite input */ + .vmux = 3, + .amux = LINE1, + },{ + .name = name_svideo, /* S-Video signal on S-Video input */ + .vmux = 8, + .amux = LINE1, + }}, + }, }; const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards); Nur in v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134: saa7134-cards.c.orig. diff -ur v4l-dvb-ea93c93f1547-orig/linux/drivers/media/video/saa7134/saa7134-dvb.c v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134/saa7134-dvb.c --- v4l-dvb-ea93c93f1547-orig/linux/drivers/media/video/saa7134/saa7134-dvb.c 2007-10-11 14:09:06.000000000 +0200 +++ v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134/saa7134-dvb.c 2007-10-14 17:48:49.000000000 +0200 @@ -43,6 +43,8 @@ #include "tda826x.h" #include "tda827x.h" #include "isl6421.h" +#include "tua6100.h" +#include "stv0299.h" MODULE_AUTHOR("Gerd Knorr <kraxel@xxxxxxxxxxx> [SuSE Labs]"); MODULE_LICENSE("GPL"); @@ -839,6 +841,130 @@ .demod_address = 0x0a, }; +/* ------------------------------------------------------------------ */ + +static int philips_su1278_ty_ci_tuner_set_params(struct dvb_frontend *fe, + struct dvb_frontend_parameters *params) +{ + u32 div; + u8 buf[4]; + struct saa7134_dev *dev = fe->dvb->priv; + struct i2c_msg msg = {.addr = 0x61,.flags = 0,.buf = buf,.len = sizeof(buf) }; + + if ((params->frequency < 950000) || (params->frequency > 2150000)) + return -EINVAL; + + div = (params->frequency + (125 - 1)) / 125; // round correctly + buf[0] = (div >> 8) & 0x7f; + buf[1] = div & 0xff; + buf[2] = 0x80 | ((div & 0x18000) >> 10) | 4; + buf[3] = 0x20; + + if (params->u.qpsk.symbol_rate < 4000000) + buf[3] |= 1; + + if (params->frequency < 1250000) + buf[3] |= 0; + else if (params->frequency < 1550000) + buf[3] |= 0x40; + else if (params->frequency < 2050000) + buf[3] |= 0x80; + else if (params->frequency < 2150000) + buf[3] |= 0xC0; + + if (fe->ops.i2c_gate_ctrl) + fe->ops.i2c_gate_ctrl(fe, 1); + if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1) + return -EIO; + return 0; +} + +static int lifeview_set_symbol_rate(struct dvb_frontend *fe, u32 srate, u32 ratio) +{ + u8 aclk = 0; + u8 bclk = 0; + u8 m1; + + aclk = 0xb5; + if (srate < 2000000) + bclk = 0x86; + else if (srate < 5000000) + bclk = 0x89; + else if (srate < 15000000) + bclk = 0x8f; + else if (srate < 45000000) + bclk = 0x95; + + m1 = 0x14; + if (srate < 4000000) + m1 = 0x10; + + stv0299_writereg(fe, 0x13, aclk); + stv0299_writereg(fe, 0x14, bclk); + stv0299_writereg(fe, 0x1f, (ratio >> 16) & 0xff); + stv0299_writereg(fe, 0x20, (ratio >> 8) & 0xff); + stv0299_writereg(fe, 0x21, (ratio) & 0xf0); + stv0299_writereg(fe, 0x0f, 0x80 | m1); + + return 0; +} + +static u8 lifeview_inittab[] = { + 0x01, 0x15, + 0x02, 0x30, + 0x03, 0x00, + 0x04, 0x7d, /* F22FR = 0x7d, F22 = f_VCO / 128 / 0x7d = 22 kHz */ + 0x05, 0x35, /* I2CT = 0, SCLT = 1, SDAT = 1 */ + 0x06, 0x40, /* DAC not used, set to high impendance mode */ + 0x07, 0x00, /* DAC LSB */ + 0x08, 0x40, /* DiSEqC off */ + 0x09, 0x00, /* FIFO */ + 0x0c, 0x51, /* OP1 ctl = Normal, OP1 val = 1 (LNB Power ON) */ + 0x0d, 0x82, /* DC offset compensation = ON, beta_agc1 = 2 */ + 0x0e, 0x23, /* alpha_tmg = 2, beta_tmg = 3 */ + 0x10, 0x3f, // AGC2 0x3d + 0x11, 0x84, + 0x12, 0xb9, + 0x15, 0xc9, // lock detector threshold + 0x16, 0x00, + 0x17, 0x00, + 0x18, 0x00, + 0x19, 0x00, + 0x1a, 0x00, + 0x1f, 0x50, + 0x20, 0x00, + 0x21, 0x00, + 0x22, 0x00, + 0x23, 0x00, + 0x28, 0x00, // out imp: normal out type: parallel FEC mode:0 + 0x29, 0x1e, // 1/2 threshold + 0x2a, 0x14, // 2/3 threshold + 0x2b, 0x0f, // 3/4 threshold + 0x2c, 0x09, // 5/6 threshold + 0x2d, 0x05, // 7/8 threshold + 0x2e, 0x01, + 0x31, 0x1f, // test all FECs + 0x32, 0x19, // viterbi and synchro search + 0x33, 0xfc, // rs control + 0x34, 0x93, // error control + 0x0f, 0x92, + 0xff, 0xff +}; + +static struct stv0299_config lifeview = { + .demod_address = 0x68, + .inittab = lifeview_inittab, + .mclk = 88000000UL, + .invert = 0, + .skip_reinit = 0, + .lock_output = STV0229_LOCKOUTPUT_0, + .volt13_op0_op1 = STV0299_VOLT13_OP0, + .min_delay_ms = 100, + .set_symbol_rate = lifeview_set_symbol_rate, +}; + +/* ------------------------------------------------------------------ */ + /* ================================================================== * Core code */ @@ -1005,6 +1131,20 @@ } } break; + case SAA7134_BOARD_LIFEVIEW_DVBS: + dev->dvb.frontend = dvb_attach(stv0299_attach, &lifeview, + &dev->i2c_adap); + if (dev->dvb.frontend) { + dev->dvb.frontend->ops.tuner_ops.set_params = + philips_su1278_ty_ci_tuner_set_params; +#if 0 + if (dvb_attach(tua6100_attach, dev->dvb.frontend, 0x61, + &dev->i2c_adap) == NULL) { + printk("%s: No tua6100 found!\n", __FUNCTION__); + } +#endif + } + break; case SAA7134_BOARD_ASUS_EUROPA2_HYBRID: dev->dvb.frontend = tda10046_attach(&medion_cardbus, &dev->i2c_adap); diff -ur v4l-dvb-ea93c93f1547-orig/linux/drivers/media/video/saa7134/saa7134.h v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134/saa7134.h --- v4l-dvb-ea93c93f1547-orig/linux/drivers/media/video/saa7134/saa7134.h 2007-10-11 14:09:06.000000000 +0200 +++ v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134/saa7134.h 2007-10-14 17:48:49.000000000 +0200 @@ -247,6 +247,7 @@ #define SAA7134_BOARD_SABRENT_TV_PCB05 115 #define SAA7134_BOARD_10MOONSTVMASTER3 116 #define SAA7134_BOARD_AVERMEDIA_SUPER_007 117 +#define SAA7134_BOARD_LIFEVIEW_DVBS 128 #define SAA7134_MAXBOARDS 8 #define SAA7134_INPUT_MAX 8
_______________________________________________ linux-dvb mailing list linux-dvb@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb