RE: [PATCH] Input: rotary_encoder cleanup

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tuesday, July 07, 2009 11:57 PM, Dmitry Torokhov wrote:
> On Wed, Jul 01, 2009 at 02:45:58PM -0400, H Hartley Sweeten wrote:
>> On Wednesday, July 01, 2009 11:34 AM, Daniel Mack wrote:
>>> On Tue, Jun 30, 2009 at 11:56:36AM -0400, H Hartley Sweeten wrote:
>>>> On Monday, June 29, 2009 7:32 PM, Dmitry Torokhov wrote:
>>>>> Do we know how many encoders we need to have in the system to start
>>>>> seeing the benefits (given that all these conversions increase text
>>>>> size)?
>>>> 
>>>> Hmm.. Didn't think about that. How do you determine the text size?
>>> 
>>> 'objdump -h'?
>> 
>> Thanks.
>> 
>>>> I am trying to work out a clean way to pass an array of encoders
>>>> from the platform init file so that multiple devices can be handled
>>>> by the driver.  That was what prompted the change.
>>> 
>>> Hmm, and then report them all via the very same input device? Or
>>> register one for each encoder? The latter could easily be done by
>>> registering multiple platform_devices with different platform_data,
>>> right?
>> 
>> I suppose each encoder could be registered individually.  Then each
>> would report as a unique input device.  This should work with the
>> driver as it is now.  Then drawback is if there are a number of
>> encoders and a userspace app is opening all of them and doing a
>> EVIOCGRAB it makes the app a bit messy.
>> 
>> I was thinking more or passing an array of encoders to the driver and
>> then having it report all of them as one input device.  That ends up
>> being a lot cleaner.
>>
>
> Hmm, what axis will they be reporting though? Seems like very
> specialized [ab]use if they all share the same input device...

Each encoder reports as a unique axis.  They just all share one input
device.

If two encoders are reporting on the same axis they would have to be
on different input devices.

I was hoping to pass something like this to the rotary_encoder driver
from my platform init:

static struct rotary_encoder_platform_data my_rotary_encoder_info[] = {
	{
		.gpio_a		= GPIO_ROTARY1_A,
		.gpio_b		= GPIO_ROTARY1_B,
		.axis			= REL_X,
		.relative_axis	= true,
	}, {
		.gpio_a		= GPIO_ROTARY2_A,
		.gpio_b		= GPIO_ROTARY2_B,
		.axis			= REL_Y,
		.relative_axis	= true,	
	}, {
		.gpio_a		= GPIO_ROTARY3_A,
		.gpio_b		= GPIO_ROTARY3_B,
		.axis			= REL_Z,
		.relative_axis	= true,	
	}, {
		.gpio_a		= GPIO_ROTARY4_A,
		.gpio_b		= GPIO_ROTARY4_B,
		.axis			= ABS_THROTTLE,
		.steps		= 1024,
		.rollover		= false,
		.relative_axis	= false,
	},
	( 0 }
};

static struct platform_device rotary_encoder_device = {
	.name		= "rotary-encoder",
	.id		= 0,
	.dev		= {
		.platform_data = my_rotary_encoder_info,
	},
};

The rotary_encoder_probe() function would then just loop thru the
plaform_data and OR in either BIT_MASK(EV_REL) or BIT_MASK(EV_ABS)
as appropriate and either set the input->relbit[0] or call
input_set_abs_params() for the axis.

I just need to figure out a way to pass the correct cookie to the
irq function so that the right axis is processed.

Does this sound resonable?

Regards,
Hartley

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux