From patchwork Mon Sep 30 14:15:15 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Simek X-Patchwork-Id: 279165 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 6425E2C00A6 for ; Tue, 1 Oct 2013 00:15:50 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754557Ab3I3OPc (ORCPT ); Mon, 30 Sep 2013 10:15:32 -0400 Received: from mail-ea0-f178.google.com ([209.85.215.178]:40731 "EHLO mail-ea0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755252Ab3I3OPa (ORCPT ); Mon, 30 Sep 2013 10:15:30 -0400 Received: by mail-ea0-f178.google.com with SMTP id a15so2681842eae.23 for ; Mon, 30 Sep 2013 07:15:28 -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=o5pitB4FT3HgYS/Qq4TChYq57jNU2fz9TLp3upGzAXE=; b=diF+ckcKJFEyCz7SoG7krh5Lk7L3Q/q9J7XFaqYiuzcp9oCaQGY5e2ILwBRD5flmik slC1jfV/dW+KNk8mAnjgrDwS+D09HY6c4S2feYHkOFxPGdctRNzhmlhfW47Wdxcc1DqN 8nycXqJZVpEy5PXunl5T8oyTjXT+Dc32npaTsduY86BP6yUGXGJVWnwMjCKdVDEmISy9 rNFVGAQQh/qDGS8yZ7VfiMzskPP5sLAWtMfJU6iNLi97qeYMVB4PkC/XXYX3s0OpOUIU BwqaOdgoe/K/0h5sS5BYFan4sRJa6+hBxd8X0QEr1D9RHe3Q7kEfPymJNneRoW5EyjbH IP2g== X-Gm-Message-State: ALoCoQmgM984MTJANf5myESoYejxnemOBbS0/8ARdzY+/Z2jtoCVCKKm6xW6WmXuOayxhfY1XURv X-Received: by 10.15.108.4 with SMTP id cc4mr153744eeb.86.1380550528818; Mon, 30 Sep 2013 07:15:28 -0700 (PDT) Received: from localhost (nat-63.starnet.cz. [178.255.168.63]) by mx.google.com with ESMTPSA id v8sm1591615eeo.12.1969.12.31.16.00.00 (version=TLSv1.1 cipher=RC4-SHA bits=128/128); Mon, 30 Sep 2013 07:15:28 -0700 (PDT) From: Michal Simek To: linux-kernel@vger.kernel.org, monstr@monstr.eu, wsa@the-dreams.de Cc: Kedareswara rao Appana , Kedareswara rao Appana , Jean Delvare , Peter Korsgaard , linux-i2c@vger.kernel.org Subject: [PATCH v2 3/3] i2c: xilinx: Use devm_* functions Date: Mon, 30 Sep 2013 16:15:15 +0200 Message-Id: <83ec9558211389896f21d9682e9824cd7979466c.1380550490.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 v2: None drivers/i2c/busses/i2c-xiic.c | 69 +++++++++++-------------------------------- 1 file changed, 18 insertions(+), 51 deletions(-) -- 1.8.2.3 diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c index 44e6ae7..6dd3212 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 @@ -698,32 +699,28 @@ 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)) { + dev_err(&pdev->dev, "Could not allocate iomem\n"); + 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); + return irq; - i2c = kzalloc(sizeof(*i2c), GFP_KERNEL); - if (!i2c) - return -ENOMEM; - - 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; + ret = devm_request_irq(&pdev->dev, irq, xiic_isr, 0, pdev->name, i2c); + if (ret < 0) { + dev_err(&pdev->dev, "Cannot claim IRQ\n"); + return ret; } - 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 = (struct xiic_i2c_platform_data *)dev_get_platdata(&pdev->dev); /* hook up driver to tree */ platform_set_drvdata(pdev, i2c); @@ -736,17 +733,13 @@ 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) { - dev_err(&pdev->dev, "Cannot claim IRQ\n"); - goto request_irq_failed; - } /* add i2c adapter to i2c tree */ 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) { @@ -756,43 +749,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; }