From patchwork Thu Sep 30 05:29:19 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Abraham Arce X-Patchwork-Id: 218732 X-Patchwork-Delegate: tony@atomide.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id o8U5UFDi024253 for ; Thu, 30 Sep 2010 05:30:16 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753904Ab0I3FaO (ORCPT ); Thu, 30 Sep 2010 01:30:14 -0400 Received: from arroyo.ext.ti.com ([192.94.94.40]:40688 "EHLO arroyo.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753137Ab0I3FaN (ORCPT ); Thu, 30 Sep 2010 01:30:13 -0400 Received: from dlep33.itg.ti.com ([157.170.170.112]) by arroyo.ext.ti.com (8.13.7/8.13.7) with ESMTP id o8U5UD1T023361 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 30 Sep 2010 00:30:13 -0500 Received: from dlep26.itg.ti.com (localhost [127.0.0.1]) by dlep33.itg.ti.com (8.13.7/8.13.7) with ESMTP id o8U5UC9A000863; Thu, 30 Sep 2010 00:30:12 -0500 (CDT) Received: from dlee73.ent.ti.com (localhost [127.0.0.1]) by dlep26.itg.ti.com (8.13.8/8.13.8) with ESMTP id o8U5UCfO000572; Thu, 30 Sep 2010 00:30:12 -0500 (CDT) Received: from localhost.localdomain (128.247.79.52) by dlee73.ent.ti.com (157.170.170.88) with Microsoft SMTP Server (TLS) id 8.1.358.0; Thu, 30 Sep 2010 00:30:12 -0500 From: Abraham Arce To: , CC: Abraham Arce Subject: [PATCH v6 2/8] Input: omap4 - use platform device helpers Date: Thu, 30 Sep 2010 00:29:19 -0500 Message-ID: <1285824565-24906-3-git-send-email-x0066660@ti.com> X-Mailer: git-send-email 1.6.3.3 In-Reply-To: <1285824565-24906-1-git-send-email-x0066660@ti.com> References: <1285824565-24906-1-git-send-email-x0066660@ti.com> MIME-Version: 1.0 Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Thu, 30 Sep 2010 05:30:16 +0000 (UTC) diff --git a/arch/arm/plat-omap/include/plat/omap4-keypad.h b/arch/arm/plat-omap/include/plat/omap4-keypad.h index 522a8ab..2b1d9bc 100644 --- a/arch/arm/plat-omap/include/plat/omap4-keypad.h +++ b/arch/arm/plat-omap/include/plat/omap4-keypad.h @@ -8,9 +8,7 @@ struct omap4_keypad_platform_data { u8 rows; u8 cols; - - u16 irq; - void __iomem *base; }; +extern int omap4_keyboard_init(struct omap4_keypad_platform_data *); #endif diff --git a/drivers/input/keyboard/omap4-keypad.c b/drivers/input/keyboard/omap4-keypad.c index 975f8bb..788169d 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);