From patchwork Thu Oct 10 10:39:38 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Simek X-Patchwork-Id: 282198 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 8816F2C0331 for ; Thu, 10 Oct 2013 21:40:38 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754851Ab3JJKkf (ORCPT ); Thu, 10 Oct 2013 06:40:35 -0400 Received: from mail-ee0-f41.google.com ([74.125.83.41]:52482 "EHLO mail-ee0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752688Ab3JJKjp (ORCPT ); Thu, 10 Oct 2013 06:39:45 -0400 Received: by mail-ee0-f41.google.com with SMTP id d17so1061934eek.0 for ; Thu, 10 Oct 2013 03:39:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:in-reply-to:references:content-type; bh=I0ZLLAjhWRw7h4VgeXa19mE8SykZ/AYRT2vvA34xyfQ=; b=JGML57AHG3cpld5YNRvhHDUOmZRzUBdAI/omIkpkHVAgEhvlIOEEZtv2cAFYal0zR+ dsHgzvvcc7niP7rGzALt2w6ig2TLVdHkYX0jWGTqXOt5FPemNH4NIuYe+Kfa5QsC1Hjm 3AswoIaaCnd5S9jDRbdEs/FddiOSut9dnWuL4IQ5N4tR8avZQtTyJKhAhh/WeTRE9NHp MwyMEtXSUXw29ApSCk9wCrmfy6e2AGLlez3CgcPL4zBE7ePaurIexlVYtHqjB02CfhO9 79RLDsXeCVMJDXosQqY8WPklFiAXapwk0f5lqkBdrKUcgKeMNAcip9WXLt7fbHzvRuc8 m9Qg== X-Gm-Message-State: ALoCoQlHSvVDpQyj8mvd8RVwSdKI49dDyycvPJriK4uh7XIkXxyD9QwBlw55rOhQX17Jxcfnp/gU X-Received: by 10.14.5.3 with SMTP id 3mr13067096eek.49.1381401583749; Thu, 10 Oct 2013 03:39:43 -0700 (PDT) Received: from localhost (nat-63.starnet.cz. [178.255.168.63]) by mx.google.com with ESMTPSA id r48sm100008827eev.14.1969.12.31.16.00.00 (version=TLSv1.1 cipher=RC4-SHA bits=128/128); Thu, 10 Oct 2013 03:39:43 -0700 (PDT) From: Michal Simek To: linux-kernel@vger.kernel.org, monstr@monstr.eu, wsa@the-dreams.de Cc: Kedareswara rao Appana , Jean Delvare , Peter Korsgaard , Kedareswara rao Appana , linux-i2c@vger.kernel.org Subject: [PATCH v3 3/3] i2c: xilinx: Use devm_* functions Date: Thu, 10 Oct 2013 12:39:38 +0200 Message-Id: <9691811c34ee339b1f5e3ed2acdea0796fc80788.1381401561.git.michal.simek@xilinx.com> X-Mailer: git-send-email 1.8.2.3 In-Reply-To: References: In-Reply-To: References: Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org From: Kedareswara rao Appana Simplified the probe and remove functions using devm_* functions Signed-off-by: Kedareswara rao Appana Signed-off-by: Michal Simek --- Changes in v3: - Remove error message which is already shown by devm_ioremap_resource - Fix dev_get_platform recasting to simple (void *) - Path 2/3 was removed because it was created on broken hw design and it was replaced by the patch which fixed irq handler registration and irq enabling. This patch reflect this new change in 2/3 Changes in v2: None drivers/i2c/busses/i2c-xiic.c | 67 +++++++++++-------------------------------- 1 file changed, 16 insertions(+), 51 deletions(-) -- 1.8.2.3 diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c index 183fea4..e1f8920 100644 --- a/drivers/i2c/busses/i2c-xiic.c +++ b/drivers/i2c/busses/i2c-xiic.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -693,32 +694,20 @@ static int xiic_i2c_probe(struct platform_device *pdev) int ret, irq; u8 i; + i2c = devm_kzalloc(&pdev->dev, sizeof(*i2c), GFP_KERNEL); + if (!i2c) + return -ENOMEM; + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!res) - goto resource_missing; + i2c->base = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(i2c->base)) + return PTR_ERR(i2c->base); irq = platform_get_irq(pdev, 0); if (irq < 0) - goto resource_missing; - - pdata = (struct xiic_i2c_platform_data *)dev_get_platdata(&pdev->dev); - - i2c = kzalloc(sizeof(*i2c), GFP_KERNEL); - if (!i2c) - return -ENOMEM; + return irq; - if (!request_mem_region(res->start, resource_size(res), pdev->name)) { - dev_err(&pdev->dev, "Memory region busy\n"); - ret = -EBUSY; - goto request_mem_failed; - } - - i2c->base = ioremap(res->start, resource_size(res)); - if (!i2c->base) { - dev_err(&pdev->dev, "Unable to map registers\n"); - ret = -EIO; - goto map_failed; - } + pdata = (void *)dev_get_platdata(&pdev->dev); /* hook up driver to tree */ platform_set_drvdata(pdev, i2c); @@ -729,10 +718,11 @@ static int xiic_i2c_probe(struct platform_device *pdev) spin_lock_init(&i2c->lock); init_waitqueue_head(&i2c->wait); - ret = request_irq(irq, xiic_isr, 0, pdev->name, i2c); - if (ret) { + + ret = devm_request_irq(&pdev->dev, irq, xiic_isr, 0, pdev->name, i2c); + if (ret < 0) { dev_err(&pdev->dev, "Cannot claim IRQ\n"); - goto request_irq_failed; + return ret; } xiic_reinit(i2c); @@ -741,7 +731,8 @@ static int xiic_i2c_probe(struct platform_device *pdev) ret = i2c_add_adapter(&i2c->adap); if (ret) { dev_err(&pdev->dev, "Failed to add adapter\n"); - goto add_adapter_failed; + xiic_deinit(i2c); + return ret; } if (pdata) { @@ -751,43 +742,17 @@ static int xiic_i2c_probe(struct platform_device *pdev) } return 0; - -add_adapter_failed: - free_irq(irq, i2c); -request_irq_failed: - xiic_deinit(i2c); - iounmap(i2c->base); -map_failed: - release_mem_region(res->start, resource_size(res)); -request_mem_failed: - kfree(i2c); - - return ret; -resource_missing: - dev_err(&pdev->dev, "IRQ or Memory resource is missing\n"); - return -ENOENT; } static int xiic_i2c_remove(struct platform_device *pdev) { struct xiic_i2c *i2c = platform_get_drvdata(pdev); - struct resource *res; /* remove adapter & data */ i2c_del_adapter(&i2c->adap); xiic_deinit(i2c); - free_irq(platform_get_irq(pdev, 0), i2c); - - iounmap(i2c->base); - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (res) - release_mem_region(res->start, resource_size(res)); - - kfree(i2c); - return 0; }