linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab@redhat.com>
To: Andreas Oberritter <obi@linuxtv.org>
Cc: Antti Palosaari <crope@iki.fi>,
	Ralph Metzler <rjkm@metzlerbros.de>,
	linux-media@vger.kernel.org
Subject: Re: [PATCH 0/5] Driver support for cards based on Digital Devices bridge (ddbridge)
Date: Sat, 16 Jul 2011 21:56:36 -0300	[thread overview]
Message-ID: <4E223344.1080109@redhat.com> (raw)
In-Reply-To: <4E21B3EC.9060709@linuxtv.org>

Em 16-07-2011 12:53, Andreas Oberritter escreveu:
> On 16.07.2011 17:44, Antti Palosaari wrote:
>> On 07/16/2011 06:40 PM, Andreas Oberritter wrote:
>>> On 16.07.2011 16:54, Mauro Carvalho Chehab wrote:
>>>> Em 16-07-2011 11:16, Antti Palosaari escreveu:
>>>>> On 07/16/2011 03:25 PM, Mauro Carvalho Chehab wrote:
>>>>>> Em 15-07-2011 20:41, Antti Palosaari escreveu:
>>>>>>> On 07/15/2011 08:01 PM, Andreas Oberritter wrote:
>>>>>>>> On 15.07.2011 15:25, Mauro Carvalho Chehab wrote:
>>>>>>>>> Em 15-07-2011 05:26, Ralph Metzler escreveu:
>>>>>>>>>> At the same time I want to add delivery system properties to
>>>>>>>>>> support everything in one frontend device.
>>>>>>>>>> Adding a parameter to select C or T as default should help in most
>>>>>>>>>> cases where the application does not support switching yet.
>>>>>>>>>
>>>>>>>>> If I understood well, creating a multi-delivery type of frontend
>>>>>>>>> for
>>>>>>>>> devices like DRX-K makes sense for me.
>>>>>>>>>
>>>>>>>>> We need to take some care about how to add support for them, to
>>>>>>>>> avoid
>>>>>>>>> breaking userspace, or to follow kernel deprecating rules, by
>>>>>>>>> adding
>>>>>>>>> some legacy compatibility glue for a few kernel versions. So,
>>>>>>>>> the sooner
>>>>>>>>> we add such support, the better, as less drivers will need to
>>>>>>>>> support
>>>>>>>>> a "fallback" mechanism.
>>>>>>>>>
>>>>>>>>> The current DVB version 5 API doesn't prevent some userspace
>>>>>>>>> application
>>>>>>>>> to change the delivery system[1] for a given frontend. This
>>>>>>>>> feature is
>>>>>>>>> actually used by DVB-T2 and DVB-S2 drivers. This actually
>>>>>>>>> improved the
>>>>>>>>> DVB API multi-fe support, by avoiding the need of create of a
>>>>>>>>> secondary
>>>>>>>>> frontend for T2/S2.
>>>>>>>>>
>>>>>>>>> Userspace applications can detect that feature by using
>>>>>>>>> FE_CAN_2G_MODULATION
>>>>>>>>> flag, but this mechanism doesn't allow other types of changes like
>>>>>>>>> from/to DVB-T/DVB-C or from/to DVB-T/ISDB-T. So, drivers that
>>>>>>>>> allow such
>>>>>>>>> type of delivery system switch, using the same chip ended by
>>>>>>>>> needing to
>>>>>>>>> add two frontends.
>>>>>>>>>
>>>>>>>>> Maybe we can add a generic FE_CAN_MULTI_DELIVERY flag to
>>>>>>>>> fe_caps_t, and
>>>>>>>>> add a way to query the type of delivery systems supported by a
>>>>>>>>> driver.
>>>>>>>>>
>>>>>>>>> [1]
>>>>>>>>> http://linuxtv.org/downloads/v4l-dvb-apis/FE_GET_SET_PROPERTY.html#DTV-DELIVERY-SYSTEM
>>>>>>>>>
>>>>>>>>
>>>>>>>> I don't think it's necessary to add a new flag. It should be
>>>>>>>> sufficient
>>>>>>>> to add a property like "DTV_SUPPORTED_DELIVERY_SYSTEMS", which
>>>>>>>> should be
>>>>>>>> read-only and return an array of type fe_delivery_system_t.
>>>>>>>>
>>>>>>>> Querying this new property on present kernels hopefully fails with a
>>>>>>>> non-zero return code. in which case FE_GET_INFO should be used to
>>>>>>>> query
>>>>>>>> the delivery system.
>>>>>>>>
>>>>>>>> In future kernels we can provide a default implementation, returning
>>>>>>>> exactly one fe_delivery_system_t for unported drivers. Other drivers
>>>>>>>> should be able to override this default implementation in their
>>>>>>>> get_property callback.
>>>>>>>
>>>>>>> One thing I want to say is that consider about devices which does
>>>>>>> have MFE using two different *physical* demods, not integrated to
>>>>>>> same silicon.
>>>>>>>
>>>>>>> If you add such FE delsys switch mechanism it needs some more glue
>>>>>>> to bind two physical FEs to one virtual FE. I see much easier to
>>>>>>> keep all FEs as own - just register those under the same adapter
>>>>>>> if FEs are shared.
>>>>>>
>>>>>> In this case, the driver should just create two frontends, as
>>>>>> currently.
>>>>>>
>>>>>> There's a difference when there are two physical FE's and just one FE:
>>>>>> with 2 FE's, the userspace application can just keep both opened at
>>>>>> the same time. Some applications (like vdr) assumes that all multi-fe
>>>>>> are like that.
>>>>>
>>>>> Does this mean demod is not sleeping (.init() called)?
>>>>>
>>>>>> When there's just a single FE, but the driver needs to "fork" it in
>>>>>> two
>>>>>> due to the API troubles, the driver needs to prevent the usage of both
>>>>>> fe's, either at open or at the ioctl level. So, applications like vdr
>>>>>> will only use the first frontend.
>>>>>
>>>>> Lets take example. There is shared MFE having DVB-S, DVB-T and
>>>>> DVB-C. DVB-T and DVB-C are integrated to one chip whilst DVB-S have
>>>>> own.
> 
> One remark: In my previous mail I assumed that in your example DVB-S and
> either DVB-C or DVB-T can be tuned simultaneously, i.e. there are two
> antenna connectors and two tuners in addition to the two demod chips. If
> this assumtion was wrong, then of course approach 2 is the sane one, not
> approach 3.
> 
>>>>> Currently it will shown as:
>>>>
>>>> Let me name the approaches:
>>>>
>>>> Approach 1)
>>>>> * adapter0
>>>>> ** frontend0 (DVB-S)
>>>>> ** frontend1 (DVB-T)
>>>>> ** frontend2 (DVB-C)
>>>>
>>>> Approach 2)
>>>>> Your new "ideal" solution will be:
>>>>> * adapter0
>>>>> ** frontend0 (DVB-S/T/C)
>>>>
>>>> Approach 3)
>>>>> What really happens (mixed old and new):
>>>>> * adapter0
>>>>> ** frontend0 (DVB-S)
>>>>> ** frontend1 (DVB-T/C)
>>>>
>>>> What I've said before is that approach 3 is the "ideal" solution.
>>>>
>>>>> It does not look very good to offer this kind of mixed solution,
>>>>> since it is possible to offer only one solution for userspace, new
>>>>> or old, but not mixing.
>>>>
>>>> Good point.
>>>>
>>>> There's an additional aspect to handle: if a driver that uses
>>>> approach 1, a conversion
>>>> to either approach 2 or 3 would break existing applications that
>>>> can't handle with
>>>> the new approach.
>>>>
>>>> There's a 4th posibility: always offering fe0 with MFE capabilities,
>>>> and creating additional fe's
>>>> for old applications that can't cope with the new mode.
>>>> For example, on a device that supports
>>>> DVB-S/DVB-S2/DVB-T/DVB-T2/DVB-C/ISDB-T, it will be shown as:
>>>>
>>>> Approach 4) fe0 is a frontend "superset"
>>>>
>>>> *adapter0
>>>> *frontend0 (DVB-S/DVB-S2/DVB-T/DVB-T2/DVB-C/ISDB-T) - aka: FE superset
>>>> *frontend1 (DVB-S/DVB-S2)
>>>> *frontend2 (DVB-T/DVB-T2)
>>>> *frontend3 (DVB-C)
>>>> *frontend4 (ISDB-T)
>>>>
>>>> fe0 will need some special logic to allow redirecting a FE call to
>>>> the right fe, if
>>>> there are more than one physical frontend bound into the FE API.
>>>>
>>>> I'm starting to think that (4) is the better approach, as it won't
>>>> break legacy
>>>> applications, and it will provide an easier way for new applications
>>>> to control
>>>> the frontend with just one frontend.
>>>
>>> Approach 4 would break existing applications, because suddenly they'd
>>> have to cope with an additional device. It would be impossible for an
>>> existing application to tell whether frontend0 (from your example) was a
>>> real device or not.
>>>
>>> Approach 2 doesn't make any sense to me.
>>
>> I like approach 1 since it is very simple interface.

