From: Brad Love <brad@nextdimension.cc>
To: Sean Young <sean@mess.org>, Brad Love <brad@nextdimension.cc>
Cc: linux-media@vger.kernel.org
Subject: Re: [PATCH v4 2/4] pvrusb2: Add multiple dvb frontend support
Date: Mon, 8 Apr 2019 13:16:59 -0500 [thread overview]
Message-ID: <8ed77b40-2776-2f57-4e8e-1f56d01a82cf@nextdimension.cc> (raw)
In-Reply-To: <20190405100051.tfarb3rpy6cf7dvt@gofer.mess.org>
On 05/04/2019 05.00, Sean Young wrote:
> On Wed, Feb 27, 2019 at 01:16:04PM -0600, Brad Love wrote:
>> All changes are equivalent and backwards compatible.
>> All current devices have been changed to use fe[0]
>> Cleanup has been added to dvb init to support cleanup after failure.
> Just very minor note. Here you are adding suppport for 2 frontends, but
> you're not explaining why. I would add something like "This is to add support
> for Hauppauge HVR1955/1975 devices which will be done in a later commit",
> to the commit message. Alternatively you could merge the two commits.
Hi Sean,
I'll add a note to the commit message. Combining the commits seems
bizarre and contrary to "one issue in a commit."
Regards,
Brad
>
> Sean
>
>> Signed-off-by: Brad Love <brad@nextdimension.cc>
>> ---
>> No changes
>>
>> drivers/media/usb/pvrusb2/pvrusb2-devattr.c | 36 +++++++-------
>> drivers/media/usb/pvrusb2/pvrusb2-dvb.c | 77 ++++++++++++++++++++++-------
>> drivers/media/usb/pvrusb2/pvrusb2-dvb.h | 2 +-
>> 3 files changed, 77 insertions(+), 38 deletions(-)
>>
>> diff --git a/drivers/media/usb/pvrusb2/pvrusb2-devattr.c b/drivers/media/usb/pvrusb2/pvrusb2-devattr.c
>> index 06de1c8..ef36b62 100644
>> --- a/drivers/media/usb/pvrusb2/pvrusb2-devattr.c
>> +++ b/drivers/media/usb/pvrusb2/pvrusb2-devattr.c
>> @@ -188,10 +188,10 @@ static struct lgdt330x_config pvr2_lgdt3303_config = {
>>
>> static int pvr2_lgdt3303_attach(struct pvr2_dvb_adapter *adap)
>> {
>> - adap->fe = dvb_attach(lgdt330x_attach, &pvr2_lgdt3303_config,
>> - 0x0e,
>> - &adap->channel.hdw->i2c_adap);
>> - if (adap->fe)
>> + adap->fe[0] = dvb_attach(lgdt330x_attach, &pvr2_lgdt3303_config,
>> + 0x0e,
>> + &adap->channel.hdw->i2c_adap);
>> + if (adap->fe[0])
>> return 0;
>>
>> return -EIO;
>> @@ -199,7 +199,7 @@ static int pvr2_lgdt3303_attach(struct pvr2_dvb_adapter *adap)
>>
>> static int pvr2_lgh06xf_attach(struct pvr2_dvb_adapter *adap)
>> {
>> - dvb_attach(simple_tuner_attach, adap->fe,
>> + dvb_attach(simple_tuner_attach, adap->fe[0],
>> &adap->channel.hdw->i2c_adap, 0x61,
>> TUNER_LG_TDVS_H06XF);
>>
>> @@ -248,10 +248,10 @@ static struct lgdt330x_config pvr2_lgdt3302_config = {
>>
>> static int pvr2_lgdt3302_attach(struct pvr2_dvb_adapter *adap)
>> {
>> - adap->fe = dvb_attach(lgdt330x_attach, &pvr2_lgdt3302_config,
>> + adap->fe[0] = dvb_attach(lgdt330x_attach, &pvr2_lgdt3302_config,
>> 0x0e,
>> &adap->channel.hdw->i2c_adap);
>> - if (adap->fe)
>> + if (adap->fe[0])
>> return 0;
>>
>> return -EIO;
>> @@ -259,7 +259,7 @@ static int pvr2_lgdt3302_attach(struct pvr2_dvb_adapter *adap)
>>
>> static int pvr2_fcv1236d_attach(struct pvr2_dvb_adapter *adap)
>> {
>> - dvb_attach(simple_tuner_attach, adap->fe,
>> + dvb_attach(simple_tuner_attach, adap->fe[0],
>> &adap->channel.hdw->i2c_adap, 0x61,
>> TUNER_PHILIPS_FCV1236D);
>>
>> @@ -335,9 +335,9 @@ static struct tda18271_config hauppauge_tda18271_dvb_config = {
>>
>> static int pvr2_tda10048_attach(struct pvr2_dvb_adapter *adap)
>> {
>> - adap->fe = dvb_attach(tda10048_attach, &hauppauge_tda10048_config,
>> + adap->fe[0] = dvb_attach(tda10048_attach, &hauppauge_tda10048_config,
>> &adap->channel.hdw->i2c_adap);
>> - if (adap->fe)
>> + if (adap->fe[0])
>> return 0;
>>
>> return -EIO;
>> @@ -345,10 +345,10 @@ static int pvr2_tda10048_attach(struct pvr2_dvb_adapter *adap)
>>
>> static int pvr2_73xxx_tda18271_8295_attach(struct pvr2_dvb_adapter *adap)
>> {
>> - dvb_attach(tda829x_attach, adap->fe,
>> + dvb_attach(tda829x_attach, adap->fe[0],
>> &adap->channel.hdw->i2c_adap, 0x42,
>> &tda829x_no_probe);
>> - dvb_attach(tda18271_attach, adap->fe, 0x60,
>> + dvb_attach(tda18271_attach, adap->fe[0], 0x60,
>> &adap->channel.hdw->i2c_adap,
>> &hauppauge_tda18271_dvb_config);
>>
>> @@ -433,9 +433,9 @@ static struct tda18271_config hauppauge_tda18271_config = {
>>
>> static int pvr2_s5h1409_attach(struct pvr2_dvb_adapter *adap)
>> {
>> - adap->fe = dvb_attach(s5h1409_attach, &pvr2_s5h1409_config,
>> + adap->fe[0] = dvb_attach(s5h1409_attach, &pvr2_s5h1409_config,
>> &adap->channel.hdw->i2c_adap);
>> - if (adap->fe)
>> + if (adap->fe[0])
>> return 0;
>>
>> return -EIO;
>> @@ -443,9 +443,9 @@ static int pvr2_s5h1409_attach(struct pvr2_dvb_adapter *adap)
>>
>> static int pvr2_s5h1411_attach(struct pvr2_dvb_adapter *adap)
>> {
>> - adap->fe = dvb_attach(s5h1411_attach, &pvr2_s5h1411_config,
>> + adap->fe[0] = dvb_attach(s5h1411_attach, &pvr2_s5h1411_config,
>> &adap->channel.hdw->i2c_adap);
>> - if (adap->fe)
>> + if (adap->fe[0])
>> return 0;
>>
>> return -EIO;
>> @@ -453,10 +453,10 @@ static int pvr2_s5h1411_attach(struct pvr2_dvb_adapter *adap)
>>
>> static int pvr2_tda18271_8295_attach(struct pvr2_dvb_adapter *adap)
>> {
>> - dvb_attach(tda829x_attach, adap->fe,
>> + dvb_attach(tda829x_attach, adap->fe[0],
>> &adap->channel.hdw->i2c_adap, 0x42,
>> &tda829x_no_probe);
>> - dvb_attach(tda18271_attach, adap->fe, 0x60,
>> + dvb_attach(tda18271_attach, adap->fe[0], 0x60,
>> &adap->channel.hdw->i2c_adap,
>> &hauppauge_tda18271_config);
>>
>> diff --git a/drivers/media/usb/pvrusb2/pvrusb2-dvb.c b/drivers/media/usb/pvrusb2/pvrusb2-dvb.c
>> index 4b32b21..cb5586b 100644
>> --- a/drivers/media/usb/pvrusb2/pvrusb2-dvb.c
>> +++ b/drivers/media/usb/pvrusb2/pvrusb2-dvb.c
>> @@ -343,26 +343,19 @@ static int pvr2_dvb_frontend_init(struct pvr2_dvb_adapter *adap)
>> goto done;
>> }
>>
>> - if ((dvb_props->frontend_attach(adap) == 0) && (adap->fe)) {
>> -
>> - if (dvb_register_frontend(&adap->dvb_adap, adap->fe)) {
>> + if (dvb_props->frontend_attach(adap) == 0 && adap->fe[0]) {
>> + if (dvb_register_frontend(&adap->dvb_adap, adap->fe[0])) {
>> pvr2_trace(PVR2_TRACE_ERROR_LEGS,
>> "frontend registration failed!");
>> - dvb_frontend_detach(adap->fe);
>> - adap->fe = NULL;
>> ret = -ENODEV;
>> - goto done;
>> + goto fail_frontend0;
>> }
>> + if (adap->fe[0]->ops.analog_ops.standby)
>> + adap->fe[0]->ops.analog_ops.standby(adap->fe[0]);
>>
>> - if (dvb_props->tuner_attach)
>> - dvb_props->tuner_attach(adap);
>> -
>> - if (adap->fe->ops.analog_ops.standby)
>> - adap->fe->ops.analog_ops.standby(adap->fe);
>> -
>> - /* Ensure all frontends negotiate bus access */
>> - adap->fe->ops.ts_bus_ctrl = pvr2_dvb_bus_ctrl;
>> -
>> + pvr2_trace(PVR2_TRACE_INFO, "transferring fe[%d] ts_bus_ctrl() to pvr2_dvb_bus_ctrl()",
>> + adap->fe[0]->id);
>> + adap->fe[0]->ops.ts_bus_ctrl = pvr2_dvb_bus_ctrl;
>> } else {
>> pvr2_trace(PVR2_TRACE_ERROR_LEGS,
>> "no frontend was attached!");
>> @@ -370,16 +363,62 @@ static int pvr2_dvb_frontend_init(struct pvr2_dvb_adapter *adap)
>> return ret;
>> }
>>
>> - done:
>> + if (dvb_props->tuner_attach && dvb_props->tuner_attach(adap)) {
>> + pvr2_trace(PVR2_TRACE_ERROR_LEGS, "tuner attach failed");
>> + ret = -ENODEV;
>> + goto fail_tuner;
>> + }
>> +
>> + if (adap->fe[1]) {
>> + adap->fe[1]->id = 1;
>> + adap->fe[1]->tuner_priv = adap->fe[0]->tuner_priv;
>> + memcpy(&adap->fe[1]->ops.tuner_ops,
>> + &adap->fe[0]->ops.tuner_ops,
>> + sizeof(struct dvb_tuner_ops));
>> +
>> + if (dvb_register_frontend(&adap->dvb_adap, adap->fe[1])) {
>> + pvr2_trace(PVR2_TRACE_ERROR_LEGS,
>> + "frontend registration failed!");
>> + ret = -ENODEV;
>> + goto fail_frontend1;
>> + }
>> + /* MFE lock */
>> + adap->dvb_adap.mfe_shared = 1;
>> +
>> + if (adap->fe[1]->ops.analog_ops.standby)
>> + adap->fe[1]->ops.analog_ops.standby(adap->fe[1]);
>> +
>> + pvr2_trace(PVR2_TRACE_INFO, "transferring fe[%d] ts_bus_ctrl() to pvr2_dvb_bus_ctrl()",
>> + adap->fe[1]->id);
>> + adap->fe[1]->ops.ts_bus_ctrl = pvr2_dvb_bus_ctrl;
>> + }
>> +done:
>> pvr2_channel_limit_inputs(&adap->channel, 0);
>> return ret;
>> +
>> +fail_frontend1:
>> + dvb_frontend_detach(adap->fe[1]);
>> + adap->fe[1] = NULL;
>> +fail_tuner:
>> + dvb_unregister_frontend(adap->fe[0]);
>> +fail_frontend0:
>> + dvb_frontend_detach(adap->fe[0]);
>> + adap->fe[0] = NULL;
>> +
>> + return ret;
>> }
>>
>> static int pvr2_dvb_frontend_exit(struct pvr2_dvb_adapter *adap)
>> {
>> - if (adap->fe != NULL) {
>> - dvb_unregister_frontend(adap->fe);
>> - dvb_frontend_detach(adap->fe);
>> + if (adap->fe[1]) {
>> + dvb_unregister_frontend(adap->fe[1]);
>> + dvb_frontend_detach(adap->fe[1]);
>> + adap->fe[1] = NULL;
>> + }
>> + if (adap->fe[0]) {
>> + dvb_unregister_frontend(adap->fe[0]);
>> + dvb_frontend_detach(adap->fe[0]);
>> + adap->fe[0] = NULL;
>> }
>> return 0;
>> }
>> diff --git a/drivers/media/usb/pvrusb2/pvrusb2-dvb.h b/drivers/media/usb/pvrusb2/pvrusb2-dvb.h
>> index e7f71fb..91bff57 100644
>> --- a/drivers/media/usb/pvrusb2/pvrusb2-dvb.h
>> +++ b/drivers/media/usb/pvrusb2/pvrusb2-dvb.h
>> @@ -18,7 +18,7 @@ struct pvr2_dvb_adapter {
>> struct dmxdev dmxdev;
>> struct dvb_demux demux;
>> struct dvb_net dvb_net;
>> - struct dvb_frontend *fe;
>> + struct dvb_frontend *fe[2];
>>
>> int feedcount;
>> int max_feed_count;
>> --
>> 2.7.4
next prev parent reply other threads:[~2019-04-08 18:17 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-20 21:57 [PATCH 0/4] Add Hauppauge HVR1955/1975 devices Brad Love
2018-12-20 21:57 ` [PATCH 1/4] si2157: add detection of si2177 tuner Brad Love
2019-01-09 17:36 ` Antti Palosaari
2019-01-15 16:32 ` Brad Love
2019-01-15 17:23 ` Mauro Carvalho Chehab
2018-12-20 21:57 ` [PATCH 2/4] pvrusb2: Add multiple dvb frontend support Brad Love
2018-12-20 21:57 ` [PATCH 3/4] pvrusb2: Add i2c client demod/tuner support Brad Love
2018-12-20 21:57 ` [PATCH 4/4] pvrusb2: Add Hauppauge HVR1955/1975 devices Brad Love
2018-12-21 4:56 ` kbuild test robot
2018-12-21 4:57 ` kbuild test robot
2018-12-21 19:40 ` [PATCH v2 0/4] " Brad Love
2018-12-21 19:40 ` [PATCH v2 1/4] si2157: add detection of si2177 tuner Brad Love
2018-12-21 19:40 ` [PATCH v2 2/4] pvrusb2: Add multiple dvb frontend support Brad Love
2018-12-21 19:40 ` [PATCH v2 3/4] pvrusb2: Add i2c client demod/tuner support Brad Love
2018-12-21 19:40 ` [PATCH v2 4/4] pvrusb2: Add Hauppauge HVR1955/1975 devices Brad Love
2018-12-22 4:42 ` kbuild test robot
2018-12-22 10:04 ` kbuild test robot
2018-12-24 17:00 ` [PATCH v3 0/4] " Brad Love
2018-12-24 17:00 ` [PATCH v3 1/4] si2157: add detection of si2177 tuner Brad Love
2018-12-24 17:00 ` [PATCH v3 2/4] pvrusb2: Add multiple dvb frontend support Brad Love
2018-12-24 17:00 ` [PATCH v3 3/4] pvrusb2: Add i2c client demod/tuner support Brad Love
2018-12-24 17:00 ` [PATCH v3 4/4] pvrusb2: Add Hauppauge HVR1955/1975 devices Brad Love
2019-02-27 19:16 ` [PATCH v4 0/4] " Brad Love
2019-02-27 19:16 ` [PATCH v4 1/4] si2157: add detection of si2177 tuner Brad Love
2019-02-27 19:16 ` [PATCH v4 2/4] pvrusb2: Add multiple dvb frontend support Brad Love
2019-04-05 10:00 ` Sean Young
2019-04-08 18:16 ` Brad Love [this message]
2019-02-27 19:16 ` [PATCH v4 3/4] pvrusb2: Add i2c client demod/tuner support Brad Love
2019-02-27 19:16 ` [PATCH v4 4/4] pvrusb2: Add Hauppauge HVR1955/1975 devices Brad Love
2019-04-05 15:24 ` Sean Young
2019-04-05 15:29 ` Sean Young
2019-04-08 18:01 ` Brad Love
2019-04-08 20:17 ` Sean Young
2019-05-31 17:20 ` Brad Love
2019-05-31 18:25 ` Brad Love
2019-05-31 21:30 ` Sean Young
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=8ed77b40-2776-2f57-4e8e-1f56d01a82cf@nextdimension.cc \
--to=brad@nextdimension.cc \
--cc=linux-media@vger.kernel.org \
--cc=sean@mess.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 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).