From patchwork Sat May 16 10:05:49 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felipe Contreras X-Patchwork-Id: 24250 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n4GA5xFi000427 for ; Sat, 16 May 2009 10:06:02 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755230AbZEPKF7 (ORCPT ); Sat, 16 May 2009 06:05:59 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755805AbZEPKF7 (ORCPT ); Sat, 16 May 2009 06:05:59 -0400 Received: from fg-out-1718.google.com ([72.14.220.158]:62932 "EHLO fg-out-1718.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754382AbZEPKF6 (ORCPT ); Sat, 16 May 2009 06:05:58 -0400 Received: by fg-out-1718.google.com with SMTP id 16so832813fgg.17 for ; Sat, 16 May 2009 03:05:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:cc:subject:date :message-id:x-mailer:in-reply-to:references; bh=GKgzgliOAkS9SGaPqIHEL4QblxhUxVv37M6L+e0Cfls=; b=g0Hkha++uypAWU4+R49UHpj1c1L9XT30NnszKBzkvOxFTnbmW623xLJN4jPmTGRmbJ 0IQKGM5+AeTAmfITfg/dYYDAUU3tiecIOImPVZvwLkJXykC7vMz673OnqMoX4PgsUvwr tMOC2Mv2enoI3SgHMarq1JTbSTJUe9ncpbnFo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; b=tIKgpybDbeL+xKaXN0IW6bj93uEyv0sQJSPc9aWZ6Ks+tsHE6GjSBr2H5DJzx64Ctv SXHLq2AtuUL3eJkwLH2lPxhIqk8aeFc9rOBkmo83WflsT+H5Cm54OOHNI3/GztQl7mpI oEcOhf7C8yY6CA8yfOH+DsiD+64cIVUawQB6s= Received: by 10.86.70.12 with SMTP id s12mr4651391fga.69.1242468357585; Sat, 16 May 2009 03:05:57 -0700 (PDT) Received: from localhost (a91-153-253-80.elisa-laajakaista.fi [91.153.253.80]) by mx.google.com with ESMTPS id d4sm3974899fga.9.2009.05.16.03.05.56 (version=TLSv1/SSLv3 cipher=RC4-MD5); Sat, 16 May 2009 03:05:56 -0700 (PDT) From: Felipe Contreras To: linux-omap@vger.kernel.org Cc: Hiroshi DOYU , Hari Kanigeri , linux-arm-kernel@lists.arm.linux.org.uk, Felipe Contreras Subject: [RFC/PATCH 2/3] omap3-iommu: split init function into omap_iommu_add Date: Sat, 16 May 2009 13:05:49 +0300 Message-Id: <1242468350-23190-3-git-send-email-felipe.contreras@gmail.com> X-Mailer: git-send-email 1.6.3.1 In-Reply-To: <1242468350-23190-2-git-send-email-felipe.contreras@gmail.com> References: <1242468350-23190-1-git-send-email-felipe.contreras@gmail.com> <1242468350-23190-2-git-send-email-felipe.contreras@gmail.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org In preparation for external registration. Signed-off-by: Felipe Contreras --- arch/arm/mach-omap2/omap3-iommu.c | 76 ++++++++++++++++++++++++------------- 1 files changed, 49 insertions(+), 27 deletions(-) diff --git a/arch/arm/mach-omap2/omap3-iommu.c b/arch/arm/mach-omap2/omap3-iommu.c index f4232ec..149c624 100644 --- a/arch/arm/mach-omap2/omap3-iommu.c +++ b/arch/arm/mach-omap2/omap3-iommu.c @@ -45,43 +45,65 @@ static struct iommu_device devices[] = { static struct platform_device *omap3_iommu_pdev[NR_IOMMU_DEVICES]; -static int __init omap3_iommu_init(void) +static struct platform_device *omap_iommu_add(const char *name) { - int i, err; - - for (i = 0; i < NR_IOMMU_DEVICES; i++) { - struct platform_device *pdev; - const struct iommu_device *d = &devices[i]; - struct resource res[] = { - { .flags = IORESOURCE_MEM }, - { .flags = IORESOURCE_IRQ }, - }; - - pdev = platform_device_alloc("omap-iommu", i + 1); - if (!pdev) { - err = -ENOMEM; - goto err_out; + struct platform_device *pdev; + const struct iommu_device *d = NULL; + struct resource res[] = { + { .flags = IORESOURCE_MEM }, + { .flags = IORESOURCE_IRQ }, + }; + int err, i; + + for (i = 0; i < ARRAY_SIZE(devices); i++) + if (strcmp(devices[i].pdata.name, name) == 0) { + d = &devices[i]; + break; } - res[0].start = d->base; - res[0].end = d->base + MMU_REG_SIZE - 1; + if (!d) + return NULL; - res[1].start = d->irq; + pdev = platform_device_alloc("omap-iommu", i + 1); + if (!pdev) + return NULL; - err = platform_device_add_resources(pdev, res, ARRAY_SIZE(res)); - if (err) - goto err_out; + res[0].start = d->base; + res[0].end = d->base + MMU_REG_SIZE - 1; - err = platform_device_add_data(pdev, &d->pdata, sizeof(d->pdata)); - if (err) - goto err_out; + res[1].start = d->irq; - err = platform_device_add(pdev); - if (err) - goto err_out; + err = platform_device_add_resources(pdev, res, ARRAY_SIZE(res)); + if (err) + goto err_out; + + err = platform_device_add_data(pdev, &d->pdata, sizeof(d->pdata)); + if (err) + goto err_out; + + err = platform_device_add(pdev); + if (err) + goto err_out; + + return pdev; +err_out: + platform_device_put(pdev); + return NULL; +} + +static int __init omap3_iommu_init(void) +{ + struct platform_device *pdev; + int i, err; + + for (i = 0; i < ARRAY_SIZE(devices); i++) { + pdev = omap_iommu_add(devices[i].pdata.name); + if (!pdev) + goto err_out; omap3_iommu_pdev[i] = pdev; } + return 0; err_out: