On Jul 11 2014 or thereabouts, Andrew Duggan wrote:
> There are additional queries which are optional and may not be present 
> depending on the configuration of the firmware. Knowing which queries are 
> present is needed to properly compute the address of Query 12 and all 
> subsequent queries. Additional bits in Query 1 are used to indicate the 
> presence of these optional queries.
> 
> Signed-off-by: Andrew Duggan <[email protected]>
> ---

Looks good to me

Reviewed-by: Benjamin Tissoires <[email protected]>

Cheers,
Benjamin

>  drivers/hid/hid-rmi.c | 35 +++++++++++++++++++++++++----------
>  1 file changed, 25 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c
> index 578bbe6..3221a95 100644
> --- a/drivers/hid/hid-rmi.c
> +++ b/drivers/hid/hid-rmi.c
> @@ -549,10 +549,12 @@ static int rmi_populate_f11(struct hid_device *hdev)
>       u8 buf[20];
>       int ret;
>       bool has_query9;
> -     bool has_query10;
> +     bool has_query10 = false;
>       bool has_query11;
>       bool has_query12;
>       bool has_physical_props;
> +     bool has_gestures;
> +     bool has_rel;
>       unsigned x_size, y_size;
>       u16 query12_offset;
>  
> @@ -589,19 +591,32 @@ static int rmi_populate_f11(struct hid_device *hdev)
>               return -ENODEV;
>       }
>  
> -     /* query 8 to find out if query 10 exists */
> -     ret = rmi_read(hdev, data->f11.query_base_addr + 8, buf);
> -     if (ret) {
> -             hid_err(hdev, "can not read gesture information: %d.\n", ret);
> -             return ret;
> +     has_rel = !!(buf[0] & BIT(3));
> +     has_gestures = !!(buf[0] & BIT(5));
> +
> +     if (has_gestures) {
> +             /* query 8 to find out if query 10 exists */
> +             ret = rmi_read(hdev, data->f11.query_base_addr + 8, buf);
> +             if (ret) {
> +                     hid_err(hdev, "can not read gesture information: %d.\n",
> +                             ret);
> +                     return ret;
> +             }
> +             has_query10 = !!(buf[0] & BIT(2));
>       }
> -     has_query10 = !!(buf[0] & BIT(2));
>  
>       /*
> -      * At least 8 queries are guaranteed to be present in F11
> -      * +1 for query12.
> +      * At least 4 queries are guaranteed to be present in F11
> +      * +1 for query 5 which is present since absolute events are
> +      * reported and +1 for query 12.
>        */
> -     query12_offset = 9;
> +     query12_offset = 6;
> +
> +     if (has_rel)
> +             ++query12_offset; /* query 6 is present */
> +
> +     if (has_gestures)
> +             query12_offset += 2; /* query 7 and 8 are present */
>  
>       if (has_query9)
>               ++query12_offset;
> -- 
> 1.9.1
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to