* A few changes to pxa27x_keypad @ 2009-07-21 8:08 Dmitry Torokhov 2009-07-21 10:44 ` Mike Rapoport 0 siblings, 1 reply; 10+ messages in thread From: Dmitry Torokhov @ 2009-07-21 8:08 UTC (permalink / raw) To: Eric Miao; +Cc: linux-input Hi Eric, I made a few adjustments to the pxa27x_keypad driver and was wondering if you would be able to give it a sping and check if I broke it or not. Thanks! -- Dmitry Input: pxa27x_keypad - remove extra clk_disable From: Dmitry Torokhov <dmitry.torokhov@gmail.com> clk_disable() in remove method is not needed since we already have clk_disable in pxa27x_keypad_close(). Also make sure the driver uses resource_size() and helpers from include/input/matrix_keypad.h Signed-off-by: Dmitry Torokhov <dtor@mail.ru> --- arch/arm/mach-pxa/include/mach/pxa27x_keypad.h | 3 +- drivers/input/keyboard/pxa27x_keypad.c | 43 +++++++++++------------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h index d5a48a9..63e8965 100644 --- a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h +++ b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h @@ -2,6 +2,7 @@ #define __ASM_ARCH_PXA27x_KEYPAD_H #include <linux/input.h> +#include <linux/input/matrix_keypad.h> #define MAX_MATRIX_KEY_ROWS (8) #define MAX_MATRIX_KEY_COLS (8) @@ -51,8 +52,6 @@ struct pxa27x_keypad_platform_data { unsigned int debounce_interval; }; -#define KEY(row, col, val) (((row) << 28) | ((col) << 24) | (val)) - extern void pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info); #endif /* __ASM_ARCH_PXA27x_KEYPAD_H */ diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c index 0d2fc64..0943238 100644 --- a/drivers/input/keyboard/pxa27x_keypad.c +++ b/drivers/input/keyboard/pxa27x_keypad.c @@ -25,6 +25,7 @@ #include <linux/platform_device.h> #include <linux/clk.h> #include <linux/err.h> +#include <linux/input/matrix_keypad.h> #include <asm/mach/arch.h> #include <asm/mach/map.h> @@ -107,7 +108,7 @@ struct pxa27x_keypad { int irq; /* matrix key code map */ - unsigned int matrix_keycodes[MAX_MATRIX_KEY_NUM]; + unsigned short matrix_keycodes[MAX_MATRIX_KEY_NUM]; /* state row bits of each column scan */ uint32_t matrix_key_state[MAX_MATRIX_KEY_COLS]; @@ -124,21 +125,21 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) { struct pxa27x_keypad_platform_data *pdata = keypad->pdata; struct input_dev *input_dev = keypad->input_dev; - unsigned int *key; int i; - key = &pdata->matrix_key_map[0]; - for (i = 0; i < pdata->matrix_key_map_size; i++, key++) { - int row = ((*key) >> 28) & 0xf; - int col = ((*key) >> 24) & 0xf; - int code = (*key) & 0xffffff; + for (i = 0; i < pdata->matrix_key_map_size; i++) { + unsigned int key = pdata->matrix_key_map[i]; + unsigned int row = KEY_ROW(key); + unsigned int col = KEY_COL(key); + unsigned short code = KEY_VAL(key); keypad->matrix_keycodes[(row << 3) + col] = code; - set_bit(code, input_dev->keybit); + __set_bit(code, input_dev->keybit); } + __clear_bit(KEY_RESERVED, input_dev->keybit); for (i = 0; i < pdata->direct_key_num; i++) - set_bit(pdata->direct_key_map[i], input_dev->keybit); + __set_bit(pdata->direct_key_map[i], input_dev->keybit); keypad->rotary_up_key[0] = pdata->rotary0_up_key; keypad->rotary_up_key[1] = pdata->rotary1_up_key; @@ -149,18 +150,18 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) if (pdata->enable_rotary0) { if (pdata->rotary0_up_key && pdata->rotary0_down_key) { - set_bit(pdata->rotary0_up_key, input_dev->keybit); - set_bit(pdata->rotary0_down_key, input_dev->keybit); + __set_bit(pdata->rotary0_up_key, input_dev->keybit); + __set_bit(pdata->rotary0_down_key, input_dev->keybit); } else - set_bit(pdata->rotary0_rel_code, input_dev->relbit); + __set_bit(pdata->rotary0_rel_code, input_dev->relbit); } if (pdata->enable_rotary1) { if (pdata->rotary1_up_key && pdata->rotary1_down_key) { - set_bit(pdata->rotary1_up_key, input_dev->keybit); - set_bit(pdata->rotary1_down_key, input_dev->keybit); + __set_bit(pdata->rotary1_up_key, input_dev->keybit); + __set_bit(pdata->rotary1_down_key, input_dev->keybit); } else - set_bit(pdata->rotary1_rel_code, input_dev->relbit); + __set_bit(pdata->rotary1_rel_code, input_dev->relbit); } } @@ -425,8 +426,6 @@ static int pxa27x_keypad_resume(struct platform_device *pdev) #define pxa27x_keypad_resume NULL #endif -#define res_size(res) ((res)->end - (res)->start + 1) - static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) { struct pxa27x_keypad *keypad; @@ -461,14 +460,14 @@ static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) goto failed_free; } - res = request_mem_region(res->start, res_size(res), pdev->name); + res = request_mem_region(res->start, resource_size(res), pdev->name); if (res == NULL) { dev_err(&pdev->dev, "failed to request I/O memory\n"); error = -EBUSY; goto failed_free; } - keypad->mmio_base = ioremap(res->start, res_size(res)); + keypad->mmio_base = ioremap(res->start, resource_size(res)); if (keypad->mmio_base == NULL) { dev_err(&pdev->dev, "failed to remap I/O memory\n"); error = -ENXIO; @@ -540,7 +539,7 @@ failed_put_clk: failed_free_io: iounmap(keypad->mmio_base); failed_free_mem: - release_mem_region(res->start, res_size(res)); + release_mem_region(res->start, resource_size(res)); failed_free: kfree(keypad); return error; @@ -552,8 +551,6 @@ static int __devexit pxa27x_keypad_remove(struct platform_device *pdev) struct resource *res; free_irq(keypad->irq, pdev); - - clk_disable(keypad->clk); clk_put(keypad->clk); input_unregister_device(keypad->input_dev); @@ -562,7 +559,7 @@ static int __devexit pxa27x_keypad_remove(struct platform_device *pdev) iounmap(keypad->mmio_base); res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - release_mem_region(res->start, res_size(res)); + release_mem_region(res->start, resource_size(res)); platform_set_drvdata(pdev, NULL); kfree(keypad); ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: A few changes to pxa27x_keypad 2009-07-21 8:08 A few changes to pxa27x_keypad Dmitry Torokhov @ 2009-07-21 10:44 ` Mike Rapoport 2009-07-23 6:30 ` Dmitry Torokhov 0 siblings, 1 reply; 10+ messages in thread From: Mike Rapoport @ 2009-07-21 10:44 UTC (permalink / raw) To: Dmitry Torokhov; +Cc: Eric Miao, linux-input Hi Dmitry, Dmitry Torokhov wrote: > Hi Eric, > > I made a few adjustments to the pxa27x_keypad driver and was wondering > if you would be able to give it a sping and check if I broke it or not. Apparently not :) Tested-by: Mike Rapoport <mike@compulab.co.il> > Thanks! > > -- > Dmitry > > Input: pxa27x_keypad - remove extra clk_disable > > From: Dmitry Torokhov <dmitry.torokhov@gmail.com> > > clk_disable() in remove method is not needed since we already > have clk_disable in pxa27x_keypad_close(). > > Also make sure the driver uses resource_size() and helpers from > include/input/matrix_keypad.h > > Signed-off-by: Dmitry Torokhov <dtor@mail.ru> > --- > > arch/arm/mach-pxa/include/mach/pxa27x_keypad.h | 3 +- > drivers/input/keyboard/pxa27x_keypad.c | 43 +++++++++++------------- > 2 files changed, 21 insertions(+), 25 deletions(-) > > > diff --git a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h > index d5a48a9..63e8965 100644 > --- a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h > +++ b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h > @@ -2,6 +2,7 @@ > #define __ASM_ARCH_PXA27x_KEYPAD_H > > #include <linux/input.h> > +#include <linux/input/matrix_keypad.h> > > #define MAX_MATRIX_KEY_ROWS (8) > #define MAX_MATRIX_KEY_COLS (8) > @@ -51,8 +52,6 @@ struct pxa27x_keypad_platform_data { > unsigned int debounce_interval; > }; > > -#define KEY(row, col, val) (((row) << 28) | ((col) << 24) | (val)) > - > extern void pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info); > > #endif /* __ASM_ARCH_PXA27x_KEYPAD_H */ > diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c > index 0d2fc64..0943238 100644 > --- a/drivers/input/keyboard/pxa27x_keypad.c > +++ b/drivers/input/keyboard/pxa27x_keypad.c > @@ -25,6 +25,7 @@ > #include <linux/platform_device.h> > #include <linux/clk.h> > #include <linux/err.h> > +#include <linux/input/matrix_keypad.h> > > #include <asm/mach/arch.h> > #include <asm/mach/map.h> > @@ -107,7 +108,7 @@ struct pxa27x_keypad { > int irq; > > /* matrix key code map */ > - unsigned int matrix_keycodes[MAX_MATRIX_KEY_NUM]; > + unsigned short matrix_keycodes[MAX_MATRIX_KEY_NUM]; > > /* state row bits of each column scan */ > uint32_t matrix_key_state[MAX_MATRIX_KEY_COLS]; > @@ -124,21 +125,21 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) > { > struct pxa27x_keypad_platform_data *pdata = keypad->pdata; > struct input_dev *input_dev = keypad->input_dev; > - unsigned int *key; > int i; > > - key = &pdata->matrix_key_map[0]; > - for (i = 0; i < pdata->matrix_key_map_size; i++, key++) { > - int row = ((*key) >> 28) & 0xf; > - int col = ((*key) >> 24) & 0xf; > - int code = (*key) & 0xffffff; > + for (i = 0; i < pdata->matrix_key_map_size; i++) { > + unsigned int key = pdata->matrix_key_map[i]; > + unsigned int row = KEY_ROW(key); > + unsigned int col = KEY_COL(key); > + unsigned short code = KEY_VAL(key); > > keypad->matrix_keycodes[(row << 3) + col] = code; > - set_bit(code, input_dev->keybit); > + __set_bit(code, input_dev->keybit); > } > + __clear_bit(KEY_RESERVED, input_dev->keybit); > > for (i = 0; i < pdata->direct_key_num; i++) > - set_bit(pdata->direct_key_map[i], input_dev->keybit); > + __set_bit(pdata->direct_key_map[i], input_dev->keybit); > > keypad->rotary_up_key[0] = pdata->rotary0_up_key; > keypad->rotary_up_key[1] = pdata->rotary1_up_key; > @@ -149,18 +150,18 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) > > if (pdata->enable_rotary0) { > if (pdata->rotary0_up_key && pdata->rotary0_down_key) { > - set_bit(pdata->rotary0_up_key, input_dev->keybit); > - set_bit(pdata->rotary0_down_key, input_dev->keybit); > + __set_bit(pdata->rotary0_up_key, input_dev->keybit); > + __set_bit(pdata->rotary0_down_key, input_dev->keybit); > } else > - set_bit(pdata->rotary0_rel_code, input_dev->relbit); > + __set_bit(pdata->rotary0_rel_code, input_dev->relbit); > } > > if (pdata->enable_rotary1) { > if (pdata->rotary1_up_key && pdata->rotary1_down_key) { > - set_bit(pdata->rotary1_up_key, input_dev->keybit); > - set_bit(pdata->rotary1_down_key, input_dev->keybit); > + __set_bit(pdata->rotary1_up_key, input_dev->keybit); > + __set_bit(pdata->rotary1_down_key, input_dev->keybit); > } else > - set_bit(pdata->rotary1_rel_code, input_dev->relbit); > + __set_bit(pdata->rotary1_rel_code, input_dev->relbit); > } > } > > @@ -425,8 +426,6 @@ static int pxa27x_keypad_resume(struct platform_device *pdev) > #define pxa27x_keypad_resume NULL > #endif > > -#define res_size(res) ((res)->end - (res)->start + 1) > - > static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) > { > struct pxa27x_keypad *keypad; > @@ -461,14 +460,14 @@ static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) > goto failed_free; > } > > - res = request_mem_region(res->start, res_size(res), pdev->name); > + res = request_mem_region(res->start, resource_size(res), pdev->name); > if (res == NULL) { > dev_err(&pdev->dev, "failed to request I/O memory\n"); > error = -EBUSY; > goto failed_free; > } > > - keypad->mmio_base = ioremap(res->start, res_size(res)); > + keypad->mmio_base = ioremap(res->start, resource_size(res)); > if (keypad->mmio_base == NULL) { > dev_err(&pdev->dev, "failed to remap I/O memory\n"); > error = -ENXIO; > @@ -540,7 +539,7 @@ failed_put_clk: > failed_free_io: > iounmap(keypad->mmio_base); > failed_free_mem: > - release_mem_region(res->start, res_size(res)); > + release_mem_region(res->start, resource_size(res)); > failed_free: > kfree(keypad); > return error; > @@ -552,8 +551,6 @@ static int __devexit pxa27x_keypad_remove(struct platform_device *pdev) > struct resource *res; > > free_irq(keypad->irq, pdev); > - > - clk_disable(keypad->clk); > clk_put(keypad->clk); > > input_unregister_device(keypad->input_dev); > @@ -562,7 +559,7 @@ static int __devexit pxa27x_keypad_remove(struct platform_device *pdev) > iounmap(keypad->mmio_base); > > res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > - release_mem_region(res->start, res_size(res)); > + release_mem_region(res->start, resource_size(res)); > > platform_set_drvdata(pdev, NULL); > kfree(keypad); > -- > 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 -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: A few changes to pxa27x_keypad 2009-07-21 10:44 ` Mike Rapoport @ 2009-07-23 6:30 ` Dmitry Torokhov 2009-07-23 7:28 ` Dmitry Torokhov 0 siblings, 1 reply; 10+ messages in thread From: Dmitry Torokhov @ 2009-07-23 6:30 UTC (permalink / raw) To: Mike Rapoport; +Cc: Eric Miao, linux-input On Tue, Jul 21, 2009 at 01:44:56PM +0300, Mike Rapoport wrote: > Hi Dmitry, > > Dmitry Torokhov wrote: > > Hi Eric, > > > > I made a few adjustments to the pxa27x_keypad driver and was wondering > > if you would be able to give it a sping and check if I broke it or not. > > Apparently not :) > Tested-by: Mike Rapoport <mike@compulab.co.il> > Cool, thanks for testing. I have another one for you then ;) TIA! -- Dmitry Input: pxa27x_keypad - switch to using dev_pm_ops Signed-off-by: Dmitry Torokhov <dtor@mail.ru> --- drivers/input/keyboard/pxa27x_keypad.c | 17 ++++++++++++----- 1 files changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c index 0943238..847b40b 100644 --- a/drivers/input/keyboard/pxa27x_keypad.c +++ b/drivers/input/keyboard/pxa27x_keypad.c @@ -389,8 +389,9 @@ static void pxa27x_keypad_close(struct input_dev *dev) } #ifdef CONFIG_PM -static int pxa27x_keypad_suspend(struct platform_device *pdev, pm_message_t state) +static int pxa27x_keypad_suspend(struct device *dev) { + struct platform_device *pdev = to_platform_device(dev); struct pxa27x_keypad *keypad = platform_get_drvdata(pdev); clk_disable(keypad->clk); @@ -401,8 +402,9 @@ static int pxa27x_keypad_suspend(struct platform_device *pdev, pm_message_t stat return 0; } -static int pxa27x_keypad_resume(struct platform_device *pdev) +static int pxa27x_keypad_resume(struct device *dev) { + struct platform_device *pdev = to_platform_device(dev); struct pxa27x_keypad *keypad = platform_get_drvdata(pdev); struct input_dev *input_dev = keypad->input_dev; @@ -421,9 +423,11 @@ static int pxa27x_keypad_resume(struct platform_device *pdev) return 0; } -#else -#define pxa27x_keypad_suspend NULL -#define pxa27x_keypad_resume NULL + +static const struct dev_pm_ops pxa27x_keypad_pm_ops = { + .suspend = pxa27x_keypad_suspend, + .resume = pxa27x_keypad_resume, +}; #endif static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) @@ -577,6 +581,9 @@ static struct platform_driver pxa27x_keypad_driver = { .driver = { .name = "pxa27x-keypad", .owner = THIS_MODULE, +#ifdef CONFIG_PM + .pm = &pxa27x_keypad_pm_ops, +#endif }, }; ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: A few changes to pxa27x_keypad 2009-07-23 6:30 ` Dmitry Torokhov @ 2009-07-23 7:28 ` Dmitry Torokhov 2009-07-23 7:36 ` Dmitry Torokhov 2009-07-23 9:05 ` Mike Rapoport 0 siblings, 2 replies; 10+ messages in thread From: Dmitry Torokhov @ 2009-07-23 7:28 UTC (permalink / raw) To: Mike Rapoport; +Cc: Eric Miao, linux-input On Wed, Jul 22, 2009 at 11:30:44PM -0700, Dmitry Torokhov wrote: > On Tue, Jul 21, 2009 at 01:44:56PM +0300, Mike Rapoport wrote: > > Hi Dmitry, > > > > Dmitry Torokhov wrote: > > > Hi Eric, > > > > > > I made a few adjustments to the pxa27x_keypad driver and was wondering > > > if you would be able to give it a sping and check if I broke it or not. > > > > Apparently not :) > > Tested-by: Mike Rapoport <mike@compulab.co.il> > > > > Cool, thanks for testing. I have another one for you then ;) > > TIA! > Umm.. this one is hopefully better... Input: pxa27x_keypad - switch to using dev_pm_ops Signed-off-by: Dmitry Torokhov <dtor@mail.ru> --- drivers/input/keyboard/pxa27x_keypad.c | 19 ++++++++++++------- 1 files changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c index 0943238..c987cc7 100644 --- a/drivers/input/keyboard/pxa27x_keypad.c +++ b/drivers/input/keyboard/pxa27x_keypad.c @@ -389,8 +389,9 @@ static void pxa27x_keypad_close(struct input_dev *dev) } #ifdef CONFIG_PM -static int pxa27x_keypad_suspend(struct platform_device *pdev, pm_message_t state) +static int pxa27x_keypad_suspend(struct device *dev) { + struct platform_device *pdev = to_platform_device(dev); struct pxa27x_keypad *keypad = platform_get_drvdata(pdev); clk_disable(keypad->clk); @@ -401,8 +402,9 @@ static int pxa27x_keypad_suspend(struct platform_device *pdev, pm_message_t stat return 0; } -static int pxa27x_keypad_resume(struct platform_device *pdev) +static int pxa27x_keypad_resume(struct device *dev) { + struct platform_device *pdev = to_platform_device(dev); struct pxa27x_keypad *keypad = platform_get_drvdata(pdev); struct input_dev *input_dev = keypad->input_dev; @@ -421,9 +423,11 @@ static int pxa27x_keypad_resume(struct platform_device *pdev) return 0; } -#else -#define pxa27x_keypad_suspend NULL -#define pxa27x_keypad_resume NULL + +static const struct dev_pm_ops pxa27x_keypad_pm_ops = { + .suspend = pxa27x_keypad_suspend, + .resume = pxa27x_keypad_resume, +}; #endif static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) @@ -572,11 +576,12 @@ MODULE_ALIAS("platform:pxa27x-keypad"); static struct platform_driver pxa27x_keypad_driver = { .probe = pxa27x_keypad_probe, .remove = __devexit_p(pxa27x_keypad_remove), - .suspend = pxa27x_keypad_suspend, - .resume = pxa27x_keypad_resume, .driver = { .name = "pxa27x-keypad", .owner = THIS_MODULE, +#ifdef CONFIG_PM + .pm = &pxa27x_keypad_pm_ops, +#endif }, }; ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: A few changes to pxa27x_keypad 2009-07-23 7:28 ` Dmitry Torokhov @ 2009-07-23 7:36 ` Dmitry Torokhov 2009-09-04 5:20 ` Dmitry Torokhov 2009-07-23 9:05 ` Mike Rapoport 1 sibling, 1 reply; 10+ messages in thread From: Dmitry Torokhov @ 2009-07-23 7:36 UTC (permalink / raw) To: Mike Rapoport; +Cc: Eric Miao, linux-input On Thu, Jul 23, 2009 at 12:28:02AM -0700, Dmitry Torokhov wrote: > On Wed, Jul 22, 2009 at 11:30:44PM -0700, Dmitry Torokhov wrote: > > On Tue, Jul 21, 2009 at 01:44:56PM +0300, Mike Rapoport wrote: > > > Hi Dmitry, > > > > > > Dmitry Torokhov wrote: > > > > Hi Eric, > > > > > > > > I made a few adjustments to the pxa27x_keypad driver and was wondering > > > > if you would be able to give it a sping and check if I broke it or not. > > > > > > Apparently not :) > > > Tested-by: Mike Rapoport <mike@compulab.co.il> > > > > > > > Cool, thanks for testing. I have another one for you then ;) > > > > TIA! > > > > Umm.. this one is hopefully better... > And another one implementing keymap manipulation. -- Dmitry Input: pxa27x_keypad - allow modifying keymap from userspace Signed-off-by: Dmitry Torokhov <dtor@mail.ru> --- arch/arm/mach-pxa/include/mach/pxa27x_keypad.h | 3 drivers/input/keyboard/pxa27x_keypad.c | 168 +++++++++++++----------- 2 files changed, 90 insertions(+), 81 deletions(-) diff --git a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h index 63e8965..a0e5561 100644 --- a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h +++ b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h @@ -6,6 +6,7 @@ #define MAX_MATRIX_KEY_ROWS (8) #define MAX_MATRIX_KEY_COLS (8) +#define MAX_DIRECT_KEY_NUM (8) /* pxa3xx keypad platform specific parameters * @@ -34,7 +35,7 @@ struct pxa27x_keypad_platform_data { /* direct keys */ int direct_key_num; - unsigned int direct_key_map[8]; + unsigned int direct_key_map[MAX_DIRECT_KEY_NUM]; /* rotary encoders 0 */ int enable_rotary0; diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c index c987cc7..68f5b10 100644 --- a/drivers/input/keyboard/pxa27x_keypad.c +++ b/drivers/input/keyboard/pxa27x_keypad.c @@ -96,7 +96,8 @@ #define keypad_readl(off) __raw_readl(keypad->mmio_base + (off)) #define keypad_writel(off, v) __raw_writel((v), keypad->mmio_base + (off)) -#define MAX_MATRIX_KEY_NUM (8 * 8) +#define MAX_MATRIX_KEY_NUM (MAX_MATRIX_KEY_ROWS * MAX_MATRIX_KEY_COLS) +#define MAX_KEYPAD_KEYS (MAX_MATRIX_KEY_NUM + MAX_DIRECT_KEY_NUM) struct pxa27x_keypad { struct pxa27x_keypad_platform_data *pdata; @@ -107,73 +108,80 @@ struct pxa27x_keypad { int irq; - /* matrix key code map */ - unsigned short matrix_keycodes[MAX_MATRIX_KEY_NUM]; + unsigned short keycodes[MAX_KEYPAD_KEYS]; + int rotary_rel_code[2]; /* state row bits of each column scan */ uint32_t matrix_key_state[MAX_MATRIX_KEY_COLS]; uint32_t direct_key_state; unsigned int direct_key_mask; - - int rotary_rel_code[2]; - int rotary_up_key[2]; - int rotary_down_key[2]; }; static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) { struct pxa27x_keypad_platform_data *pdata = keypad->pdata; struct input_dev *input_dev = keypad->input_dev; + unsigned short code; int i; for (i = 0; i < pdata->matrix_key_map_size; i++) { unsigned int key = pdata->matrix_key_map[i]; unsigned int row = KEY_ROW(key); unsigned int col = KEY_COL(key); - unsigned short code = KEY_VAL(key); - keypad->matrix_keycodes[(row << 3) + col] = code; + code = KEY_VAL(key); + keypad->keycodes[(row << 3) + col] = code; __set_bit(code, input_dev->keybit); } - __clear_bit(KEY_RESERVED, input_dev->keybit); - for (i = 0; i < pdata->direct_key_num; i++) - __set_bit(pdata->direct_key_map[i], input_dev->keybit); - - keypad->rotary_up_key[0] = pdata->rotary0_up_key; - keypad->rotary_up_key[1] = pdata->rotary1_up_key; - keypad->rotary_down_key[0] = pdata->rotary0_down_key; - keypad->rotary_down_key[1] = pdata->rotary1_down_key; - keypad->rotary_rel_code[0] = pdata->rotary0_rel_code; - keypad->rotary_rel_code[1] = pdata->rotary1_rel_code; + for (i = 0; i < pdata->direct_key_num; i++) { + code = pdata->direct_key_map[i]; + keypad->keycodes[MAX_MATRIX_KEY_NUM + i] = code; + __set_bit(code, input_dev->keybit); + } if (pdata->enable_rotary0) { if (pdata->rotary0_up_key && pdata->rotary0_down_key) { - __set_bit(pdata->rotary0_up_key, input_dev->keybit); - __set_bit(pdata->rotary0_down_key, input_dev->keybit); - } else + code = pdata->rotary0_up_key; + keypad->keycodes[MAX_MATRIX_KEY_NUM + 0] = code; + __set_bit(code, input_dev->keybit); + + code = pdata->rotary0_down_key; + keypad->keycodes[MAX_MATRIX_KEY_NUM + 1] = code; + __set_bit(code, input_dev->keybit); + + keypad->rotary_rel_code[0] = -1; + } else { + keypad->rotary_rel_code[0] = pdata->rotary0_rel_code; __set_bit(pdata->rotary0_rel_code, input_dev->relbit); + } } if (pdata->enable_rotary1) { if (pdata->rotary1_up_key && pdata->rotary1_down_key) { - __set_bit(pdata->rotary1_up_key, input_dev->keybit); - __set_bit(pdata->rotary1_down_key, input_dev->keybit); - } else + code = pdata->rotary1_up_key; + keypad->keycodes[MAX_MATRIX_KEY_NUM + 2] = code; + __set_bit(code, input_dev->keybit); + + code = pdata->rotary1_down_key; + keypad->keycodes[MAX_MATRIX_KEY_NUM + 3] = code; + __set_bit(code, input_dev->keybit); + + keypad->rotary_rel_code[1] = -1; + } else { + keypad->rotary_rel_code[1] = pdata->rotary1_rel_code; __set_bit(pdata->rotary1_rel_code, input_dev->relbit); + } } -} -static inline unsigned int lookup_matrix_keycode( - struct pxa27x_keypad *keypad, int row, int col) -{ - return keypad->matrix_keycodes[(row << 3) + col]; + __clear_bit(KEY_RESERVED, input_dev->keybit); } static void pxa27x_keypad_scan_matrix(struct pxa27x_keypad *keypad) { struct pxa27x_keypad_platform_data *pdata = keypad->pdata; + struct input_dev *input_dev = keypad->input_dev; int row, col, num_keys_pressed = 0; uint32_t new_state[MAX_MATRIX_KEY_COLS]; uint32_t kpas = keypad_readl(KPAS); @@ -216,6 +224,7 @@ static void pxa27x_keypad_scan_matrix(struct pxa27x_keypad *keypad) scan: for (col = 0; col < pdata->matrix_key_cols; col++) { uint32_t bits_changed; + int code; bits_changed = keypad->matrix_key_state[col] ^ new_state[col]; if (bits_changed == 0) @@ -225,12 +234,13 @@ scan: if ((bits_changed & (1 << row)) == 0) continue; - input_report_key(keypad->input_dev, - lookup_matrix_keycode(keypad, row, col), - new_state[col] & (1 << row)); + code = (row << 3) + col; + input_event(input_dev, EV_MSC, MSC_SCAN, code); + input_report_key(input_dev, keypad->keycodes[code], + new_state[col] & (1 << row)); } } - input_sync(keypad->input_dev); + input_sync(input_dev); memcpy(keypad->matrix_key_state, new_state, sizeof(new_state)); } @@ -253,13 +263,15 @@ static void report_rotary_event(struct pxa27x_keypad *keypad, int r, int delta) if (delta == 0) return; - if (keypad->rotary_up_key[r] && keypad->rotary_down_key[r]) { - int keycode = (delta > 0) ? keypad->rotary_up_key[r] : - keypad->rotary_down_key[r]; + if (keypad->rotary_rel_code[r] == -1) { + int code = MAX_MATRIX_KEY_NUM + 2 * r + (delta > 0 ? 0 : 1); + unsigned char keycode = keypad->keycodes[code]; /* simulate a press-n-release */ + input_event(dev, EV_MSC, MSC_SCAN, code); input_report_key(dev, keycode, 1); input_sync(dev); + input_event(dev, EV_MSC, MSC_SCAN, code); input_report_key(dev, keycode, 0); input_sync(dev); } else { @@ -287,6 +299,7 @@ static void pxa27x_keypad_scan_rotary(struct pxa27x_keypad *keypad) static void pxa27x_keypad_scan_direct(struct pxa27x_keypad *keypad) { struct pxa27x_keypad_platform_data *pdata = keypad->pdata; + struct input_dev *input_dev = keypad->input_dev; unsigned int new_state; uint32_t kpdk, bits_changed; int i; @@ -296,9 +309,6 @@ static void pxa27x_keypad_scan_direct(struct pxa27x_keypad *keypad) if (pdata->enable_rotary0 || pdata->enable_rotary1) pxa27x_keypad_scan_rotary(keypad); - if (pdata->direct_key_map == NULL) - return; - new_state = KPDK_DK(kpdk) & keypad->direct_key_mask; bits_changed = keypad->direct_key_state ^ new_state; @@ -306,12 +316,15 @@ static void pxa27x_keypad_scan_direct(struct pxa27x_keypad *keypad) return; for (i = 0; i < pdata->direct_key_num; i++) { - if (bits_changed & (1 << i)) - input_report_key(keypad->input_dev, - pdata->direct_key_map[i], - (new_state & (1 << i))); + if (bits_changed & (1 << i)) { + int code = MAX_MATRIX_KEY_NUM + i; + + input_event(input_dev, EV_MSC, MSC_SCAN, code); + input_report_key(input_dev, keypad->keycodes[code], + new_state & (1 << i)); + } } - input_sync(keypad->input_dev); + input_sync(input_dev); keypad->direct_key_state = new_state; } @@ -432,38 +445,41 @@ static const struct dev_pm_ops pxa27x_keypad_pm_ops = { static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) { + struct pxa27x_keypad_platform_data *pdata = pdev->dev.platform_data; struct pxa27x_keypad *keypad; struct input_dev *input_dev; struct resource *res; int irq, error; - keypad = kzalloc(sizeof(struct pxa27x_keypad), GFP_KERNEL); - if (keypad == NULL) { - dev_err(&pdev->dev, "failed to allocate driver data\n"); - return -ENOMEM; - } - - keypad->pdata = pdev->dev.platform_data; - if (keypad->pdata == NULL) { + if (pdata == NULL) { dev_err(&pdev->dev, "no platform data defined\n"); - error = -EINVAL; - goto failed_free; + return -EINVAL; } irq = platform_get_irq(pdev, 0); if (irq < 0) { dev_err(&pdev->dev, "failed to get keypad irq\n"); - error = -ENXIO; - goto failed_free; + return -ENXIO; } res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (res == NULL) { dev_err(&pdev->dev, "failed to get I/O memory\n"); - error = -ENXIO; + return -ENXIO; + } + + keypad = kzalloc(sizeof(struct pxa27x_keypad), GFP_KERNEL); + input_dev = input_allocate_device(); + if (!keypad || !input_dev) { + dev_err(&pdev->dev, "failed to allocate memory\n"); + error = -ENOMEM; goto failed_free; } + keypad->pdata = pdata; + keypad->input_dev = input_dev; + keypad->irq = irq; + res = request_mem_region(res->start, resource_size(res), pdev->name); if (res == NULL) { dev_err(&pdev->dev, "failed to request I/O memory\n"); @@ -485,43 +501,35 @@ static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) goto failed_free_io; } - /* Create and register the input driver. */ - input_dev = input_allocate_device(); - if (!input_dev) { - dev_err(&pdev->dev, "failed to allocate input device\n"); - error = -ENOMEM; - goto failed_put_clk; - } - input_dev->name = pdev->name; input_dev->id.bustype = BUS_HOST; input_dev->open = pxa27x_keypad_open; input_dev->close = pxa27x_keypad_close; input_dev->dev.parent = &pdev->dev; - keypad->input_dev = input_dev; + input_dev->keycode = keypad->keycodes; + input_dev->keycodesize = sizeof(keypad->keycodes[0]); + input_dev->keycodemax = ARRAY_SIZE(keypad->keycodes); + input_set_drvdata(input_dev, keypad); input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); - if ((keypad->pdata->enable_rotary0 && - keypad->pdata->rotary0_rel_code) || - (keypad->pdata->enable_rotary1 && - keypad->pdata->rotary1_rel_code)) { - input_dev->evbit[0] |= BIT_MASK(EV_REL); - } + input_set_capability(input_dev, EV_MSC, MSC_SCAN); pxa27x_keypad_build_keycode(keypad); - platform_set_drvdata(pdev, keypad); + + if ((pdata->enable_rotary0 && keypad->rotary_rel_code[0] != -1) || + (pdata->enable_rotary1 && keypad->rotary_rel_code[1] != -1)) { + input_dev->evbit[0] |= BIT_MASK(EV_REL); + } error = request_irq(irq, pxa27x_keypad_irq_handler, IRQF_DISABLED, pdev->name, keypad); if (error) { dev_err(&pdev->dev, "failed to request IRQ\n"); - goto failed_free_dev; + goto failed_put_clk; } - keypad->irq = irq; - /* Register the input device */ error = input_register_device(input_dev); if (error) { @@ -529,15 +537,13 @@ static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) goto failed_free_irq; } + platform_set_drvdata(pdev, keypad); device_init_wakeup(&pdev->dev, 1); return 0; failed_free_irq: free_irq(irq, pdev); - platform_set_drvdata(pdev, NULL); -failed_free_dev: - input_free_device(input_dev); failed_put_clk: clk_put(keypad->clk); failed_free_io: @@ -545,6 +551,7 @@ failed_free_io: failed_free_mem: release_mem_region(res->start, resource_size(res)); failed_free: + input_free_device(input_dev); kfree(keypad); return error; } @@ -567,6 +574,7 @@ static int __devexit pxa27x_keypad_remove(struct platform_device *pdev) platform_set_drvdata(pdev, NULL); kfree(keypad); + return 0; } ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: A few changes to pxa27x_keypad 2009-07-23 7:36 ` Dmitry Torokhov @ 2009-09-04 5:20 ` Dmitry Torokhov 2009-09-04 7:45 ` Eric Miao 0 siblings, 1 reply; 10+ messages in thread From: Dmitry Torokhov @ 2009-09-04 5:20 UTC (permalink / raw) To: Mike Rapoport; +Cc: Eric Miao, linux-input On Thu, Jul 23, 2009 at 12:36:25AM -0700, Dmitry Torokhov wrote: > On Thu, Jul 23, 2009 at 12:28:02AM -0700, Dmitry Torokhov wrote: > > On Wed, Jul 22, 2009 at 11:30:44PM -0700, Dmitry Torokhov wrote: > > > On Tue, Jul 21, 2009 at 01:44:56PM +0300, Mike Rapoport wrote: > > > > Hi Dmitry, > > > > > > > > Dmitry Torokhov wrote: > > > > > Hi Eric, > > > > > > > > > > I made a few adjustments to the pxa27x_keypad driver and was wondering > > > > > if you would be able to give it a sping and check if I broke it or not. > > > > > > > > Apparently not :) > > > > Tested-by: Mike Rapoport <mike@compulab.co.il> > > > > > > > > > > Cool, thanks for testing. I have another one for you then ;) > > > > > > TIA! > > > > > > > Umm.. this one is hopefully better... > > > > And another one implementing keymap manipulation. > *ping* Any chance you could try this one out for me? Pretty please... -- Dmitry ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: A few changes to pxa27x_keypad 2009-09-04 5:20 ` Dmitry Torokhov @ 2009-09-04 7:45 ` Eric Miao 2009-09-04 8:17 ` Dmitry Torokhov 0 siblings, 1 reply; 10+ messages in thread From: Eric Miao @ 2009-09-04 7:45 UTC (permalink / raw) To: Dmitry Torokhov; +Cc: Mike Rapoport, linux-input On Fri, Sep 4, 2009 at 1:20 PM, Dmitry Torokhov<dmitry.torokhov@gmail.com> wrote: > On Thu, Jul 23, 2009 at 12:36:25AM -0700, Dmitry Torokhov wrote: >> On Thu, Jul 23, 2009 at 12:28:02AM -0700, Dmitry Torokhov wrote: >> > On Wed, Jul 22, 2009 at 11:30:44PM -0700, Dmitry Torokhov wrote: >> > > On Tue, Jul 21, 2009 at 01:44:56PM +0300, Mike Rapoport wrote: >> > > > Hi Dmitry, >> > > > >> > > > Dmitry Torokhov wrote: >> > > > > Hi Eric, >> > > > > >> > > > > I made a few adjustments to the pxa27x_keypad driver and was wondering >> > > > > if you would be able to give it a sping and check if I broke it or not. >> > > > >> > > > Apparently not :) >> > > > Tested-by: Mike Rapoport <mike@compulab.co.il> >> > > > >> > > >> > > Cool, thanks for testing. I have another one for you then ;) >> > > >> > > TIA! >> > > >> > >> > Umm.. this one is hopefully better... >> > >> >> And another one implementing keymap manipulation. >> > > *ping* Any chance you could try this one out for me? Pretty please... > Hi Dmitry, Mike has already tested this, and I tested this again on my Littleton/pxa3xx, it works pretty good, and the change looks quite OK, so if you need my Ack, here it goes: Acked-by: Eric Miao <eric.y.miao@gmail.com> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: A few changes to pxa27x_keypad 2009-09-04 7:45 ` Eric Miao @ 2009-09-04 8:17 ` Dmitry Torokhov 0 siblings, 0 replies; 10+ messages in thread From: Dmitry Torokhov @ 2009-09-04 8:17 UTC (permalink / raw) To: Eric Miao; +Cc: Mike Rapoport, linux-input On Fri, Sep 04, 2009 at 03:45:42PM +0800, Eric Miao wrote: > On Fri, Sep 4, 2009 at 1:20 PM, Dmitry > Torokhov<dmitry.torokhov@gmail.com> wrote: > > On Thu, Jul 23, 2009 at 12:36:25AM -0700, Dmitry Torokhov wrote: > >> On Thu, Jul 23, 2009 at 12:28:02AM -0700, Dmitry Torokhov wrote: > >> > On Wed, Jul 22, 2009 at 11:30:44PM -0700, Dmitry Torokhov wrote: > >> > > On Tue, Jul 21, 2009 at 01:44:56PM +0300, Mike Rapoport wrote: > >> > > > Hi Dmitry, > >> > > > > >> > > > Dmitry Torokhov wrote: > >> > > > > Hi Eric, > >> > > > > > >> > > > > I made a few adjustments to the pxa27x_keypad driver and was wondering > >> > > > > if you would be able to give it a sping and check if I broke it or not. > >> > > > > >> > > > Apparently not :) > >> > > > Tested-by: Mike Rapoport <mike@compulab.co.il> > >> > > > > >> > > > >> > > Cool, thanks for testing. I have another one for you then ;) > >> > > > >> > > TIA! > >> > > > >> > > >> > Umm.. this one is hopefully better... > >> > > >> > >> And another one implementing keymap manipulation. > >> > > > > *ping* Any chance you could try this one out for me? Pretty please... > > > > Hi Dmitry, > > Mike has already tested this, Ah, my bad then... I understood that he only tested dev_pm_ops conversion (the first patch) and not both. > and I tested this again on my Littleton/pxa3xx, > it works pretty good, and the change looks quite OK, so if you need my Ack, > here it goes: > > Acked-by: Eric Miao <eric.y.miao@gmail.com> Thank you, much appreciated. -- Dmitry ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: A few changes to pxa27x_keypad 2009-07-23 7:28 ` Dmitry Torokhov 2009-07-23 7:36 ` Dmitry Torokhov @ 2009-07-23 9:05 ` Mike Rapoport 2009-07-23 9:24 ` Dmitry Torokhov 1 sibling, 1 reply; 10+ messages in thread From: Mike Rapoport @ 2009-07-23 9:05 UTC (permalink / raw) To: Dmitry Torokhov; +Cc: Eric Miao, linux-input Dmitry Torokhov wrote: > On Wed, Jul 22, 2009 at 11:30:44PM -0700, Dmitry Torokhov wrote: >> On Tue, Jul 21, 2009 at 01:44:56PM +0300, Mike Rapoport wrote: >>> Hi Dmitry, >>> >>> Dmitry Torokhov wrote: >>>> Hi Eric, >>>> >>>> I made a few adjustments to the pxa27x_keypad driver and was wondering >>>> if you would be able to give it a sping and check if I broke it or not. >>> Apparently not :) >>> Tested-by: Mike Rapoport <mike@compulab.co.il> >>> >> Cool, thanks for testing. I have another one for you then ;) >> >> TIA! >> > > Umm.. this one is hopefully better... > > Input: pxa27x_keypad - switch to using dev_pm_ops > > Signed-off-by: Dmitry Torokhov <dtor@mail.ru> I've got this with 2.6.31-rc3 CC drivers/input/keyboard/pxa27x_keypad.o drivers/input/keyboard/pxa27x_keypad.c:591: warning: initialization discards qualifiers from pointer target type Except that Acked-by: Mike Rapoport <mike@compulab.co.il> > --- > > drivers/input/keyboard/pxa27x_keypad.c | 19 ++++++++++++------- > 1 files changed, 12 insertions(+), 7 deletions(-) > > > diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c > index 0943238..c987cc7 100644 > --- a/drivers/input/keyboard/pxa27x_keypad.c > +++ b/drivers/input/keyboard/pxa27x_keypad.c > @@ -389,8 +389,9 @@ static void pxa27x_keypad_close(struct input_dev *dev) > } > > #ifdef CONFIG_PM > -static int pxa27x_keypad_suspend(struct platform_device *pdev, pm_message_t state) > +static int pxa27x_keypad_suspend(struct device *dev) > { > + struct platform_device *pdev = to_platform_device(dev); > struct pxa27x_keypad *keypad = platform_get_drvdata(pdev); > > clk_disable(keypad->clk); > @@ -401,8 +402,9 @@ static int pxa27x_keypad_suspend(struct platform_device *pdev, pm_message_t stat > return 0; > } > > -static int pxa27x_keypad_resume(struct platform_device *pdev) > +static int pxa27x_keypad_resume(struct device *dev) > { > + struct platform_device *pdev = to_platform_device(dev); > struct pxa27x_keypad *keypad = platform_get_drvdata(pdev); > struct input_dev *input_dev = keypad->input_dev; > > @@ -421,9 +423,11 @@ static int pxa27x_keypad_resume(struct platform_device *pdev) > > return 0; > } > -#else > -#define pxa27x_keypad_suspend NULL > -#define pxa27x_keypad_resume NULL > + > +static const struct dev_pm_ops pxa27x_keypad_pm_ops = { > + .suspend = pxa27x_keypad_suspend, > + .resume = pxa27x_keypad_resume, > +}; > #endif > > static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) > @@ -572,11 +576,12 @@ MODULE_ALIAS("platform:pxa27x-keypad"); > static struct platform_driver pxa27x_keypad_driver = { > .probe = pxa27x_keypad_probe, > .remove = __devexit_p(pxa27x_keypad_remove), > - .suspend = pxa27x_keypad_suspend, > - .resume = pxa27x_keypad_resume, > .driver = { > .name = "pxa27x-keypad", > .owner = THIS_MODULE, > +#ifdef CONFIG_PM > + .pm = &pxa27x_keypad_pm_ops, > +#endif > }, > }; > > -- > 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 > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: A few changes to pxa27x_keypad 2009-07-23 9:05 ` Mike Rapoport @ 2009-07-23 9:24 ` Dmitry Torokhov 0 siblings, 0 replies; 10+ messages in thread From: Dmitry Torokhov @ 2009-07-23 9:24 UTC (permalink / raw) To: Mike Rapoport; +Cc: Eric Miao, linux-input On Thu, Jul 23, 2009 at 12:05:13PM +0300, Mike Rapoport wrote: > > > Dmitry Torokhov wrote: > > On Wed, Jul 22, 2009 at 11:30:44PM -0700, Dmitry Torokhov wrote: > >> On Tue, Jul 21, 2009 at 01:44:56PM +0300, Mike Rapoport wrote: > >>> Hi Dmitry, > >>> > >>> Dmitry Torokhov wrote: > >>>> Hi Eric, > >>>> > >>>> I made a few adjustments to the pxa27x_keypad driver and was wondering > >>>> if you would be able to give it a sping and check if I broke it or not. > >>> Apparently not :) > >>> Tested-by: Mike Rapoport <mike@compulab.co.il> > >>> > >> Cool, thanks for testing. I have another one for you then ;) > >> > >> TIA! > >> > > > > Umm.. this one is hopefully better... > > > > Input: pxa27x_keypad - switch to using dev_pm_ops > > > > Signed-off-by: Dmitry Torokhov <dtor@mail.ru> > > I've got this with 2.6.31-rc3 > CC drivers/input/keyboard/pxa27x_keypad.o > drivers/input/keyboard/pxa27x_keypad.c:591: warning: initialization discards > qualifiers from pointer target type > Ah, yes... it needs my patch constifying the pm pointer that Rafael picked up. Thank you for testing. -- Dmitry ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2009-09-04 8:19 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-07-21 8:08 A few changes to pxa27x_keypad Dmitry Torokhov 2009-07-21 10:44 ` Mike Rapoport 2009-07-23 6:30 ` Dmitry Torokhov 2009-07-23 7:28 ` Dmitry Torokhov 2009-07-23 7:36 ` Dmitry Torokhov 2009-09-04 5:20 ` Dmitry Torokhov 2009-09-04 7:45 ` Eric Miao 2009-09-04 8:17 ` Dmitry Torokhov 2009-07-23 9:05 ` Mike Rapoport 2009-07-23 9:24 ` Dmitry Torokhov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).