All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] xen, input: try to read screen resolution for xen-kbdfront
@ 2017-01-30 15:10 Juergen Gross
  0 siblings, 0 replies; 9+ messages in thread
From: Juergen Gross @ 2017-01-30 15:10 UTC (permalink / raw)
  To: linux-kernel, linux-input, xen-devel; +Cc: Juergen Gross, dmitry.torokhov

Instead of using the default resolution of 800*600 for the pointing
device of xen-kbdfront try to read the resolution of the (virtual)
framebuffer device. Use the default as fallback only.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
V3: add case of late framebuffer registration (Oleksandr Andrushchenko)
V2: get framebuffer resolution only if CONFIG_FB (Dmitry Torokhov)
---
 drivers/input/misc/xen-kbdfront.c | 46 ++++++++++++++++++++++++++++++++++++---
 1 file changed, 43 insertions(+), 3 deletions(-)

diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
index 3900875..9a20800 100644
--- a/drivers/input/misc/xen-kbdfront.c
+++ b/drivers/input/misc/xen-kbdfront.c
@@ -16,6 +16,7 @@
 #include <linux/kernel.h>
 #include <linux/errno.h>
 #include <linux/module.h>
+#include <linux/fb.h>
 #include <linux/input.h>
 #include <linux/slab.h>
 
@@ -39,6 +40,9 @@ struct xenkbd_info {
 	int irq;
 	struct xenbus_device *xbdev;
 	char phys[32];
+#ifdef CONFIG_FB_NOTIFY
+	struct notifier_block nb;
+#endif
 };
 
 static int xenkbd_remove(struct xenbus_device *);
@@ -105,10 +109,29 @@ static irqreturn_t input_handler(int rq, void *dev_id)
 	return IRQ_HANDLED;
 }
 
+#ifdef CONFIG_FB
+#ifdef CONFIG_FB_NOTIFY
+static int xenkbd_fb_event(struct notifier_block *self,
+			   unsigned long action, void *data)
+{
+	struct xenkbd_info *info = container_of(self, struct xenkbd_info, nb);
+	struct fb_info *fb = registered_fb[0];
+
+	if (action != FB_EVENT_FB_REGISTERED || !fb)
+		return 0;
+
+	input_set_abs_params(info->ptr, ABS_X, 0, fb->var.xres_virtual, 0, 0);
+	input_set_abs_params(info->ptr, ABS_Y, 0, fb->var.yres_virtual, 0, 0);
+
+	return 0;
+}
+#endif
+#endif
+
 static int xenkbd_probe(struct xenbus_device *dev,
 				  const struct xenbus_device_id *id)
 {
-	int ret, i;
+	int ret, i, width, height;
 	unsigned int abs;
 	struct xenkbd_info *info;
 	struct input_dev *kbd, *ptr;
@@ -173,9 +196,22 @@ static int xenkbd_probe(struct xenbus_device *dev,
 	ptr->id.product = 0xfffe;
 
 	if (abs) {
+		width = XENFB_WIDTH;
+		height = XENFB_HEIGHT;
+#ifdef CONFIG_FB
+		if (registered_fb[0]) {
+			width = registered_fb[0]->var.xres_virtual;
+			height = registered_fb[0]->var.yres_virtual;
+		} else {
+#ifdef CONFIG_FB_NOTIFY
+			info->nb.notifier_call = xenkbd_fb_event;
+			fb_register_client(&info->nb);
+#endif
+		}
+#endif
 		__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, width, 0, 0);
+		input_set_abs_params(ptr, ABS_Y, 0, height, 0, 0);
 	} else {
 		input_set_capability(ptr, EV_REL, REL_X);
 		input_set_capability(ptr, EV_REL, REL_Y);
@@ -222,6 +258,10 @@ static int xenkbd_remove(struct xenbus_device *dev)
 	struct xenkbd_info *info = dev_get_drvdata(&dev->dev);
 
 	xenkbd_disconnect_backend(info);
+#ifdef CONFIG_FB_NOTIFY
+	if (info->nb.notifier_call)
+		fb_unregister_client(&info->nb);
+#endif
 	if (info->kbd)
 		input_unregister_device(info->kbd);
 	if (info->ptr)
-- 
2.10.2


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v3] xen,input: try to read screen resolution for xen-kbdfront
  2017-02-17  9:08 ` [PATCH v3] xen,input: " Juergen Gross
@ 2017-02-17 19:48   ` Dmitry Torokhov
  2017-02-17 19:48   ` [PATCH v3] xen, input: " Dmitry Torokhov
  1 sibling, 0 replies; 9+ messages in thread
From: Dmitry Torokhov @ 2017-02-17 19:48 UTC (permalink / raw)
  To: Juergen Gross; +Cc: linux-kernel, linux-input, xen-devel

On Fri, Feb 17, 2017 at 10:08:58AM +0100, Juergen Gross wrote:
> On 30/01/17 16:10, Juergen Gross wrote:
> > Instead of using the default resolution of 800*600 for the pointing
> > device of xen-kbdfront try to read the resolution of the (virtual)
> > framebuffer device. Use the default as fallback only.
> > 
> > Signed-off-by: Juergen Gross <jgross@suse.com>
> 
> Dmitry, any comment from you?
> 
> In case you don't object I can carry this patch through the Xen tree.

Sorry, yes, I still object. I replied in the other thread.

Thanks.

-- 
Dmitry

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3] xen, input: try to read screen resolution for xen-kbdfront
  2017-02-17  9:08 ` [PATCH v3] xen,input: " Juergen Gross
  2017-02-17 19:48   ` Dmitry Torokhov
@ 2017-02-17 19:48   ` Dmitry Torokhov
  1 sibling, 0 replies; 9+ messages in thread
From: Dmitry Torokhov @ 2017-02-17 19:48 UTC (permalink / raw)
  To: Juergen Gross; +Cc: xen-devel, linux-kernel, linux-input

On Fri, Feb 17, 2017 at 10:08:58AM +0100, Juergen Gross wrote:
> On 30/01/17 16:10, Juergen Gross wrote:
> > Instead of using the default resolution of 800*600 for the pointing
> > device of xen-kbdfront try to read the resolution of the (virtual)
> > framebuffer device. Use the default as fallback only.
> > 
> > Signed-off-by: Juergen Gross <jgross@suse.com>
> 
> Dmitry, any comment from you?
> 
> In case you don't object I can carry this patch through the Xen tree.

Sorry, yes, I still object. I replied in the other thread.

Thanks.

-- 
Dmitry

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3] xen,input: try to read screen resolution for xen-kbdfront
  2017-01-30 15:10 [PATCH v3] xen,input: " Juergen Gross
  2017-02-09 13:45   ` [PATCH v3] xen, input: " Juergen Gross
  2017-02-17  9:08 ` Juergen Gross
@ 2017-02-17  9:08 ` Juergen Gross
  2017-02-17 19:48   ` Dmitry Torokhov
  2017-02-17 19:48   ` [PATCH v3] xen, input: " Dmitry Torokhov
  2 siblings, 2 replies; 9+ messages in thread
From: Juergen Gross @ 2017-02-17  9:08 UTC (permalink / raw)
  To: linux-kernel, linux-input, xen-devel, dmitry.torokhov

On 30/01/17 16:10, Juergen Gross wrote:
> Instead of using the default resolution of 800*600 for the pointing
> device of xen-kbdfront try to read the resolution of the (virtual)
> framebuffer device. Use the default as fallback only.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Dmitry, any comment from you?

In case you don't object I can carry this patch through the Xen tree.


Juergen

> ---
> V3: add case of late framebuffer registration (Oleksandr Andrushchenko)
> V2: get framebuffer resolution only if CONFIG_FB (Dmitry Torokhov)
> ---
>  drivers/input/misc/xen-kbdfront.c | 46 ++++++++++++++++++++++++++++++++++++---
>  1 file changed, 43 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
> index 3900875..9a20800 100644
> --- a/drivers/input/misc/xen-kbdfront.c
> +++ b/drivers/input/misc/xen-kbdfront.c
> @@ -16,6 +16,7 @@
>  #include <linux/kernel.h>
>  #include <linux/errno.h>
>  #include <linux/module.h>
> +#include <linux/fb.h>
>  #include <linux/input.h>
>  #include <linux/slab.h>
>  
> @@ -39,6 +40,9 @@ struct xenkbd_info {
>  	int irq;
>  	struct xenbus_device *xbdev;
>  	char phys[32];
> +#ifdef CONFIG_FB_NOTIFY
> +	struct notifier_block nb;
> +#endif
>  };
>  
>  static int xenkbd_remove(struct xenbus_device *);
> @@ -105,10 +109,29 @@ static irqreturn_t input_handler(int rq, void *dev_id)
>  	return IRQ_HANDLED;
>  }
>  
> +#ifdef CONFIG_FB
> +#ifdef CONFIG_FB_NOTIFY
> +static int xenkbd_fb_event(struct notifier_block *self,
> +			   unsigned long action, void *data)
> +{
> +	struct xenkbd_info *info = container_of(self, struct xenkbd_info, nb);
> +	struct fb_info *fb = registered_fb[0];
> +
> +	if (action != FB_EVENT_FB_REGISTERED || !fb)
> +		return 0;
> +
> +	input_set_abs_params(info->ptr, ABS_X, 0, fb->var.xres_virtual, 0, 0);
> +	input_set_abs_params(info->ptr, ABS_Y, 0, fb->var.yres_virtual, 0, 0);
> +
> +	return 0;
> +}
> +#endif
> +#endif
> +
>  static int xenkbd_probe(struct xenbus_device *dev,
>  				  const struct xenbus_device_id *id)
>  {
> -	int ret, i;
> +	int ret, i, width, height;
>  	unsigned int abs;
>  	struct xenkbd_info *info;
>  	struct input_dev *kbd, *ptr;
> @@ -173,9 +196,22 @@ static int xenkbd_probe(struct xenbus_device *dev,
>  	ptr->id.product = 0xfffe;
>  
>  	if (abs) {
> +		width = XENFB_WIDTH;
> +		height = XENFB_HEIGHT;
> +#ifdef CONFIG_FB
> +		if (registered_fb[0]) {
> +			width = registered_fb[0]->var.xres_virtual;
> +			height = registered_fb[0]->var.yres_virtual;
> +		} else {
> +#ifdef CONFIG_FB_NOTIFY
> +			info->nb.notifier_call = xenkbd_fb_event;
> +			fb_register_client(&info->nb);
> +#endif
> +		}
> +#endif
>  		__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, width, 0, 0);
> +		input_set_abs_params(ptr, ABS_Y, 0, height, 0, 0);
>  	} else {
>  		input_set_capability(ptr, EV_REL, REL_X);
>  		input_set_capability(ptr, EV_REL, REL_Y);
> @@ -222,6 +258,10 @@ static int xenkbd_remove(struct xenbus_device *dev)
>  	struct xenkbd_info *info = dev_get_drvdata(&dev->dev);
>  
>  	xenkbd_disconnect_backend(info);
> +#ifdef CONFIG_FB_NOTIFY
> +	if (info->nb.notifier_call)
> +		fb_unregister_client(&info->nb);
> +#endif
>  	if (info->kbd)
>  		input_unregister_device(info->kbd);
>  	if (info->ptr)
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3] xen, input: try to read screen resolution for xen-kbdfront
  2017-01-30 15:10 [PATCH v3] xen,input: " Juergen Gross
  2017-02-09 13:45   ` [PATCH v3] xen, input: " Juergen Gross
@ 2017-02-17  9:08 ` Juergen Gross
  2017-02-17  9:08 ` [PATCH v3] xen,input: " Juergen Gross
  2 siblings, 0 replies; 9+ messages in thread
From: Juergen Gross @ 2017-02-17  9:08 UTC (permalink / raw)
  To: linux-kernel, linux-input, xen-devel, dmitry.torokhov

On 30/01/17 16:10, Juergen Gross wrote:
> Instead of using the default resolution of 800*600 for the pointing
> device of xen-kbdfront try to read the resolution of the (virtual)
> framebuffer device. Use the default as fallback only.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Dmitry, any comment from you?

In case you don't object I can carry this patch through the Xen tree.


Juergen

> ---
> V3: add case of late framebuffer registration (Oleksandr Andrushchenko)
> V2: get framebuffer resolution only if CONFIG_FB (Dmitry Torokhov)
> ---
>  drivers/input/misc/xen-kbdfront.c | 46 ++++++++++++++++++++++++++++++++++++---
>  1 file changed, 43 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
> index 3900875..9a20800 100644
> --- a/drivers/input/misc/xen-kbdfront.c
> +++ b/drivers/input/misc/xen-kbdfront.c
> @@ -16,6 +16,7 @@
>  #include <linux/kernel.h>
>  #include <linux/errno.h>
>  #include <linux/module.h>
> +#include <linux/fb.h>
>  #include <linux/input.h>
>  #include <linux/slab.h>
>  
> @@ -39,6 +40,9 @@ struct xenkbd_info {
>  	int irq;
>  	struct xenbus_device *xbdev;
>  	char phys[32];
> +#ifdef CONFIG_FB_NOTIFY
> +	struct notifier_block nb;
> +#endif
>  };
>  
>  static int xenkbd_remove(struct xenbus_device *);
> @@ -105,10 +109,29 @@ static irqreturn_t input_handler(int rq, void *dev_id)
>  	return IRQ_HANDLED;
>  }
>  
> +#ifdef CONFIG_FB
> +#ifdef CONFIG_FB_NOTIFY
> +static int xenkbd_fb_event(struct notifier_block *self,
> +			   unsigned long action, void *data)
> +{
> +	struct xenkbd_info *info = container_of(self, struct xenkbd_info, nb);
> +	struct fb_info *fb = registered_fb[0];
> +
> +	if (action != FB_EVENT_FB_REGISTERED || !fb)
> +		return 0;
> +
> +	input_set_abs_params(info->ptr, ABS_X, 0, fb->var.xres_virtual, 0, 0);
> +	input_set_abs_params(info->ptr, ABS_Y, 0, fb->var.yres_virtual, 0, 0);
> +
> +	return 0;
> +}
> +#endif
> +#endif
> +
>  static int xenkbd_probe(struct xenbus_device *dev,
>  				  const struct xenbus_device_id *id)
>  {
> -	int ret, i;
> +	int ret, i, width, height;
>  	unsigned int abs;
>  	struct xenkbd_info *info;
>  	struct input_dev *kbd, *ptr;
> @@ -173,9 +196,22 @@ static int xenkbd_probe(struct xenbus_device *dev,
>  	ptr->id.product = 0xfffe;
>  
>  	if (abs) {
> +		width = XENFB_WIDTH;
> +		height = XENFB_HEIGHT;
> +#ifdef CONFIG_FB
> +		if (registered_fb[0]) {
> +			width = registered_fb[0]->var.xres_virtual;
> +			height = registered_fb[0]->var.yres_virtual;
> +		} else {
> +#ifdef CONFIG_FB_NOTIFY
> +			info->nb.notifier_call = xenkbd_fb_event;
> +			fb_register_client(&info->nb);
> +#endif
> +		}
> +#endif
>  		__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, width, 0, 0);
> +		input_set_abs_params(ptr, ABS_Y, 0, height, 0, 0);
>  	} else {
>  		input_set_capability(ptr, EV_REL, REL_X);
>  		input_set_capability(ptr, EV_REL, REL_Y);
> @@ -222,6 +258,10 @@ static int xenkbd_remove(struct xenbus_device *dev)
>  	struct xenkbd_info *info = dev_get_drvdata(&dev->dev);
>  
>  	xenkbd_disconnect_backend(info);
> +#ifdef CONFIG_FB_NOTIFY
> +	if (info->nb.notifier_call)
> +		fb_unregister_client(&info->nb);
> +#endif
>  	if (info->kbd)
>  		input_unregister_device(info->kbd);
>  	if (info->ptr)
> 


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3] xen, input: try to read screen resolution for xen-kbdfront
  2017-02-09 13:45   ` [PATCH v3] xen, input: " Juergen Gross
  (?)
@ 2017-02-14  8:00   ` Oleksandr Andrushchenko
  -1 siblings, 0 replies; 9+ messages in thread
From: Oleksandr Andrushchenko @ 2017-02-14  8:00 UTC (permalink / raw)
  To: Juergen Gross, linux-kernel, linux-input, xen-devel; +Cc: dmitry.torokhov

Ping as I am also interested in modifying kbdfront...

On 02/09/2017 03:45 PM, Juergen Gross wrote:
> On 30/01/17 16:10, Juergen Gross wrote:
>> Instead of using the default resolution of 800*600 for the pointing
>> device of xen-kbdfront try to read the resolution of the (virtual)
>> framebuffer device. Use the default as fallback only.
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
> Ping?
>
>> ---
>> V3: add case of late framebuffer registration (Oleksandr Andrushchenko)
>> V2: get framebuffer resolution only if CONFIG_FB (Dmitry Torokhov)
>> ---
>>   drivers/input/misc/xen-kbdfront.c | 46 ++++++++++++++++++++++++++++++++++++---
>>   1 file changed, 43 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
>> index 3900875..9a20800 100644
>> --- a/drivers/input/misc/xen-kbdfront.c
>> +++ b/drivers/input/misc/xen-kbdfront.c
>> @@ -16,6 +16,7 @@
>>   #include <linux/kernel.h>
>>   #include <linux/errno.h>
>>   #include <linux/module.h>
>> +#include <linux/fb.h>
>>   #include <linux/input.h>
>>   #include <linux/slab.h>
>>   
>> @@ -39,6 +40,9 @@ struct xenkbd_info {
>>   	int irq;
>>   	struct xenbus_device *xbdev;
>>   	char phys[32];
>> +#ifdef CONFIG_FB_NOTIFY
>> +	struct notifier_block nb;
>> +#endif
>>   };
>>   
>>   static int xenkbd_remove(struct xenbus_device *);
>> @@ -105,10 +109,29 @@ static irqreturn_t input_handler(int rq, void *dev_id)
>>   	return IRQ_HANDLED;
>>   }
>>   
>> +#ifdef CONFIG_FB
>> +#ifdef CONFIG_FB_NOTIFY
>> +static int xenkbd_fb_event(struct notifier_block *self,
>> +			   unsigned long action, void *data)
>> +{
>> +	struct xenkbd_info *info = container_of(self, struct xenkbd_info, nb);
>> +	struct fb_info *fb = registered_fb[0];
>> +
>> +	if (action != FB_EVENT_FB_REGISTERED || !fb)
>> +		return 0;
>> +
>> +	input_set_abs_params(info->ptr, ABS_X, 0, fb->var.xres_virtual, 0, 0);
>> +	input_set_abs_params(info->ptr, ABS_Y, 0, fb->var.yres_virtual, 0, 0);
>> +
>> +	return 0;
>> +}
>> +#endif
>> +#endif
>> +
>>   static int xenkbd_probe(struct xenbus_device *dev,
>>   				  const struct xenbus_device_id *id)
>>   {
>> -	int ret, i;
>> +	int ret, i, width, height;
>>   	unsigned int abs;
>>   	struct xenkbd_info *info;
>>   	struct input_dev *kbd, *ptr;
>> @@ -173,9 +196,22 @@ static int xenkbd_probe(struct xenbus_device *dev,
>>   	ptr->id.product = 0xfffe;
>>   
>>   	if (abs) {
>> +		width = XENFB_WIDTH;
>> +		height = XENFB_HEIGHT;
>> +#ifdef CONFIG_FB
>> +		if (registered_fb[0]) {
>> +			width = registered_fb[0]->var.xres_virtual;
>> +			height = registered_fb[0]->var.yres_virtual;
>> +		} else {
>> +#ifdef CONFIG_FB_NOTIFY
>> +			info->nb.notifier_call = xenkbd_fb_event;
>> +			fb_register_client(&info->nb);
>> +#endif
>> +		}
>> +#endif
>>   		__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, width, 0, 0);
>> +		input_set_abs_params(ptr, ABS_Y, 0, height, 0, 0);
>>   	} else {
>>   		input_set_capability(ptr, EV_REL, REL_X);
>>   		input_set_capability(ptr, EV_REL, REL_Y);
>> @@ -222,6 +258,10 @@ static int xenkbd_remove(struct xenbus_device *dev)
>>   	struct xenkbd_info *info = dev_get_drvdata(&dev->dev);
>>   
>>   	xenkbd_disconnect_backend(info);
>> +#ifdef CONFIG_FB_NOTIFY
>> +	if (info->nb.notifier_call)
>> +		fb_unregister_client(&info->nb);
>> +#endif
>>   	if (info->kbd)
>>   		input_unregister_device(info->kbd);
>>   	if (info->ptr)
>>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> https://lists.xen.org/xen-devel


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3] xen,input: try to read screen resolution for xen-kbdfront
  2017-01-30 15:10 [PATCH v3] xen,input: " Juergen Gross
@ 2017-02-09 13:45   ` Juergen Gross
  2017-02-17  9:08 ` Juergen Gross
  2017-02-17  9:08 ` [PATCH v3] xen,input: " Juergen Gross
  2 siblings, 0 replies; 9+ messages in thread
From: Juergen Gross @ 2017-02-09 13:45 UTC (permalink / raw)
  To: linux-kernel, linux-input, xen-devel; +Cc: dmitry.torokhov

On 30/01/17 16:10, Juergen Gross wrote:
> Instead of using the default resolution of 800*600 for the pointing
> device of xen-kbdfront try to read the resolution of the (virtual)
> framebuffer device. Use the default as fallback only.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Ping?

> ---
> V3: add case of late framebuffer registration (Oleksandr Andrushchenko)
> V2: get framebuffer resolution only if CONFIG_FB (Dmitry Torokhov)
> ---
>  drivers/input/misc/xen-kbdfront.c | 46 ++++++++++++++++++++++++++++++++++++---
>  1 file changed, 43 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
> index 3900875..9a20800 100644
> --- a/drivers/input/misc/xen-kbdfront.c
> +++ b/drivers/input/misc/xen-kbdfront.c
> @@ -16,6 +16,7 @@
>  #include <linux/kernel.h>
>  #include <linux/errno.h>
>  #include <linux/module.h>
> +#include <linux/fb.h>
>  #include <linux/input.h>
>  #include <linux/slab.h>
>  
> @@ -39,6 +40,9 @@ struct xenkbd_info {
>  	int irq;
>  	struct xenbus_device *xbdev;
>  	char phys[32];
> +#ifdef CONFIG_FB_NOTIFY
> +	struct notifier_block nb;
> +#endif
>  };
>  
>  static int xenkbd_remove(struct xenbus_device *);
> @@ -105,10 +109,29 @@ static irqreturn_t input_handler(int rq, void *dev_id)
>  	return IRQ_HANDLED;
>  }
>  
> +#ifdef CONFIG_FB
> +#ifdef CONFIG_FB_NOTIFY
> +static int xenkbd_fb_event(struct notifier_block *self,
> +			   unsigned long action, void *data)
> +{
> +	struct xenkbd_info *info = container_of(self, struct xenkbd_info, nb);
> +	struct fb_info *fb = registered_fb[0];
> +
> +	if (action != FB_EVENT_FB_REGISTERED || !fb)
> +		return 0;
> +
> +	input_set_abs_params(info->ptr, ABS_X, 0, fb->var.xres_virtual, 0, 0);
> +	input_set_abs_params(info->ptr, ABS_Y, 0, fb->var.yres_virtual, 0, 0);
> +
> +	return 0;
> +}
> +#endif
> +#endif
> +
>  static int xenkbd_probe(struct xenbus_device *dev,
>  				  const struct xenbus_device_id *id)
>  {
> -	int ret, i;
> +	int ret, i, width, height;
>  	unsigned int abs;
>  	struct xenkbd_info *info;
>  	struct input_dev *kbd, *ptr;
> @@ -173,9 +196,22 @@ static int xenkbd_probe(struct xenbus_device *dev,
>  	ptr->id.product = 0xfffe;
>  
>  	if (abs) {
> +		width = XENFB_WIDTH;
> +		height = XENFB_HEIGHT;
> +#ifdef CONFIG_FB
> +		if (registered_fb[0]) {
> +			width = registered_fb[0]->var.xres_virtual;
> +			height = registered_fb[0]->var.yres_virtual;
> +		} else {
> +#ifdef CONFIG_FB_NOTIFY
> +			info->nb.notifier_call = xenkbd_fb_event;
> +			fb_register_client(&info->nb);
> +#endif
> +		}
> +#endif
>  		__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, width, 0, 0);
> +		input_set_abs_params(ptr, ABS_Y, 0, height, 0, 0);
>  	} else {
>  		input_set_capability(ptr, EV_REL, REL_X);
>  		input_set_capability(ptr, EV_REL, REL_Y);
> @@ -222,6 +258,10 @@ static int xenkbd_remove(struct xenbus_device *dev)
>  	struct xenkbd_info *info = dev_get_drvdata(&dev->dev);
>  
>  	xenkbd_disconnect_backend(info);
> +#ifdef CONFIG_FB_NOTIFY
> +	if (info->nb.notifier_call)
> +		fb_unregister_client(&info->nb);
> +#endif
>  	if (info->kbd)
>  		input_unregister_device(info->kbd);
>  	if (info->ptr)
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3] xen, input: try to read screen resolution for xen-kbdfront
@ 2017-02-09 13:45   ` Juergen Gross
  0 siblings, 0 replies; 9+ messages in thread
From: Juergen Gross @ 2017-02-09 13:45 UTC (permalink / raw)
  To: linux-kernel, linux-input, xen-devel; +Cc: dmitry.torokhov

On 30/01/17 16:10, Juergen Gross wrote:
> Instead of using the default resolution of 800*600 for the pointing
> device of xen-kbdfront try to read the resolution of the (virtual)
> framebuffer device. Use the default as fallback only.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Ping?

> ---
> V3: add case of late framebuffer registration (Oleksandr Andrushchenko)
> V2: get framebuffer resolution only if CONFIG_FB (Dmitry Torokhov)
> ---
>  drivers/input/misc/xen-kbdfront.c | 46 ++++++++++++++++++++++++++++++++++++---
>  1 file changed, 43 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
> index 3900875..9a20800 100644
> --- a/drivers/input/misc/xen-kbdfront.c
> +++ b/drivers/input/misc/xen-kbdfront.c
> @@ -16,6 +16,7 @@
>  #include <linux/kernel.h>
>  #include <linux/errno.h>
>  #include <linux/module.h>
> +#include <linux/fb.h>
>  #include <linux/input.h>
>  #include <linux/slab.h>
>  
> @@ -39,6 +40,9 @@ struct xenkbd_info {
>  	int irq;
>  	struct xenbus_device *xbdev;
>  	char phys[32];
> +#ifdef CONFIG_FB_NOTIFY
> +	struct notifier_block nb;
> +#endif
>  };
>  
>  static int xenkbd_remove(struct xenbus_device *);
> @@ -105,10 +109,29 @@ static irqreturn_t input_handler(int rq, void *dev_id)
>  	return IRQ_HANDLED;
>  }
>  
> +#ifdef CONFIG_FB
> +#ifdef CONFIG_FB_NOTIFY
> +static int xenkbd_fb_event(struct notifier_block *self,
> +			   unsigned long action, void *data)
> +{
> +	struct xenkbd_info *info = container_of(self, struct xenkbd_info, nb);
> +	struct fb_info *fb = registered_fb[0];
> +
> +	if (action != FB_EVENT_FB_REGISTERED || !fb)
> +		return 0;
> +
> +	input_set_abs_params(info->ptr, ABS_X, 0, fb->var.xres_virtual, 0, 0);
> +	input_set_abs_params(info->ptr, ABS_Y, 0, fb->var.yres_virtual, 0, 0);
> +
> +	return 0;
> +}
> +#endif
> +#endif
> +
>  static int xenkbd_probe(struct xenbus_device *dev,
>  				  const struct xenbus_device_id *id)
>  {
> -	int ret, i;
> +	int ret, i, width, height;
>  	unsigned int abs;
>  	struct xenkbd_info *info;
>  	struct input_dev *kbd, *ptr;
> @@ -173,9 +196,22 @@ static int xenkbd_probe(struct xenbus_device *dev,
>  	ptr->id.product = 0xfffe;
>  
>  	if (abs) {
> +		width = XENFB_WIDTH;
> +		height = XENFB_HEIGHT;
> +#ifdef CONFIG_FB
> +		if (registered_fb[0]) {
> +			width = registered_fb[0]->var.xres_virtual;
> +			height = registered_fb[0]->var.yres_virtual;
> +		} else {
> +#ifdef CONFIG_FB_NOTIFY
> +			info->nb.notifier_call = xenkbd_fb_event;
> +			fb_register_client(&info->nb);
> +#endif
> +		}
> +#endif
>  		__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, width, 0, 0);
> +		input_set_abs_params(ptr, ABS_Y, 0, height, 0, 0);
>  	} else {
>  		input_set_capability(ptr, EV_REL, REL_X);
>  		input_set_capability(ptr, EV_REL, REL_Y);
> @@ -222,6 +258,10 @@ static int xenkbd_remove(struct xenbus_device *dev)
>  	struct xenkbd_info *info = dev_get_drvdata(&dev->dev);
>  
>  	xenkbd_disconnect_backend(info);
> +#ifdef CONFIG_FB_NOTIFY
> +	if (info->nb.notifier_call)
> +		fb_unregister_client(&info->nb);
> +#endif
>  	if (info->kbd)
>  		input_unregister_device(info->kbd);
>  	if (info->ptr)
> 


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v3] xen,input: try to read screen resolution for xen-kbdfront
@ 2017-01-30 15:10 Juergen Gross
  2017-02-09 13:45   ` [PATCH v3] xen, input: " Juergen Gross
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Juergen Gross @ 2017-01-30 15:10 UTC (permalink / raw)
  To: linux-kernel, linux-input, xen-devel; +Cc: dmitry.torokhov, Juergen Gross

Instead of using the default resolution of 800*600 for the pointing
device of xen-kbdfront try to read the resolution of the (virtual)
framebuffer device. Use the default as fallback only.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
V3: add case of late framebuffer registration (Oleksandr Andrushchenko)
V2: get framebuffer resolution only if CONFIG_FB (Dmitry Torokhov)
---
 drivers/input/misc/xen-kbdfront.c | 46 ++++++++++++++++++++++++++++++++++++---
 1 file changed, 43 insertions(+), 3 deletions(-)

diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
index 3900875..9a20800 100644
--- a/drivers/input/misc/xen-kbdfront.c
+++ b/drivers/input/misc/xen-kbdfront.c
@@ -16,6 +16,7 @@
 #include <linux/kernel.h>
 #include <linux/errno.h>
 #include <linux/module.h>
+#include <linux/fb.h>
 #include <linux/input.h>
 #include <linux/slab.h>
 
@@ -39,6 +40,9 @@ struct xenkbd_info {
 	int irq;
 	struct xenbus_device *xbdev;
 	char phys[32];
+#ifdef CONFIG_FB_NOTIFY
+	struct notifier_block nb;
+#endif
 };
 
 static int xenkbd_remove(struct xenbus_device *);
@@ -105,10 +109,29 @@ static irqreturn_t input_handler(int rq, void *dev_id)
 	return IRQ_HANDLED;
 }
 
+#ifdef CONFIG_FB
+#ifdef CONFIG_FB_NOTIFY
+static int xenkbd_fb_event(struct notifier_block *self,
+			   unsigned long action, void *data)
+{
+	struct xenkbd_info *info = container_of(self, struct xenkbd_info, nb);
+	struct fb_info *fb = registered_fb[0];
+
+	if (action != FB_EVENT_FB_REGISTERED || !fb)
+		return 0;
+
+	input_set_abs_params(info->ptr, ABS_X, 0, fb->var.xres_virtual, 0, 0);
+	input_set_abs_params(info->ptr, ABS_Y, 0, fb->var.yres_virtual, 0, 0);
+
+	return 0;
+}
+#endif
+#endif
+
 static int xenkbd_probe(struct xenbus_device *dev,
 				  const struct xenbus_device_id *id)
 {
-	int ret, i;
+	int ret, i, width, height;
 	unsigned int abs;
 	struct xenkbd_info *info;
 	struct input_dev *kbd, *ptr;
@@ -173,9 +196,22 @@ static int xenkbd_probe(struct xenbus_device *dev,
 	ptr->id.product = 0xfffe;
 
 	if (abs) {
+		width = XENFB_WIDTH;
+		height = XENFB_HEIGHT;
+#ifdef CONFIG_FB
+		if (registered_fb[0]) {
+			width = registered_fb[0]->var.xres_virtual;
+			height = registered_fb[0]->var.yres_virtual;
+		} else {
+#ifdef CONFIG_FB_NOTIFY
+			info->nb.notifier_call = xenkbd_fb_event;
+			fb_register_client(&info->nb);
+#endif
+		}
+#endif
 		__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, width, 0, 0);
+		input_set_abs_params(ptr, ABS_Y, 0, height, 0, 0);
 	} else {
 		input_set_capability(ptr, EV_REL, REL_X);
 		input_set_capability(ptr, EV_REL, REL_Y);
@@ -222,6 +258,10 @@ static int xenkbd_remove(struct xenbus_device *dev)
 	struct xenkbd_info *info = dev_get_drvdata(&dev->dev);
 
 	xenkbd_disconnect_backend(info);
+#ifdef CONFIG_FB_NOTIFY
+	if (info->nb.notifier_call)
+		fb_unregister_client(&info->nb);
+#endif
 	if (info->kbd)
 		input_unregister_device(info->kbd);
 	if (info->ptr)
-- 
2.10.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2017-02-17 19:48 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-30 15:10 [PATCH v3] xen, input: try to read screen resolution for xen-kbdfront Juergen Gross
  -- strict thread matches above, loose matches on Subject: below --
2017-01-30 15:10 [PATCH v3] xen,input: " Juergen Gross
2017-02-09 13:45 ` Juergen Gross
2017-02-09 13:45   ` [PATCH v3] xen, input: " Juergen Gross
2017-02-14  8:00   ` Oleksandr Andrushchenko
2017-02-17  9:08 ` Juergen Gross
2017-02-17  9:08 ` [PATCH v3] xen,input: " Juergen Gross
2017-02-17 19:48   ` Dmitry Torokhov
2017-02-17 19:48   ` [PATCH v3] xen, input: " Dmitry Torokhov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.