From patchwork Wed Jul 3 01:01:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikhail Kshevetskiy X-Patchwork-Id: 1955769 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.a=rsa-sha256 header.s=selector2 header.b=NI6ooFK+; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4WDM2K6gJdz1xqb for ; Wed, 3 Jul 2024 11:02:33 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 7982688528; Wed, 3 Jul 2024 03:02:31 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=iopsys.eu Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.b="NI6ooFK+"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 376998877C; Wed, 3 Jul 2024 03:02:30 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,SPF_HELO_PASS, SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20700.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::700]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 817B38852A for ; Wed, 3 Jul 2024 03:02:27 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=iopsys.eu Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=mikhail.kshevetskiy@genexis.eu ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X3mtZ73czCk8SpWRlkr+x+uyI96WQap4mm7NPzaXW8ct8gFIOzlsW43tUQwp8IB15gkcO3kS83EYRl9phethaSKei5Ekjm8o3nr9603Bshct2eLjHFZe2fIGrnTOVCL+UZWQ9WNXOnpj2O0G0kovYdunT2BDikrnFr/cRPF8NbfotiCg/72ukP1Og7F9OU31LJaauBOmeL6PJfDokRBlbXR55/lKImZsTZ0dTcsicgpnKDzrPCxgmVOleBr0d9yxAhWihOo+WDhyc4pqlgGcYSEmbBKrbh1UzS+/GWUCUk/caof3kkwVhVOjD3WIuyTq8XbEX0gVqNt895I4uGokOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9my4k93dtWMgpDnvYGC8sbR9VZU6AgRt6X7ZxlwQzzg=; b=ltF43mKq2l+7UIfQEysirvId/dcPYtXcQTWmFcZV5OIoKZY6gIBDY691qTppTN/mR6pyvSxboE1CXysqNdFku4oEYGr4rsj6QwCI48RtuzQ4KRJ10YZngJVUjYaV+36SLW5SJ0hvQQzTjiqsUMLiSTTfV/lWb0cP8Bkl6VkRID7nNzzg5HC1r5XI4zBBJGjASQhnlaNQx9TZmxCRYunA5k/ciH1StMFzB4Hsb4cgaKQNNJtXmej8GSLKldxVC0VpKAWlyfnu5hLXf5xSlBo61fpJBToAgaxQWUlaIyHjeDLvUICZqG3I5LGcXyC4PAKgwRph8Zgz62my1evIaI8ADQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=genexis.eu; dmarc=pass action=none header.from=iopsys.eu; dkim=pass header.d=iopsys.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iopsys.eu; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9my4k93dtWMgpDnvYGC8sbR9VZU6AgRt6X7ZxlwQzzg=; b=NI6ooFK+s5sGeVPLLluoSVGlybejE/7MSwy3TLAzhVBwX1pnpudcv+7P9spVYYWrtRlS4ASiJDsMpvmFsUpK4zOITplyH1l5j+gkXR79s91qMex9cK5QK1/L6KdjDIkvi+o+7Ji+tzBmf0VF6EMA1uQU1yNrg5KK3M+p9RtCpNg2ndK56sS2me3c2Tzv8gKVqloej4tdm+BnVouuhbsLB6iKH+cPrSNUHV6GgYrGwH17DateLoMb7yoZ6/iqdut7xbVGMY4jqwzrMTLB0bETHHEBV/IgbbdhKKJTXxDYUoI37ZfH/Xx9Sm4uKJg+gWk5krxIpq03qEO16YpEv6VahQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=iopsys.eu; Received: from GV2PR08MB8121.eurprd08.prod.outlook.com (2603:10a6:150:7d::22) by PA4PR08MB6013.eurprd08.prod.outlook.com (2603:10a6:102:eb::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7741.23; Wed, 3 Jul 2024 01:02:26 +0000 Received: from GV2PR08MB8121.eurprd08.prod.outlook.com ([fe80::4cd3:da80:2532:daa0]) by GV2PR08MB8121.eurprd08.prod.outlook.com ([fe80::4cd3:da80:2532:daa0%5]) with mapi id 15.20.7719.029; Wed, 3 Jul 2024 01:02:26 +0000 From: Mikhail Kshevetskiy To: Tom Rini , Rasmus Villemoes , Doug Zobel , Marek Vasut , Christian Gmeiner , Christian Marangi , Simon Glass , u-boot@lists.denx.de Cc: Michael Polyntsov , Mikhail Kshevetskiy Subject: [PATCH 1/2] led: Implement software led blinking Date: Wed, 3 Jul 2024 05:01:30 +0400 Message-Id: <20240703010131.1735100-2-mikhail.kshevetskiy@iopsys.eu> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240703010131.1735100-1-mikhail.kshevetskiy@iopsys.eu> References: <20240703010131.1735100-1-mikhail.kshevetskiy@iopsys.eu> X-ClientProxiedBy: LO2P265CA0130.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:9f::22) To GV2PR08MB8121.eurprd08.prod.outlook.com (2603:10a6:150:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV2PR08MB8121:EE_|PA4PR08MB6013:EE_ X-MS-Office365-Filtering-Correlation-Id: b52f017e-cf11-4590-e697-08dc9afbcdce X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|366016|52116014|38350700014; X-Microsoft-Antispam-Message-Info: q0EhSyYA2w4JWcCOG8b232dL7mJ9ru/aZ53CMmQfcF8xl/PxfzGd9hMucaiWnWW5kOUVp7Hdr7/V0lSMQPJifO4M7Whn6oeD6mitpPNT+pXtYyU4SM8E3uNHVJW1DGULYgwef0SU5IJsAWhvhWnP0Ber6iP75/SY8B8vCUndLwKWTjTBo2hOVV1FAzlLdzIwfEMI9nU9qriW44MFiUBZSbO8w6QA3AB3YMYCxPLaP5VdYtDFwaapMuPS6wLDY9H6EtzI8JzQdrBSATlWWHJLAJId7b2ZeTB0jcgPFbc604fQyArjeAUujkFj68U+M0Tig3YehUge9ER0rwGvMsBmzSgRrbQnz7Qya2swJ8nROKB3R2W0v7WosGoXZ6zNmoX1b/w5+lkB1UwcEtuY2QYpCGhxyqY/uZbekjD9VaMcwacvqFcHao1/czqDLrBGZneZ12OfQTp0s6Z/YYLPDR/4xclGkArh5ZfEH5B915HVO9oIZ/naFgqeoB/DSuqkwacpOno0oJOEXwmM5lDD7/gzh7ZdvsTLqE6nSeTZJ8A05JHUkOVoJQv5Fi0WJsbATuqO7cvbiwFKGL6yjZ0tCCQucpWhJ818D/dDdVTtDkJyriRuKLHO1kQnOKSzEra7Vs+88wFQhpREOgr6Gqm2f0Dzt51AibeeIo0RyxPw9DIhhG7UiFm3A52mqAMWqjZ6CnUvJ/QutGotLG7TSjneQ9X3aMi1YLpgX9YVSUjrxX7sluX5+rLae9lwv1cul8xW27aiyJZVGwa0FDoSkM3eMb86/jmcpVHtsxXlWb13JSPNnc0dFIzoEOEI8zNCZM4u6jRBnoEfgOaGPAtcmD+Mth+hRa9DeOimFNYspimGJ76LAFdnCWD0KNTzql8d7Q8a1B+7idLVvpPjbH2H6CxWZsBJMjTRrRSce/Hn7xGGpXcidG46UsUKW28aY2dPxwsVJQTyLhf8izH5jv+fBhaobROo67XJ2K/sbq/XYswiWkXQVbGvwmt4rfy4SGKOoyNM5ficx8g8CtZxPG9rfsjFSU+8G1dlW9d3tjkqQMOljVHym8taX6e/AaGi2lpoIcHtDlpCiNC6sWYlfQrhbgYVy6Y8mvWgZhPugj84yVkwHEo/d5VfKhUJAoPLn/3rIHN6BKui8xS24TrJNqkl/CVmgMGg9FJiQqmj3ZwEbxe5NMI6lGAxAODWCLGgxpLRc+OuCxwS1E/12yPPcl6iQHChA5CtmlSibglmldk3tnpX3XSvY/4xow1rIqo2F9+T/QosZdvz6zwjlHUBk6HNR0xPC6BvpmlDbXkwO4VyVtP7adDb07DbmZTlMlMcQrxuh2QXiup0d+26l3MwBtA6f6BhNJT6zK6LukfZsMt1PDWCEHy2i8JspECtKVbwR5ZYplYsF5RLgfZtEzgcvXeXKVgdwOwpUA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:GV2PR08MB8121.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016)(52116014)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 37TPGNZDWg9AJz0n4enMeFuqqzco7lJnBd2NR+UEl+tReY/VQBuch4xRS3ZHbLYwFjd7NhVLw9yUUSY0znUMTO7ghsxRfACfCrLV/8p6ZYfeYeaH8pwuoh3SGNlQKCAq+b5F3pr9CeB6sV6TfmeVWyA0PbUFs89zXR9zXbGCqle/G5uVdXPMyrygZv5Vek5eBVk3Y0j31xrxybmSsBL556mw6ftstTeO6jHxEEb6vvy5/2eFIXNrif/6HipMcapZe0ag40bOsthGLBDQ+eU8f9D7Dy1Kn9QXTt8cnEH7ES6Tlyl1ev3uQwTohYryA9ZiS/84vLi2V0CqSzCe8S+fSNx0ROKNvHbXVW0td89nb/y1nbY2PSlal57Y9AkH09IHEvXuvYMoXF9l3IVcMvGZP46+IMFwX35BQy1ywIMJSfsrAII+hVAxAGMITG+kUR8xp+KuMW1+RhGHe4iairPSP+iSh728SaHQEQZPO6l6hSvVQ8IE+kwwYc7hbetGr0Yw+yb8/hB/45yW2WlYfZ/hbdFTL/PnLoM2mkMH6rj5C/TCTYMDuT7jMZdS+fTmSHqZWe6w/cpeqT9+gq6R0BTD7yQ0vIDKYCvzyW5SqZpqpKwZRTrZYiEmDeb4mX0B0WLreu8PAnUfulpKUKuSu+Mcin/Jfqy6O2J4lIEcmHbJoYxmN2mdkNBN+wHnn5TwAfKPWKnJ5McMxWwQZJkusAT+M/47hFXWfHLdRnWm5Oies/qb+HlF7w6VFKpYcunwwPUijfo4L6npyvnGeRlNZusZMdQm7MQ1sleyxlkAEgSugwr6RcmsWG6tMRDHHtCAtnt4LwEkmykgsK6V5HCPX92+Z25gs40vGUA+hljTrJuj0DOOyuH3JLYBefRxBwNgkxpzaTAahmWdw1QZKDJny2QLLf5GYdIn6VwAr/ufwbIpSkRU8iEMLZubeEhI3lIQRdH/5mv+WAZ4e28PrdJ38nywIuOL7Bupm0KqL8ITj7vrqBTuiuYznKfsh4Y1UwcAagSQFg8aviq1U6SEH6ZhpOcwAnc4048nwO/KuW0j13VS62EMPIfI6NDNDfsDkVd+WQQqcLHqjRe6UtKkNbeTrGOQzT32FA7+Mrm+F4A4eWHaRX78qHDuXxWe0VILtZUETnrZyaEtqdc34xGwqAM4E4pUZ7yNeWawVadIMroA9ljVIH8mLjbPxe9/fGVASyRqKLNkktQ1a6eaCmhaDteyxZvjGGmImJHgET8B23HNPyIslgDNcB1FAHNxAj76Fm6PyKl+nRR9oOCGaq2UvdfxEcxpNN7ackRxcHXSAwJq/AuFMgmtO8fQ5kIm5AT2LNlXUY/4mA0uSWFIWdm4O4JGvjKXFs6NPlvaVD65uRfC8EGjfXHujGorJizh0eaZpO6yorPLDYN1Q/op2hDw0mK5q0pgPXWiMyEg/t+4UQNecEltH/Rin097D4/cZ++r40/oXPLzz150fpKBve3jZPk2UjVcvWaa7POa6rYqPQZJI8f0R/7pTMi76QahAIV/9gwUbN4T/p+/j6Drt4eIroMQKeHahM5wIhCw7cyvPygaSBzqJ2X4rRosTG2nQMC7dFeAFTmWFuqyo+RT9vHTfW1vW2eWUQ== X-OriginatorOrg: iopsys.eu X-MS-Exchange-CrossTenant-Network-Message-Id: b52f017e-cf11-4590-e697-08dc9afbcdce X-MS-Exchange-CrossTenant-AuthSource: GV2PR08MB8121.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jul 2024 01:02:26.1788 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8d891be1-7bce-4216-9a99-bee9de02ba58 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: f6RVjk8uXI5efSvvQOU5y+hCMq0+3niR+hvJgZhng3bmO8K2/y26IZ1+u7uypImwYE/6PtO4KkJcRDgr/NzLW/CQgAk66zORlEbMobfk5XI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6013 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean From: Michael Polyntsov If hardware (or driver) doesn't support leds blinking, it's now possible to use software implementation of blinking instead. This relies on cyclic functions. v2 changes: * Drop sw_blink_state structure, move its necessary fields to led_uc_plat structure. * Add cyclic_info pointer to led_uc_plat structure. This simplify code a lot. * Remove cyclic function search logic. Not needed anymore. * Fix blinking period. It was twice large. * Other cleanups. Signed-off-by: Michael Polyntsov Signed-off-by: Mikhail Kshevetskiy --- drivers/led/Kconfig | 14 ++++++ drivers/led/led-uclass.c | 102 +++++++++++++++++++++++++++++++++++++++ include/led.h | 12 +++++ 3 files changed, 128 insertions(+) diff --git a/drivers/led/Kconfig b/drivers/led/Kconfig index 9837960198d..1afb081df11 100644 --- a/drivers/led/Kconfig +++ b/drivers/led/Kconfig @@ -73,6 +73,20 @@ config LED_BLINK This option enables support for this which adds slightly to the code size. +config LED_SW_BLINK + bool "Support software LED blinking" + depends on LED_BLINK + select CYCLIC + help + Turns on led blinking implemented in the software, useful when + the hardware doesn't support led blinking. Half of the period + led will be ON and the rest time it will be OFF. Standard + led commands can be used to configure blinking. Does nothing + if driver supports blinking. + WARNING: Blinking may be inaccurate during execution of time + consuming commands (ex. flash reading). Also it will completely + stops during OS booting. + config SPL_LED bool "Enable LED support in SPL" depends on SPL_DM diff --git a/drivers/led/led-uclass.c b/drivers/led/led-uclass.c index a4be56fc258..d021c3bbf20 100644 --- a/drivers/led/led-uclass.c +++ b/drivers/led/led-uclass.c @@ -52,6 +52,94 @@ int led_get_by_label(const char *label, struct udevice **devp) return -ENODEV; } +#ifdef CONFIG_LED_SW_BLINK +static void led_sw_blink(void *data) +{ + struct udevice *dev = data; + struct led_uc_plat *uc_plat = dev_get_uclass_plat(dev); + struct led_ops *ops = led_get_ops(dev); + + switch (uc_plat->sw_blink_state) { + case LED_SW_BLINK_ST_OFF: + uc_plat->sw_blink_state = LED_SW_BLINK_ST_ON; + ops->set_state(dev, LEDST_ON); + break; + case LED_SW_BLINK_ST_ON: + uc_plat->sw_blink_state = LED_SW_BLINK_ST_OFF; + ops->set_state(dev, LEDST_OFF); + break; + case LED_SW_BLINK_ST_NONE: + /* + * led_set_period has been called, but + * led_set_state(LDST_BLINK) has not yet, + * so doing nothing + */ + break; + } +} + +static int led_sw_set_period(struct udevice *dev, int period_ms) +{ + struct led_uc_plat *uc_plat = dev_get_uclass_plat(dev); + struct cyclic_info *cyclic = uc_plat->cyclic; + struct led_ops *ops = led_get_ops(dev); + char cyclic_name[64]; + int half_period_us; + + uc_plat->sw_blink_state = LED_SW_BLINK_ST_NONE; + ops->set_state(dev, LEDST_OFF); + + half_period_us = period_ms * 1000 / 2; + + if (cyclic) { + cyclic->delay_us = half_period_us; + cyclic->start_time_us = timer_get_us(); + } else { + snprintf(cyclic_name, sizeof(cyclic_name), + "led_sw_blink_%s", uc_plat->label); + + cyclic = cyclic_register(led_sw_blink, half_period_us, + cyclic_name, dev); + if (!cyclic) { + log_err("Registering of blinking function for %s failed\n", + uc_plat->label); + return -ENOMEM; + } + + uc_plat->cyclic = cyclic; + } + + return 0; +} + +static bool led_sw_is_blinking(struct udevice *dev) +{ + struct led_uc_plat *uc_plat = dev_get_uclass_plat(dev); + + return (uc_plat->sw_blink_state != LED_SW_BLINK_ST_NONE); +} + +static bool led_sw_on_state_change(struct udevice *dev, enum led_state_t state) +{ + struct led_uc_plat *uc_plat = dev_get_uclass_plat(dev); + + if (uc_plat->cyclic) { + if (state == LEDST_BLINK) { + /* start blinking on next led_sw_blink() call */ + uc_plat->sw_blink_state = LED_SW_BLINK_ST_OFF; + return true; + } + + /* stop blinking */ + cyclic_unregister(uc_plat->cyclic); + uc_plat->cyclic = NULL; + uc_plat->sw_blink_state = LED_SW_BLINK_ST_NONE; + } + + return false; +} +#endif /* CONFIG_LED_SW_BLINK */ + int led_set_state(struct udevice *dev, enum led_state_t state) { struct led_ops *ops = led_get_ops(dev); @@ -59,6 +147,11 @@ int led_set_state(struct udevice *dev, enum led_state_t state) if (!ops->set_state) return -ENOSYS; +#ifdef CONFIG_LED_SW_BLINK + if (led_sw_on_state_change(dev, state)) + return 0; +#endif + return ops->set_state(dev, state); } @@ -69,6 +162,11 @@ enum led_state_t led_get_state(struct udevice *dev) if (!ops->get_state) return -ENOSYS; +#ifdef CONFIG_LED_SW_BLINK + if (led_sw_is_blinking(dev)) + return LEDST_BLINK; +#endif + return ops->get_state(dev); } @@ -78,7 +176,11 @@ int led_set_period(struct udevice *dev, int period_ms) struct led_ops *ops = led_get_ops(dev); if (!ops->set_period) +#ifdef CONFIG_LED_SW_BLINK + return led_sw_set_period(dev, period_ms); +#else return -ENOSYS; +#endif return ops->set_period(dev, period_ms); } diff --git a/include/led.h b/include/led.h index a6353166289..bd50fdf33ef 100644 --- a/include/led.h +++ b/include/led.h @@ -20,6 +20,14 @@ enum led_state_t { LEDST_COUNT, }; +#ifdef CONFIG_LED_SW_BLINK +enum led_sw_blink_state_t { + LED_SW_BLINK_ST_NONE = 0, + LED_SW_BLINK_ST_OFF = 1, + LED_SW_BLINK_ST_ON = 2, +}; +#endif + /** * struct led_uc_plat - Platform data the uclass stores about each device * @@ -29,6 +37,10 @@ enum led_state_t { struct led_uc_plat { const char *label; enum led_state_t default_state; +#ifdef CONFIG_LED_SW_BLINK + enum led_sw_blink_state_t sw_blink_state; + struct cyclic_info *cyclic; +#endif }; /** From patchwork Wed Jul 3 01:01:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikhail Kshevetskiy X-Patchwork-Id: 1955770 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.a=rsa-sha256 header.s=selector2 header.b=jWr9dW0Z; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4WDM2W16HCz1xqb for ; Wed, 3 Jul 2024 11:02:43 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id EA71988784; Wed, 3 Jul 2024 03:02:37 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=iopsys.eu Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.b="jWr9dW0Z"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 3ED9A880F1; Wed, 3 Jul 2024 03:02:36 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,SPF_HELO_PASS, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.2 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on20722.outbound.protection.outlook.com [IPv6:2a01:111:f403:2612::722]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id D3FBC887B6 for ; Wed, 3 Jul 2024 03:02:32 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=iopsys.eu Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=mikhail.kshevetskiy@genexis.eu ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ghX2DQqBjJKla2A4fs1KbSCI33l7bxwzP7D0fXKfpfAwfUHUlW+YlA6JIikcIFluoOV21wmV0x403QLzQHm49+qPUUiq+LvV1wyvhR2r9L4KEFekvyb5aHns/nytNU1AfzT3uHjTJHmCUAeHqbW1D2lKGrJSyIp0r+SdaEdpo8GA4U1c/X3/VGs0hnF+J6Yvg9OdTRzMtjXbhqxBb5kAkJ8Bj/Gm4m5brcf7rUUbJl09dxEgyc64bj+iZrTfR5fGnRG2f01knfcrEfTmjOSNoI8vQQ69Nm/nM85mEpIdgTUqb1tsHuVGtpHMn+FdAtLWhXCTNyL5hXqhlh5cJSOYuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Zm3MkdaHde+3PAq9/ryoQjka+RNNVIAB/mnXMpSgyjE=; b=THh4aI1U3qK4bsd/Cc4+5bIfTsvg3k+GekPEJO4i0RH1IkSYRWNAey16XqTTa7uvsYLEcCx+Jdu6+MGYImVw6k4xu7x4l1c4yd3KAS2F9C3ZRbh5ul5fDpZRfdeOOXuj5sYgJ39Wm2DPkSFnh3Yt5wDFNjcySngPCcgWowKGRrL7bC37avfJpd5OTOz+GT0nbabiKw0kqRy2xGK01gunhADi5h1ADWUu7QeUvFSEcp6R+I5tlWFK1iWs/AtEpkGDrsnjzJWJR0n4YakkSQL38jgm0Vxd0gQzaGrVqfpt2ZGcENHxZmw2ZBqSzwv6QZPzE1CYHAUmvOUb28l8K2geKQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=genexis.eu; dmarc=pass action=none header.from=iopsys.eu; dkim=pass header.d=iopsys.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iopsys.eu; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Zm3MkdaHde+3PAq9/ryoQjka+RNNVIAB/mnXMpSgyjE=; b=jWr9dW0ZaqaofmcL73bUCWvjvVSkf9MqoMFEsfmZKR+fr4DScwBp3LYtPy7OU6PZuuQ+keUs655pU/4xryMXkv+Aq8uGyak2YlWz4j2H/nNlZgbx+nQ6XFtH2YB/hkUX1OiA6U9Xs7uHDFe9LdWbzX4iDWiBj2WI7/IZW670cRKcBh85gnbB4HcPaoqyEy+dJV6oNuCMxPyV2Y1HKSOwIGvgRQHnrYhKvVKqQYyYMF4zTHU3tkAU7678qhQ1HPN2BFUM06kd14IgHLE6Lo6Xx7z/TL9nBok4YhAD4zXv0CRLP/jr9GqOP/nQn0JPNcEMcp/tfy+OdY+WgljpswZVDQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=iopsys.eu; Received: from GV2PR08MB8121.eurprd08.prod.outlook.com (2603:10a6:150:7d::22) by PA4PR08MB6013.eurprd08.prod.outlook.com (2603:10a6:102:eb::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7741.23; Wed, 3 Jul 2024 01:02:31 +0000 Received: from GV2PR08MB8121.eurprd08.prod.outlook.com ([fe80::4cd3:da80:2532:daa0]) by GV2PR08MB8121.eurprd08.prod.outlook.com ([fe80::4cd3:da80:2532:daa0%5]) with mapi id 15.20.7719.029; Wed, 3 Jul 2024 01:02:31 +0000 From: Mikhail Kshevetskiy To: Tom Rini , Rasmus Villemoes , Doug Zobel , Marek Vasut , Christian Gmeiner , Christian Marangi , Simon Glass , u-boot@lists.denx.de Cc: Michael Polyntsov , Mikhail Kshevetskiy Subject: [PATCH 2/2] led: Add dts property to specify blinking of the led Date: Wed, 3 Jul 2024 05:01:31 +0400 Message-Id: <20240703010131.1735100-3-mikhail.kshevetskiy@iopsys.eu> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240703010131.1735100-1-mikhail.kshevetskiy@iopsys.eu> References: <20240703010131.1735100-1-mikhail.kshevetskiy@iopsys.eu> X-ClientProxiedBy: LO2P265CA0130.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:9f::22) To GV2PR08MB8121.eurprd08.prod.outlook.com (2603:10a6:150:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV2PR08MB8121:EE_|PA4PR08MB6013:EE_ X-MS-Office365-Filtering-Correlation-Id: 0ec02349-dd6b-4a0f-56e9-08dc9afbd0cc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|366016|52116014|38350700014; X-Microsoft-Antispam-Message-Info: na8EqiGFJ2Hf6DWr3tk8KAowSHjOZPyNdiAK84kDWx4/Uy2GC9AZJqnJPwTZsMi0VDTiSIhJyHBoGXgAQ/c+0rOleMLn8Ja6NWopobBxWTdFhMwtZQqfNXRSI/noReHdMIQBjA8WLISpo0qqN3OzBS71MfUFyvHVDnaL2/ODhaOL/St1p8k8mYhSNLkWX94jenf0s/zCPALrzlRj5n//uak9w3Cu2u7ZcdKqbUyF+z23t+2qOWQy+f1zEJtzs+PDAsnGF3qzpuyCrX1GhQn6wjYim0dMp5FO8ImCvPHgRp+F/yIz2FMCdxpMVRD1HRAxriXIE3jx8wMk2l2IMoX9Vmj+gKFLpoON7LWq9UVlRPMuvotGC0xv0Xpum16O7kqcpk34pTIjrbxmvbOnOgKWz8Hrl5xb+NxUbBrc6AODrCvlfhy+sjd4Z3uRezWKwn9PCisfLMEfyhHYg8naC52Pptks7smtFonJi3yW7ljwT8ouGtNCX097p0NrIoiwXzhGPp6e7aVulaDEQB8g1/DNRKL9xSmkcdVzDbEmjq7RfufBYG8qSOkxzlScz04dT4XATgOylFL+GkU9rlcI7TLQttHBBFf9K+/Fs7KSf90w3LNZhPyEDRKMj/wZ+gm63uuLMxSj/gbxA+qC0oPDTBdh0ImBEzKh70+cF3iPiLK7HoO6tuiIf25d22Fqc6Rw2t1YmJopDjwue9ZT0PanWRGprzM9A7V0gc5bNd0THhzN4gl0eAXSJ7V7KYh4norfK3gZRwrTPcmfTk8nQaC9jHQ9zfuOEhdT0jZH6lzBCRgX84J3ImFhwBnb/7+W047c2recfXlrBroCGKenJ7lcOk1gsBWQc5NzaF/+3CKVeKLcD77wPnhr3hRNEhXVrWmMdT0xFa8/unH/f+Nd16D3j8K0cS3o531+FD2qEgSOWxxq/eSkxG4i7JhW1ilViUZkWtBhCczYd3kVAvTHvsrGag7Ns27GtAEvEviEaknmpILB6n+bMUBUYCYfZcJtO+Ss+8BlMcTrNExq839Tr3vQKNTS22iKCCO9s8J9NnyC8QkR0iFDSKks4Ko8PjFNVJp3WlTmhbWOzV+qRpPmBeDfB8+HJ1okF0HYs/0SUTZtNH5f2wgvODbuW/B2hK0Wq22RZsN/dvyP92ZQArDtUUwJQh3bGNCnBxHLOBkOPqniI6diQf47asYEOmM5IyLSYSWDQldrmZq52ijEhJ2rk2xyhLXnO38+IAp/ONtpnNgXXlw8fNkcozppgn9JPXO+tWhVTZxOrrwTM7KYSFwhhTtIi2ZQY24bZEgRy8I3C/5KZSnLqK9woiJhFDmvmza++v/pGinOakuD54Pe0BCzTJYQxgYRPl5xf9cgRhX2eOEtXCMRD/pfyXZpdejZmqYHplxxLyeE41yNW/VkVrF/dxIY6tAtfw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:GV2PR08MB8121.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016)(52116014)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: uyuXwHyGiaF2dMRztOyDkdosUcz28gPD6y/TMCf6cRUX7myAsn2gLCXXKMNPccr94Q1bW/fOi3Pb/Zmp7bS0FfYOvc/LecmxD6eAEpIFTojJ1KsrGYOYCN1A7swmLsUroB34ZDkh6fWoJeTQ4eFaGWAEhcMMHzSfcZgB0lfEb6Sz1F2scHz8Y8AccauTJmwkgr/klsLlLF1q6fF+03LCZcSUNtSf2N58kCBlMwl46VMYW/u5L1jiKZ6SEZnpdRrIZD7OEn6H72L5b1284xiSMpjxpvNauw9kRdd9LilX0ePH+tOPtz8cIkopw1qph9jqMWIT+V6CiwsT3DK7eoVUOGXB+ZB3V9t2L7/aRBbwhkuO7LNfhM6WnGhbbctOu+AcmPe2FxR8AuH34XnaWig6pQNqLK9x9NvPhm8oA5Cme8tkLtykRST8jm6KMSJpsQMvBTQB3LT1e7Rnol0QGFiWav4oD4VNA+tJyOTzffeixH+am+Vc4IO3690RK3EbLheSqlmBWV5xFr8BKuPd02jnL24vDXUXyX042Qw2KEjUT3DFBvW24iiJzdoKCjZxQP4+Kjhu6qqVrAiQIonJNAG/0xSjno0canNumnnzrYmSMyyUagljUD02J5EmWKwhlv4SxUGazCmltqvTaOU+roOT9jmmCArAzXcCgPUQEwTK6BM1CLrqtDnJcePusd75wWdVEU8/Gv8Y0EIMMYd2k/wetFix0wONhViJi9/YzUL1soHrHm/CPmLn1jSfCVYZtYVP6J3vo4vJNS38AQ5GU6mzS+ghgf4/x1bo6qJGIpq4pDcSygp99qsgzEhEk8h5dXolDIAI8j4eQBt8cS+/BHFIqi2p0umtgB1jIrgcyEugm1b1S25CkLjDFWjDtrKGIfc0suD6r6WgYpaHBbpk0JjWeuqukxoogch44qCH5XtCcQI22Btr4CqbUy8ICQ0af19Xvh3UBzmV6CIg0IUNWCLjdgHbzE/wAwZG8i6h4vkwvI60/EdzqsSzpLuYZTPuJTzfZVmT/firIhOJkzZVxILeAm37+s27pKhcMjSjfd3U6o+i2hshT2SkDiTrpdpEq6Cl3wGfwIEd1ubd3CK9IrTMdYjaG0VWatft1awrorq8p1LGjdnzBnYEWRWapOq2od+t9Lnyleom3J2LN4rCHdPcocMCt1JKIgvzeKt6ho3fuGk/b6usrK+bNlD7o6VQDxrgcXHDAsTXQV9mWA0xCokv45thAowA3sLyIv6zBZvarUZD1RjIFfrpmjdo66LceVklDwh9UqhL+Dulpyte90ITKD2XkKFKikk6asCVCQxbyc4JY+S/SovjDKE0lFPkNKpsrVrCtU0qPC89FAND7+CFsfqQW+YHfR2WWRTVy1lqWqUtFGkEop1SisQiBHKfEvF6Tw6ovEf38i2+xkkogWycZs7uyGrLJSoSI13L3tw6w2vLn7exauxssH7F81Dsp+H2q0w89853+VQJqo894T+Kat/MqPv6aRv2CG9pwPVweXaxHFx74BK4A7PXgW0vKROv7AJNEGtHLjj1P44RSvSh5C7r/Z/n0BcIt9nvgQp7Juq1+Gx4WYF9tcvQcQcrccunz3gKb9DXRBdydOuh+nrcJA== X-OriginatorOrg: iopsys.eu X-MS-Exchange-CrossTenant-Network-Message-Id: 0ec02349-dd6b-4a0f-56e9-08dc9afbd0cc X-MS-Exchange-CrossTenant-AuthSource: GV2PR08MB8121.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jul 2024 01:02:31.1781 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8d891be1-7bce-4216-9a99-bee9de02ba58 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: k0gB10oUF8OER/cz2ng4W85mZJoGIa67VKnTPRNlwqzKQMRX5zpoNXMcQR7ZahO27CFTYko/mfQglXBbeS+JF3RYzKNEFIAf/A9iEuenlns= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6013 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean From: Michael Polyntsov The standard property linux,default-trigger = "pattern"; used to get an effect. No blinking parameters can be set yet. Signed-off-by: Michael Polyntsov Signed-off-by: Mikhail Kshevetskiy --- drivers/led/led-uclass.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/drivers/led/led-uclass.c b/drivers/led/led-uclass.c index d021c3bbf20..78d1a3d152b 100644 --- a/drivers/led/led-uclass.c +++ b/drivers/led/led-uclass.c @@ -190,6 +190,9 @@ static int led_post_bind(struct udevice *dev) { struct led_uc_plat *uc_plat = dev_get_uclass_plat(dev); const char *default_state; +#ifdef CONFIG_LED_BLINK + const char *trigger; +#endif if (!uc_plat->label) uc_plat->label = dev_read_string(dev, "label"); @@ -210,6 +213,13 @@ static int led_post_bind(struct udevice *dev) else return 0; +#ifdef CONFIG_LED_BLINK + trigger = dev_read_string(dev, "linux,default-trigger"); + if (trigger && !strncmp(trigger, "pattern", 7)) { + uc_plat->default_state = LEDST_BLINK; + } +#endif + /* * In case the LED has default-state DT property, trigger * probe() to configure its default state during startup. @@ -222,12 +232,28 @@ static int led_post_bind(struct udevice *dev) static int led_post_probe(struct udevice *dev) { struct led_uc_plat *uc_plat = dev_get_uclass_plat(dev); + int rc = 0; - if (uc_plat->default_state == LEDST_ON || - uc_plat->default_state == LEDST_OFF) - led_set_state(dev, uc_plat->default_state); + switch (uc_plat->default_state) { + case LEDST_ON: + case LEDST_OFF: + rc = led_set_state(dev, uc_plat->default_state); + break; +#ifdef CONFIG_LED_BLINK + case LEDST_BLINK: { + const int default_period_ms = 1000; - return 0; + rc = led_set_period(dev, default_period_ms); + if (rc == 0) + rc = led_set_state(dev, uc_plat->default_state); + break; + } +#endif + default: + break; + } + + return rc; } UCLASS_DRIVER(led) = {