Hello Johannes,
Johannes Stezenbach wrote:
Hi Manu,
lots of minor comments from my side. Don't take them
too seriously if you disagree with my opinion, just
address the ones where you think I'm obviously right ;-)
No issues, i have been taking in a lot of beatings these days, so some
additionally won't make any much difference.
Anyway, Lengthy mail follows. I know you hate lengthy mails, but
couldn't make it shorter. :-)
On Fri, May 05, 2006, Manu Abraham wrote:
--- multiproto3.orig/linux/drivers/media/dvb/dvb-core/dvb_frontend.c 2006-04-29 03:22:23.000000000 +0400
+++ multiproto3/linux/drivers/media/dvb/dvb-core/dvb_frontend.c 2006-04-29 21:39:59.000000000 +0400
@@ -94,6 +94,8 @@ struct dvb_frontend_private {
/* thread/frontend values */
struct dvb_device *dvbdev;
struct dvb_frontend_parameters parameters;
+ struct dvb_frontend_params params;
What is the reason for keeping parameters?
It is superseded by params, isn't it?
Yes, currently parameters( the legacy one) is used by all drivers.
Removing it straight away will result in fixing all drivers straight
away. Many drivers are yet to recover from the tuner refactoring yet, at
this point of time if we remove parameters and make params the default
one, it will be a doom for sure. We should define a period by which the
drivers should be ported to the new operations.
Generally, what is the plan?
- change all frontend drivers to use set_params/get_params
and struct dvb_frontend_params?
Yes. This should be the task, but we should maintain parameters, till we
fix in the drivers.
- or map FE_SET_PARAMS / FE_GET_PARAMS to set_frontend / get_frontend
for old frontend drivers?
Please add comments to mark deprecated or alternative old/new parts.
params vs. parameters naming without comment is a recipe for confusion.
I thought i already did, marking them Legacy and New
+ struct dvb_frontend_cap caps;
why do we need this here?
+struct modcod_table {
+ __u32 modcod;
+ __u32 modulation;
+ __u32 fecrate;
should use u32, not __u32
Right, i did follow LKML the previous days.
+};
+
+struct modcod_table dvbs2_modcod_lookup[] = {
should be static
Right.
+ { FE_MODCOD_DUMMY_PLFRAME, FE_MOD_NONE, FE_FECRATE_NONE },
+ { FE_MODCOD_QPSK_1_4, FE_MOD_QPSK, FE_FECRATE_1_4 },
+ { FE_MODCOD_QPSK_1_3, FE_MOD_QPSK, FE_FECRATE_1_3 },
+ { FE_MODCOD_QPSK_2_5, FE_MOD_QPSK, FE_FECRATE_2_5 },
+ { FE_MODCOD_QPSK_1_2, FE_MOD_QPSK, FE_FECRATE_1_2 },
+ { FE_MODCOD_QPSK_3_5, FE_MOD_QPSK, FE_FECRATE_3_5 },
+ { FE_MODCOD_QPSK_2_3, FE_MOD_QPSK, FE_FECRATE_2_3 },
+ { FE_MODCOD_QPSK_3_4, FE_MOD_QPSK, FE_FECRATE_3_4 },
+ { FE_MODCOD_QPSK_4_5, FE_MOD_QPSK, FE_FECRATE_4_5 },
+ { FE_MODCOD_QPSK_5_6, FE_MOD_QPSK, FE_FECRATE_5_6 },
+ { FE_MODCOD_QPSK_8_9, FE_MOD_QPSK, FE_FECRATE_8_9 },
+ { FE_MODCOD_QPSK_9_10, FE_MOD_QPSK, FE_FECRATE_9_10 },
+ { FE_MODCOD_8PSK_3_5, FE_MOD_8PSK, FE_FECRATE_3_5 },
+ { FE_MODCOD_8PSK_2_3, FE_MOD_8PSK, FE_FECRATE_2_3 },
+ { FE_MODCOD_8PSK_3_4, FE_MOD_8PSK, FE_FECRATE_3_4 },
+ { FE_MODCOD_8PSK_5_6, FE_MOD_8PSK, FE_FECRATE_5_6 },
+ { FE_MODCOD_8PSK_8_9, FE_MOD_8PSK, FE_FECRATE_8_9 },
+ { FE_MODCOD_8PSK_9_10, FE_MOD_8PSK, FE_FECRATE_9_10 },
+ { FE_MODCOD_16APSK_2_3, FE_MOD_16APSK, FE_FECRATE_2_3 },
+ { FE_MODCOD_16APSK_3_4, FE_MOD_16APSK, FE_FECRATE_3_4 },
+ { FE_MODCOD_16APSK_4_5, FE_MOD_16APSK, FE_FECRATE_4_5 },
+ { FE_MODCOD_16APSK_5_6, FE_MOD_16APSK, FE_FECRATE_5_6 },
+ { FE_MODCOD_16APSK_8_9, FE_MOD_16APSK, FE_FECRATE_8_9 },
+ { FE_MODCOD_16APSK_9_10, FE_MOD_16APSK, FE_FECRATE_9_10 },
+ { FE_MODCOD_32APSK_3_4, FE_MOD_32APSK, FE_FECRATE_3_4 },
+ { FE_MODCOD_32APSK_4_5, FE_MOD_32APSK, FE_FECRATE_4_5 },
+ { FE_MODCOD_32APSK_5_6, FE_MOD_32APSK, FE_FECRATE_5_6 },
+ { FE_MODCOD_32APSK_8_9, FE_MOD_32APSK, FE_FECRATE_8_9 },
+ { FE_MODCOD_32APSK_9_10, FE_MOD_32APSK, FE_FECRATE_9_10 },
+ { FE_MODCOD_RESERVED_1, FE_MOD_RSVD, FE_FECRATE_RSVD },
+ { FE_MODCOD_BPSK_1_3, FE_MOD_BPSK, FE_FECRATE_1_3 },
+ { FE_MODCOD_BPSK_1_4, FE_MOD_BPSK, FE_FECRATE_1_4 },
+ { FE_MODCOD_RESERVED_2, FE_MOD_RSVD, FE_FECRATE_RSVD }
+};
+
+int decode_dvbs2_modcod(struct dvb_frontend *fe, enum fe_modcod modcod)
+{
+ struct modcod_table *table = dvbs2_modcod_lookup;
+ struct dvb_frontend_private *fepriv = fe->frontend_priv;
+ struct dvb_frontend_params *params = &fepriv->params;
+
+ table += modcod;
no bounds check?
Yes, will check.
+ params->delsys.dvbs2.modulation = table->modulation;
+ params->delsys.dvbs2.fecrate = table->fecrate;
+
+ return 0;
why not return void?
I would prefer the following (untested):
/* decode DVB-S2 modcod field as defined in EN 302 307 section 5.5.2.2 */
void dvb_decode_dvbs2_modcod(u32 modcod, u32 *modulation, u32 *fec)
{
BUG_ON(modcod >= ARRAY_SIZE(dvbs2_modcod_lookup));
*modulation = dvbs2_modcod_lookup[modcod].modulation;
*fec = dvbs2_modcod_lookup[modcod].fecrate;
}
Ok, done
+ case FE_GET_CAPS:
+ if (fe->ops->get_caps) {
+ memcpy(parg, &fepriv->caps, sizeof (struct dvb_frontend_cap));
+ err = fe->ops->get_caps(fe, (struct dvb_frontend_cap*) parg);
+ }
+ break;
What is the memcpy() good for?
Umm.. gone ..
+ /* New callbacks based on the new IOCTL's */
scratch that comment; better add "superseded by ..." to the old ones
Done
+ int (*get_caps)(struct dvb_frontend* fe, struct dvb_frontend_cap* caps);
+ int (*set_params)(struct dvb_frontend* fe, struct dvb_frontend_params* params);
+ int (*get_params)(struct dvb_frontend* fe, struct dvb_frontend_params* params);
+
+/**
+ * FE_GET_INFO, is now a legacy IOCTL as well
better: "superseded by ..."
Right
Anyway, apps will have to keep using this if they find that
FE_GET_CAPS is not supported by the drivers.
Yeah, eventually it will need to move on.
+/**
+ * Legacy IOCTL's
+ */
#define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters)
#define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters)
#define FE_SET_FRONTEND_TUNE_MODE _IO('o', 81) /* unsigned int */
FE_SET_FRONTEND_TUNE_MODE is not legacy, is it?
+/**
+ * New operations for new and multiple delivery systems.
+ *
+ * References:
+ * DVB-S: ISO 13818-1/ITU H.222, EN 300 468
EN 300 421
+ * DVB-S2: EN 300 468, EN 301 210, TR 102 376
what is EN 301 210?
DSNG: Some information on 8PSK and the Nyquist rolloff rates
add EN 302 307
Done
+ * DVB-C: ISO 13818-1/ITU H.222, EN 300 468, EN 300 429
+ * DVB-T: ISO 13818-1/ITU H.222, EN 300 468, EN 300 744
+ * DVB-H: EN 300 468, EN 302 304
ATSC: A/53A + A80
Thanks
better remove EN 300 468 and ISO 13818-1/ITU H.222 from this list
Sure
+/**
+ * Supported Delivery systems, some devices
+ * are capable of supporting multiple delivery systems.
+ *
+ * FE_DELSYS_IGNORE, causes the delivery system
+ * not to be queried.
why is IGNORE useful?
+ *
+ * FE_DELSYS_AUTO, Some devices/drivers, might in
+ * future be capable of detectinng the delivery system.
+ */
+enum fe_delsys {
+ FE_DELSYS_IGNORE = (0 << 0),
+ FE_DELSYS_DVBS = (1 << 0),
+ FE_DELSYS_DVBS2 = (1 << 1),
+ FE_DELSYS_DSS = (1 << 2),
please put DSS last, I still doubt it is useful to have
Sure, Someone is doing it. Parser is done, (The person sent me a copy)
It wouldn't be too hard to do the demux.
+ FE_DELSYS_DVBC = (1 << 3),
+ FE_DELSYS_DVBT = (1 << 4),
+ FE_DELSYS_DVBH = (1 << 5),
+ FE_DELSYS_ATSC = (1 << 6),
+ FE_DELSYS_AUTO = (1 << 31)
+};
+
+/**
+ * Supported Transport types, some delivery systems
+ * support multiple transports too.
+ *
+ * FE_MATYPE_IGNORE, causes the transport type not
+ * to be queried.
again, why is IGNORE useful?
In many cases, the current status needs to be queried from the demod.
Many a cases the user application might require only a certain subset of
the feature. In this case the smaller subset can be queried fast
(queried over i2c). (I remember not all i2c implementations are great,
even if the hardware implementation is nice, driver might be bad due to
the geological location .. ;-))
+ *
+ * FE_MATYPE_AUTO, Some devices/drivers, might
+ * support auto detecting the transport type, depending
+ * on some other settings and or hardware features.
+ *
+ * NOTE: This is specified by the DVB-S2 specifications
+ * This change of transport type might require an additional
+ * change at the PCI bridge level, for some implementations.
+ */
+enum fe_matype {
+ FE_MATYPE_IGNORE = (0 << 0),
+ FE_MATYPE_TRANSPORT = (1 << 0),
+ FE_MATYPE_GENERIC_PACKET = (1 << 1),
+ FE_MATYPE_GENERIC_CONTINUOUS = (1 << 2),
+ FE_MATYPE_RESERVED = (1 << 3),
+ FE_MATYPE_AUTO = (1 << 31)
+};
enum fe_matype isn't used anywhere
also, please always spell out non-obvious acronyms in a comment
(probably "mode adaption type")
But EN 302 307 defines MATYPE as a two-byte field, this
enum fe_matype is just the 2bit TS/GS field of the
whole MATYPE.
Form these 3 and
+
+/**
+ * Supported Stream Priorities
after having read "Supported" this many time I think you whould
scratch it
+ *
+ * Some delivery systems do have streams having
+ * different priorities. ie, High priority/Low priority.
better: "Select high or low priority stream when hierachical
coding is used"
+ *
+ * NOTE: The default should be the High priority stream.
+ */
+enum fe_stream {
+ FE_STREAM_HP = (1 << 0),
+ FE_STREAM_LP = (1 << 1)
+};
this is called "priority" in the specs
will change
+
+/**
+ * Supported Modulations.
+ * Some devices support multiple modulation types
actually, most demods do
+enum fe_modulations {
I prefer the singular for enum type names.
But that already exists, and did not want to tamper that.
+ FE_MOD_IGNORE = (0 << 0),
+ FE_MOD_NONE = (1 << 0),
what is FE_MOD_NONE?
Multistandard tuners/demods can return that state, can be possibly an
error condition or a modulation unset condition,
+ FE_MOD_BPSK = (1 << 1),
+ FE_MOD_QPSK = (1 << 2),
+ FE_MOD_OQPSK = (1 << 3),
+ FE_MOD_8PSK = (1 << 4),
+ FE_MOD_16APSK = (1 << 5),
+ FE_MOD_32APSK = (1 << 6),
+ FE_MOD_QAM16 = (1 << 7),
+ FE_MOD_QAM32 = (1 << 8),
+ FE_MOD_QAM64 = (1 << 9),
+ FE_MOD_QAM128 = (1 << 10),
+ FE_MOD_QAM256 = (1 << 11),
+ FE_MOD_QAM512 = (1 << 12),
+ FE_MOD_QAM1024 = (1 << 13),
+ FE_MOD_QAMAUTO = (1 << 14),
+ FE_MOD_OFDM = (1 << 15),
+ FE_MOD_COFDM = (1 << 16),
+ FE_MOD_VSB8 = (1 << 17),
+ FE_MOD_VSB16 = (1 << 18),
+ FE_MOD_RSVD = (1 << 19),
what is RSVD? if it is RESERVED, then call it RESERVED.
Ok.
but what would RESERVED be good for?
Ok, can be removed.
+ FE_MOD_AUTO = (1 << 31)
+};
+
+/**
+ * Supported FEC (Forward Error Correction) Code rates
+ *
+ * FE_FECRATE_IGNORE, causes the FECRATE type not
+ * to be queried.
IMHO FE_FEC_1_2 etc. looks better than FE_FECRATE_1_2
+ FE_FECRATE_RSVD = (1 << 14),
again, what's it good for?
I put RESERVED as the last value in there
+/**
+ * Supported MODCOD types
+ *
+ * The MODCOD types are specific to the DVB-S2 specification
+ * Some devices directly take the MODCOD values as an input
+ * or just output the same.
+ *
+ * In any case a single frontend will not be able to do
+ * multiple modulations/code rates at any given point of time.
+ */
+enum fe_modcod {
+ FE_MODCOD_DUMMY_PLFRAME = 0,
enum fe_modcod isn't used anywhere except the
decode_dvbs2_modcod() helper function. Either
use it in the API or move it to dvb_frontend.h.
Compliant drivers uses the modcod straight away. I was still working on
the STB0899. I was of the thought would add it alongwith it.
+
+/**
+ * Supported Bandwidth modes
a bandwidth is not a mode
+enum fe_hierarchy_info {
+enum fe_rolloff {
+enum fe_interleaver {
EN 300 468 V1.7.1 combines these in a single
hierarchy_information field. Is it useful to
split them into three enums?
Well, i originally had it as one only, after the innumerous discussions
it became like that.
+/**
+ * DVB-S parameters
+ */
+struct dvbs_params {
+ __u32 symbol_rate;
+
+ enum fe_modulations modulation;
+ enum fe_fecrates fecrate;
again, IMHO either "fec" or "coderate", but not "fecrate"
ok, will go for coderate
+struct dvbs2_params {
+ __u32 symbol_rate;
+
+ enum fe_modulations modulation;
+ enum fe_fecrates fecrate;
+ enum fe_stream streamtype;
+ enum fe_fecrates coderate_HP;
+ enum fe_fecrates coderate_LP;
do we really have three fecs?
also, if you have hierachical modulation you need a way to
select the HP or LP stream
streamtype is used for that.
I don't fully understand the DVB-S2 spec yet, but I think
the way to select the stream is by using an 8bit
input_stream_identifier.
H.3 describes it. 8 bits isn;t needed, anyway boiling down to the demod,
that doesn't happen, it is a simple knob to select between the streams.
There aren't many S2 chipsets. ST has STB0899, Broadcom has 4500.
Croadcom doesn't sell to PC card manufacturers, but only STB vendors.
There is Conexant also as i heard, but a very buggy chip. Well the S2
devices do have bugs. Even the datasheets have bugs.
+/**
+ * Padding to handle future binary compatibility issues.
+ *
+ * NOTE: The padding is a dummy parameter !
+ */
+struct pad_params {
+ __u8 pad[512];
+};
just scratch this struct and put the pad directly in the union
It would make it look a bit consistent though. Everyone else really
liked it, except for your comment and Trent's.
also, 512 is a bit excessive; the larges *_params we have is
48 bytes (if I counted correctly), I'd say 128 bytes
of pad should be enough
okay, will change to 128
+/**
+ * Frontend capability information
+ */
+struct dvb_frontend_cap {
+ char name[128];
+
+ __u32 frequency_min;
+ __u32 frequency_max;
+ __u32 frequency_stepsize;
+ __u32 frequency_tolerance;
+ __u32 symbol_rate_min;
+ __u32 symbol_rate_max;
+ __u32 symbol_rate_tolerance;
+
+ enum fe_delsys delivery;
is this a bitset?
Delivery System, Yes. There can be multistandard devices
+ enum fe_inversion inversion;
+
+ union {
+ struct dvbs_params dvbs;
+ struct dvbs2_params dvbs2;
+ struct dss_params dss;
+ struct dvbc_params dvbc;
+ struct dvbt_params dvbt;
+ struct dvbh_params dvbh;
+ struct atsc_params atsc;
+ struct pad_params pad;
+ } delsys;
what does this mean in terms of capabilities?
every enum a bitset?
It depends on what the driver supports
If delivery is a bitset, what does it return?
It is not done yet, i was thinking like this. haven't tried compiling
yet. The driver is a bit huge, compared to other frontends.
static int stb0899_get_dvbs_caps(struct dvb_frontend *fe,
struct dvb_frontend_cap *caps)
{
caps->name = "STB0899 Multi-standard (DVB-S
Mode)";
caps->frequency_min = 950000;
caps->frequency_max = 2150000;
caps->symbol_rate_min = 1000000;
caps->symbol_rate_max = 45000000;
caps->inversion = FE_INVERSION_IGNORE |
FE_INVERSION_OFF |
FE_INVERSION_ON |
FE_INVERSION_AUTO;
caps->delsys.dvbs.modulation = FE_MOD_QPSK;
caps->delsys.dvbs.fecrate = FE_FECRATE_1_2 | FE_FECRATE_2_3 |
FE_FECRATE_3_4 | FE_FECRATE_5_6 |
FE_FECRATE_6_7;
return 0;
}
static int stb0899_get_dss_caps(struct dvb_frontend *fe,
struct dvb_frontend_cap *caps)
{
caps->name = "STB0899 Multi-standard (DSS
Mode)";
caps->frequency_min = 950000;
caps->frequency_max = 2150000;
caps->symbol_rate_min = 1000000;
caps->symbol_rate_max = 45000000;
caps->inversion = FE_INVERSION_IGNORE |
FE_INVERSION_OFF |
FE_INVERSION_ON |
FE_INVERSION_AUTO;
caps->delsys.dvbs.modulation = FE_MOD_QPSK;
caps->delsys.dvbs.fecrate = FE_FECRATE_1_2 | FE_FECRATE_2_3 |
FE_FECRATE_3_4 | FE_FECRATE_5_6 |
FE_FECRATE_6_7;
return 0;
}
static int stb0899_get_dvbs2_caps(struct dvb_frontend *fe,
struct dvb_frontend_cap *caps)
{
caps->name = "STB0899 Multi-standard
(DVB-S2 Mode)";
caps->frequency_min = 950000;
caps->frequency_max = 2150000;
caps->symbol_rate_min = 1000000;
caps->symbol_rate_max = 45000000;
caps->inversion = FE_INVERSION_IGNORE |
FE_INVERSION_OFF |
FE_INVERSION_ON |
FE_INVERSION_AUTO;
caps->delsys.dvbs.modulation = FE_MOD_QPSK | FE_MOD_8PSK |
FE_MOD_16APSK;
caps->delsys.dvbs.fecrate = FE_FECRATE_1_4 | FE_FECRATE_1_3 |
FE_FECRATE_2_5 | FE_FECRATE_1_2 |
FE_FECRATE_3_5 | FE_FECRATE_2_3 |
FE_FECRATE_3_4 | FE_FECRATE_4_5 |
FE_FECRATE_5_6 | FE_FECRATE_8_9 |
FE_FECRATE_9_10;
return 0;
}
static int stb0899_get_caps(struct dvb_frontend *fe,
struct dvb_frontend_cap *caps)
{
switch (caps->delivery) {
case FE_DELSYS_DVBS:
stb0899_get_dvbs_caps(fe, caps);
break;
case FE_DELSYS_DSS:
stb0899_get_dss_caps(fe, caps);
break;
case FE_DELSYS_DVBS2:
stb0899_get_dvbs2_cap(fe, caps);
}
return 0;
}
+/**
+ * We have the NEW IOCTL's defined now. This IOCTL
+ * is supposed to handle all the new delivery systems
+ * FE_GET_CAPS, gets all the capabilities in one go.
+ *
+ * For the GET IOCTL's ie FE_GET_PARAMS and FE_GET_CAPS
+ * some of the parameters maybe selectively queried by
+ * setting that relevant parameter to IGNORE.
Is this IGNORE stuff useful for apps?
It would be yes. It can selectively query what it wants.
The description is just noise. How does an app use this?
What does the app need to know about the frontend?
I.e. are there other calls which need to be different
depending on the information returned here? Or is it
just informational?
For a multistandard frontend, what all it supports. In most cases it is
informational. But it can be the current set state too.
+ */
+#define FE_GET_CAPS _IOR('o', 84, struct dvb_frontend_cap)
+/**
+ * We have the NEW IOCTL's defined now. These IOCTL's
+ * are supposed to handle all the new delivery systems.
better: add "superseded by..." to old ioctls
Ok, Fine ..
+ * FE_SET_PARAMS, sets all the parameters in one go.
+ * FE_GET_PARAMS, gets all the parameters in one go.
+ *
+ * For the GET IOCTL's ie FE_GET_PARAMS and FE_GET_CAPS
+ * some of the parameters maybe selectively queried by
+ * setting that relevant parameter to IGNORE.
same as with GET_CAPS:
what is IGNORE good for?
How do apps use this? I.e.
same as i explained earlier.
/* tune to the stream with the specified parameters */
+#define FE_SET_PARAMS _IOW('o', 82, struct dvb_frontend_params)
/* query parameters for currently tuned stream,
* only valid when FE_READ_STATUS indicates FE_HAS_LOCK
*/
+#define FE_GET_PARAMS _IOR('o', 83, struct dvb_frontend_params)
Please also increment the minor version in linux/dvb/version.h.
Right.
Generally, the DVB-S2 stuff doesn't seem to be very well thought out.
It's probably better to take some of the advanced stuff out for now,
Well, there isn't much of advanced stuff now, just only the basic DVB-S2
is used.
but make sure that the API is defined such a way that it is
easy to add more parameters for DVB-S2 later in a binary
compatbile way.
Ok.
Removing stuff from an API is not an option, even if it was wrong.
So better make sure everything which is in it is correct.
BTW, is anyone working on a driver for a DVB-S2 tuner?
Or does anyone have a data sheet for such a device?
Yes, quite a lot of people have it now (as i understand, other than some
people around us), well that chips is something to make people real
crazy. The documents are available under NDA only.
Well, i have done ~ 3000 lines of code for the STB0899 + STB6100. I got
approval from Twinhan to publish the driver under OSS.
There are 4 cards now, (1) The Twinhan card (not the DST, but a brand
new one) (2) KNC1 (SAA7146 based) (3) TechnoTrend (SAA7146 based) (4)
Micronas (nGene) But none of these cards are out for purchase for the
public as of now, some few sample cards were sold/given by all these
vendors.
Currently, myself is taking a go at it. Ralph is having a nGene. For
testing we have a KNC1 and a Twinhan. We can test with the nGene too.
As far as i heard some people are trying to cut and paste the Windows
code for a minimal Linux DVB-S driver and trying to get an approval from
the vendor (from the ST sample code), but the problem is that the
original code for the DVB-S2 specific parts (It has 2 DSP's builtin, i2c
is really different) is not from ST itself, forgetting about the vendor
itself, but from a 3rd party and hence cannot be cut n' pasted.
But we (myself, Christoph, Andrew and Ralph) are working on it (you
might've seen the math functions, it all goes in there, there are more)
(Other's did help help in fixing various Areas, people who can be
mentioned are Marcel (mws) Sigmund and Julian providing various
feedbacks and bug hunting etc) Most of the things are done, it needs
some fixing here and there due to some bugs.
It has a Silicon Tuner based on the STB6100, hence the earlier
TUNER_RE_FACTORING by Andrew, which additionally took care of the PLL
thing too.
Regarding the Broadcom device, i think there is a driver (genpix) which
has a dst style frontend. But as i looked at the code , i didn't see any
S2 specifics.
Wow, didn't think that so much was there to be fixed ! Thanks for taking
the time to hunt them down. Taking a deep breath now.
Thanks,
Manu
_______________________________________________
linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb