From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 76000C04EB8 for ; Wed, 12 Dec 2018 11:17:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 377A2208E7 for ; Wed, 12 Dec 2018 11:17:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1544613424; bh=2WFHE9J5K6Z/5VRg59cCA7BuqTtzWHXNYh+8C0evBCA=; h=From:To:Subject:Date:In-Reply-To:References:List-ID:From; b=Y23m+X/a24DQJSiniv5dQ760iP1AByMpdgoPEuSz3IwJgURpKiAJGcDD9rfxwzbix 6MwXHOiaAzinCz1S1QWolPf9gOPaTJiaeuevMZ9a28eDX5KXjvhWK4DPT3Ebs0kccf q1i9gJTAaP2AJdv7gExIW/Lr78nzIZMu+/PrMoHI= DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 377A2208E7 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727354AbeLLLRD (ORCPT ); Wed, 12 Dec 2018 06:17:03 -0500 Received: from mail.kernel.org ([198.145.29.99]:44784 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726970AbeLLLRB (ORCPT ); Wed, 12 Dec 2018 06:17:01 -0500 Received: from PC-kkoz.proceq.com (unknown [213.160.61.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 6C0FB20879; Wed, 12 Dec 2018 11:16:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1544613420; bh=2WFHE9J5K6Z/5VRg59cCA7BuqTtzWHXNYh+8C0evBCA=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Au42wqD6IE5ZY0/q+0QG8pD+yhvLvRSAJJQLAiUTFeYgz/Pu+szUYGq+f6SB7tSL4 T4Q5LPX7iEF2a+IPbNGgX4/6LZeK17e46T4RkZ/Hf6Nd6S2rlxPJ5wBQMGnvWlk6Xs nwqYNDxoriH5iWntd577JGaic8bwrkclVcJh2Lsg= From: Krzysztof Kozlowski To: Jacek Anaszewski , Pavel Machek , Rob Herring , Mark Rutland , Krzysztof Kozlowski , Baolin Wang , linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 3/5] leds: trigger: pattern: Add pattern initialization from Device Tree Date: Wed, 12 Dec 2018 12:16:44 +0100 Message-Id: <1544613406-27026-4-git-send-email-krzk@kernel.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1544613406-27026-1-git-send-email-krzk@kernel.org> References: <1544613406-27026-1-git-send-email-krzk@kernel.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Allow initialization of pattern used in pattern trigger from Device Tree property. This is especially useful for embedded systems where the pattern trigger would be used to indicate the process of boot status in a nice, user-friendly blinking way. This initialization pattern will be used till user-space is brought up and sets its own pattern, indicating the boot status is for example finished. Signed-off-by: Krzysztof Kozlowski --- drivers/leds/trigger/ledtrig-pattern.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/drivers/leds/trigger/ledtrig-pattern.c b/drivers/leds/trigger/ledtrig-pattern.c index 1870cf87afe1..5be7bbe13a2c 100644 --- a/drivers/leds/trigger/ledtrig-pattern.c +++ b/drivers/leds/trigger/ledtrig-pattern.c @@ -331,6 +331,22 @@ static const struct attribute_group *pattern_trig_groups[] = { NULL, }; +static void pattern_init(struct led_classdev *led_cdev) +{ + const char *pattern; + int err; + + pattern = led_classdev_get_default_pattern(led_cdev); + if (!pattern) + return; + + err = pattern_trig_store_patterns(led_cdev, pattern, strlen(pattern), + false); + if (err) + dev_warn(led_cdev->dev, + "Pattern initialization failed with error %d\n", err); +} + static int pattern_trig_activate(struct led_classdev *led_cdev) { struct pattern_trig_data *data; @@ -354,6 +370,15 @@ static int pattern_trig_activate(struct led_classdev *led_cdev) timer_setup(&data->timer, pattern_trig_timer_function, 0); led_cdev->activated = true; + if (led_cdev->flags & LED_INIT_DEFAULT_TRIGGER) { + pattern_init(led_cdev); + /* + * Mark as initialized even on pattern_init() error because + * any consecutive call to it would produce the same error. + */ + led_cdev->flags &= ~LED_INIT_DEFAULT_TRIGGER; + } + return 0; } -- 2.7.4