Input updates for Jornada720
Subsystems (5)
Russell King - ARM Linux
maintainercover Input updates for Jornada720
Dmitry,
Please apply this tested series of patches for Jornada 720 input support.
Thanks.
arch/arm/mach-sa1100/jornada720.c | 16 +++++++++++ drivers/input/keyboard/jornada720_kbd.c | 48 ++++++++++--------------------- drivers/input/touchscreen/jornada720_ts.c | 21 +++++++++----- 3 files changed, 45 insertions(+), 40 deletions(-)
Signature · 3 lines
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up according to speedtest.net.
PATCH 1/4 Input: jornada720_kbd - switch to devm_* APIs
Switch the jornada720_kbd driver to use the devm_* APIs. This is in preparation to removing the mach/irqs.h include from this driver.
--- drivers/input/keyboard/jornada720_kbd.c | 38 ++++++++------------------------- 1 file changed, 9 insertions(+), 29 deletions(-)
drivers/input/keyboard/jornada720_kbd.c +9 -29
@@ -53,6 +53,7 @@ static unsigned short jornada_std_keymap[128] = { /* ROW */struct jornadakbd {unsigned short keymap[ARRAY_SIZE (jornada_std_keymap)];struct input_dev *input; +int irq; };static irqreturn_t jornada720_kbd_interrupt (int irq,void *dev_id)
@@ -99,12 +100,10 @@ static int jornada720_kbd_probe(struct platform_device *pdev)struct input_dev *input_dev;int i, err; - jornadakbd =kzalloc (sizeof (struct jornadakbd ),GFP_KERNEL ); - input_dev =input_allocate_device (); -if (!jornadakbd || !input_dev) { - err = -ENOMEM ; - goto fail1; - } + jornadakbd =devm_kzalloc (&pdev->dev,sizeof (*jornadakbd),GFP_KERNEL ); + input_dev =devm_input_allocate_device (&pdev->dev); +if (!jornadakbd || !input_dev) +return -ENOMEM ;platform_set_drvdata (pdev, jornadakbd);
@@ -127,37 +126,18 @@ static int jornada720_kbd_probe(struct platform_device *pdev)input_set_capability (input_dev,EV_MSC ,MSC_SCAN ); - err =request_irq (IRQ_GPIO0 , - jornada720_kbd_interrupt, -IRQF_TRIGGER_FALLING , -"jornadakbd" , pdev); + err =devm_request_irq (&pdev->dev,IRQ_GPIO0 , jornada720_kbd_interrupt, +IRQF_TRIGGER_FALLING ,"jornadakbd" , pdev);if (err) {printk (KERN_INFO "jornadakbd720_kbd: Unable to grab IRQ\n" ); - goto fail1; +return err; } - err =input_register_device (jornadakbd->input); -if (err) - goto fail2; - -return 0 ; - - fail2:/* IRQ, DEVICE, MEMORY */ -free_irq (IRQ_GPIO0 , pdev); - fail1:/* DEVICE, MEMORY */ -input_free_device (input_dev); -kfree (jornadakbd); -return err; +return input_register_device (jornadakbd->input); };static int jornada720_kbd_remove (struct platform_device *pdev) { -struct jornadakbd *jornadakbd =platform_get_drvdata (pdev); - -free_irq (IRQ_GPIO0 , pdev); -input_unregister_device (jornadakbd->input); -kfree (jornadakbd); -return 0 ; }
Signature · 1 line
2.1.0
Dmitry Torokhov
maintainerRe: [PATCH 1/4] Input: jornada720_kbd - switch to devm_* APIs
Hi Russell,
Quoted 2 lines · Russell King
Switch the
jornada720_kbddriver to use the devm_* APIs. This is in preparation to removing themach/irqs.hinclude from this driver.
I already applied a version of this driver (without extraneous irq field and empty remove() method), why are you resending it?
Thanks.
Quoted 81 lines
Tested-by Adam Wysocki <[email protected]>Signed-off-by Russell King <[email protected]>--- drivers/input/keyboard/jornada720_kbd.c | 38 ++++++++------------------------- 1 file changed, 9 insertions(+), 29 deletions(-)drivers/input/keyboard/jornada720_kbd.c +9
-29@@ -53,6 +53,7 @@ static unsigned short jornada_std_keymap[128] = { /* ROW */struct jornadakbd {unsigned short keymap[ARRAY_SIZE (jornada_std_keymap)];struct input_dev *input; +int irq; };static irqreturn_t jornada720_kbd_interrupt (int irq,void *dev_id)@@ -99,12 +100,10 @@ static int jornada720_kbd_probe(struct platform_device *pdev)struct input_dev *input_dev;int i, err; - jornadakbd =kzalloc (sizeof (struct jornadakbd ),GFP_KERNEL ); - input_dev =input_allocate_device (); -if (!jornadakbd || !input_dev) { - err = -ENOMEM ; - goto fail1; - } + jornadakbd =devm_kzalloc (&pdev->dev,sizeof (*jornadakbd),GFP_KERNEL ); + input_dev =devm_input_allocate_device (&pdev->dev); +if (!jornadakbd || !input_dev) +return -ENOMEM ;platform_set_drvdata (pdev, jornadakbd);@@ -127,37 +126,18 @@ static int jornada720_kbd_probe(struct platform_device *pdev)input_set_capability (input_dev,EV_MSC ,MSC_SCAN ); - err =request_irq (IRQ_GPIO0 , - jornada720_kbd_interrupt, -IRQF_TRIGGER_FALLING , -"jornadakbd" , pdev); + err =devm_request_irq (&pdev->dev,IRQ_GPIO0 , jornada720_kbd_interrupt, +IRQF_TRIGGER_FALLING ,"jornadakbd" , pdev);if (err) {printk (KERN_INFO "jornadakbd720_kbd: Unable to grab IRQ\n" ); - goto fail1; +return err; } - err =input_register_device (jornadakbd->input); -if (err) - goto fail2; - -return 0 ; - - fail2:/* IRQ, DEVICE, MEMORY */ -free_irq (IRQ_GPIO0 , pdev); - fail1:/* DEVICE, MEMORY */ -input_free_device (input_dev); -kfree (jornadakbd); -return err; +return input_register_device (jornadakbd->input); };static int jornada720_kbd_remove (struct platform_device *pdev) { -struct jornadakbd *jornadakbd =platform_get_drvdata (pdev); - -free_irq (IRQ_GPIO0 , pdev); -input_unregister_device (jornadakbd->input); -kfree (jornadakbd); -return 0 ; }Signature · 1 line
2.1.0
Signature · 1 line
Dmitry
PATCH 2/4 Input: jornada720_kbd - get rid of mach/irqs.h include
In reply to Russell King - ARM LinuxSwitch the jornada720 keyboard driver to obtain its interrupt from the platform device, rather than via a hard-coded interrupt number obtained from the mach/irqs.h header.
--- arch/arm/mach-sa1100/jornada720.c | 6 ++++++ drivers/input/keyboard/jornada720_kbd.c | 11 +++++++---- 2 files changed, 13 insertions(+), 4 deletions(-)
arch/arm/mach-sa1100/jornada720.c +6 -0
@@ -217,9 +217,15 @@ static struct platform_device jornada_ssp_device = { .id = -1, }; +static struct resource jornada_kbd_resources[] = { +DEFINE_RES_IRQ (IRQ_GPIO0 ), +}; +static struct platform_device jornada_kbd_device = { .name ="jornada720_kbd" , .id =-1 , + .num_resources =ARRAY_SIZE (jornada_kbd_resources), + .resource = jornada_kbd_resources, };static struct platform_device jornada_ts_device = {
drivers/input/keyboard/jornada720_kbd.c +7 -4
@@ -26,7 +26,6 @@#include <mach/jornada720.h> #include <mach/hardware.h> -#include <mach/irqs.h> MODULE_AUTHOR ("Kristoffer Ericson <[email protected]>" );MODULE_DESCRIPTION ("HP Jornada 710/720/728 keyboard driver" );
@@ -98,7 +97,11 @@ static int jornada720_kbd_probe(struct platform_device *pdev) {struct jornadakbd *jornadakbd;struct input_dev *input_dev; -int i, err; +int i, err, irq; + + irq =platform_get_irq (pdev,0 ); +if (irq <=0 ) +return irq <0 ? irq : -EINVAL ; jornadakbd =devm_kzalloc (&pdev->dev,sizeof (*jornadakbd),GFP_KERNEL ); input_dev =devm_input_allocate_device (&pdev->dev);
@@ -126,10 +129,10 @@ static int jornada720_kbd_probe(struct platform_device *pdev)input_set_capability (input_dev,EV_MSC ,MSC_SCAN ); - err =devm_request_irq (&pdev->dev,IRQ_GPIO0 , jornada720_kbd_interrupt, + err =devm_request_irq (&pdev->dev, irq, jornada720_kbd_interrupt,IRQF_TRIGGER_FALLING ,"jornadakbd" , pdev);if (err) { -printk (KERN_INFO "jornadakbd720_kbd: Unable to grab IRQ\n" ); +dev_err (&pdev->dev,"unable to grab IRQ%d: %d\n" , irq, err);return err; }
Signature · 1 line
2.1.0
Dmitry Torokhov
maintainerPATCH 2/4 Input: jornada720_kbd - get rid of mach/irqs.h include
Quoted 6 lines · Russell King
Switch the jornada720 keyboard driver to obtain its interrupt from the platform device, rather than via a hard-coded interrupt number obtained from the
mach/irqs.hheader.Tested-by Adam Wysocki <[email protected]>Signed-off-by Russell King <[email protected]>
This has already been applied as well.
Quoted 66 lines
--- arch/arm/mach-sa1100/jornada720.c | 6 ++++++ drivers/input/keyboard/jornada720_kbd.c | 11 +++++++---- 2 files changed, 13 insertions(+), 4 deletions(-)arch/arm/mach-sa1100/jornada720.c +6
-0@@ -217,9 +217,15 @@ static struct platform_device jornada_ssp_device = { .id = -1, }; +static struct resource jornada_kbd_resources[] = { +DEFINE_RES_IRQ (IRQ_GPIO0 ), +}; +static struct platform_device jornada_kbd_device = { .name ="jornada720_kbd" , .id =-1 , + .num_resources =ARRAY_SIZE (jornada_kbd_resources), + .resource = jornada_kbd_resources, };static struct platform_device jornada_ts_device = {drivers/input/keyboard/jornada720_kbd.c +7
-4@@ -26,7 +26,6 @@#include <mach/jornada720.h> #include <mach/hardware.h> -#include <mach/irqs.h> MODULE_AUTHOR ("Kristoffer Ericson <[email protected]>" );MODULE_DESCRIPTION ("HP Jornada 710/720/728 keyboard driver" );@@ -98,7 +97,11 @@ static int jornada720_kbd_probe(struct platform_device *pdev) {struct jornadakbd *jornadakbd;struct input_dev *input_dev; -int i, err; +int i, err, irq; + + irq =platform_get_irq (pdev,0 ); +if (irq <=0 ) +return irq <0 ? irq : -EINVAL ; jornadakbd =devm_kzalloc (&pdev->dev,sizeof (*jornadakbd),GFP_KERNEL ); input_dev =devm_input_allocate_device (&pdev->dev);@@ -126,10 +129,10 @@ static int jornada720_kbd_probe(struct platform_device *pdev)input_set_capability (input_dev,EV_MSC ,MSC_SCAN ); - err =devm_request_irq (&pdev->dev,IRQ_GPIO0 , jornada720_kbd_interrupt, + err =devm_request_irq (&pdev->dev, irq, jornada720_kbd_interrupt,IRQF_TRIGGER_FALLING ,"jornadakbd" , pdev);if (err) { -printk (KERN_INFO "jornadakbd720_kbd: Unable to grab IRQ\n" ); +dev_err (&pdev->dev,"unable to grab IRQ%d: %d\n" , irq, err);return err; }Signature · 1 line
2.1.0
Signature · 1 line
Dmitry
PATCH 3/4 Input: jornada720_kbd - remove unneeded mach/hardware.h include
In reply to Russell King - ARM LinuxThe Jornada720 keyboard driver does not make use of anything from the mach/hardware.h header, so this header can be removed.
--- drivers/input/keyboard/jornada720_kbd.c | 1 - 1 file changed, 1 deletion(-)
drivers/input/keyboard/jornada720_kbd.c +0 -1
@@ -25,7 +25,6 @@#include <linux/slab.h> #include <mach/jornada720.h> -#include <mach/hardware.h> MODULE_AUTHOR ("Kristoffer Ericson <[email protected]>" );MODULE_DESCRIPTION ("HP Jornada 710/720/728 keyboard driver" );
Signature · 1 line
2.1.0
Re: [PATCH 3/4] Input: jornada720_kbd - remove unneeded mach/hardware.h include
Quoted 5 lines · Russell King
The Jornada720 keyboard driver does not make use of anything from the
mach/hardware.hheader, so this header can be removed.Tested-by Adam Wysocki <[email protected]>Signed-off-by Russell King <[email protected]>
Applied, thank you.
Quoted 19 lines
--- drivers/input/keyboard/jornada720_kbd.c | 1 - 1 file changed, 1 deletion(-)drivers/input/keyboard/jornada720_kbd.c +0
-1@@ -25,7 +25,6 @@#include <linux/slab.h> #include <mach/jornada720.h> -#include <mach/hardware.h> MODULE_AUTHOR ("Kristoffer Ericson <[email protected]>" );MODULE_DESCRIPTION ("HP Jornada 710/720/728 keyboard driver" );Signature · 1 line
2.1.0
Signature · 1 line
Dmitry
PATCH 4/4 Input: jornada720_ts - get rid of mach/irqs.h and mach/hardware.h includes
In reply to Russell King - ARM LinuxSwitch the jornada720 touchscreen driver to obtain its gpio from the platform device via gpiolib and derive the interrupt from the GPIO, rather than via a hard-coded interrupt number obtained from the mach/irqs.h and mach/hardware.h headers.
--- arch/arm/mach-sa1100/jornada720.c | 10 ++++++++++ drivers/input/touchscreen/jornada720_ts.c | 21 ++++++++++++++------- 2 files changed, 24 insertions(+), 7 deletions(-)
arch/arm/mach-sa1100/jornada720.c +10 -0
@@ -17,6 +17,7 @@#include <linux/kernel.h> #include <linux/tty.h> #include <linux/delay.h> +#include <linux/gpio/machine.h> #include <linux/platform_data/sa11x0-serial.h> #include <linux/platform_device.h> #include <linux/ioport.h>
@@ -228,6 +229,13 @@ static struct platform_device jornada_kbd_device = { .resource = jornada_kbd_resources, }; +static struct gpiod_lookup_table jornada_ts_gpiod_table = { + .dev_id ="jornada_ts" , + .table = { +GPIO_LOOKUP ("gpio" ,9 ,"penup" ,GPIO_ACTIVE_HIGH ), + }, +}; +static struct platform_device jornada_ts_device = { .name ="jornada_ts" , .id =-1 ,
@@ -256,6 +264,8 @@ static int __init jornada720_init(void)GPSR =GPIO_GPIO20 ;/* restart gpio20 */ udelay (20 );/* give it some time to restart */ +gpiod_add_lookup_table (&jornada_ts_gpiod_table); + ret =platform_add_devices (devices,ARRAY_SIZE (devices)); }
drivers/input/touchscreen/jornada720_ts.c +14 -7
@@ -13,6 +13,7 @@* HP Jornada 710/720/729 Touchscreen Driver */ +#include <linux/gpio/consumer.h> #include <linux/platform_device.h> #include <linux/input.h> #include <linux/interrupt.h>
@@ -20,9 +21,7 @@#include <linux/slab.h> #include <linux/io.h> -#include <mach/hardware.h> #include <mach/jornada720.h> -#include <mach/irqs.h> MODULE_AUTHOR ("Kristoffer Ericson <[email protected]>" );MODULE_DESCRIPTION ("HP Jornada 710/720/728 touchscreen driver" );
@@ -30,6 +29,7 @@ MODULE_LICENSE("GPL v2");struct jornada_ts {struct input_dev *dev; +struct gpio_desc *gpio;int x_data[4 ];/* X sample values */ int y_data[4 ];/* Y sample values */ };
@@ -71,8 +71,8 @@ static irqreturn_t jornada720_ts_interrupt(int irq, void *dev_id)struct input_dev *input = jornada_ts->dev;int x, y; -/* If GPIO_GPIO9 is set to high then report pen up */ -if (GPLR &GPIO_GPIO (9 )) { +/* If gpio is high then report pen up */ +if (gpiod_get_value (jornada_ts->gpio)) {input_report_key (input,BTN_TOUCH ,0 );input_sync (input); }else {
@@ -101,7 +101,7 @@ static int jornada720_ts_probe(struct platform_device *pdev) {struct jornada_ts *jornada_ts;struct input_dev *input_dev; -int error; +int error, irq; jornada_ts =devm_kzalloc (&pdev->dev,sizeof (*jornada_ts),GFP_KERNEL );if (!jornada_ts)
@@ -113,6 +113,14 @@ static int jornada720_ts_probe(struct platform_device *pdev)platform_set_drvdata (pdev, jornada_ts); + jornada_ts->gpio =devm_gpiod_get (&pdev->dev,"penup" ,GPIOD_IN ); +if (IS_ERR (jornada_ts->gpio)) +return PTR_ERR (jornada_ts->gpio); + + irq =gpiod_to_irq (jornada_ts->gpio); +if (irq <=0 ) +return irq <0 ? irq : -EINVAL ; + jornada_ts->dev = input_dev; input_dev->name ="HP Jornada 7xx Touchscreen" ;
@@ -125,8 +133,7 @@ static int jornada720_ts_probe(struct platform_device *pdev)input_set_abs_params (input_dev,ABS_X ,270 ,3900 ,0 ,0 );input_set_abs_params (input_dev,ABS_Y ,180 ,3700 ,0 ,0 ); - error =devm_request_irq (&pdev->dev,IRQ_GPIO9 , - jornada720_ts_interrupt, + error =devm_request_irq (&pdev->dev, irq, jornada720_ts_interrupt,IRQF_TRIGGER_RISING ,"HP7XX Touchscreen driver" , pdev);if (error) {
Signature · 1 line
2.1.0
PATCH 4/4 Input: jornada720_ts - get rid of mach/irqs.h and mach/hardware.h includes
Quoted 7 lines · Russell King
Switch the jornada720 touchscreen driver to obtain its gpio from the platform device via gpiolib and derive the interrupt from the GPIO, rather than via a hard-coded interrupt number obtained from the
mach/irqs.handmach/hardware.hheaders.Tested-by Adam Wysocki <[email protected]>Signed-off-by Russell King <[email protected]>
Applied, thank you.
Quoted 118 lines
--- arch/arm/mach-sa1100/jornada720.c | 10 ++++++++++ drivers/input/touchscreen/jornada720_ts.c | 21 ++++++++++++++------- 2 files changed, 24 insertions(+), 7 deletions(-)arch/arm/mach-sa1100/jornada720.c +10
-0@@ -17,6 +17,7 @@#include <linux/kernel.h> #include <linux/tty.h> #include <linux/delay.h> +#include <linux/gpio/machine.h> #include <linux/platform_data/sa11x0-serial.h> #include <linux/platform_device.h> #include <linux/ioport.h> @@ -228,6 +229,13 @@ static struct platform_device jornada_kbd_device = { .resource = jornada_kbd_resources, }; +static struct gpiod_lookup_table jornada_ts_gpiod_table = { + .dev_id ="jornada_ts" , + .table = { +GPIO_LOOKUP ("gpio" ,9 ,"penup" ,GPIO_ACTIVE_HIGH ), + }, +}; +static struct platform_device jornada_ts_device = { .name ="jornada_ts" , .id =-1 ,@@ -256,6 +264,8 @@ static int __init jornada720_init(void)GPSR =GPIO_GPIO20 ;/* restart gpio20 */ udelay (20 );/* give it some time to restart */ +gpiod_add_lookup_table (&jornada_ts_gpiod_table); + ret =platform_add_devices (devices,ARRAY_SIZE (devices)); }drivers/input/touchscreen/jornada720_ts.c +14
-7@@ -13,6 +13,7 @@* HP Jornada 710/720/729 Touchscreen Driver */ +#include <linux/gpio/consumer.h> #include <linux/platform_device.h> #include <linux/input.h> #include <linux/interrupt.h> @@ -20,9 +21,7 @@#include <linux/slab.h> #include <linux/io.h> -#include <mach/hardware.h> #include <mach/jornada720.h> -#include <mach/irqs.h> MODULE_AUTHOR ("Kristoffer Ericson <[email protected]>" );MODULE_DESCRIPTION ("HP Jornada 710/720/728 touchscreen driver" );@@ -30,6 +29,7 @@ MODULE_LICENSE("GPL v2");struct jornada_ts {struct input_dev *dev; +struct gpio_desc *gpio;int x_data[4 ];/* X sample values */ int y_data[4 ];/* Y sample values */ };@@ -71,8 +71,8 @@ static irqreturn_t jornada720_ts_interrupt(int irq, void *dev_id)struct input_dev *input = jornada_ts->dev;int x, y; -/* If GPIO_GPIO9 is set to high then report pen up */ -if (GPLR &GPIO_GPIO (9 )) { +/* If gpio is high then report pen up */ +if (gpiod_get_value (jornada_ts->gpio)) {input_report_key (input,BTN_TOUCH ,0 );input_sync (input); }else {@@ -101,7 +101,7 @@ static int jornada720_ts_probe(struct platform_device *pdev) {struct jornada_ts *jornada_ts;struct input_dev *input_dev; -int error; +int error, irq; jornada_ts =devm_kzalloc (&pdev->dev,sizeof (*jornada_ts),GFP_KERNEL );if (!jornada_ts)@@ -113,6 +113,14 @@ static int jornada720_ts_probe(struct platform_device *pdev)platform_set_drvdata (pdev, jornada_ts); + jornada_ts->gpio =devm_gpiod_get (&pdev->dev,"penup" ,GPIOD_IN ); +if (IS_ERR (jornada_ts->gpio)) +return PTR_ERR (jornada_ts->gpio); + + irq =gpiod_to_irq (jornada_ts->gpio); +if (irq <=0 ) +return irq <0 ? irq : -EINVAL ; + jornada_ts->dev = input_dev; input_dev->name ="HP Jornada 7xx Touchscreen" ;@@ -125,8 +133,7 @@ static int jornada720_ts_probe(struct platform_device *pdev)input_set_abs_params (input_dev,ABS_X ,270 ,3900 ,0 ,0 );input_set_abs_params (input_dev,ABS_Y ,180 ,3700 ,0 ,0 ); - error =devm_request_irq (&pdev->dev,IRQ_GPIO9 , - jornada720_ts_interrupt, + error =devm_request_irq (&pdev->dev, irq, jornada720_ts_interrupt,IRQF_TRIGGER_RISING ,"HP7XX Touchscreen driver" , pdev);if (error) {Signature · 1 line
2.1.0
Signature · 1 line
Dmitry