From patchwork Sun Oct 30 06:04:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arseniy Krasnov X-Patchwork-Id: 12823 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp1661353wru; Sat, 29 Oct 2022 23:12:37 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7J+SBPtwHS8PWdy7TGsanxrfh/BV169xsT46W59TAF/RkUnfrgqYYKMypgWU8++QLUi26E X-Received: by 2002:aa7:859a:0:b0:56b:d76d:8c76 with SMTP id w26-20020aa7859a000000b0056bd76d8c76mr7543668pfn.77.1667110357545; Sat, 29 Oct 2022 23:12:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667110357; cv=none; d=google.com; s=arc-20160816; b=SdVlfMOT0m4+kUVas599n0tuY0+emJbe9c1a4S9hXRpJh1IQpVlBnmA3u02UXkjCtU N/OIHndhGYzkiKZFhtSweOqzreqNPqWvcqeIWX5QTmj+0rm/YDw4U/AKsOc7a4yS8aTt JuaBpJC/Tn+/ySDd/eyIW5uxCfke0+8rGNpb5TwpZEz8CmsX6CPA5EXoEeqE1a+TvCLS jE6XJ9DpK4wwKHf1gxfRH2LxSsXf8J5rjQOsVrGMJiMMx+gjC9Tixf9R9RKsE3qFYdvz 74svepsFv2KJNmFNQAj4EWivg1Dm7lreIE8g3aFxQoRSCPuS13g+/8IkWA7NNpHHydi7 zfIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-id:content-language:accept-language:message-id:date :thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=Mj6XeGhibfGmSiEoTN5jf4ujH17LQ75QJnsy4cgB8Go=; b=eNKyTEQD7PRiXQBNWXSycMaBLo5Lu0IHezpnRXA7gMvS+ZBbx+w5NvrRLWHXbNQw11 /h7elKGRCVCVyL49nQgiwiFw5pVFDfHj5BWezahZkS1jYyHYzikeFgJuIKqYEtDaOiPJ 5QEnxw+EoEP12kBqS/nyNhrQmKKKrG3KG63CG+jrJfKw8EtQXKzOTVBa8ABUDK8jpcFH 707PCzhtF0XOJIOmn3bpUNHu+iU8OdNAlJgucppehSYZwB6V/gPq8YhxYBHmQjvkRZ3k Y9TvqD5Csjn4ZUrCcyBBVCNzj3Di5aAD4u+B9zY4+d/kZ00Mx/ikcMx7k5h5AWG3sCXn uBtQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=c+ccjpSE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u10-20020a056a00098a00b00554f1b32131si4578311pfg.362.2022.10.29.23.12.25; Sat, 29 Oct 2022 23:12:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=c+ccjpSE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229721AbiJ3GFo (ORCPT + 99 others); Sun, 30 Oct 2022 02:05:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44890 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229562AbiJ3GFm (ORCPT ); Sun, 30 Oct 2022 02:05:42 -0400 Received: from mx.sberdevices.ru (mx.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2A79FBB; Sat, 29 Oct 2022 23:05:38 -0700 (PDT) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id 981FA5FD0D; Sun, 30 Oct 2022 09:05:34 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1667109934; bh=Mj6XeGhibfGmSiEoTN5jf4ujH17LQ75QJnsy4cgB8Go=; h=From:To:Subject:Date:Message-ID:Content-Type:MIME-Version; b=c+ccjpSE8FDHp9W8PipF45eu6bKB8Wp2qvhDjbOlJoJ7WHzFwAS7h8coDc63s7/wo c64/QtpDpI2hWLMzp3+uVg5HGLuqjaCkSfAb7uigfg3eUvJXNDr4dS3bWHTlIB+F93 e2s1YCwcYWayCSfDtBd+46thh0AnvQER97mE9RxVu0JUwgN4MmBGzFxikrAyCh9RAG P8wN+6MarQkUJvuj14asjJT+4j57SV2sCyV29cRCabwoU16CZv7CQuhMNU5fa3xZHP OcpEoIuuufL60rPa1aJ6EjSeK2jxgfoi5ziO+epUwPqhOW8P/vo+5nA6PEbqm42kQk bH5Oc+iRDBuag== Received: from S-MS-EXCH02.sberdevices.ru (S-MS-EXCH02.sberdevices.ru [172.16.1.5]) by mx.sberdevices.ru (Postfix) with ESMTP; Sun, 30 Oct 2022 09:05:33 +0300 (MSK) From: Arseniy Krasnov To: Pavel Machek CC: "linux-kernel@vger.kernel.org" , "linux-leds@vger.kernel.org" , kernel Subject: [RFC PATCH v1 0/1] Support to use own workqueue for each LED Thread-Topic: [RFC PATCH v1 0/1] Support to use own workqueue for each LED Thread-Index: AQHY7CWKPTqYZU7OvEqkn9ySnKgCJg== Date: Sun, 30 Oct 2022 06:04:59 +0000 Message-ID: <9a0a70a8-0886-1115-6151-72d2cba842cf@sberdevices.ru> Accept-Language: en-US, ru-RU Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.16.1.12] Content-ID: <9C39020E49B98E4B9770742F765209BE@sberdevices.ru> MIME-Version: 1.0 X-KSMG-Rule-ID: 4 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiPhishing: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 1.1.2.30, bases: 2022/10/30 00:33:00 #20534548 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1748091910294187623?= X-GMAIL-MSGID: =?utf-8?q?1748091910294187623?= This allows to use own workqueue for each LED. This could be useful when we have multiple LEDs which must work mutually (from user's point of view), for example when complex animation must be played. Problem is that default wq - 'system_wq' does not guarantee order of callbacks execution, which control brightness of every LED. So when userspace or pattern logic wants to change brightness in one order, kworkers may do it in random way, thus breaking smoothness of animation. Here is example how to use this patch: E.g. special workqueue must be allocated and set for each LED during init of 'led_classdev'. Then later in 'led_init_core()', 'system_wq' won't be used for such LEDs. Arseniy Krasnov(1): drivers/leds/led-core.c | 8 ++++++-- include/linux/leds.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) --- 2.35.0 --- a/drivers/leds/leds-aw2013.c +++ b/drivers/leds/leds-aw2013.c @@ -264,11 +264,17 @@ static int aw2013_probe_dt(struct aw2013 *chip) struct device_node *np = dev_of_node(&chip->client->dev), *child; int count, ret = 0, i = 0; struct aw2013_led *led; + struct workqueue_struct *wq; count = of_get_available_child_count(np); if (!count || count > AW2013_MAX_LEDS) return -EINVAL; + wq = alloc_ordered_workqueue("aw2013_wq", 0); + + if (!wq) + return -ENOMEM; + regmap_write(chip->regmap, AW2013_RSTR, AW2013_RSTR_RESET); for_each_available_child_of_node(np, child) { @@ -299,6 +305,7 @@ static int aw2013_probe_dt(struct aw2013 *chip) led->cdev.brightness_set_blocking = aw2013_brightness_set; led->cdev.blink_set = aw2013_blink_set; + led->cdev.set_brightness_wq = wq; ret = devm_led_classdev_register_ext(&chip->client->dev, &led->cdev, &init_data);