Hi Andrew,

On Thu, May 1, 2014 at 5:49 PM, Andrew Duggan <adug...@synaptics.com> wrote:
> The rmi4 spec defines some optional query registers in F11 which appear before
> query 12. This patch checks for the existence of some of the lesser used 
> queries to
>  compute the location of query12 and all subsequent query registers.
>
> Signed-off-by: Andrew Duggan <adug...@synaptics.com>
> ---

This is quite important because the XPS 13 laptop shows currently a
touchpad of physical size in mm of 5149 x 1972... :)

Thanks Andrew for taking care of it.

>  drivers/hid/hid-rmi.c | 33 +++++++++++++++++++++++++++++----
>  1 file changed, 29 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c
> index 90ae5eb..912e008 100644
> --- a/drivers/hid/hid-rmi.c
> +++ b/drivers/hid/hid-rmi.c
> @@ -546,9 +546,12 @@ static int rmi_populate_f11(struct hid_device *hdev)
>         struct rmi_data *data = hid_get_drvdata(hdev);
>         u8 buf[20];
>         int ret;
> +       bool has_query9;
> +       bool has_query11;
>         bool has_query12;
>         bool has_physical_props;
>         unsigned x_size, y_size;
> +       u16 query12_offset;
>
>         if (!data->f11.query_base_addr) {
>                 hid_err(hdev, "No 2D sensor found, giving up.\n");
> @@ -561,6 +564,8 @@ static int rmi_populate_f11(struct hid_device *hdev)
>                 hid_err(hdev, "can not get query 0: %d.\n", ret);
>                 return ret;
>         }
> +       has_query9 = !!(buf[0] & BIT(3));
> +       has_query11 = !!(buf[0] & BIT(4));
>         has_query12 = !!(buf[0] & BIT(5));
>
>         /* query 1 to get the max number of fingers */
> @@ -582,11 +587,30 @@ static int rmi_populate_f11(struct hid_device *hdev)
>         }
>
>         /*
> -        * query 12 to know if the physical properties are reported
> -        * (query 12 is at offset 10 for HID devices)
> +        * At least 8 queries are guaranteed to be present in F11
> +        * +1 for query12.
>          */
> +       query12_offset = 9;
> +
> +       if (has_query9)
> +               ++query12_offset;
> +
> +       /* 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;
> +       }
> +       if (!!(buf[0] & BIT(2)))

For consistency, I would have prefered to have "if (has_query10)" here.

Other than that, the patch is reviewed-by: Benjamin Tissoires
<benjamin.tissoi...@redhat.com>

Cheers,
Benjamin

> +               ++query12_offset;
> +
> +       if (has_query11)
> +               ++query12_offset;
> +
> +       /* query 12 to know if the physical properties are reported */
>         if (has_query12) {
> -               ret = rmi_read(hdev, data->f11.query_base_addr + 10, buf);
> +               ret = rmi_read(hdev, data->f11.query_base_addr
> +                               + query12_offset, buf);
>                 if (ret) {
>                         hid_err(hdev, "can not get query 12: %d.\n", ret);
>                         return ret;
> @@ -595,7 +619,8 @@ static int rmi_populate_f11(struct hid_device *hdev)
>
>                 if (has_physical_props) {
>                         ret = rmi_read_block(hdev,
> -                                       data->f11.query_base_addr + 11, buf, 
> 4);
> +                                       data->f11.query_base_addr
> +                                               + query12_offset + 1, buf, 4);
>                         if (ret) {
>                                 hid_err(hdev, "can not read query 15-18: 
> %d.\n",
>                                         ret);
> --
> 1.9.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
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