On Wed, 04 May 2011 11:56:17 -0300, Mauro Carvalho Chehab
<mche...@redhat.com> wrote:
> Em 28-04-2011 12:13, David Härdeman escreveu:
>> The RC_TYPE_* defines are currently used both where a single protocol
is
>> expected and where a bitmap of protocols is expected. This patch tries
>> to separate the two in preparation for the following patches.
>> 
>> Signed-off-by: David Härdeman <da...@hardeman.nu>
> 
> Most of the patch is just renaming stuff. So, I'm commenting just the
> rc-main.c/rc-map.h changes.
> 
>> diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c
>> index 5b4422e..5a182b2 100644
>> --- a/drivers/media/rc/rc-main.c
>> +++ b/drivers/media/rc/rc-main.c
>> @@ -102,7 +102,7 @@ static struct rc_map_list empty_map = {
>>      .map = {
>>              .scan    = empty,
>>              .size    = ARRAY_SIZE(empty),
>> -            .rc_type = RC_TYPE_UNKNOWN,     /* Legacy IR type */
>> +            .rc_type = RC_BIT_UNKNOWN,      /* Legacy IR type */
>>              .name    = RC_MAP_EMPTY,
>>      }
>>  };
>> @@ -725,14 +725,17 @@ static struct {
>>      u64     type;
>>      char    *name;
>>  } proto_names[] = {
>> -    { RC_TYPE_UNKNOWN,      "unknown"       },
>> -    { RC_TYPE_RC5,          "rc-5"          },
>> -    { RC_TYPE_NEC,          "nec"           },
>> -    { RC_TYPE_RC6,          "rc-6"          },
>> -    { RC_TYPE_JVC,          "jvc"           },
>> -    { RC_TYPE_SONY,         "sony"          },
>> -    { RC_TYPE_RC5_SZ,       "rc-5-sz"       },
>> -    { RC_TYPE_LIRC,         "lirc"          },
>> +    { RC_BIT_OTHER,         "other"         },
>> +    { RC_BIT_RC5,           "rc-5"          },
>> +    { RC_BIT_RC5X,          "rc-5-x"        },
>> +    { RC_BIT_RC5_SZ,        "rc-5-sz"       },
>> +    { RC_BIT_RC6,           "rc-6"          },
>> +    { RC_BIT_JVC,           "jvc"           },
>> +    { RC_BIT_SONY12,        "sony12"        },
>> +    { RC_BIT_SONY15,        "sony15"        },
>> +    { RC_BIT_SONY20,        "sony20"        },
>> +    { RC_BIT_NEC,           "nec"           },
>> +    { RC_BIT_LIRC,          "lirc"          },
>>  };
> 
> There are some API breakages on the above. We shouln't do it, except
> if strictly required, and, if we'll do it, we need to do it via
>       Documentation/feature-removal-schedule.txt.
> 
> There are two types of breakages on the above: 
>       1) the removal of "unknown" and "sony" types;

We could just keep "unknown" and (optionally) also map "other" to it.

>       2) the behaviour change of "rc-5" (that, currently, means
> both rc-5 and rc-5x.

That's a change but I don't think it'll actually break user-space 
since "rc-5" will still be accepted.

> Also, while you've mapped rc5/sony variants, nec variants weren't
mapped.

"nec" needs no mapping with the nec 32-bit scancode change.

> IMO, what we should do on the above is:
>       1) preserve the "unknown";
> 
>       2) use "rc-5", "sony", "nec" with the meaning that they will
> enable all variants of those protocols;
> 
>       3) add a new set of protocols to indicate subsets, like "sony:20",
> "rc-5:normal", "rc5:x", etc.

I can look into it...

>       4) if you're changing the interface, please submit a patch also
> to v4l-utils, adding a logic there to handle the changes.

I'll look into it when redoing the patches.

>>  
>>  #define PROTO_NONE  "none"
>> diff --git a/include/media/rc-map.h b/include/media/rc-map.h
>> index 9184751..2c68ca6 100644
>> --- a/include/media/rc-map.h
>> +++ b/include/media/rc-map.h
>> @@ -11,19 +11,36 @@
>>  
>>  #include <linux/input.h>
>>  
>> -#define RC_TYPE_UNKNOWN     0
>> -#define RC_TYPE_RC5 (1  << 0)       /* Philips RC5 protocol */
>> -#define RC_TYPE_NEC (1  << 1)
>> -#define RC_TYPE_RC6 (1  << 2)       /* Philips RC6 protocol */
>> -#define RC_TYPE_JVC (1  << 3)       /* JVC protocol */
>> -#define RC_TYPE_SONY        (1  << 4)       /* Sony12/15/20 protocol */
>> -#define RC_TYPE_RC5_SZ      (1  << 5)       /* RC5 variant used by 
>> Streamzap */
>> -#define RC_TYPE_LIRC        (1  << 30)      /* Pass raw IR to lirc 
>> userspace */
>> -#define RC_TYPE_OTHER       (1u << 31)
> 
>> +#define RC_TYPE_UNKNOWN             0       /* Protocol not known */
>> +#define RC_TYPE_OTHER               0       /* Protocol known but 
>> proprietary */
> 
> This change doesn't make sense: we should either remove other or use
> different bits for different meanings.

I think that it's not necessary. Unknown and other have a
meaningful difference to the programmer but not from a code
point of view. Both mean that whatever scancode we get, we
have to accept as-is and we don't know anything about it.

For e.g. a RC5 scancode we could (though we're not doing it yet)
do sanity-checks on the scancode and set a proper timeout value
based on protocol characteristics. With other and unknown we can't.

That's the reason I merged them - we can't do anything meaningful
with the difference from a code point of view and long term 
"unknown" should die (might not happen but...).

> This is somewhat a mess currently, as there
> are, in
> fact, 3 types of "protocols":
>       1) reverse-engineered drivers, where developer didn't care to check
>          what was the used protocol. It is there due to legacy IR handlers,
>          added before rc-core. The better is to not accept this type anymore
>          for new devices;
>       2) Other protocols that don't match at the list of supported protocols.
>          Reserved for the cases were the developer took the care to check if
>          the protocol is not NEC/RC-5/... and didn't find any protocol that
>          matches;
>       3) Standard protocols with broken hardware. In general, keycode tables
>          with just 8 bits for RC-5 or NEC, because the hardware uses a cheap
>          uC (generally KS007 or similar) that only decodes the last 8 bits of
>          the protocol. As the developer didn't have a full IR decoder, he was
>          not able to fill the RC/NEC table with the IR address.
> 
> The problem with (2) is that it may reflect a temporary state where the
> protocol
> is not yet known. After adding a protocol decoder for it, case (2) turns
> into
> case (1).
> 
> So, maybe we can just merge (1) and (2) into the same case: "unknown".
> Maybe we
> should map (3) with a different option, internally (even exporting it as
> "unknown"
> to userspace), as it helps us to identify such cases and fix it later.

I think we should keep the distinction internal.

-- 
David Härdeman
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to