From patchwork Sun Dec 28 07:23:14 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Axel Lin X-Patchwork-Id: 424298 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 790181400D5 for ; Sun, 28 Dec 2014 18:23:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751746AbaL1HXU (ORCPT ); Sun, 28 Dec 2014 02:23:20 -0500 Received: from mail-pd0-f171.google.com ([209.85.192.171]:54915 "EHLO mail-pd0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751741AbaL1HXT (ORCPT ); Sun, 28 Dec 2014 02:23:19 -0500 Received: by mail-pd0-f171.google.com with SMTP id y13so15348100pdi.30 for ; Sat, 27 Dec 2014 23:23:19 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:subject:from:to:cc:date:content-type :mime-version:content-transfer-encoding; bh=AnWHb6ZiZWbeAafgnhrTR12vFIX99d295d+0JD/VBX0=; b=ObB629DV7kXzU9hwtsuOMAqihovOSCGD8yrLUoFzv8Ocba1OAsoDcDBxY3aspbt8Ne vH2UkN1F9GtzOzyp3hgzlK54SJr6GuSq1FbA2O6lT8h8/Jg3D80d7519WoIlEpwlyt9V jTYlB8Bu30OJ57I6+RoqlKKrXAyP1fT8w+57JT5WYoKA9e1m3iRbCBgCtu1L+QCS4aAZ 50oFWMuDiOw+hi8ohLyy8gAltpttgqPjj8rV/Hta7i6uwAgWPTnt9DxK2BuIE4PCcJom kGzS8W7PnjN5guaMSkbBZuLPWCSpUdxDmiFuGscUYUG79Wgyv1i+9iEQOfkwoT/seruJ i/GQ== X-Gm-Message-State: ALoCoQmVhxYEoC0Qeb9ieXZc0DOfVd3kylq1T+HYMz/S0vCoU49uEW++r26qnYnfqfI7EtVVGN/1 X-Received: by 10.67.14.129 with SMTP id fg1mr79801436pad.114.1419751399341; Sat, 27 Dec 2014 23:23:19 -0800 (PST) Received: from [10.118.50.176] ([60.245.64.174]) by mx.google.com with ESMTPSA id nr15sm32323845pdb.73.2014.12.27.23.23.17 (version=TLSv1.2 cipher=AES128-GCM-SHA256 bits=128/128); Sat, 27 Dec 2014 23:23:18 -0800 (PST) Message-ID: <1419751394.15728.1.camel@phoenix> Subject: [PATCH] gpio: dwapb: Convert to use resource managed APIs From: Axel Lin To: Linus Walleij , Alexandre Courbot Cc: Jamie Iles , Sebastian Andrzej Siewior , Weike Chen , "linux-gpio@vger.kernel.org" Date: Sun, 28 Dec 2014 15:23:14 +0800 X-Mailer: Evolution 3.10.4-0ubuntu2 Mime-Version: 1.0 Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org Use resource managed APIs to simplify the code a bit. Signed-off-by: Axel Lin --- drivers/gpio/gpio-dwapb.c | 53 +++++++++++++---------------------------------- 1 file changed, 14 insertions(+), 39 deletions(-) diff --git a/drivers/gpio/gpio-dwapb.c b/drivers/gpio/gpio-dwapb.c index b4eb6a6..58faf04 100644 --- a/drivers/gpio/gpio-dwapb.c +++ b/drivers/gpio/gpio-dwapb.c @@ -469,15 +469,13 @@ dwapb_gpio_get_pdata_of(struct device *dev) if (nports == 0) return ERR_PTR(-ENODEV); - pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); if (!pdata) return ERR_PTR(-ENOMEM); - pdata->properties = kcalloc(nports, sizeof(*pp), GFP_KERNEL); - if (!pdata->properties) { - kfree(pdata); + pdata->properties = devm_kcalloc(dev, nports, sizeof(*pp), GFP_KERNEL); + if (!pdata->properties) return ERR_PTR(-ENOMEM); - } pdata->nports = nports; @@ -490,8 +488,6 @@ dwapb_gpio_get_pdata_of(struct device *dev) pp->idx >= DWAPB_MAX_PORTS) { dev_err(dev, "missing/invalid port index for %s\n", port_np->full_name); - kfree(pdata->properties); - kfree(pdata); return ERR_PTR(-EINVAL); } @@ -523,15 +519,6 @@ dwapb_gpio_get_pdata_of(struct device *dev) return pdata; } -static inline void dwapb_free_pdata_of(struct dwapb_platform_data *pdata) -{ - if (!IS_ENABLED(CONFIG_OF_GPIO) || !pdata) - return; - - kfree(pdata->properties); - kfree(pdata); -} - static int dwapb_gpio_probe(struct platform_device *pdev) { unsigned int i; @@ -540,40 +527,32 @@ static int dwapb_gpio_probe(struct platform_device *pdev) int err; struct device *dev = &pdev->dev; struct dwapb_platform_data *pdata = dev_get_platdata(dev); - bool is_pdata_alloc = !pdata; - if (is_pdata_alloc) { + if (!pdata) { pdata = dwapb_gpio_get_pdata_of(dev); if (IS_ERR(pdata)) return PTR_ERR(pdata); } - if (!pdata->nports) { - err = -ENODEV; - goto out_err; - } + if (!pdata->nports) + return -ENODEV; gpio = devm_kzalloc(&pdev->dev, sizeof(*gpio), GFP_KERNEL); - if (!gpio) { - err = -ENOMEM; - goto out_err; - } + if (!gpio) + return -ENOMEM; + gpio->dev = &pdev->dev; gpio->nr_ports = pdata->nports; gpio->ports = devm_kcalloc(&pdev->dev, gpio->nr_ports, sizeof(*gpio->ports), GFP_KERNEL); - if (!gpio->ports) { - err = -ENOMEM; - goto out_err; - } + if (!gpio->ports) + return -ENOMEM; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); gpio->regs = devm_ioremap_resource(&pdev->dev, res); - if (IS_ERR(gpio->regs)) { - err = PTR_ERR(gpio->regs); - goto out_err; - } + if (IS_ERR(gpio->regs)) + return PTR_ERR(gpio->regs); for (i = 0; i < gpio->nr_ports; i++) { err = dwapb_gpio_add_port(gpio, &pdata->properties[i], i); @@ -582,16 +561,12 @@ static int dwapb_gpio_probe(struct platform_device *pdev) } platform_set_drvdata(pdev, gpio); - goto out_err; + return 0; out_unregister: dwapb_gpio_unregister(gpio); dwapb_irq_teardown(gpio); -out_err: - if (is_pdata_alloc) - dwapb_free_pdata_of(pdata); - return err; }