From: Andy Walls <awalls@md.metrocast.net>
To: Mauro Carvalho Chehab <mchehab@redhat.com>
Cc: Linux Media Mailing List <linux-media@vger.kernel.org>
Subject: Re: [PATCH 0/8] Fix V4L/DVB/RC warnings
Date: Tue, 28 Dec 2010 17:18:11 -0500 [thread overview]
Message-ID: <1293574691.7187.6.camel@localhost> (raw)
In-Reply-To: <4D19F809.3010409@redhat.com>
On Tue, 2010-12-28 at 12:45 -0200, Mauro Carvalho Chehab wrote:
> Em 28-12-2010 12:14, Andy Walls escreveu:
> > On Tue, 2010-12-28 at 01:12 -0200, Mauro Carvalho Chehab wrote:
> >> Em 27-12-2010 21:55, Andy Walls escreveu:
> >>> I have hardware for lirc_zilog. I can look later this week.
> >>
> >> That would be great!
> >
> > It shouldn't be hard to fix up the lirc_zilog.c use of adap->id but it
> > may require a change to the hdpvr driver as well.
> >
> > As I was looking, I noticed this commit is incomplete:
> >
> > http://git.linuxtv.org/media_tree.git?a=commitdiff;h=07cc65d4f4a21a104269ff7e4e7be42bd26d7acb
> >
> > The "goto" was missed in the conditional compilation for the HD-PVR:
> >
> > http://git.linuxtv.org/media_tree.git?a=blob;f=drivers/staging/lirc/lirc_zilog.c;h=f0076eb025f1a0e9d412080caab87f627dda4970#l844
> >
> > You might want to revert the trivial commit that removed the "done:"
> > label. When I clean up the dependence on adap->id, I may need the
> > "done:" label back again.
> >
> >
> Argh! this is not a very nice code at all...
>
> I think that the proper way is to apply the enclosed patch. After having it
> fixed, the dont_wait parameter can be passed to the driver via platform_data.
> So, we should add a field at struct IR for it.
Well there is one more exception in lirc_zilog for the HD-PVR that also
relies on adapter->id.
lirc_zilog only handles Hauppauge adapters with that Z8 microcontroller
(PVR-150's, HVR-1600's, etc.) and the HD-PVR is the only device that
requires these quirky exceptions AFAIK.
It's probably better just to let lirc_zilog cleanly know it is dealing
with an HD-PVR and let it handle. I'm working on it this evening and
will post something soon.
Regards,
Andy
> Cheers,
> Mauro
>
> lirc_zilog: Fix the TX logic for hd-pvr
>
> The dont_wait parameter should be passed to the driver via platform_data, in order
> to allow removing the usage of the legacy i2c_adapter.id field.
>
> So, we should add a field at struct IR for it.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
>
> diff --git a/drivers/staging/lirc/lirc_zilog.c b/drivers/staging/lirc/lirc_zilog.c
> index 52be6de..8486b66 100644
> --- a/drivers/staging/lirc/lirc_zilog.c
> +++ b/drivers/staging/lirc/lirc_zilog.c
> @@ -88,6 +88,7 @@ struct IR {
> struct i2c_client c_tx;
> int need_boot;
> int have_tx;
> + bool dont_wait;
> };
>
> /* Minor -> data mapping */
> @@ -841,46 +842,43 @@ static int send_code(struct IR *ir, unsigned int code, unsigned int key)
> return ret < 0 ? ret : -EFAULT;
> }
>
> -#ifdef I2C_HW_B_HDPVR
> /*
> * The sleep bits aren't necessary on the HD PVR, and in fact, the
> * last i2c_master_recv always fails with a -5, so for now, we're
> * going to skip this whole mess and say we're done on the HD PVR
> */
> - if (ir->c_rx.adapter->id == I2C_HW_B_HDPVR)
> - goto done;
> -#endif
> -
> - /*
> - * This bit NAKs until the device is ready, so we retry it
> - * sleeping a bit each time. This seems to be what the windows
> - * driver does, approximately.
> - * Try for up to 1s.
> - */
> - for (i = 0; i < 20; ++i) {
> - set_current_state(TASK_UNINTERRUPTIBLE);
> - schedule_timeout((50 * HZ + 999) / 1000);
> - ret = i2c_master_send(&ir->c_tx, buf, 1);
> - if (ret == 1)
> - break;
> - dprintk("NAK expected: i2c_master_send "
> - "failed with %d (try %d)\n", ret, i+1);
> - }
> - if (ret != 1) {
> - zilog_error("IR TX chip never got ready: last i2c_master_send "
> - "failed with %d\n", ret);
> - return ret < 0 ? ret : -EFAULT;
> - }
> + if (!ir->dont_wait) {
> + /*
> + * This bit NAKs until the device is ready, so we retry it
> + * sleeping a bit each time. This seems to be what the
> + * windows driver does, approximately.
> + * Try for up to 1s.
> + */
> + for (i = 0; i < 20; ++i) {
> + set_current_state(TASK_UNINTERRUPTIBLE);
> + schedule_timeout((50 * HZ + 999) / 1000);
> + ret = i2c_master_send(&ir->c_tx, buf, 1);
> + if (ret == 1)
> + break;
> + dprintk("NAK expected: i2c_master_send "
> + "failed with %d (try %d)\n", ret, i+1);
> + }
> + if (ret != 1) {
> + zilog_error("IR TX chip never got ready: last i2c_master_send "
> + "failed with %d\n", ret);
> + return ret < 0 ? ret : -EFAULT;
> + }
>
> - /* Seems to be an 'ok' response */
> - i = i2c_master_recv(&ir->c_tx, buf, 1);
> - if (i != 1) {
> - zilog_error("i2c_master_recv failed with %d\n", ret);
> - return -EFAULT;
> - }
> - if (buf[0] != 0x80) {
> - zilog_error("unexpected IR TX response #2: %02x\n", buf[0]);
> - return -EFAULT;
> + /* Seems to be an 'ok' response */
> + i = i2c_master_recv(&ir->c_tx, buf, 1);
> + if (i != 1) {
> + zilog_error("i2c_master_recv failed with %d\n", ret);
> + return -EFAULT;
> + }
> + if (buf[0] != 0x80) {
> + zilog_error("unexpected IR TX response #2: %02x\n", buf[0]);
> + return -EFAULT;
> + }
> }
>
> /* Oh good, it worked */
> @@ -1278,6 +1276,11 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
> strlcpy(ir->c_tx.name, ZILOG_HAUPPAUGE_IR_TX_NAME,
> I2C_NAME_SIZE);
> ir->have_tx = 1;
> +
> +#ifdef I2C_HW_B_HDPVR
> + if (ir->c_rx.adapter->id == I2C_HW_B_HDPVR)
> + ir->dont_wait = true;
> +#endif
> }
>
> /* set lirc_dev stuff */
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2010-12-29 1:37 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-27 23:55 [PATCH 0/8] Fix V4L/DVB/RC warnings Andy Walls
2010-12-28 3:12 ` Mauro Carvalho Chehab
2010-12-28 14:14 ` Andy Walls
2010-12-28 14:45 ` Mauro Carvalho Chehab
2010-12-28 22:18 ` Andy Walls [this message]
2011-01-06 21:54 ` Jarod Wilson
-- strict thread matches above, loose matches on Subject: below --
2010-12-27 16:22 Mauro Carvalho Chehab
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=1293574691.7187.6.camel@localhost \
--to=awalls@md.metrocast.net \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@redhat.com \
/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