Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752009AbbKQIGl (ORCPT ); Tue, 17 Nov 2015 03:06:41 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:31273 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750913AbbKQIGk (ORCPT ); Tue, 17 Nov 2015 03:06:40 -0500 MIME-version: 1.0 Content-type: text/plain; charset=UTF-8; format=flowed X-AuditID: cbfec7f4-f79c56d0000012ee-a8-564ae00d5cb2 Content-transfer-encoding: 8BIT Message-id: <564AE00C.7050303@samsung.com> Date: Tue, 17 Nov 2015 09:06:36 +0100 From: Jacek Anaszewski User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130804 Thunderbird/17.0.8 To: Simon Arlott Cc: =?UTF-8?B?w4FsdmFybyBGZXJuw6FuZGV6IFJvamFz?= , Jonas Gorski , Richard Purdie , linux-leds@vger.kernel.org, Linux Kernel Mailing List Subject: Re: [PATCH 1/2 (v2)] leds-bcm6328: Reuse bcm6328_led_set() instead of copying its functionality References: <562BB799.7000708@simon.arlott.org.uk> <562DE832.6070903@samsung.com> <5630A9C1.5060907@samsung.com> <56327821.8020508@simon.arlott.org.uk> <563A2731.40204@samsung.com> <563A2850.5000506@gmail.com> <563B3240.9010804@samsung.com> <56488968.3070103@simon.arlott.org.uk> <5649EA72.20504@samsung.com> <564A3B9B.7040608@simon.arlott.org.uk> <564A4B92.4040401@gmail.com> <564ADA76.4040202@simon.arlott.org.uk> In-reply-to: <564ADA76.4040202@simon.arlott.org.uk> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrGLMWRmVeSWpSXmKPExsVy+t/xy7q8D7zCDJaeEbG4ve4Um8XlXXPY LLa+WcdosebOIVaL3bueslpcOP+Z2YHNY3H/EkaPnbPusntsWZzhsWf+D1aPz5vkAlijuGxS UnMyy1KL9O0SuDJWtJ9kKpgvWDF30hH2BsZevi5GTg4JAROJl+2LmSFsMYkL99azdTFycQgJ LGWU2DrtLitIgldAUOLH5HssXYwcHMwC8hJHLmWDhJkFzCQetaxjhqh/xijx4tBvNoh6LYkP E58wgdgsAqoSVx99B5vDJmAo8fPFa7C4qECExJ/T+8DiIgIqEhdutbOCDGIWeAq0eP8LdpCE sECWxO/5m1ghNnSySNw6+hrsVE4BY4n2N58YJzAKzEJy4CyEA2chOXABI/MqRtHU0uSC4qT0 XEO94sTc4tK8dL3k/NxNjJDQ/rKDcfExq0OMAhyMSjy8Ase9woRYE8uKK3MPMUpwMCuJ8Cpf BwrxpiRWVqUW5ccXleakFh9ilOZgURLnnbvrfYiQQHpiSWp2ampBahFMlomDU6qBUf9pTfvr 2lu7v73/FX0ncEqVXlVBaGwMl7TJz/Nphgs+xWp8CD1dYR2wJttH2Nb39RHJyRUblsxrX8ph 8T3Ztt7wg3T4P4WYVInAuM21ef+Oiioq8DKZPws+GxHNYLTW2Lm9O9FmtRDfnf+zH1VVnjx2 KFLRRmz2pHl6dx8rfL/kY6y38vM3JZbijERDLeai4kQAwauq72kCAAA= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2393 Lines: 64 Hi Alvaro, Simon, On 11/17/2015 08:42 AM, Simon Arlott wrote: > On 16/11/15 21:33, Álvaro Fernández Rojas wrote: >> Still wrong, you are setting the led value after unlocking the spinlock. > > I have to unlock it because bcm6328_led_set() locks that spinlock. Commit message from the first version of the patch justified that properly. It should be preserved in the final patch: As bcm6328_led_set() expects to acquire the spinlock, narrow the locking to only cover reading of the current state. There is no need to hold the spinlock between reading the current value and setting it again because the LED device has not yet been registered. >> El 16/11/2015 a las 21:24, Simon Arlott escribió: >>> When ensuring a consistent initial LED state in bcm6328_led (as they may >>> be blinking instead of on/off), the LED register is set using an inverted >>> copy of bcm6328_led_set(). To avoid further errors relating to active low >>> handling, call this function directly instead. >>> >>> As bcm6328_led_set() acquires the same spinlock again when updating the >>> register, it is called after unlocking. >>> >>> Signed-off-by: Simon Arlott >>> --- >>> drivers/leds/leds-bcm6328.c | 8 ++------ >>> 1 file changed, 2 insertions(+), 6 deletions(-) >>> >>> diff --git a/drivers/leds/leds-bcm6328.c b/drivers/leds/leds-bcm6328.c >>> index c7ea5c6..95d0cf9 100644 >>> --- a/drivers/leds/leds-bcm6328.c >>> +++ b/drivers/leds/leds-bcm6328.c >>> @@ -314,14 +314,10 @@ static int bcm6328_led(struct device *dev, struct device_node *nc, u32 reg, >>> } else { >>> led->cdev.brightness = LED_OFF; >>> } >>> - >>> - if ((led->active_low && led->cdev.brightness == LED_FULL) || >>> - (!led->active_low && led->cdev.brightness == LED_OFF)) >>> - bcm6328_led_mode(led, BCM6328_LED_MODE_ON); >>> - else >>> - bcm6328_led_mode(led, BCM6328_LED_MODE_OFF); >>> spin_unlock_irqrestore(lock, flags); >>> >>> + bcm6328_led_set(&led->cdev, led->cdev.brightness); >>> + >>> led->cdev.brightness_set = bcm6328_led_set; >>> led->cdev.blink_set = bcm6328_blink_set; >>> >> > > -- Best Regards, Jacek Anaszewski -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/