linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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.

  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).