From patchwork Wed Jul 3 11:00:06 2024 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?= X-Patchwork-Id: 13722069 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B4793C30653 for ; Wed, 3 Jul 2024 11:01:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:MIME-Version:Message-ID:Date:Subject:Cc:To:From:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=EtisqDMXNi+4gJuWXZy25aio20MDv0fW59jKl/DfJmI=; b=VI9VaODdZS5EIqQWqE/VzgIPBk CCbQqVcW2t4Rx8tI+BK3fdfwf0Kcx8QyoeGUgumw8mgejzpeyFXm67f4mhJrEpSXNs4zxCZccfGfb DzpmiFp0IphON1Qx6ENvkjXYHzJ68Nr+KPBoIPcE2kzfXUZOSlrpRb5u5VlIWQiqZxnzt/0DYkONI GRkuTS95Qqoxc4riiZgnTc9t7DHf34sTDilOYcZQC0IWh+3cD6ku1FkIuh3ydgMYRlhD88AV8Ft6S /6AZ/g/6bh+FJ4A8g5Vtm9XUjzA/Y85dYNi5KylkzUGDF/QDfwpWGctnV6P29hC6LuWZGXaAEEBAr dwz4Ne+w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sOxjK-00000009wNb-1k28; Wed, 03 Jul 2024 11:00:54 +0000 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sOxir-00000009wBY-1nJ7 for linux-arm-kernel@lists.infradead.org; Wed, 03 Jul 2024 11:00:27 +0000 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-36532d177a0so3058917f8f.2 for ; Wed, 03 Jul 2024 04:00:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1720004423; x=1720609223; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=EtisqDMXNi+4gJuWXZy25aio20MDv0fW59jKl/DfJmI=; b=0LFuZKD/QKD4NgJXDDTEv2ntSkeDkail9sEMon+lZ0k3/zbOy5J3Od+lpltw7rU8kR MsUXgNz0ssHGXjq84MKZsiXPzuiVaAfYT+Rg8StCUnLLjiYP/2ZL0fLCGOxGA51BhVk0 Y9H0xuzNq/osX/iVk/orN1rOIC8csWz0hU40+IVTQmwxJTvI/gsXfGRojql3XTi+l1Li CCuqqBrewGGoTiT+ktjb+6llx7ZXlVlrj3iddcIyt6o2br1q9fjM8N4pZdVgGmHULTIl fHvmQgttsz1I6ufjDI8KH0ZGRtsvHGrZ11AUOgl8WZeLnpKN/sW8X3TxrW/2g2jK3bLe G5rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720004423; x=1720609223; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=EtisqDMXNi+4gJuWXZy25aio20MDv0fW59jKl/DfJmI=; b=Qhz4osfJW5W5x030B85LJvTahbWvf4RbyGu/rWvKUtzWq4K0vbhbo1nt4bH6zSOlTJ oaonCkH/cxgGOyjrnfbnABDUIevdPl0rvx8VMOwVq9uGgYMGE0kFB2peddlGKLCSCSzQ MI9CTEs8z/J613DGHxg1ihhN/ZMMv4WhYz45azoi6BLX5R8KBRTsPpyPxu5GIUPWZcaq wJFCf6BJgG8ONALeUk2n6YmY/4RI3kZywWlz2t9SMT7jBUPGmbzxUoYnIns7opIG3VdF kCfvcZrLuYC2ari6JrIwCMRgAAwadT5v7IBjewJKxo7uW0YbbV1403/be0w5OatZbhaU g1QQ== X-Forwarded-Encrypted: i=1; AJvYcCWpsZ2H6M+5vySedgJhoAdRmcdM/Yd6VEVdk5vzRgeCZB/Y5vhDQA3T1NCrpHjTAgY+SHJHlP1Mdh1D8YdlfQd/BG1OFDF6rrNm2r7Asz6cjkuz4qU= X-Gm-Message-State: AOJu0YzBcniGw/cr/27mHMGIQJY9z6uyQ9mBAdwxHsrnht1/fDb/bnFu KlnlenaAh61hSpqkKf9QAxnhzl1c7nn475Tnceo18x60FTt69e1/OnoztKSqsN4= X-Google-Smtp-Source: AGHT+IGO43C86ulPQhwH3Aoxdh6WYDHyi8aYiyMUrl6XRbUbgoH04VEiYXx2FjA/4gS9pUkkEHf9aw== X-Received: by 2002:adf:e6d1:0:b0:367:9387:e48f with SMTP id ffacd0b85a97d-3679387e567mr785575f8f.66.1720004423383; Wed, 03 Jul 2024 04:00:23 -0700 (PDT) Received: from localhost (p50915e7b.dip0.t-ipconnect.de. [80.145.94.123]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-36794e6863dsm1166471f8f.50.2024.07.03.04.00.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jul 2024 04:00:23 -0700 (PDT) From: =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= To: Fabrice Gasnier , Maxime Coquelin , Alexandre Torgue , Benjamin Gaignard Cc: linux-pwm@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org Subject: [PATCH] pwm: stm32: Always do lazy disabling Date: Wed, 3 Jul 2024 13:00:06 +0200 Message-ID: <20240703110010.672654-2-u.kleine-koenig@baylibre.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1456; i=u.kleine-koenig@baylibre.com; h=from:subject; bh=+HpQU6gozfMhxx/gK3ptpRjLMLOdhZfsXR4twlS01fQ=; b=owEBbQGS/pANAwAKAY+A+1h9Ev5OAcsmYgBmhS86WGTNadNOW9022Y1BJVZ0YoeD9AI4auTyP oXqPps71u+JATMEAAEKAB0WIQQ/gaxpOnoeWYmt/tOPgPtYfRL+TgUCZoUvOgAKCRCPgPtYfRL+ Tqu8B/wI+eGBZNzv4A1QkDusnMYU4hP2fpp2SYqvFd57lIMZtXJWJxiS5a5DBRXlf7lvxoadkn+ h43doYvsd7Rg0y5hmHZqye1bH7hTM2sSo4YjkLcVUleO0Ay9D/fv6MmQ486KDaE7CQ2Ck/3JgNM 7zSmQ5Xj3H7vsO03Hq3cxyJuvXS4kyGmy7mTgEbToRGaWtMqOqdBPUjxST2nevCuklD2QSNPGOS Q/g5tDpDeF+erR2rSMDRZN0DdY6Npe/UE1gE6Xs2EmmHykVr4UQ2KO1RUImrI7OKpYas2JNNi8z M/mo6b/EhVtyq+f5LLyCI2pQ6F9ck9HeopPW2ejiszIrHLYk X-Developer-Key: i=u.kleine-koenig@baylibre.com; a=openpgp; fpr=0D2511F322BFAB1C1580266BE2DCDD9132669BD6 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240703_040025_585141_9BC9C20E X-CRM114-Status: GOOD ( 15.33 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org When the state changes from enabled to disabled, polarity, duty_cycle and period are not configured in hardware and TIM_CCER_CCxE is just cleared. However if the state changes from one disabled state to another, all parameters are written to hardware because the early exit from stm32_pwm_apply() is only taken if the pwm is currently enabled. This yields surprises like: Applying { .period = 1, .duty_cycle = 0, .enabled = false } succeeds if the pwm is initially on, but fails if it's already off because 1 is a too small period. Update the check for lazy disable to always exit early if the target state is disabled, no matter what is currently configured. Fixes: 7edf7369205b ("pwm: Add driver for STM32 plaftorm") Signed-off-by: Uwe Kleine-König --- drivers/pwm/pwm-stm32.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) base-commit: b8689bb9b901e5e2bc0f0905320b32e8c898a58b diff --git a/drivers/pwm/pwm-stm32.c b/drivers/pwm/pwm-stm32.c index fba080daf445..fd754a99cf2e 100644 --- a/drivers/pwm/pwm-stm32.c +++ b/drivers/pwm/pwm-stm32.c @@ -452,8 +452,9 @@ static int stm32_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, enabled = pwm->state.enabled; - if (enabled && !state->enabled) { - stm32_pwm_disable(priv, pwm->hwpwm); + if (!state->enabled) { + if (enabled) + stm32_pwm_disable(priv, pwm->hwpwm); return 0; }