Yes: approach 1 has a simple interface. The only issue on that is that it is
not possible to know if fe0 and fe1 can be used simultaneously, or if they're
mutually exclusive. Several userspace applications currently don't work on that
scenario, where the frontends are mutually exclusive.

So, if we're going to use approach 1, we need to properly document that applications
should be prepared for that scenario, and, maybe, adding some way for userspace
to detect frontend "groups".

>> Secondly I like
>> approach 2. I think that more API issue than technical.

Approach 2 limits the usage of two simultaneous fe, when they're not
mutually exclusive. Not sure if this is actually a problem.

>>> The only sane approach is 3, because it creates one device node per
>>> demod chip.
>> As Ralph already suggested, an easy way to not break
>>> applications is to add a module parameter which selects the default mode
>>> (DVB-C or DVB-T in Antti's example). One could also write a small
>>> command line application to switch modes independently from VDR et al.

There are two issues with this approach:
	- not breaking existing applications;
	- makes life harder for userspace, as they'll need to support
multiple frontends and the delivery system switch.

Ralph suggestion may help to solve the backport issue. Userspace applications
that support DVB-T2/DVB-S2 already support delivery system switch.

So, approach 3 seems feasible for me.

>>> After all, you cannot connect both a DVB-C cable and a DVB-T antenna at
>>> the same time, so the vast majority of users won't ever want to switch
>>> modes at all.

>> You are wrong, actually you can. At least here in Finland some cable
>> networks offers DVB-T too.

As Antti and Rémi pointed, there are issues with some cable operators. Not sure
how critical is that, but an userspace application changing it via sysfs might
work while the applications are not ported to support both ways.

Antti/Rémi, how the current applications work with one physical frontend supporting
both DVB-T and DVB-C? Do they allow to change channels from one to the other mode
on a transparent way?

Cheers,
Mauro

  parent reply	other threads:[~2011-07-17  0:56 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-03 21:21 [PATCH 0/5] Driver support for cards based on Digital Devices bridge (ddbridge) Oliver Endriss
2011-07-03 21:23 ` PATCH 1/5] ddbridge: Initial check-in Oliver Endriss
2011-07-03 21:24 ` [PATCH 2/5] ddbridge: Codingstyle fixes Oliver Endriss
2011-07-03 21:25 ` [PATCH 3/5] ddbridge: Allow compiling of the driver Oliver Endriss
2011-07-03 21:26 ` [PATCH 4/5] cxd2099: Fix compilation of ngene/ddbridge for DVB_CXD2099=n Oliver Endriss
2011-07-04 10:14   ` Bjørn Mork
2011-07-03 21:27 ` [PATCH 5/5] cxd2099: Update Kconfig description (ddbridge support) Oliver Endriss
2011-07-04  0:06   ` Walter Van Eetvelt
2011-07-03 22:27 ` [PATCH 0/5] Driver support for cards based on Digital Devices bridge (ddbridge) Mauro Carvalho Chehab
2011-07-03 23:24   ` Oliver Endriss
2011-07-04  0:17     ` Mauro Carvalho Chehab
2011-07-14 23:45       ` Oliver Endriss
2011-07-15  0:47         ` Mauro Carvalho Chehab
2011-07-15  2:11           ` Oliver Endriss
2011-07-15  4:01             ` Mauro Carvalho Chehab
2011-07-15  3:56           ` Mauro Carvalho Chehab
2011-07-15  5:17             ` Oliver Endriss
2011-07-15  8:26               ` Ralph Metzler
2011-07-15 13:25                 ` Mauro Carvalho Chehab
2011-07-15 17:01                   ` Andreas Oberritter
2011-07-15 17:34                     ` Mauro Carvalho Chehab
2011-07-15 23:41                     ` Antti Palosaari
2011-07-16 12:25                       ` Mauro Carvalho Chehab
2011-07-16 14:16                         ` Antti Palosaari
2011-07-16 14:54                           ` Mauro Carvalho Chehab
2011-07-16 15:40                             ` Andreas Oberritter
2011-07-16 15:44                               ` Antti Palosaari
2011-07-16 15:53                                 ` Andreas Oberritter
2011-07-16 15:59                                   ` Antti Palosaari
2011-07-16 16:37                                   ` Rémi Denis-Courmont
2011-07-17  2:51                                     ` Andreas Oberritter
2011-07-17  7:51                                       ` Rémi Denis-Courmont
2011-07-17  0:56                                   ` Mauro Carvalho Chehab [this message]
2011-07-17  3:02                                     ` Andreas Oberritter
2011-07-17  3:59                                       ` Mauro Carvalho Chehab
2011-07-17  7:39                                     ` Rémi Denis-Courmont
2011-07-17  8:01                                       ` Mauro Carvalho Chehab
2011-07-17  1:07                                 ` Mauro Carvalho Chehab
2011-07-16 15:40                             ` Oliver Endriss
2011-11-03  7:49                               ` Steffen Barszus
2011-11-03 17:24                                 ` Lars Hanisch
2011-07-15  4:18         ` Mauro Carvalho Chehab
2011-07-15  5:21           ` Oliver Endriss
2011-07-15 12:40             ` Mauro Carvalho Chehab
2011-07-17 11:44               ` Oliver Endriss

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E223344.1080109@redhat.com \
    --to=mchehab@redhat.com \
    --cc=crope@iki.fi \
    --cc=linux-media@vger.kernel.org \
    --cc=obi@linuxtv.org \
    --cc=rjkm@metzlerbros.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).