diff mbox

[1/2] xen,input: add xen-kbdfront module parameter for setting resolution

Message ID 20170321171905.31584-2-jgross@suse.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jürgen Groß March 21, 2017, 5:19 p.m. UTC
Add a parameter for setting the resolution of xen-kbdfront in order to
be able to cope with a (virtual) frame buffer of arbitrary resolution.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
 drivers/input/misc/xen-kbdfront.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Oleksandr Andrushchenko April 10, 2017, 1:44 p.m. UTC | #1
Hi, Juergen!

On 03/21/2017 07:19 PM, Juergen Gross wrote:
> Add a parameter for setting the resolution of xen-kbdfront in order to
> be able to cope with a (virtual) frame buffer of arbitrary resolution.
>
> Signed-off-by: Juergen Gross <jgross@suse.com>
> ---
>   drivers/input/misc/xen-kbdfront.c | 10 ++++++++--
>   1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
> index 3900875..2df5678 100644
> --- a/drivers/input/misc/xen-kbdfront.c
> +++ b/drivers/input/misc/xen-kbdfront.c
> @@ -41,6 +41,12 @@ struct xenkbd_info {
>   	char phys[32];
>   };
>   
> +enum { KPARAM_WIDTH, KPARAM_HEIGHT, KPARAM_CNT };
> +static int size[KPARAM_CNT] = { XENFB_WIDTH, XENFB_HEIGHT };
> +module_param_array(size, int, NULL, 0444);
is this by intention that you use 0444 here?
It means read-only, thus one cannot change these,
so what is the point of the module parameters then?
> +MODULE_PARM_DESC(size,
> +	"Pointing device width, height in pixels (default 800,600)");
> +
>   static int xenkbd_remove(struct xenbus_device *);
>   static int xenkbd_connect_backend(struct xenbus_device *, struct xenkbd_info *);
>   static void xenkbd_disconnect_backend(struct xenkbd_info *);
> @@ -174,8 +180,8 @@ static int xenkbd_probe(struct xenbus_device *dev,
>   
>   	if (abs) {
>   		__set_bit(EV_ABS, ptr->evbit);
> -		input_set_abs_params(ptr, ABS_X, 0, XENFB_WIDTH, 0, 0);
> -		input_set_abs_params(ptr, ABS_Y, 0, XENFB_HEIGHT, 0, 0);
> +		input_set_abs_params(ptr, ABS_X, 0, size[KPARAM_WIDTH], 0, 0);
> +		input_set_abs_params(ptr, ABS_Y, 0, size[KPARAM_HEIGHT], 0, 0);
>   	} else {
>   		input_set_capability(ptr, EV_REL, REL_X);
>   		input_set_capability(ptr, EV_REL, REL_Y);
Thank you,
Oleksandr
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jürgen Groß April 10, 2017, 1:50 p.m. UTC | #2
On 10/04/17 15:44, Oleksandr Andrushchenko wrote:
> Hi, Juergen!
> 
> On 03/21/2017 07:19 PM, Juergen Gross wrote:
>> Add a parameter for setting the resolution of xen-kbdfront in order to
>> be able to cope with a (virtual) frame buffer of arbitrary resolution.
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>> ---
>>   drivers/input/misc/xen-kbdfront.c | 10 ++++++++--
>>   1 file changed, 8 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/input/misc/xen-kbdfront.c
>> b/drivers/input/misc/xen-kbdfront.c
>> index 3900875..2df5678 100644
>> --- a/drivers/input/misc/xen-kbdfront.c
>> +++ b/drivers/input/misc/xen-kbdfront.c
>> @@ -41,6 +41,12 @@ struct xenkbd_info {
>>       char phys[32];
>>   };
>>   +enum { KPARAM_WIDTH, KPARAM_HEIGHT, KPARAM_CNT };
>> +static int size[KPARAM_CNT] = { XENFB_WIDTH, XENFB_HEIGHT };
>> +module_param_array(size, int, NULL, 0444);
> is this by intention that you use 0444 here?
> It means read-only, thus one cannot change these,
> so what is the point of the module parameters then?

You can see the settings in sysfs.

The values are settable via boot parameter.


Juergen
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Oleksandr Andrushchenko April 10, 2017, 2 p.m. UTC | #3
On 04/10/2017 04:50 PM, Juergen Gross wrote:
> On 10/04/17 15:44, Oleksandr Andrushchenko wrote:
>> Hi, Juergen!
>>
>> On 03/21/2017 07:19 PM, Juergen Gross wrote:
>>> Add a parameter for setting the resolution of xen-kbdfront in order to
>>> be able to cope with a (virtual) frame buffer of arbitrary resolution.
>>>
>>> Signed-off-by: Juergen Gross <jgross@suse.com>
>>> ---
>>>    drivers/input/misc/xen-kbdfront.c | 10 ++++++++--
>>>    1 file changed, 8 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/input/misc/xen-kbdfront.c
>>> b/drivers/input/misc/xen-kbdfront.c
>>> index 3900875..2df5678 100644
>>> --- a/drivers/input/misc/xen-kbdfront.c
>>> +++ b/drivers/input/misc/xen-kbdfront.c
>>> @@ -41,6 +41,12 @@ struct xenkbd_info {
>>>        char phys[32];
>>>    };
>>>    +enum { KPARAM_WIDTH, KPARAM_HEIGHT, KPARAM_CNT };
>>> +static int size[KPARAM_CNT] = { XENFB_WIDTH, XENFB_HEIGHT };
>>> +module_param_array(size, int, NULL, 0444);
>> is this by intention that you use 0444 here?
>> It means read-only, thus one cannot change these,
>> so what is the point of the module parameters then?
> You can see the settings in sysfs.
this is good so we can see actual width/height
used by the pv driver
> The values are settable via boot parameter.
but then, if one has other values set in XenStore,
these will/may be overridden, making it inconsistent,
e.g. values loaded at start as module parameters
(*size* array) is not going to be updated on
XenbusStateInitWait/XenbusStateConnected. So, we'll
end up with wrong parameters shown via sysfs
one more question is why do we need module parameters
if the same can be read from XenStore?

>
> Juergen
Thank you,
Oleksandr
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jürgen Groß April 10, 2017, 2:11 p.m. UTC | #4
On 10/04/17 16:00, Oleksandr Andrushchenko wrote:
> 
> 
> On 04/10/2017 04:50 PM, Juergen Gross wrote:
>> On 10/04/17 15:44, Oleksandr Andrushchenko wrote:
>>> Hi, Juergen!
>>>
>>> On 03/21/2017 07:19 PM, Juergen Gross wrote:
>>>> Add a parameter for setting the resolution of xen-kbdfront in order to
>>>> be able to cope with a (virtual) frame buffer of arbitrary resolution.
>>>>
>>>> Signed-off-by: Juergen Gross <jgross@suse.com>
>>>> ---
>>>>    drivers/input/misc/xen-kbdfront.c | 10 ++++++++--
>>>>    1 file changed, 8 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/drivers/input/misc/xen-kbdfront.c
>>>> b/drivers/input/misc/xen-kbdfront.c
>>>> index 3900875..2df5678 100644
>>>> --- a/drivers/input/misc/xen-kbdfront.c
>>>> +++ b/drivers/input/misc/xen-kbdfront.c
>>>> @@ -41,6 +41,12 @@ struct xenkbd_info {
>>>>        char phys[32];
>>>>    };
>>>>    +enum { KPARAM_WIDTH, KPARAM_HEIGHT, KPARAM_CNT };
>>>> +static int size[KPARAM_CNT] = { XENFB_WIDTH, XENFB_HEIGHT };
>>>> +module_param_array(size, int, NULL, 0444);
>>> is this by intention that you use 0444 here?
>>> It means read-only, thus one cannot change these,
>>> so what is the point of the module parameters then?
>> You can see the settings in sysfs.
> this is good so we can see actual width/height
> used by the pv driver
>> The values are settable via boot parameter.
> but then, if one has other values set in XenStore,
> these will/may be overridden, making it inconsistent,
> e.g. values loaded at start as module parameters
> (*size* array) is not going to be updated on
> XenbusStateInitWait/XenbusStateConnected. So, we'll
> end up with wrong parameters shown via sysfs
> one more question is why do we need module parameters
> if the same can be read from XenStore?

Because up to now nobody is setting the Xenstore values. This is
something I'm planning to do for Xen 4.10. Up to then we need a
workaround.

But you are right: The module parameters should be updated with
the values read from Xenstore.


Juergen
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Oleksandr Andrushchenko April 10, 2017, 2:18 p.m. UTC | #5
On 04/10/2017 05:11 PM, Juergen Gross wrote:
> On 10/04/17 16:00, Oleksandr Andrushchenko wrote:
>>
>> On 04/10/2017 04:50 PM, Juergen Gross wrote:
>>> On 10/04/17 15:44, Oleksandr Andrushchenko wrote:
>>>> Hi, Juergen!
>>>>
>>>> On 03/21/2017 07:19 PM, Juergen Gross wrote:
>>>>> Add a parameter for setting the resolution of xen-kbdfront in order to
>>>>> be able to cope with a (virtual) frame buffer of arbitrary resolution.
>>>>>
>>>>> Signed-off-by: Juergen Gross <jgross@suse.com>
>>>>> ---
>>>>>     drivers/input/misc/xen-kbdfront.c | 10 ++++++++--
>>>>>     1 file changed, 8 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/drivers/input/misc/xen-kbdfront.c
>>>>> b/drivers/input/misc/xen-kbdfront.c
>>>>> index 3900875..2df5678 100644
>>>>> --- a/drivers/input/misc/xen-kbdfront.c
>>>>> +++ b/drivers/input/misc/xen-kbdfront.c
>>>>> @@ -41,6 +41,12 @@ struct xenkbd_info {
>>>>>         char phys[32];
>>>>>     };
>>>>>     +enum { KPARAM_WIDTH, KPARAM_HEIGHT, KPARAM_CNT };
>>>>> +static int size[KPARAM_CNT] = { XENFB_WIDTH, XENFB_HEIGHT };
>>>>> +module_param_array(size, int, NULL, 0444);
>>>> is this by intention that you use 0444 here?
>>>> It means read-only, thus one cannot change these,
>>>> so what is the point of the module parameters then?
>>> You can see the settings in sysfs.
>> this is good so we can see actual width/height
>> used by the pv driver
>>> The values are settable via boot parameter.
>> but then, if one has other values set in XenStore,
>> these will/may be overridden, making it inconsistent,
>> e.g. values loaded at start as module parameters
>> (*size* array) is not going to be updated on
>> XenbusStateInitWait/XenbusStateConnected. So, we'll
>> end up with wrong parameters shown via sysfs
>> one more question is why do we need module parameters
>> if the same can be read from XenStore?
> Because up to now nobody is setting the Xenstore values. This is
> something I'm planning to do for Xen 4.10.
ah, good to know. btw, if you are about to add
width/height for the pointer device will you also add
the same for multi-touch?
>   Up to then we need a
> workaround.
>
> But you are right: The module parameters should be updated with
> the values read from Xenstore.
>
>
> Juergen

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jürgen Groß April 11, 2017, 8:54 a.m. UTC | #6
On 10/04/17 16:18, Oleksandr Andrushchenko wrote:
> On 04/10/2017 05:11 PM, Juergen Gross wrote:
>> On 10/04/17 16:00, Oleksandr Andrushchenko wrote:
>>>
>>> On 04/10/2017 04:50 PM, Juergen Gross wrote:
>>>> On 10/04/17 15:44, Oleksandr Andrushchenko wrote:
>>>>> Hi, Juergen!
>>>>>
>>>>> On 03/21/2017 07:19 PM, Juergen Gross wrote:
>>>>>> Add a parameter for setting the resolution of xen-kbdfront in
>>>>>> order to
>>>>>> be able to cope with a (virtual) frame buffer of arbitrary
>>>>>> resolution.
>>>>>>
>>>>>> Signed-off-by: Juergen Gross <jgross@suse.com>
>>>>>> ---
>>>>>>     drivers/input/misc/xen-kbdfront.c | 10 ++++++++--
>>>>>>     1 file changed, 8 insertions(+), 2 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/input/misc/xen-kbdfront.c
>>>>>> b/drivers/input/misc/xen-kbdfront.c
>>>>>> index 3900875..2df5678 100644
>>>>>> --- a/drivers/input/misc/xen-kbdfront.c
>>>>>> +++ b/drivers/input/misc/xen-kbdfront.c
>>>>>> @@ -41,6 +41,12 @@ struct xenkbd_info {
>>>>>>         char phys[32];
>>>>>>     };
>>>>>>     +enum { KPARAM_WIDTH, KPARAM_HEIGHT, KPARAM_CNT };
>>>>>> +static int size[KPARAM_CNT] = { XENFB_WIDTH, XENFB_HEIGHT };
>>>>>> +module_param_array(size, int, NULL, 0444);
>>>>> is this by intention that you use 0444 here?
>>>>> It means read-only, thus one cannot change these,
>>>>> so what is the point of the module parameters then?
>>>> You can see the settings in sysfs.
>>> this is good so we can see actual width/height
>>> used by the pv driver
>>>> The values are settable via boot parameter.
>>> but then, if one has other values set in XenStore,
>>> these will/may be overridden, making it inconsistent,
>>> e.g. values loaded at start as module parameters
>>> (*size* array) is not going to be updated on
>>> XenbusStateInitWait/XenbusStateConnected. So, we'll
>>> end up with wrong parameters shown via sysfs
>>> one more question is why do we need module parameters
>>> if the same can be read from XenStore?
>> Because up to now nobody is setting the Xenstore values. This is
>> something I'm planning to do for Xen 4.10.
> ah, good to know. btw, if you are about to add
> width/height for the pointer device will you also add
> the same for multi-touch?

My plan is to add a way to set the resolution of the graphical
console. This will set framebuffer and pointing device resolution in
Xenstore. In case the pointing device is multi-touch the setting
should be done for that device, too.


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

Patch

diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
index 3900875..2df5678 100644
--- a/drivers/input/misc/xen-kbdfront.c
+++ b/drivers/input/misc/xen-kbdfront.c
@@ -41,6 +41,12 @@  struct xenkbd_info {
 	char phys[32];
 };
 
+enum { KPARAM_WIDTH, KPARAM_HEIGHT, KPARAM_CNT };
+static int size[KPARAM_CNT] = { XENFB_WIDTH, XENFB_HEIGHT };
+module_param_array(size, int, NULL, 0444);
+MODULE_PARM_DESC(size,
+	"Pointing device width, height in pixels (default 800,600)");
+
 static int xenkbd_remove(struct xenbus_device *);
 static int xenkbd_connect_backend(struct xenbus_device *, struct xenkbd_info *);
 static void xenkbd_disconnect_backend(struct xenkbd_info *);
@@ -174,8 +180,8 @@  static int xenkbd_probe(struct xenbus_device *dev,
 
 	if (abs) {
 		__set_bit(EV_ABS, ptr->evbit);
-		input_set_abs_params(ptr, ABS_X, 0, XENFB_WIDTH, 0, 0);
-		input_set_abs_params(ptr, ABS_Y, 0, XENFB_HEIGHT, 0, 0);
+		input_set_abs_params(ptr, ABS_X, 0, size[KPARAM_WIDTH], 0, 0);
+		input_set_abs_params(ptr, ABS_Y, 0, size[KPARAM_HEIGHT], 0, 0);
 	} else {
 		input_set_capability(ptr, EV_REL, REL_X);
 		input_set_capability(ptr, EV_REL, REL_Y);