From patchwork Tue Jul 8 17:24:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Uwe_Kleine-K=C3=B6nig_=28The_Capable_Hub=29?= X-Patchwork-Id: 2108420 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=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=pKYRacjv; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=139.178.88.99; helo=sv.mirrors.kernel.org; envelope-from=linux-pwm+bounces-6789-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99]) (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 4bc7Jg3vqtz1xqF for ; Wed, 9 Jul 2025 03:24:35 +1000 (AEST) Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id D74B54231C9 for ; Tue, 8 Jul 2025 17:24:19 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 25D3B2E6139; Tue, 8 Jul 2025 17:24:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="pKYRacjv" X-Original-To: linux-pwm@vger.kernel.org Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 91E6B2E613E for ; Tue, 8 Jul 2025 17:24:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751995483; cv=none; b=JVZBbk7JeT/9k66gDeKV3nG+yDQRxVfQE9DjjBTbF2fMGL3lKNnltlGZ7q9unZtxjl+6E2dQWHvHuaE026iZwui2zKdMSU7NN2fURI7hRJBiUFrTJXbKmEycBgtJnTQQAVa16wec8x/UKdTJZGmtV+XqAt65UmoOjQqrkCG3oW8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751995483; c=relaxed/simple; bh=v+AbI9oQruU+oTdfRYfoT+MDf3dg4XICL2CZMAA8Hoo=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=bQ+8rB2PDWSyQjaVYSMZ0vxxQUhJ49RXqaucmeN1+Z0qLG/9mc2EfZI/r5pRuJDvkPvBA7zPFGm6XMcl1U3HOxMutO4DSZ0x/y9C3FRCu4iYqDq8bMyhNC2oqdQHVKE/tEOWbmVfpb03R6wJzJDhAD1ghbvMMHr8XjN8Yc/FEdA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=pKYRacjv; arc=none smtp.client-ip=209.85.208.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-6097d144923so240655a12.1 for ; Tue, 08 Jul 2025 10:24:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1751995479; x=1752600279; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=tLqrPqQB6zxFJ4F2Ejzo9uVRdtFYGCNAE0sMM3fHXVc=; b=pKYRacjvgBc0Ilr881CT0AD208aLbB6SRBg/lEFV3xamhaSMpl9HxesB6hNrrmoiyG 7kcbNjHMZTfHaAca5wZ5wLRVFSIKstdQ40ttj2B4eNa915DDcEwVrWddwhpWCGdwshT0 Kb9Ys39Pnpz+GmIyqARd//LrX2cFzHBmhd5fcLgWteQJmvDTqehkdJn8yGSBdNuAxEVu DI/eG3XDUPQCRksfhXLghRAKA2NEr/Livx3zlmgSUDF9pZJvrukl3NxPyFQx1b8Bcz9s l1fYzrEMfjrotCRpdH4zHXNqVWlNbQ7U/VPMtL7+dgyiJo9aWPbuPsnBSh9yYabmTb6P TzJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751995479; x=1752600279; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tLqrPqQB6zxFJ4F2Ejzo9uVRdtFYGCNAE0sMM3fHXVc=; b=YAO6qXS1a1IWGmxRyAxRwsUVHb6ov47o8ml17ooRX3y0a0v8cuFoi8cXnK4mjq1Rle JjREjbWrSjRjlD8SFWDl5yf8uSbWXa028JtQ2g/tBqdot/s1IiEucxfgBNbhDVVXg4ta 9Ucl0lMc37eDbBF9nVHhT/lOJALKKx2iwA1Bvw59zy4YILjVlLsmawyDHE1W6jq4OC7U lpTrQkwhLiRnjXFQTKX+9Sg/Qc5EKtLKvXj5vCenPFGuw734Ej1r8YSPmdWTT2pcfzV4 HU2KlBVJA/mCINk8QpPsCzTZkO1EwpQvEB9fBaQgPGRa599WibCPM+CyG6BmxQKKPZOD Or8Q== X-Gm-Message-State: AOJu0YxK7Jl2youGjwpum/m6oMcssqcumwt0GOfgzIldBETjiBaGpm10 TGHpV7JMU0htmSBvSOTKRfni+1uBq6wHSsJDSWkFhswXRnO7kXOlM4MIa+fN2fpF9Flbxb/Nl5p rWLci X-Gm-Gg: ASbGncseS5o+2O7YTJxjYpgqSo2J0foxcjgUPxsCz1lMpteDtibJTMekBNJi3ulLPlT BQwhepGpL6Ja53Ne9Z8Bis1xXkWVp+iD/BMQTfno0IvTclk1Vaw1a3fFZeFn8/naHOE/1AKYRKK Av24bt2yR9Ed8kHA3v0QAkxri69fn9nGOvsFLg1H5JQwUlxXFw1NH5V+f92nU0qA4ZfSFN6CRLF iHH7p5wPSI87dQPT7AcKnQwdCHFBVQZfbAMrrbUAbd+1j8X9s5KRyJVLiFEtjzMp6Fa/QW39zs/ xfCwJ7QKrq72usxd1dthElXk+R2YazIvsQUqxXhHK+QPkyVGJ9QyQIB+PEbjDFVae8hC1X+ngvH sjJ6QArxgsohvYss8PPFh2o66Vrzl X-Google-Smtp-Source: AGHT+IG7nZrvXx4O0RBL0V1SSV01965C/mUIbUcc0LnSQAAD/9n5iSQLwaw4kh5mbQUeDyEH6N3z3w== X-Received: by 2002:a05:6402:2690:b0:60c:3b8e:7e24 with SMTP id 4fb4d7f45d1cf-6104bf79420mr3582276a12.10.1751995478608; Tue, 08 Jul 2025 10:24:38 -0700 (PDT) Received: from localhost (p200300f65f06ab0400000000000001b9.dip0.t-ipconnect.de. [2003:f6:5f06:ab04::1b9]) by smtp.gmail.com with UTF8SMTPSA id 4fb4d7f45d1cf-60fcb8c63f9sm7393851a12.72.2025.07.08.10.24.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Jul 2025 10:24:38 -0700 (PDT) From: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= To: linux-pwm@vger.kernel.org Subject: [PATCH libpwm 1/4] sysfs: Fix a wrong condition for duty_cycle writing Date: Tue, 8 Jul 2025 19:24:13 +0200 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-pwm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=950; i=u.kleine-koenig@baylibre.com; h=from:subject:message-id; bh=v+AbI9oQruU+oTdfRYfoT+MDf3dg4XICL2CZMAA8Hoo=; b=owEBbQGS/pANAwAKAY+A+1h9Ev5OAcsmYgBobVRDl/M+3dahZcPbwQ+xERXf21V0hHUyhP65B riKvGccvwmJATMEAAEKAB0WIQQ/gaxpOnoeWYmt/tOPgPtYfRL+TgUCaG1UQwAKCRCPgPtYfRL+ TmFcB/0ZhqxY+c39VnW44WWsiDdYPKdPkOGqiRKO382rjlgmPSVO7ery8itMi/djcIFkgJ6Cz5O +yQ7t6hpfiBj6/LdvyZtPz62Gl+1cbIQ2WqaEh+QycuBDVzvOOa9Yk+piE57jMA6ZgZeudGDRWa hfCKdeWrvBEQg+ge4MxOkzmST0RQpUb682WrvqE1Vsx5AiMckIeWbWcBZeuiWJYBupXwOptkDHy DCgEJfYJ7mlG/bnO8VP6Z/cMVBM6S0HroH/scSaJREMXyzCK8iToMXCSOlNsP7rr+eAjrH9BIj/ aQJUV0ml20FcI7P88lWkG3C55lslTh+boXEq0Cjumj8/d11O X-Developer-Key: i=u.kleine-koenig@baylibre.com; a=openpgp; fpr=0D2511F322BFAB1C1580266BE2DCDD9132669BD6 It's an invalid cache that must result in setting the duty_cycle explicitly. In this else branch it's already known that cache_valid is true. So the damage is small and the condition can just be dropped. Fixes: 67f0b9f2a2aa ("First prototype for libpwm") Signed-off-by: Uwe Kleine-König --- sysfs.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sysfs.c b/sysfs.c index fe4edea1e102..0f87f2b87028 100644 --- a/sysfs.c +++ b/sysfs.c @@ -212,8 +212,7 @@ static int pwm_chip_sysfs_set_waveform(struct pwm *pwm, pwm_sysfs->wf.duty_length_ns = wf->duty_length_ns; } } else { - if (!!pwm_sysfs->cache_valid || - pwm_sysfs->wf.duty_length_ns != wf->duty_length_ns) { + if (pwm_sysfs->wf.duty_length_ns != wf->duty_length_ns) { ret = pwm_chip_sysfs_write_prop(pwm_sysfs, "duty_cycle", "%" PRIu64 "\n", wf->duty_length_ns); if (ret) From patchwork Tue Jul 8 17:24:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Uwe_Kleine-K=C3=B6nig_=28The_Capable_Hub=29?= X-Patchwork-Id: 2108423 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=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=ZBBoQsDv; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2604:1380:40f1:3f00::1; helo=sy.mirrors.kernel.org; envelope-from=linux-pwm+bounces-6790-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org [IPv6:2604:1380:40f1:3f00::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4bc7Jz3sC5z1xqF for ; Wed, 9 Jul 2025 03:24:51 +1000 (AEST) Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id A2BC47B1D87 for ; Tue, 8 Jul 2025 17:23:22 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 438DF2BD590; Tue, 8 Jul 2025 17:24:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="ZBBoQsDv" X-Original-To: linux-pwm@vger.kernel.org Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DF2EB2367CE for ; Tue, 8 Jul 2025 17:24:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751995484; cv=none; b=mmzledsJSrfUFcMEbEx3brrd0mSCWP+SlT2P20iZ3hW9+87ZoR0qTKYl2VPk6D8SN3MTSvvBZmMDy+Dl4K/mhNEP/53tLrz9oVJQlzDIXq+Ji5w1q4ZVoKGb3viC5JtL+H8vEfL0jS5W4w8PnPCgmE9UKqxrRtQA5PsMx+jMihA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751995484; c=relaxed/simple; bh=ymfoXwVJQmmSHxdV9VlOIwDKcC7/64feU2EIi90FIjM=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=UREn6KWrqUdAYAfD/uJEip3nOb4klJ9YmK0jpYHgqqrYdto901BVKy+V1x6hkZfplLgGupYsbdM2Pkv+hGZNUP8zUZJHA83hBJ9ufpIeCuea6uMV77IKElp/PzT0t6wHtmceCyZcfSbqFb50Q626ofM/H0Evo+B63GKi5X9NRbI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=ZBBoQsDv; arc=none smtp.client-ip=209.85.208.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-60768f080d8so8822429a12.1 for ; Tue, 08 Jul 2025 10:24:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1751995480; x=1752600280; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=r25gtFOG6Zf7jDWrrmjrvx8vdkQan8tzE9Y/edQrmzM=; b=ZBBoQsDvcqfPrhhrKpJZgSA9/8VEiXoznIbn9VgBAzf+59gbw6ml+J3U8RLpYwgkhN GX4W7Pcx/yLOTBLDPiUfsJZdCbLhV1SsZbK1wEKFZYo110djCQwlGkF5gC4K1xn54Ox8 pK3RiHC2selV5dY2gtY7KS7t+IffDsoL4gQaOHuLYAdL2AYBwFmT/xAhl0YwsT+683pE acm32IHOH5Qy78XHL1njTQf2fPFag7G8jD+cj5hdfCw42DjL7aAYDaXVeCCTkXTUVNFb 3h5rnkE+pE8egspn9goybd8/nZ7ug0M21Cdl90XdFP3D+RR9zunzGRaEa/V6MEEE8O32 sQIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751995480; x=1752600280; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=r25gtFOG6Zf7jDWrrmjrvx8vdkQan8tzE9Y/edQrmzM=; b=TimXktuaSPtoJrwvTI/aX+VcFcXuGzlbeB7K4BDTFgvpxj4DUBsMJ5C+SuPrqMd2lH 5qIEDTkqpGnBdb/d2fPZUVdQKLXC23jomWA6SOJh/ZvuJKK282cvibTisVoLL0XH9YUw qXFvgUaV3QlFwHbHR+qdpOJ9K6L982lIqLDhm4G1BGQz+hfDtz0Go94c/6hZxpNc2vWc QQSpDk8csvYsmKdHONmddj8QQUHIvXUN28nLwoy6JvEMzyG0++kOKnQtNFjR9Ng5OR6m xMAeZ4q94ccgP3PFWToQpyNrGsqLDFlIlXrfKOpdLufIx76I3cDeAmVmD+Px/bqk+tT0 IehQ== X-Gm-Message-State: AOJu0YyFAgCFeycKsxkCepM1Kwy7yEYEDKi5e7R6UA29H+CVqbDgnYRf /43+ZeL4OKlBdWHTWaiBuYcXh/gKOfcu+ji9EhrKJjaXiw1g0MibcjaWK8DVXyOzNtoTu9jUe8d UDzZA X-Gm-Gg: ASbGnctI8KjQK5ZzxOEtweDhZI3wpBkei0yLIUEc1LYv3q1MmZPkWP1wBo+3dvl4xZc ar8f0tsDFx4EXNkHIlf76cUCBRU9EgSfndIcALEeHrvzNOdOQR0ZTn+QdHLHffWm5o/jyqv5gE8 Dvq6ah2rwDRTT+YZdIblq7H3EFamyxoxGaKfyLQhXnSAW85Em0h6PxpRyDwDXIg3e2mWUKy9atS GNzsSUbN26D4PemhuFC2kUSgtdfat7HzJy2dEHc0WgMePNyzzbRY8QONjLftTVwSb55QGNA2hWG i24csHAlg+WC0tqgYO29y7P+A1otnYgt4HUEbEnTsnCNmXZGGjlJVOBGeY0qwC9BYd8R01OTJrK udSSps3gffi9BlzQaaslvxIsIUCOT X-Google-Smtp-Source: AGHT+IGj2l405bT9RxUELoQal5Q+SvTli/9daxZSV65ryDSqOGolE0/2SotXUXlexANDdSDYh+2ZBA== X-Received: by 2002:a50:cd4b:0:b0:60c:4782:e4e1 with SMTP id 4fb4d7f45d1cf-60fd34a56b5mr13892838a12.27.1751995480086; Tue, 08 Jul 2025 10:24:40 -0700 (PDT) Received: from localhost (p200300f65f06ab0400000000000001b9.dip0.t-ipconnect.de. [2003:f6:5f06:ab04::1b9]) by smtp.gmail.com with UTF8SMTPSA id 4fb4d7f45d1cf-60fcb2f3122sm7448966a12.57.2025.07.08.10.24.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Jul 2025 10:24:39 -0700 (PDT) From: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= To: linux-pwm@vger.kernel.org Subject: [PATCH libpwm 2/4] sysfs: Fix polarity handling Date: Tue, 8 Jul 2025 19:24:14 +0200 Message-ID: <149cd2e217dfb90210cc6fff332ec776371b0387.1751995302.git.u.kleine-koenig@baylibre.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-pwm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=4906; i=u.kleine-koenig@baylibre.com; h=from:subject:message-id; bh=ymfoXwVJQmmSHxdV9VlOIwDKcC7/64feU2EIi90FIjM=; b=owEBbQGS/pANAwAKAY+A+1h9Ev5OAcsmYgBobVRGG64LgodOUnN+iud4u+UvXBQMyDAf/8kkp 5dQ0GUHDieJATMEAAEKAB0WIQQ/gaxpOnoeWYmt/tOPgPtYfRL+TgUCaG1URgAKCRCPgPtYfRL+ TvhRB/4meWDWETEb/WAAz6pdBMXxE2Kb4UZz6cmE/DawewzohLgq1goYgKN9DO9FCCqKdtu2+yM nypKNcICTHWCJOH/8V4YzyyaBwbFgxgkBYthpXM8NKRb+3XroaN/es+1l5OGJ8zG2bS5LVjaXNm pbulIt2+hVJwxrtcdYD2Ayn0QtO2laUe67h7nEiGP2NnSeBLo5I048HdoWVvcMfbKAdyBr0+OFK po8l9ZiXA18XMs8wHEqIEmQHMmNXfeKE/o1M6Pbrkj0vz0fH7uWNrYYZxFKLJwL04D79aROwqfL YD9V2ea25BGnQfiszolWCbu5OKbhb87Lg5aQMLu55NOdf7wB X-Developer-Key: i=u.kleine-koenig@baylibre.com; a=openpgp; fpr=0D2511F322BFAB1C1580266BE2DCDD9132669BD6 Depending on polarity the sysfs duty_cycle either defines the active or the inactive time of the PWM output. This has three effects that both were not considered before in the sysfs backend: - If polarity changes this affects the waveform's duty_length; - if duty_length_ns changes and polarity is inverted this affects duty_offset; and - for inverted polarity the written duty_cycle value must be period_length_ns - duty_length_ns. To simplify handling the first two items, rework the cache representation to use the parameters of the sysfs representation. For the second introduce a helper variable. Fixes: 67f0b9f2a2aa ("First prototype for libpwm") Signed-off-by: Uwe Kleine-König --- sysfs.c | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/sysfs.c b/sysfs.c index 0f87f2b87028..151b035f72d1 100644 --- a/sysfs.c +++ b/sysfs.c @@ -22,9 +22,11 @@ struct pwm_sysfs { struct pwm pwm; int dirfd; - /* .wf tracks the wf assuming the PWM is enabled. */ - struct pwm_waveform wf; + /* cached settings */ bool enabled; + uint64_t period; + uint64_t duty_cycle; + bool inverted_polarity; bool cache_valid; }; @@ -155,6 +157,7 @@ static int pwm_chip_sysfs_set_waveform(struct pwm *pwm, { struct pwm_sysfs *pwm_sysfs = container_of(pwm, struct pwm_sysfs, pwm); int ret; + uint64_t duty_cycle; /* period_length_ns = 0 is interpreted as disabled */ if (wf->period_length_ns == 0) { @@ -169,55 +172,58 @@ static int pwm_chip_sysfs_set_waveform(struct pwm *pwm, } if (!pwm_sysfs->cache_valid || - (wf->duty_offset_ns < wf->period_length_ns - wf->duty_length_ns) != - (pwm_sysfs->wf.duty_offset_ns < pwm_sysfs->wf.period_length_ns - pwm_sysfs->wf.duty_length_ns)) { + (wf->duty_offset_ns >= wf->period_length_ns - wf->duty_length_ns) != pwm_sysfs->inverted_polarity) { if (wf->duty_offset_ns < wf->period_length_ns - wf->duty_length_ns) { ret = pwm_chip_sysfs_write_prop(pwm_sysfs, "polarity", "normal\n"); if (ret) return ret; - pwm_sysfs->wf.duty_offset_ns = 0; + pwm_sysfs->inverted_polarity = false; } else { ret = pwm_chip_sysfs_write_prop(pwm_sysfs, "polarity", "inversed\n"); if (ret) return ret; - pwm_sysfs->wf.duty_offset_ns = wf->period_length_ns - wf->duty_length_ns; + pwm_sysfs->inverted_polarity = true; } } + if (pwm_sysfs->inverted_polarity) + duty_cycle = wf->period_length_ns - wf->duty_length_ns; + else + duty_cycle = wf->duty_length_ns; + /* - * Ensure that we never hit duty_length_ns > period_length_ns. As updating - * period_length_ns and duty_length_ns cannot be done in a single step write - * period_length_ns first if period_length_ns increases and write duty_length_ns first - * if period_length_ns decreases. + * Ensure that we never hit duty_cycle > period. As updating period and + * duty_cycle cannot be done in a single step write period first if + * period increases and write duty_cycle first if period decreases. */ if (!pwm_sysfs->cache_valid || - pwm_sysfs->wf.period_length_ns <= wf->period_length_ns) { + pwm_sysfs->period <= wf->period_length_ns) { if (!pwm_sysfs->cache_valid || - pwm_sysfs->wf.period_length_ns != wf->period_length_ns) { + pwm_sysfs->period != wf->period_length_ns) { ret = pwm_chip_sysfs_write_prop(pwm_sysfs, "period", "%" PRIu64 "\n", wf->period_length_ns); if (ret) return ret; - pwm_sysfs->wf.period_length_ns = wf->period_length_ns; + pwm_sysfs->period = wf->period_length_ns; } if (!pwm_sysfs->cache_valid || - pwm_sysfs->wf.duty_length_ns != wf->duty_length_ns) { + pwm_sysfs->duty_cycle != wf->duty_length_ns) { ret = pwm_chip_sysfs_write_prop(pwm_sysfs, "duty_cycle", - "%" PRIu64 "\n", wf->duty_length_ns); + "%" PRIu64 "\n", duty_cycle); if (ret) return ret; - pwm_sysfs->wf.duty_length_ns = wf->duty_length_ns; + pwm_sysfs->duty_cycle = duty_cycle; } } else { - if (pwm_sysfs->wf.duty_length_ns != wf->duty_length_ns) { + if (pwm_sysfs->duty_cycle != wf->duty_length_ns) { ret = pwm_chip_sysfs_write_prop(pwm_sysfs, "duty_cycle", - "%" PRIu64 "\n", wf->duty_length_ns); + "%" PRIu64 "\n", duty_cycle); if (ret) return ret; - pwm_sysfs->wf.duty_length_ns = wf->duty_length_ns; + pwm_sysfs->duty_cycle = duty_cycle; } /* @@ -229,7 +235,7 @@ static int pwm_chip_sysfs_set_waveform(struct pwm *pwm, "%" PRIu64 "\n", wf->period_length_ns); if (ret) return ret; - pwm_sysfs->wf.period_length_ns = wf->period_length_ns; + pwm_sysfs->period = wf->period_length_ns; } if (!pwm_sysfs->cache_valid || !pwm_sysfs->enabled) { From patchwork Tue Jul 8 17:24:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Uwe_Kleine-K=C3=B6nig_=28The_Capable_Hub=29?= X-Patchwork-Id: 2108422 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=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=LkaDvDtN; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2604:1380:45d1:ec00::1; helo=ny.mirrors.kernel.org; envelope-from=linux-pwm+bounces-6791-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [IPv6:2604:1380:45d1:ec00::1]) (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 4bc7Jk51NFz1xrN for ; Wed, 9 Jul 2025 03:24:38 +1000 (AEST) Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 14F365624DE for ; Tue, 8 Jul 2025 17:24:49 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 835DC2E5B02; Tue, 8 Jul 2025 17:24:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="LkaDvDtN" X-Original-To: linux-pwm@vger.kernel.org Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 247D62E6122 for ; Tue, 8 Jul 2025 17:24:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751995485; cv=none; b=VaittyfecQNF90y0WHpBuXfK/39xRjB2zzgfUtY3oA3VBUh1MBmeH3bzuf3x8ZFDqPnpvvPIqOMGHmE7eDEW6q8hJw2Yj+cK86y/SjzJlZSxEdCKgv0az711C7vrnwdbhX8/5RSQS5gdLN5qihBitGqTrQTLckxzgXpq43W3cIY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751995485; c=relaxed/simple; bh=xqnuXLXoSSSVjXwhnbifuTr5vtYRbS3/FfT/9L1UqUc=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=D56qDBaY0LKWID2cloHshcWVNLs/Qmrbj/s47XSTvcW/94wcFd1wFe7SGJ5u41/pSqBzX0aDwHjH/vuJvU0lm8R3qFS1iYuLo6MfFgOOZO5VbVDGBsETEb5RcIMy+KbVpJCSn/IpcGO2KSVq3vtdKGSskxF5iZC4t+LUSrNqB+c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=LkaDvDtN; arc=none smtp.client-ip=209.85.218.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-ae36dc91dc7so819689066b.2 for ; Tue, 08 Jul 2025 10:24:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1751995481; x=1752600281; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=jKPhcByzaV9eXNIanyp31b1SrVpJrifPMqShaa1jNnI=; b=LkaDvDtN+ooOY9ftn9IP5dikTjJ5NFArSXXI5zxUbIEvRGdrDlyTz/u3so10zKFuPw MCDslLK9wAhW96BnxI+ICOqjeQXv71l7Mnqso69RJbEAvuqmdpE2Sc47WXfLf0XlbAWr aYEsCDCdev1dILuHOW4xLYvdLRsnjZRK41wum7asHCkTbXRuTposOI7Lz9cwrPvRdTV2 emjo/Bo0x6Zi0wgvlmYbDz0J6iB4ai+xzIEuRvBWkvfiJ9txHyS9VJ8nIVTiFzvpWzXj f5xjFCvm/TOJAaqcbd2RWmjgqd1zWam5UbtWWjmvYe7tAMPr9fKZIdnWF5Xl4Rg9GMvE nLNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751995481; x=1752600281; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jKPhcByzaV9eXNIanyp31b1SrVpJrifPMqShaa1jNnI=; b=G8E4TuP8DbmgU9G0rVEfIQGTzr3M8SRPJft1CUwD2RlzNYAKioCJJgr8JiSdj1cko+ mhwuQ0jVAs3mwVSsd3kxEoYkluCBplpnE6SeUnrjS9jSB3/4irAMeeaSfmvmebQycFXQ rWdzUP2GdA6rHTQiTPjW2McKtvEUOAXCRjIEtVHlaUHyePWpfKn74THO13UnBRVP4Hj4 ac/KUIy9K/g65faaUWkn3FMU+5ducVKqSPjE/33rJHT9UwJSnjjuy/ComuqAPKcX8/Uo g7Wh/MbLJjqzq1C7xYKRI6mxtmBjLwLUy4yYXC0MNKCmaHM2+n5Lj+TBQaWRBASlVfVk SmkA== X-Gm-Message-State: AOJu0YzWcJwmrGitFhgz4ZfDLcKitpu5grDPNhZ5YEBqj1jMHgc+QTq7 WN8IclMUBUh0Gy6tO7NWD9EPTC6egPv5hPidhIuawYVjXKIsJUBBevNWH9wU0iYZHj33LWRU52R 7EZJu X-Gm-Gg: ASbGncvAuXm0WCazJnz1LQ7i17D5kOV46/21eMQpe4pxNW3cEEzC3SNF0mCURTZ/jSJ 97tnw+YTWI1ASqZsOXrIbgYRFkgZSCwRf16hnaltbkuuA+tIXJ0PQ+f9Kxg5QfxhQ2nJIqEf8fD DOV3kZplDH8Dj5+ijyrtjLZDxN6AFr1oEppryxFJTIVmj0VrMDB46z+hwOORZzwI+Bu98koTW3I 9slbrQlHG4nkIKXNhB88jcLGtRFO/D1LyD4QDa6t07H+CC1NOEE4iz3dTfOLyFcVWiiKGEO7F8c M52/FyMWNzMAOUHF/+H/9X1E4l0oopsCn09xV14YcGa3G3KX4Ovauz9YI7liQ3E1mDmgkPWQFR5 F2SoD2fq64BHMXGaKrrvXfrP0JtUK X-Google-Smtp-Source: AGHT+IFUzXLQTGHuq9SmnZhc3B6BZ99t7H9QhLxv9m9M93krXBbO4FYEcQPaT9ql0YOVmrSdFyy0Zw== X-Received: by 2002:a17:907:6ea5:b0:ade:8720:70a0 with SMTP id a640c23a62f3a-ae3fe687bf0mr1797955166b.20.1751995481413; Tue, 08 Jul 2025 10:24:41 -0700 (PDT) Received: from localhost (p200300f65f06ab0400000000000001b9.dip0.t-ipconnect.de. [2003:f6:5f06:ab04::1b9]) by smtp.gmail.com with UTF8SMTPSA id a640c23a62f3a-ae3f6b5e808sm937884666b.145.2025.07.08.10.24.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Jul 2025 10:24:41 -0700 (PDT) From: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= To: linux-pwm@vger.kernel.org Subject: [PATCH libpwm 3/4] sysfs: Keep polarity for constant waveforms Date: Tue, 8 Jul 2025 19:24:15 +0200 Message-ID: <372ed9bf9ac6c45c651fae81f8be6f909a6b7564.1751995302.git.u.kleine-koenig@baylibre.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-pwm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2616; i=u.kleine-koenig@baylibre.com; h=from:subject:message-id; bh=xqnuXLXoSSSVjXwhnbifuTr5vtYRbS3/FfT/9L1UqUc=; b=owEBbQGS/pANAwAKAY+A+1h9Ev5OAcsmYgBobVRIc4dxyM1Hp+20cJcAj53CthbONmmK7XFck VMxsgqgw+GJATMEAAEKAB0WIQQ/gaxpOnoeWYmt/tOPgPtYfRL+TgUCaG1USAAKCRCPgPtYfRL+ Tu3yB/kBIqqfVQBtA6FHQ6bBzzShiejn3+OXBJooC7OS/8Um92Q6kfhVe0jucGcLGnO+sg+tMGu P1IfNIkpPHgsdhH/1qQqMuWiuGzzbD/h1OKtUmg3MxDgQRma3EbBWVpWwZ+SY20OVJQo26kGr3Y DZGOJgT4AXldtQOW2p3lxMhQIlxru0xZamk2e1sLt5YbuoqQuqVMZteLadiRf/qd5RurTXYdd76 gXffGXDdf5G5tC9t/IHbH5SYtd5Qjwbyht8hVWWzRu/7L76x8acfHMzcaNFqJ5UT02FIKUIeNU7 FOjKOmBtEwvr8iFd/WnOiXiJazWsl9bEahMGaSNkfbcO4mRW X-Developer-Key: i=u.kleine-koenig@baylibre.com; a=openpgp; fpr=0D2511F322BFAB1C1580266BE2DCDD9132669BD6 Some waveforms have equivalent representations in sysfs with different polarities. As some PWMs only support a single polarity, minimize polarity changes. Signed-off-by: Uwe Kleine-König --- sysfs.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/sysfs.c b/sysfs.c index 151b035f72d1..9eac066eb8bf 100644 --- a/sysfs.c +++ b/sysfs.c @@ -122,6 +122,43 @@ static struct pwm *pwm_chip_sysfs_get_pwm(struct pwm_chip *chip, return pwm; } +static ssize_t pwm_chip_sysfs_read_prop(const struct pwm_sysfs *pwm_sysfs, + char *propname, + char *buf, size_t count) +{ + int fd; + va_list ap; + int ret; + size_t cntread = 0; + + fd = openat(pwm_sysfs->dirfd, propname, O_RDONLY | O_CLOEXEC); + if (fd < 0) + return -1; + + while (cntread < count) { + ret = read(fd, buf + cntread, count - cntread); + if (ret < 0) { + int saved_errno = errno; + + close(fd); + + errno = saved_errno; + + return ret; + } else if (ret == 0) { + break; + } + + cntread += ret; + } + + ret = close(fd); + if (ret) + return ret; + + return cntread; +} + static int pwm_chip_sysfs_write_prop(const struct pwm_sysfs *pwm_sysfs, char *propname, const char *restrict format, ...) @@ -173,7 +210,26 @@ static int pwm_chip_sysfs_set_waveform(struct pwm *pwm, if (!pwm_sysfs->cache_valid || (wf->duty_offset_ns >= wf->period_length_ns - wf->duty_length_ns) != pwm_sysfs->inverted_polarity) { - if (wf->duty_offset_ns < wf->period_length_ns - wf->duty_length_ns) { + if (wf->duty_length_ns == wf->period_length_ns || wf->duty_length_ns == 0) { + /* + * Waveforms with constant inactive output have two + * possible representations in sysfs. Either with normal + * polarity and duty_cycle = 0, or with inverted + * polarity and duty_cycle = period. The analogous + * statement is true for constant active waveforms. As + * many PWMs only support a single polarity, and also to + * minimize sysfs access, keep the current polarity in + * this case. + */ + if (!pwm_sysfs->cache_valid) { + char buf[20]; + + ret = pwm_chip_sysfs_read_prop(pwm_sysfs, "polarity", buf, sizeof(buf)); + if (ret < 0) + return ret; + pwm_sysfs->inverted_polarity = buf[0] == 'i'; + } + } else if (wf->duty_offset_ns < wf->period_length_ns - wf->duty_length_ns) { ret = pwm_chip_sysfs_write_prop(pwm_sysfs, "polarity", "normal\n"); if (ret) return ret; From patchwork Tue Jul 8 17:24:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Uwe_Kleine-K=C3=B6nig_=28The_Capable_Hub=29?= X-Patchwork-Id: 2108421 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=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=A7g6Hbt2; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2604:1380:45e3:2400::1; helo=sv.mirrors.kernel.org; envelope-from=linux-pwm+bounces-6792-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [IPv6:2604:1380:45e3:2400::1]) (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 4bc7Jk1R1zz1xqF for ; Wed, 9 Jul 2025 03:24:38 +1000 (AEST) Received: from smtp.subspace.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 9E5C84238DC for ; Tue, 8 Jul 2025 17:24:22 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9EE1D2E613A; Tue, 8 Jul 2025 17:24:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="A7g6Hbt2" X-Original-To: linux-pwm@vger.kernel.org Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 83C272367CE for ; Tue, 8 Jul 2025 17:24:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751995486; cv=none; b=U4pSMrFfP5wuCNgwhRNkItCf1cvqEAjMh0YEwR+KGlzUTfVu4g1UzVIGqH6VI/8kU10LKeSqGSbfaT9dlZ+1Lk8TpAmzgdPoCayDMeGGV9cKqZJpMIZj+oQ97q5oQnqeKrhtfjbBRaNdxX9S+n+lp/PxGcsT86W9psMKxtzx9rQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751995486; c=relaxed/simple; bh=poFBbFWr41hkW0MVwf7u6sMkEq8nnx/qDdk2Ia1bluQ=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qfEnPaa+a3brTZ3llIKwaoDmdOdcmzg9EFUWTSK+in0Sbfoet6PJ603oukC6DA8LqtXiIc8M6/sKDZSUHMQpqcF60/qCqMuS0IyQpONP9A4GG6SaqkItnNgILneBU1CPdytm3tmNlW/veUTL79N8T/ZPEwxW5K4T3mNZoJiEwY8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=A7g6Hbt2; arc=none smtp.client-ip=209.85.218.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-ae0ccfd5ca5so738216466b.3 for ; Tue, 08 Jul 2025 10:24:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1751995483; x=1752600283; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=s7uIrZ2WsytBsqy+vMaxHUtDkPcoQQbc6TiQXB8X2n4=; b=A7g6Hbt2rUeHj0T2SXUupZA2Fs3Hgt2kY0l8oIrGrsyPUK1bgkeDp99iSy/g2C/qYQ pi0XnXtwwWbJhr2sbXlK5QVF1X1MMqM933mRW+yu4MLQg1wKltkiS9N/rhm3xLObJLU/ i63DTyp3i3ltF2etN7l+QFCrYEDOybkxVGwrDmOUSOLaPpVFP7KPwB7j6JHFUFzYkWRv ub6i0ZwxQPGLQ6zyqt4e3TUWGUeGQfyNVRYe4p0BKQ2JWV0zhZvpZjMBVlU+LYmAcsmT IlTsg1myIo5Eo5PNt6A46+L+Qhm2CNxg/kIfMuLuo14EOAEALmmHvdol2vbQ8es66oza 2m1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751995483; x=1752600283; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=s7uIrZ2WsytBsqy+vMaxHUtDkPcoQQbc6TiQXB8X2n4=; b=N9WQnHZgHR8N8allpsYsY3zSpyaA5KdKo3fPw7gBkOGwSBsW1xmc9Ghaj2MhXqylmd CE8rudtGnhTtTq1wpS0JHBHTSqrj5FNE9DaMjqYXAF62X72SceQBrciwqmKi5chB6l6z ArCcI3DIt8jgqNz+YYKfUVayLAqclv3SpaXVZ6AZQK/g1toPtDVgu7BCrWHFK1+eh79v a4HXLiqLUvaXiBA3tWwBcJ+6b37uf+3/TrpgjKijGehIC5tf5+5VYGv3o1X6Gm7Ohm90 KHHHsrHa7ACJQ1AZxB3e6Mzm1Wqgi6zIjVCu3DGupl3rsaFsX9SCSZuS6zfDxLWuBkoE leCw== X-Gm-Message-State: AOJu0YzrD5C9OW8s2Qafpg52MBVh8Z2gp5M58VxxwIndAB2YlxOi0G8h LyJy8xEGbqJC9Hhj4Bxay6zY8kk6DO9Xw4Q0ZonmKE8pE2Ze/a3+iLE/7myoOIYA2wJOoe8aBWy 1wfhJ X-Gm-Gg: ASbGncseYLhE0N4YV1H3I1ngwNHoJsIYwTOZx9Z5ns8nkugAXdQn4RkiyUzAs7hQ3D2 bGicxxAuV7UfmEkAPL+qrYMPftSp/5TxVcsAHmhOD0PDu19L5fmX6i/e9/k/701Nq1Aag5oXMPO F/tQUsACBJlvWP6GW3Y+PGTS38uemjUx66uavG5MXYsd+H1mGnijsu6nyeA1PtXw3fYaB3XrgWd dH61rD0UljxOllX5+qx5rvZbCdffJ/5WIdPMqtiNZczh91irKCVw+ELjXVelrLjZrH4OCnxNZ7p jsA6dgXAwxKLbGNp+IcGtSF5JbTJtt1vaN5GQvzLrO2mJnMNXize4Q9eE3FcyxPH9zeCvyFyWlZ Py2lkdCNP/3AoEX0YdCxaV6c8tLHe X-Google-Smtp-Source: AGHT+IGD5/L3OABD8tp143eIwzk0cV56BudrL0P8C4cknHfbvAT9P4dsEMNXwoFFRzZw47IAu5tooA== X-Received: by 2002:a17:907:2d0e:b0:ae0:b604:894c with SMTP id a640c23a62f3a-ae3fe7fd106mr1810759166b.48.1751995482742; Tue, 08 Jul 2025 10:24:42 -0700 (PDT) Received: from localhost (p200300f65f06ab0400000000000001b9.dip0.t-ipconnect.de. [2003:f6:5f06:ab04::1b9]) by smtp.gmail.com with UTF8SMTPSA id a640c23a62f3a-ae3f6b5e6d2sm919566566b.154.2025.07.08.10.24.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Jul 2025 10:24:42 -0700 (PDT) From: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= To: linux-pwm@vger.kernel.org Subject: [PATCH libpwm 4/4] sysfs: Implement fine grained cache control Date: Tue, 8 Jul 2025 19:24:16 +0200 Message-ID: <6b94a7748509ca1e714c4ca51185371a1e12da65.1751995302.git.u.kleine-koenig@baylibre.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-pwm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=4202; i=u.kleine-koenig@baylibre.com; h=from:subject:message-id; bh=poFBbFWr41hkW0MVwf7u6sMkEq8nnx/qDdk2Ia1bluQ=; b=owEBbQGS/pANAwAKAY+A+1h9Ev5OAcsmYgBobVRLWZbbvhMHfiu4mElhNkNds3m/UiGbdBqCK IoRbEDVzfaJATMEAAEKAB0WIQQ/gaxpOnoeWYmt/tOPgPtYfRL+TgUCaG1USwAKCRCPgPtYfRL+ TrO+CAC5Vrti1Kd8oE+mMeRcnKfHYuyGmlHT7s8OqPwPz2Wmg/koxCXJI2QfydBNC14Jerq1/HE mXXj++CzcbDfWeBV7Q1QkEd4TDmMSxFFY4OU+DeYkmoAZ1FtbUKwQE4O3AiZVF9h9lQG/Jc+s+D Tz/hM4nMg1vvIA65WYTc/6tSUzVK5eLEu0e6/v9VkxzyIOqrn6jUBymCNrleTYd/mUyLBvKX1PZ mIKajATr7OnCjro6diB/HZyBGoW5u9XIrmyprGCCZs19vmOOmc6bskhBxk0GQPQ2HziKWLuAkeT 0uKuFyYiMifWYAxeScWkAp1kpDnsiGNfHGAnLlbZEkQ6hatY X-Developer-Key: i=u.kleine-koenig@baylibre.com; a=openpgp; fpr=0D2511F322BFAB1C1580266BE2DCDD9132669BD6 To save a few slow sysfs write accesses, track the validity of the four sysfs properties separately. Signed-off-by: Uwe Kleine-König --- sysfs.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/sysfs.c b/sysfs.c index 9eac066eb8bf..97e5b6e59ec0 100644 --- a/sysfs.c +++ b/sysfs.c @@ -27,7 +27,11 @@ struct pwm_sysfs { uint64_t period; uint64_t duty_cycle; bool inverted_polarity; - bool cache_valid; + + bool enabled_cache_valid; + bool period_cache_valid; + bool duty_cycle_cache_valid; + bool polarity_cache_valid; }; struct pwm_chip_sysfs { @@ -117,7 +121,10 @@ static struct pwm *pwm_chip_sysfs_get_pwm(struct pwm_chip *chip, chip_sysfs->pwms[offset] = pwm_sysfs; - pwm_sysfs->cache_valid = false; + pwm_sysfs->enabled_cache_valid = false; + pwm_sysfs->period_cache_valid = false; + pwm_sysfs->duty_cycle_cache_valid = false; + pwm_sysfs->polarity_cache_valid = false; return pwm; } @@ -208,7 +215,7 @@ static int pwm_chip_sysfs_set_waveform(struct pwm *pwm, return 0; } - if (!pwm_sysfs->cache_valid || + if (!pwm_sysfs->polarity_cache_valid || (wf->duty_offset_ns >= wf->period_length_ns - wf->duty_length_ns) != pwm_sysfs->inverted_polarity) { if (wf->duty_length_ns == wf->period_length_ns || wf->duty_length_ns == 0) { /* @@ -221,7 +228,7 @@ static int pwm_chip_sysfs_set_waveform(struct pwm *pwm, * minimize sysfs access, keep the current polarity in * this case. */ - if (!pwm_sysfs->cache_valid) { + if (!pwm_sysfs->polarity_cache_valid) { char buf[20]; ret = pwm_chip_sysfs_read_prop(pwm_sysfs, "polarity", buf, sizeof(buf)); @@ -242,7 +249,9 @@ static int pwm_chip_sysfs_set_waveform(struct pwm *pwm, pwm_sysfs->inverted_polarity = true; } + } + pwm_sysfs->polarity_cache_valid = true; if (pwm_sysfs->inverted_polarity) duty_cycle = wf->period_length_ns - wf->duty_length_ns; @@ -254,9 +263,9 @@ static int pwm_chip_sysfs_set_waveform(struct pwm *pwm, * duty_cycle cannot be done in a single step write period first if * period increases and write duty_cycle first if period decreases. */ - if (!pwm_sysfs->cache_valid || + if (!pwm_sysfs->period_cache_valid || !pwm_sysfs->duty_cycle_cache_valid || pwm_sysfs->period <= wf->period_length_ns) { - if (!pwm_sysfs->cache_valid || + if (!pwm_sysfs->period_cache_valid || pwm_sysfs->period != wf->period_length_ns) { ret = pwm_chip_sysfs_write_prop(pwm_sysfs, "period", "%" PRIu64 "\n", wf->period_length_ns); @@ -264,8 +273,9 @@ static int pwm_chip_sysfs_set_waveform(struct pwm *pwm, return ret; pwm_sysfs->period = wf->period_length_ns; } + pwm_sysfs->period_cache_valid = true; - if (!pwm_sysfs->cache_valid || + if (!pwm_sysfs->duty_cycle_cache_valid || pwm_sysfs->duty_cycle != wf->duty_length_ns) { ret = pwm_chip_sysfs_write_prop(pwm_sysfs, "duty_cycle", "%" PRIu64 "\n", duty_cycle); @@ -273,6 +283,7 @@ static int pwm_chip_sysfs_set_waveform(struct pwm *pwm, return ret; pwm_sysfs->duty_cycle = duty_cycle; } + pwm_sysfs->duty_cycle_cache_valid = true; } else { if (pwm_sysfs->duty_cycle != wf->duty_length_ns) { ret = pwm_chip_sysfs_write_prop(pwm_sysfs, "duty_cycle", @@ -281,6 +292,7 @@ static int pwm_chip_sysfs_set_waveform(struct pwm *pwm, return ret; pwm_sysfs->duty_cycle = duty_cycle; } + pwm_sysfs->duty_cycle_cache_valid = true; /* * It's already known that @@ -292,15 +304,16 @@ static int pwm_chip_sysfs_set_waveform(struct pwm *pwm, if (ret) return ret; pwm_sysfs->period = wf->period_length_ns; + pwm_sysfs->period_cache_valid = true; } - if (!pwm_sysfs->cache_valid || !pwm_sysfs->enabled) { + if (!pwm_sysfs->enabled_cache_valid || !pwm_sysfs->enabled) { ret = pwm_chip_sysfs_write_prop(pwm_sysfs, "enable", "1\n"); if (ret) return ret; pwm_sysfs->enabled = true; } - pwm_sysfs->cache_valid = true; + pwm_sysfs->enabled_cache_valid = true; return 0; }