Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp18195pxx; Wed, 28 Oct 2020 16:45:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxo7aX5i2ycE3fn+IkH3ND2dPP9udrk33YkaGZF4/yKN5SCs5rX0VBB80CmH75/6qlfT99Z X-Received: by 2002:a17:906:d8b0:: with SMTP id qc16mr1493313ejb.268.1603928738117; Wed, 28 Oct 2020 16:45:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603928738; cv=none; d=google.com; s=arc-20160816; b=YOn2oo44EYy2pu2BUJBptCr+qGYchVcOWZrjFINePjBHusRrs2q8U2zVhPPBFYovA5 3qIXvcoeTuDMvkdXocUOg5fLbAgtlWQgmI3Aw/esr3pdpzz0lVlpAYeJxRI6BLdOLBRj NdtBsA4ZjVUyPy/TTV8uYW5UNoYyzsPSuARmDL8tOgUxbxJk1XBA8R7JdHvbRA++sJwO bxnS5imbX3DGMgFNt5pjI4gSyKxBUUcRE7It7yEhLzL7IAeUFldNA3ddTWejRJd9nRjG u0eWNl+Z0lw9Mjjhn8ca0uHf3PhujRGPiWPEQrD9pM/qtd64XpkpXSWjzugm0Y47ZKup n4dw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature; bh=a42ZTHpfclzQndPssC2x9RBSnJnu5sEHiL3sczOvFqA=; b=IfTWaet3jX8GZvlBcFnUWgIAAX3zZq4tsWWMh92vRczZjbhyQuZGKC5hDFuV3n7AcB 5v518vLOAX7O1PQBq8MI1bLNHLHYzQ2LCrMxklLDzi7YS8QJBKH8i/XgnGFWFcBrZoiE Y5uctfATB0u89hD3+IxpBNc2zHkuuMH9j8H9dcKE8em0EeO9167XNr3UII/Hb02joAhL AwqTjUtNTgDsXqIDx6T8GFWvhej+GWgq1pD33Q2cLLN+NgVBwf3VVMUTkPrYfJiAXZ/W ZRoPkP1AByZ/HqJV6qv83GtVVYoTm7RFr1SzfI4PFMbsp1ILD42nUKATn6ndE2nOD4zf z2QQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=nSAhtm47; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k20si791888eds.233.2020.10.28.16.45.16; Wed, 28 Oct 2020 16:45:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=nSAhtm47; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389585AbgJ1XnP (ORCPT + 99 others); Wed, 28 Oct 2020 19:43:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59380 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389653AbgJ1Wvw (ORCPT ); Wed, 28 Oct 2020 18:51:52 -0400 Received: from mail-lf1-x144.google.com (mail-lf1-x144.google.com [IPv6:2a00:1450:4864:20::144]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6F1FEC0613CF; Wed, 28 Oct 2020 15:51:51 -0700 (PDT) Received: by mail-lf1-x144.google.com with SMTP id 184so880967lfd.6; Wed, 28 Oct 2020 15:51:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=a42ZTHpfclzQndPssC2x9RBSnJnu5sEHiL3sczOvFqA=; b=nSAhtm47X+auPNjUm0Gl04eSiakBsPenJVVSoyFzU/pprU0XGr5DEMq6OgTxpjZ3Ih jDgFuT/bFvUfv/l/vwh6+JUo0MCPFT1Af5T2UYRwpPeqUCzIFv6IrfmrePzRNrKuH8Y4 iyh6Nw6+eOT7PmlnYh78R1ZV2+nmph/lraPLKOZIOrMo+7VSCarC4ysZkfcIv3GHSQNe t/ICb5hIzvQcDGo7ZUtiYWJaaWHqlOdlMSZ/kGRCYUct7YHIXSSlQIbaFF2cwHEXxNbC OUwfggreYv+T5rsWA3WxHrR2D2LrMqyOtXbXD5QYzTZ3pAkZa9eP0VBgxoi9kTTiJzOw Enkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=a42ZTHpfclzQndPssC2x9RBSnJnu5sEHiL3sczOvFqA=; b=jmRxWBSMXtMhxgp8wfIRX28g3XmbsIgjSEINrJY1Hiz0t+GltIpMKHx9Yx9YIZTlMV RC50/8MX0LfcCHlXVZ+ZZZkhdYrbkBKrmDtUSPMWEprwt8ch69O5ZJTGWVEgoVJ5QjPK Pr1dH6E6eyIGBtbWaMD1UJPtIdESHTZ816Y1pkm/j8XvhNJKQNpkUewFl2NS51lHk+Bs 9ugOzj3nDqqAue8PxlzbLklnrw8QjE3B7pJueq4U7DWNn98Ad8ncfumrQl3nvpn4kH5H IVz1t5EIUpmlu83mt92hciZOrnD5HjoqVdm40DuXoL1SxRqimwsyR0Ol6y/oOv9DfVaK uQow== X-Gm-Message-State: AOAM533DQmZgSiQATBjSVwYZULM1/2vL3eyJ0kVgSFpZi+TU/4Ul4ZEB H08cG60NhTPXnoc3GFrg7YrnJfxVa2E= X-Received: by 2002:a17:906:77d9:: with SMTP id m25mr3816259ejn.190.1603883227986; Wed, 28 Oct 2020 04:07:07 -0700 (PDT) Received: from ?IPv6:2a01:110f:b59:fd00:588e:5ef8:851e:45b6? ([2a01:110f:b59:fd00:588e:5ef8:851e:45b6]) by smtp.gmail.com with ESMTPSA id r24sm2664105edm.95.2020.10.28.04.07.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 28 Oct 2020 04:07:07 -0700 (PDT) Subject: Re: [PATCH v1 1/2] leds: rt4505: Add support for Richtek RT4505 flash led controller To: ChiYuan Huang Cc: Pavel Machek , dmurphy@ti.com, robh+dt@kernel.org, linux-leds@vger.kernel.org, lkml , cy_huang , devicetree@vger.kernel.org References: <1603784069-24114-1-git-send-email-u0084500@gmail.com> <20201027082900.GA21354@amd> From: Jacek Anaszewski Message-ID: Date: Wed, 28 Oct 2020 12:07:04 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/28/20 5:57 AM, ChiYuan Huang wrote: > Hi, > > Jacek Anaszewski 於 2020年10月28日 週三 上午12:40寫道: >> >> Hi Pavel, ChiYuan, >> >> On 10/27/20 9:29 AM, Pavel Machek wrote: >>> Hi! >>> >>>> From: ChiYuan Huang >>>> >>>> Add support for RT4505 flash led controller. It can support up to 1.5A >>>> flash current with hardware timeout and low input voltage >>>> protection. >>> >>> Please use upper-case "LED" everywhere. >>> >>> This should be 2nd in the series, after DT changes. >>> >>>> Signed-off-by: ChiYuan Huang >>>> --- >>>> drivers/leds/Kconfig | 11 ++ >>>> drivers/leds/Makefile | 1 + >>>> drivers/leds/leds-rt4505.c | 397 +++++++++++++++++++++++++++++++++++++++++++++ >>>> 3 files changed, 409 insertions(+) >>>> create mode 100644 drivers/leds/leds-rt4505.c >> [...] >>>> +static int rt4505_torch_brightness_set(struct led_classdev *lcdev, enum led_brightness level) >>>> +{ >>> >>> 80 columns, where easy. >>> >>>> + struct rt4505_priv *priv = container_of(lcdev, struct rt4505_priv, flash.led_cdev); >>>> + u32 val = 0; >>>> + int ret; >>>> + >>>> + mutex_lock(&priv->lock); >>>> + >>>> + if (level != LED_OFF) { >>>> + ret = regmap_update_bits(priv->regmap, RT4505_REG_ILED, RT4505_ITORCH_MASK, >>>> + (level - 1) << RT4505_ITORCH_SHIFT); >>>> + if (ret) >>>> + goto unlock; >>>> + >>>> + val = RT4505_TORCH_SET; >>>> + } >>>> + >>>> + ret = regmap_update_bits(priv->regmap, RT4505_REG_ENABLE, RT4505_ENABLE_MASK, val); >>>> + >>>> +unlock: >>>> + mutex_unlock(&priv->lock); >>>> + return ret; >>>> +} >>> >>> Why is the locking needed? What will the /sys/class/leds interface >>> look like on system with your flash? >> >> The locking is needed since this can be called via led_set_brightness() >> from any place in the kernel, and especially from triggers. >>From this case, It means only led classdev > brihtness_get/brightness_set need to be protected. > I search led_flash_classdev, it only can be controlled via sysfs or V4l2. > Like as described in last mail, flash related operation is protected > by led access_lock and v4l2 framework. > I'll keep the locking only in led classdev brightness_get/brightness_set API. > If I misunderstand something, please help to point out. Locking have to be used consistently for each access to the resource being protected with the lock. Otherwise you can end up in a situation when rt4505_torch_brightness_set and rt4505_flash_brightness_set will try concurrently alter hardware state. Regardless of how harmful could it be in case of this particular device it is certainly against programming rules. -- Best regards, Jacek Anaszewski