From: Antti Palosaari <crope@iki.fi>
To: Manu Abraham <abraham.manu@gmail.com>
Cc: Andreas Oberritter <obi@linuxtv.org>,
Linux Media Mailing List <linux-media@vger.kernel.org>
Subject: Re: v4 [PATCH 09/10] CXD2820r: Query DVB frontend delivery capabilities
Date: Mon, 12 Dec 2011 15:41:20 +0200 [thread overview]
Message-ID: <4EE60480.9050006@iki.fi> (raw)
In-Reply-To: <CAHFNz9+e-9D+a9DcAHSaDjQW1j8=XHcdxnW6Bjm2RPtQkFd-OQ@mail.gmail.com>
On 12/12/2011 02:55 PM, Manu Abraham wrote:
> On Mon, Dec 12, 2011 at 6:13 PM, Andreas Oberritter<obi@linuxtv.org> wrote:
>> On 12.12.2011 05:28, Manu Abraham wrote:
>>> On Sat, Dec 10, 2011 at 5:17 PM, Antti Palosaari<crope@iki.fi> wrote:
>>>> On 12/10/2011 06:44 AM, Manu Abraham wrote:
>>>>>
>>>>> static int cxd2820r_set_frontend(struct dvb_frontend *fe,
>>>>
>>>> [...]
>>>>>
>>>>> + switch (c->delivery_system) {
>>>>> + case SYS_DVBT:
>>>>> + ret = cxd2820r_init_t(fe);
>>>>
>>>>
>>>>> + ret = cxd2820r_set_frontend_t(fe, p);
>>>>
>>>>
>>>>
>>>> Anyhow, I don't now like idea you have put .init() calls to .set_frontend().
>>>> Could you move .init() happen in .init() callback as it was earlier?
>>>
>>> This was there in the earlier patch as well. Maybe you have a
>>> new issue now ? ;-)
You mean I didn't mentioned it when you send first version? Sorry, I
didn't looked it very carefully since I first meet stuff that was not
related whole thing, I mean there was that code changing from
.set_params() to .set_state(). And I stopped reading rest of the patch.
>>>
>>> ok.
>>>
>>> The argument what you make doesn't hold well, Why ?
>>>
>>> int cxd2820r_init_t(struct dvb_frontend *fe)
>>> {
>>> ret = cxd2820r_wr_reg(priv, 0x00085, 0x07);
>>> }
>>>
>>>
>>> int cxd2820r_init_c(struct dvb_frontend *fe)
>>> {
>>> ret = cxd2820r_wr_reg(priv, 0x00085, 0x07);
>>> }
>>>
>>>
>>> Now, you might like to point that, the Base I2C address location
>>> is different comparing DVB-T/DVBT2 to DVB-C
>>>
>>> So, If you have the init as in earlier with a common init, then you
>>> will likely init the wrong device at .init(), as init is called open().
>>> So, this might result in an additional register write, which could
>>> be avoided altogether. One register access is not definitely
>>> something to brag about, but is definitely a small incremental
>>> difference. Other than that this register write doesn't do anything
>>> more than an ADC_START. So starting the ADC at init doesn't
>>> make sense. But does so when you want to select the right ADC.
>>> So definitely, this change is an improvement. Also, you can
>>> compare the time taken for the device to tune now. It is quite
>>> a lot faster compared to without this patch. So you or any other
>>> user should be happy. :-)
>>>
>>>
>>> I don't think that in any way, the init should be used at init as
>>> you say, which sounds pretty much incorrect.
>>
>> Maybe the function names should be modified to avoid confusion with the
>> init driver callback.
>
>
> On another tangential thought, Is it really worth to wrap that single
> register write with another function name ?
>
> instead of the current usage; ie,
>
> ret = cxd2820r_wr_reg(priv, 0x00085, 0x07); /* Start ADC */
>
> within set_frontend()
>
> in set_frontend(), another thing that's wrapped up similarly is
> the set_frontend() within the search() callback, which causes
> another set of confusions within the driver.
Actually there was was a lot more code first but because I ran problems
selsys needed for T/T2 init was not known at the time .init() was called
I moved those set_frontend. I left that in a hope I can later fix
properly adding more stuff back to init.
That is not functionality issue, it is issue about naming callbacks and
what is functionality of each callback.
As for these days it have been in my understanding initialization stuff
are done in .init() and leave as less as possible code to
.set_frontend(). Leaving set_frontend() handle only tuning requests and
reconfigure IF control etc. And if you look most demod drivers there is
rather similar logic used.
So I would like to ask what is meaning of:
.attach()
* create FE
* no HW init
* as less as possible HW I/O, mainly reading chip ID and nothing more
.init()
* do nothing here?
* download firmware?
.set_frontend()
* program tuner
* init demod?
* tune demod
* download firmware?
.sleep()
* put device sleep mode
* powersave
After all it is just fine for me apply that patch, but I would like to
get clear idea what is meaning of every single callback we have. And if
we really end up .init() is not needed and all should be put to
.set_frontend() when possible it means I have to change all my demod
drivers and maybe tuner drivers too.
regards
Antti
--
http://palosaari.fi/
next prev parent reply other threads:[~2011-12-12 13:41 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-10 4:44 v4 [PATCH 09/10] CXD2820r: Query DVB frontend delivery capabilities Manu Abraham
2011-12-10 11:47 ` Antti Palosaari
2011-12-10 12:47 ` Mauro Carvalho Chehab
2011-12-10 13:09 ` Antti Palosaari
2011-12-10 13:18 ` Mauro Carvalho Chehab
2011-12-12 4:28 ` Manu Abraham
2011-12-12 12:43 ` Andreas Oberritter
2011-12-12 12:55 ` Manu Abraham
2011-12-12 13:41 ` Antti Palosaari [this message]
2011-12-12 13:57 ` Manu Abraham
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=4EE60480.9050006@iki.fi \
--to=crope@iki.fi \
--cc=abraham.manu@gmail.com \
--cc=linux-media@vger.kernel.org \
--cc=obi@linuxtv.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.