From patchwork Fri May 5 21:33:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudip Mukherjee X-Patchwork-Id: 9714401 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 0296960235 for ; Fri, 5 May 2017 21:33:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E744B286B3 for ; Fri, 5 May 2017 21:33:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D8ECA286B0; Fri, 5 May 2017 21:33:14 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 609D0286B0 for ; Fri, 5 May 2017 21:33:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751528AbdEEVdN (ORCPT ); Fri, 5 May 2017 17:33:13 -0400 Received: from mail-wr0-f196.google.com ([209.85.128.196]:33419 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751454AbdEEVdM (ORCPT ); Fri, 5 May 2017 17:33:12 -0400 Received: by mail-wr0-f196.google.com with SMTP id w50so1818872wrc.0; Fri, 05 May 2017 14:33:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=UutzsXBKT3x+7TjvR7jkJwrG0tekEptkKr1ayNhgvTg=; b=gyZXTym73Bnr3lRZ/ejOwE68MG5IC8Ft+dvkYnd8+0U93KCcQ+WjgqmGtnraKkpQ1I 4+XR+vDZ/Cdirf5pzcsR9clyMWWrFMm6wT9HP8fE1yHSYtWJpQQbCFuS7zBC20newsnW AJyH5gdY4sCTOBdh9z6jHfh4isCIPniXhontbumnezhrdoVUPaqDiQ+JlsdGxRolEeas 73vcn2P7jcLvwfQElT2cQEb7QalAZlSZWiybffPEVO+7XxYV2pVEIb1wOG+RU40VUEnx cxKtac154KHDsEGgrn5+pD2aOJfXGCVtNQsgwqQ+8yi6i6A6Bbs7SKgkOaiHFBA3MOfI iZOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=UutzsXBKT3x+7TjvR7jkJwrG0tekEptkKr1ayNhgvTg=; b=PXaTKIINPbL8vgkYboXJrFg2r+pz3UpCwMEcr030hr2L19kH9uymerhs4hLaxFGhNZ wAuN8aw9n+aAR8rG9oxtOEkaoeOWk1iuqag7pfplNBTmK4+sab2310CzuBuSAugkIiFy K/wPHcgheX5PHe8vJfxvavzEU0MLKKyxA1SfOzgSPqvro8CGRk9YTAZUxAnLlkKBztC9 k7mEuQzHaiTxhhA9eiU7FFv4ZauUZfM1UURhR7x4m1OQk5aI+ylVMJ3kfd7+IDRalCZq ZJLth6xDl51JnscLAwUmRndaiL4b4Or4N7C2Xj9E/f6SkTV9mXL3Z/xQoE+32zShXHaS 9n1w== X-Gm-Message-State: AN3rC/5X+sq3s92/1ZC10vJDoLOiJMTAUOdyikT6eP80omXenLtVqehR Km+5X1+hV4+uJg== X-Received: by 10.223.157.29 with SMTP id k29mr34247249wre.156.1494019991240; Fri, 05 May 2017 14:33:11 -0700 (PDT) Received: from localhost.localdomain (cpc101300-bagu16-2-0-cust362.1-3.cable.virginm.net. [86.21.41.107]) by smtp.gmail.com with ESMTPSA id 72sm3711897wmx.23.2017.05.05.14.33.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 05 May 2017 14:33:10 -0700 (PDT) From: Sudip Mukherjee To: Lee Jones , Daniel Thompson , Jingoo Han , Bartlomiej Zolnierkiewicz Cc: linux-kernel@vger.kernel.org, linux-fbdev@vger.kernel.org, Sudip Mukherjee Subject: [PATCH v2] backlight: report error on failure Date: Fri, 5 May 2017 22:33:05 +0100 Message-Id: <1494019985-5417-1-git-send-email-sudipm.mukherjee@gmail.com> X-Mailer: git-send-email 1.9.1 Sender: linux-fbdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP It is possible to update the backlight power and the brightness using the sysfs and on writing it either returns the count or if the callback function does not exist then returns the error code 'ENXIO'. We have a situation where the userspace client is writing to the sysfs to update the power and since the callback function exists the client receives the return value as count and considers the operation to be successful. That is correct as the write to the sysfs was successful. But there is no way to know if the actual operation was done or not. backlight_update_status() returns the error code if it fails. Pass that to the userspace client who is trying to update the power so that the client knows that the operation failed. This is not a change of ABI as the userspace expects an error of ENXIO, after this patch the range of errors that are returned to the userspace will increase. Signed-off-by: Sudip Mukherjee --- v2: update power with old value on failure. Copy-pasting from the last patch conversation: The problem that prompted me to send this patch is the current project that I am working on now. And we faced this there. The userspace code is writing to the sysfs node to poweron the backlight and reported success. But sometimes we noticed that backlight was not actally powered on. And that lead me to check the code and noticed that it is swallowing all the errors. drivers/video/backlight/backlight.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index 288318a..ad0aa6a 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -134,7 +134,7 @@ static ssize_t bl_power_store(struct device *dev, struct device_attribute *attr, { int rc; struct backlight_device *bd = to_backlight_device(dev); - unsigned long power; + unsigned long power, old_power; rc = kstrtoul(buf, 0, &power); if (rc) @@ -143,12 +143,16 @@ static ssize_t bl_power_store(struct device *dev, struct device_attribute *attr, rc = -ENXIO; mutex_lock(&bd->ops_lock); if (bd->ops) { + rc = 0; pr_debug("set power to %lu\n", power); if (bd->props.power != power) { + old_power = bd->props.power; bd->props.power = power; - backlight_update_status(bd); + rc = backlight_update_status(bd); + if (rc) + bd->props.power = old_power; } - rc = count; + rc = rc ? rc : count; } mutex_unlock(&bd->ops_lock); @@ -176,8 +180,7 @@ int backlight_device_set_brightness(struct backlight_device *bd, else { pr_debug("set brightness to %lu\n", brightness); bd->props.brightness = brightness; - backlight_update_status(bd); - rc = 0; + rc = backlight_update_status(bd); } } mutex_unlock(&bd->ops_lock);