From: Mauro Carvalho Chehab <mchehab@redhat.com>
To: Jarod Wilson <jarod@redhat.com>
Cc: George Spelvin <linux@horizon.com>, linux-input@vger.kernel.org
Subject: Re: Hacking on ati_remote driver
Date: Mon, 27 Sep 2010 13:33:08 -0300 [thread overview]
Message-ID: <4CA0C744.3040006@redhat.com> (raw)
In-Reply-To: <20100927160733.GD32376@redhat.com>
Em 27-09-2010 13:07, Jarod Wilson escreveu:
> On Mon, Sep 27, 2010 at 10:42:19AM -0400, George Spelvin wrote:
>>> IMO, ati_remote.c and ati_remote2.c should be adapted to use the ir-core
>>> (soon to be rc-core) interfaces. I've got remote2 hardware myself, so
>>> doing the conversion for that driver is already on my personal TODO list,
>>> but its a long queue of more important things ahead of it first...
>>
>> Just what I want, more scope creep... I'm not immovably opposed to a
>> larger conversion job, but can you tell me that the ir-core/rc-core
>> layer gives me over the raw input layer?
>
> - Hopefully, a simplified interface, with less code duplication. Quite a
> few remote drivers reimplement the same things over and over. I've not
> actually looked at ati_remote.c to see exactly what its got, but
> ati_remote2.c has some low-level evbit, keybit, __set_bit, etc.,
> manipulations that would mostly disappear w/ir-core, in favor of using
> common shared code.
>
> - Userspace remote-specific manipulation tools in v4l-utils
>
> - Sysfs hooks that reveal its a remote in the first place -- which may be
> of benefit to a userspace daemon, udev loading a new keymap
> automatically, or to media center apps that want to look directly at a
> remote control's input device until such time as X sucks less and will
> pass through keycodes larger than 8-bit.
>
>> I see how there are a bunch
>> of utilities for decoding raw pulse streams, but there's only one
>> RC_DRIVER_SCANCODE driver, imon.c, and even that seems to use the RC6
>> protocol sometimes.
>
> imon is always scancode, but some of the devices can be configured to use
> one device or another. One of them is an RC6A MCE remote. But it still
> does decoding in hardware and passes along scancodes. There's tm6000 in
> staging that is RC_DRIVER_SCANCODE, and I swear more devices under
> drivers/media/ are scancode-only and simply haven't been ported fully over
> to ir-core just yet, but I could be wrong about that.
dib0700 is also scancode only, already ported to rc core. Also, partially
ported, we have saa7134 and em28xx drivers (only scancode).
>> Looking at the code leads to a few obvious questions:
>> ir-common.h:
>> Why is the linux keycode u32, when the input layer's
>> key codes are __u16? And why is keypressed an int
>> rather than a bool?
>>
>> And why is the type __u64? It appears top be a bitmap,
>> with about 6 values defined so far...
>
> ir-common.h is going away RSN, this is from an older pre-{ir,rc}-core IR
> layer in the media tree. Its not used by imon, mceusb or streamzap,
> anyway.
The type is to handle the different IR protocols. As it is a bitmap, I
opted to define it as u64, as I was afraid that we might run out of space
with just 32 bits.
>> ir-sysfs.c:
>> Why is store_protocol, which appears to be turning an ASCII
>> string into an ir_type bitmap, documented as "triggered by
>> READING /sys/class/rc/rc?/current_protocol"? Why doesn't that
>> code support the rc6 protocol?
>
> Um... what? I see:
>
> * This routine is a callback routine for changing the IR protocol type.
> * It is trigged by writing to /sys/class/rc/rc?/protocols.
>
> And it definitely supports rc6.
George, you're probably looking at an older implementation.
>> In general, I'm bit confused about what it means to change_protocol
>> to a bitmap with multiple bits set. Are you sure ir_type needs to be
>> a bitmap? The only place I can see its bitmapness actually used is in
>> show_supported_protocols(), and that could be replaced by an array of a
>> few chars or something. (Most devices support only one or two protocols.)
>> Reserving 0 for "end of list" would make the structure initialization
>> simpler.
>
> May or may not need to be a bitmap, I didn't write that part. Mauro may be
> able to shed some light here. Generally, you'll only change_protocol to a
> single proto (that's the case w/imon), but there could be receivers where
> more than one can be enabled simultaneously.
The same bitmap is also used by raw decoders. So, you may enable just a few
protocols. There are some devices with scancodes that are able to handle
more than one protocol at the same time. So, a bitmap is more flexible than
a list of values.
>
>> One thing that would be nice is to have the permissions on the sysfs
>> protocol file depend on the existence of a change_protocol method.
>>
>> Um.. I also notice that change_protocol isn't even supported on
>> non-RC_DRIVER_SCANCODE drivers. Is this all a big kludge invented for
>> the imon driver?
>
> No. It existed before the imon driver. git grep for change_protocol, and
> you'll see its used in a number of places besides imon.c.
This were unified at the newer implementations. From userspace POV, both
raw and non-raw IR's now have the same way to enable/disable protocols.
>> ir-functions.c: Is ir->last_bit actually used for anything? I can't
>> find an assignement to a non-zero value anywhere...
>> Oh, wait, drivers/media/video/cx23885/cx23885-input.c and
>> drivers/media/video/saa7134/saa7134-input.c
>> Does that need to be in the generic structure?
>
> Not sure, haven't ever touched it myself.
>
ir-functions will die as soon as we move all drivers to use rc-core.
Cheers,
Mauro.
next prev parent reply other threads:[~2010-09-27 16:33 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-23 1:27 Hacking on ati_remote driver George Spelvin
2010-09-26 19:22 ` Jarod Wilson
2010-09-27 14:42 ` George Spelvin
2010-09-27 16:07 ` Jarod Wilson
2010-09-27 16:33 ` Mauro Carvalho Chehab [this message]
2010-09-28 19:04 ` George Spelvin
2010-09-28 20:00 ` 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=4CA0C744.3040006@redhat.com \
--to=mchehab@redhat.com \
--cc=jarod@redhat.com \
--cc=linux-input@vger.kernel.org \
--cc=linux@horizon.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;
as well as URLs for NNTP newsgroup(s).