From patchwork Tue Apr 21 15:42:19 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 463381 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 040F7140213 for ; Wed, 22 Apr 2015 01:53:51 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="verification failed; unprotected key" header.d=gmail.com header.i=@gmail.com header.b=rzF0Dobw; dkim-adsp=none (unprotected policy); dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755152AbbDUPtA (ORCPT ); Tue, 21 Apr 2015 11:49:00 -0400 Received: from mail-la0-f45.google.com ([209.85.215.45]:36073 "EHLO mail-la0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755703AbbDUPnN (ORCPT ); Tue, 21 Apr 2015 11:43:13 -0400 Received: by lagv1 with SMTP id v1so154344868lag.3; Tue, 21 Apr 2015 08:43:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=71YXLcA/j4p1VBZK1vd+bXCr6x4ghASZJavBFM3MgqM=; b=rzF0DobwwqxbbMS6RDXZi9wFCKo4R4fd0vyCGd7nqfYXvO8fcBwbYpQLrnTJ5kzrM8 8XCujGRCXogjbL7kpMZugbue9lPipi8MwR3bhlUsogbZy1gr2V8xHOlOvdTzMYieO6+z KN8BJM2WGPI+CIXnEhev9auiIKuWxhdabLd01EFHNwZQyH5qGUxHBirWhZo3Nv8YqMyh ZHSSCwUXyoD6yUtsQw1BVd3O5vrNurE81zXRAzE4T+bZxTuq2zFeSUB0O97wEGBUIG2z 2+xdlGoYoQ+L2wMCgOI4Gt8p3e5VDnL0iwbYcL5idjYJPNiQXG+/5TNoZCI+P2s91wSw bIIQ== X-Received: by 10.112.47.73 with SMTP id b9mr20494221lbn.46.1429630990407; Tue, 21 Apr 2015 08:43:10 -0700 (PDT) Received: from xi.terra (c193-14-96-226.cust.tele2.se. [193.14.96.226]) by mx.google.com with ESMTPSA id jr1sm478861lbc.43.2015.04.21.08.43.08 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Apr 2015 08:43:10 -0700 (PDT) Received: from johan by xi.terra with local (Exim 4.84) (envelope-from ) id 1YkaKM-00074e-Dg; Tue, 21 Apr 2015 17:43:10 +0200 From: Johan Hovold To: Linus Walleij Cc: Alexandre Courbot , linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH 11/23] gpio: sysfs: remove redundant export tests Date: Tue, 21 Apr 2015 17:42:19 +0200 Message-Id: <1429630951-27082-12-git-send-email-johan@kernel.org> X-Mailer: git-send-email 2.0.5 In-Reply-To: <1429630951-27082-1-git-send-email-johan@kernel.org> References: <1429630951-27082-1-git-send-email-johan@kernel.org> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org The attribute operations will never be called for an unregistered device so remove redundant checks for FLAG_EXPORT. Note that kernfs will also guarantee that any active sysfs operation has finished before the attribute is removed during deregistration. Signed-off-by: Johan Hovold --- drivers/gpio/gpiolib-sysfs.c | 74 ++++++++++++++------------------------------ 1 file changed, 23 insertions(+), 51 deletions(-) diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index d896b6fa7fe8..b77f29cd1603 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -46,14 +46,10 @@ static ssize_t direction_show(struct device *dev, mutex_lock(&sysfs_lock); - if (!test_bit(FLAG_EXPORT, &desc->flags)) { - status = -EIO; - } else { - gpiod_get_direction(desc); - status = sprintf(buf, "%s\n", + gpiod_get_direction(desc); + status = sprintf(buf, "%s\n", test_bit(FLAG_IS_OUT, &desc->flags) ? "out" : "in"); - } mutex_unlock(&sysfs_lock); return status; @@ -67,9 +63,7 @@ static ssize_t direction_store(struct device *dev, mutex_lock(&sysfs_lock); - if (!test_bit(FLAG_EXPORT, &desc->flags)) - status = -EIO; - else if (sysfs_streq(buf, "high")) + if (sysfs_streq(buf, "high")) status = gpiod_direction_output_raw(desc, 1); else if (sysfs_streq(buf, "out") || sysfs_streq(buf, "low")) status = gpiod_direction_output_raw(desc, 0); @@ -91,10 +85,7 @@ static ssize_t value_show(struct device *dev, mutex_lock(&sysfs_lock); - if (!test_bit(FLAG_EXPORT, &desc->flags)) - status = -EIO; - else - status = sprintf(buf, "%d\n", gpiod_get_value_cansleep(desc)); + status = sprintf(buf, "%d\n", gpiod_get_value_cansleep(desc)); mutex_unlock(&sysfs_lock); return status; @@ -108,11 +99,9 @@ static ssize_t value_store(struct device *dev, mutex_lock(&sysfs_lock); - if (!test_bit(FLAG_EXPORT, &desc->flags)) - status = -EIO; - else if (!test_bit(FLAG_IS_OUT, &desc->flags)) + if (!test_bit(FLAG_IS_OUT, &desc->flags)) { status = -EPERM; - else { + } else { long value; status = kstrtol(buf, 0, &value); @@ -222,23 +211,18 @@ static ssize_t edge_show(struct device *dev, struct device_attribute *attr, char *buf) { const struct gpio_desc *desc = dev_get_drvdata(dev); - ssize_t status; + unsigned long mask; + ssize_t status = 0; + int i; mutex_lock(&sysfs_lock); - if (!test_bit(FLAG_EXPORT, &desc->flags)) - status = -EIO; - else { - int i; - - status = 0; - for (i = 0; i < ARRAY_SIZE(trigger_types); i++) - if ((desc->flags & GPIO_TRIGGER_MASK) - == trigger_types[i].flags) { - status = sprintf(buf, "%s\n", - trigger_types[i].name); - break; - } + for (i = 0; i < ARRAY_SIZE(trigger_types); i++) { + mask = desc->flags & GPIO_TRIGGER_MASK; + if (mask == trigger_types[i].flags) { + status = sprintf(buf, "%s\n", trigger_types[i].name); + break; + } } mutex_unlock(&sysfs_lock); @@ -260,13 +244,9 @@ static ssize_t edge_store(struct device *dev, found: mutex_lock(&sysfs_lock); - if (!test_bit(FLAG_EXPORT, &desc->flags)) - status = -EIO; - else { - status = gpio_setup_irq(desc, dev, trigger_types[i].flags); - if (!status) - status = size; - } + status = gpio_setup_irq(desc, dev, trigger_types[i].flags); + if (!status) + status = size; mutex_unlock(&sysfs_lock); @@ -307,10 +287,7 @@ static ssize_t active_low_show(struct device *dev, mutex_lock(&sysfs_lock); - if (!test_bit(FLAG_EXPORT, &desc->flags)) - status = -EIO; - else - status = sprintf(buf, "%d\n", + status = sprintf(buf, "%d\n", !!test_bit(FLAG_ACTIVE_LOW, &desc->flags)); mutex_unlock(&sysfs_lock); @@ -323,18 +300,13 @@ static ssize_t active_low_store(struct device *dev, { struct gpio_desc *desc = dev_get_drvdata(dev); ssize_t status; + long value; mutex_lock(&sysfs_lock); - if (!test_bit(FLAG_EXPORT, &desc->flags)) { - status = -EIO; - } else { - long value; - - status = kstrtol(buf, 0, &value); - if (status == 0) - status = sysfs_set_active_low(desc, dev, value != 0); - } + status = kstrtol(buf, 0, &value); + if (status == 0) + status = sysfs_set_active_low(desc, dev, value != 0); mutex_unlock(&sysfs_lock);