diff options
author | Abraham Arce <x0066660@ti.com> | 2010-09-30 08:35:57 +0200 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-10-13 16:49:25 +0200 |
commit | f3a1ba60dbdbf46f2715cc4e3f8abc9d65c4d9bf (patch) | |
tree | e6a3a21412ec023e18f8cbea07377b48da4f5f7e /drivers/input/keyboard/omap4-keypad.c | |
parent | ux500 - add platform data for Nomadik SKE keypad controller (diff) | |
download | linux-f3a1ba60dbdbf46f2715cc4e3f8abc9d65c4d9bf.tar.xz linux-f3a1ba60dbdbf46f2715cc4e3f8abc9d65c4d9bf.zip |
Input: omap4-keypad - use platform device helpers
Get mem and irq resources using platform helpers
- platform_get_base
- platform_get_irq
Signed-off-by: Abraham Arce <x0066660@ti.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input/keyboard/omap4-keypad.c')
-rw-r--r-- | drivers/input/keyboard/omap4-keypad.c | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/drivers/input/keyboard/omap4-keypad.c b/drivers/input/keyboard/omap4-keypad.c index 975f8bbcc69b..788169d3e7c2 100644 --- a/drivers/input/keyboard/omap4-keypad.c +++ b/drivers/input/keyboard/omap4-keypad.c @@ -148,7 +148,10 @@ static int __devinit omap4_keypad_probe(struct platform_device *pdev) const struct omap4_keypad_platform_data *pdata; struct omap4_keypad *keypad_data; struct input_dev *input_dev; + struct resource *res; + resource_size_t size; unsigned int row_shift, max_keys; + int irq; int error; /* platform data */ @@ -158,12 +161,14 @@ static int __devinit omap4_keypad_probe(struct platform_device *pdev) return -EINVAL; } - if (!pdata->base) { + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) { dev_err(&pdev->dev, "no base address specified\n"); return -EINVAL; } - if (!pdata->irq) { + irq = platform_get_irq(pdev, 0); + if (!irq) { dev_err(&pdev->dev, "no keyboard irq assigned\n"); return -EINVAL; } @@ -184,9 +189,23 @@ static int __devinit omap4_keypad_probe(struct platform_device *pdev) return -ENOMEM; } - keypad_data->base = pdata->base; - keypad_data->irq = pdata->irq; + size = resource_size(res); + + res = request_mem_region(res->start, size, pdev->name); + if (!res) { + dev_err(&pdev->dev, "can't request mem region\n"); + error = -EBUSY; + goto err_free_keypad; + } + keypad_data->base = ioremap(res->start, resource_size(res)); + if (!keypad_data->base) { + dev_err(&pdev->dev, "can't ioremap mem resource\n"); + error = -ENOMEM; + goto err_release_mem; + } + + keypad_data->irq = irq; keypad_data->row_shift = row_shift; keypad_data->rows = pdata->rows; keypad_data->cols = pdata->cols; @@ -195,7 +214,7 @@ static int __devinit omap4_keypad_probe(struct platform_device *pdev) keypad_data->input = input_dev = input_allocate_device(); if (!input_dev) { error = -ENOMEM; - goto err_free_keypad; + goto err_unmap; } input_dev->name = pdev->name; @@ -243,6 +262,10 @@ err_free_irq: free_irq(keypad_data->irq, keypad_data); err_free_input: input_free_device(input_dev); +err_unmap: + iounmap(keypad_data->base); +err_release_mem: + release_mem_region(res->start, size); err_free_keypad: kfree(keypad_data); return error; @@ -251,9 +274,16 @@ err_free_keypad: static int __devexit omap4_keypad_remove(struct platform_device *pdev) { struct omap4_keypad *keypad_data = platform_get_drvdata(pdev); + struct resource *res; free_irq(keypad_data->irq, keypad_data); input_unregister_device(keypad_data->input); + + iounmap(keypad_data->base); + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + release_mem_region(res->start, resource_size(res)); + kfree(keypad_data); platform_set_drvdata(pdev, NULL); |