From patchwork Mon Oct 3 01:55:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Doug Brown X-Patchwork-Id: 1685387 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2620:137:e000::1:20; helo=out1.vger.email; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=schmorgal.com header.i=@schmorgal.com header.a=rsa-sha256 header.s=google header.b=k8qS/UZ1; dkim-atps=neutral Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by legolas.ozlabs.org (Postfix) with ESMTP id 4MgkTC2Gfkz20cn for ; Mon, 3 Oct 2022 12:56:15 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229453AbiJCB4M (ORCPT ); Sun, 2 Oct 2022 21:56:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40610 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229458AbiJCB4K (ORCPT ); Sun, 2 Oct 2022 21:56:10 -0400 Received: from mail-pg1-x532.google.com (mail-pg1-x532.google.com [IPv6:2607:f8b0:4864:20::532]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C99B72F3B0 for ; Sun, 2 Oct 2022 18:56:09 -0700 (PDT) Received: by mail-pg1-x532.google.com with SMTP id 2so2991673pgl.7 for ; Sun, 02 Oct 2022 18:56:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=schmorgal.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=tyRZJiGNGhZCYmFyedxmd9CLmdLq3Eb4RejqlovZlyY=; b=k8qS/UZ1+rsoS3ztDJLqwm17+yKdkR5+k7M09eiy0HBI5wmS+G6Sg+UINPKPdSqATZ ICxogbBKlFu8ZrSUuqBTeBJZo42n/cCBSBGM96Zz9mm1USJbJnlh9SzI8oLsSvRr1gyA jX6v65/LBzRi5wP/Za3gaohYQ92Hukti+Q18I= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=tyRZJiGNGhZCYmFyedxmd9CLmdLq3Eb4RejqlovZlyY=; b=DrmkHJn/4rmPZI4EzEhIKVxbv3SRtSI5aCwV5TU7Ql1qwKSmGO6XWatwoQ+O2nRxYH qKFTfB6bVtBrlIejZ8EE++nlcr5gvJ5CfnmQIZ4ilp/zNUFkmulFzGUjQueWUEwGQ/J/ oTsmqzIQNXovDi05EikfHv7WALGIhCUFD/2TT18qFm9vti9yvZG41GST7vBOkbFK0LKm Kg38bMOmTgjOloYSEe+ObgghPLxxbgYBDg3XfBOOiOPOSQbPHpIKfztxd1gPaC6m8Bxf 3IGlwCy8qMywKMlcOpsSjzTuTTKFEpgRS7YJaYZBYaonEhC2OKlFmkbGHaXgV24rzPBT DBlA== X-Gm-Message-State: ACrzQf3KhiXwA3CegtRpXESTS6Hmm6BNihxIap3ldri6UevXWHyWKg9S jhO87MjIZA92RBPjpGX7W3H5tg== X-Google-Smtp-Source: AMsMyM7N97opSj/bdIFuudsFEOEPr38aqXrKckRbhtRuOTZnqTO134PCK4rWfCrSciU5jxZQ2rjbVw== X-Received: by 2002:a63:f057:0:b0:438:5c6c:de26 with SMTP id s23-20020a63f057000000b004385c6cde26mr16335902pgj.509.1664762169246; Sun, 02 Oct 2022 18:56:09 -0700 (PDT) Received: from doug-ryzen-5700G.. ([50.45.132.124]) by smtp.gmail.com with ESMTPSA id s9-20020a17090302c900b0017b69f99321sm5893786plk.219.2022.10.02.18.56.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Oct 2022 18:56:08 -0700 (PDT) From: Doug Brown To: Thierry Reding , =?utf-8?q?Uwe_Kleine-K=C3=B6n?= =?utf-8?q?ig?= Cc: linux-pwm@vger.kernel.org, Doug Brown Subject: [PATCH v2 1/5] pwm: pxa: Remove pxa_pwm_enable/disable Date: Sun, 2 Oct 2022 18:55:42 -0700 Message-Id: <20221003015546.202308-2-doug@schmorgal.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221003015546.202308-1-doug@schmorgal.com> References: <20221003015546.202308-1-doug@schmorgal.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, 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-pwm@vger.kernel.org These functions are only acting as wrappers for clk_prepare_enable and clk_disable_unprepare now, so remove them to simplify the driver. Suggested-by: Uwe Kleine-König Signed-off-by: Doug Brown Reviewed-by: Uwe Kleine-König --- drivers/pwm/pwm-pxa.c | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/drivers/pwm/pwm-pxa.c b/drivers/pwm/pwm-pxa.c index 0bcaa58c6a91..0ac052652c62 100644 --- a/drivers/pwm/pwm-pxa.c +++ b/drivers/pwm/pwm-pxa.c @@ -101,23 +101,10 @@ static int pxa_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, return 0; } -static int pxa_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm) -{ - struct pxa_pwm_chip *pc = to_pxa_pwm_chip(chip); - - return clk_prepare_enable(pc->clk); -} - -static void pxa_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm) -{ - struct pxa_pwm_chip *pc = to_pxa_pwm_chip(chip); - - clk_disable_unprepare(pc->clk); -} - static int pxa_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, const struct pwm_state *state) { + struct pxa_pwm_chip *pc = to_pxa_pwm_chip(chip); int err; if (state->polarity != PWM_POLARITY_NORMAL) @@ -125,7 +112,7 @@ static int pxa_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, if (!state->enabled) { if (pwm->state.enabled) - pxa_pwm_disable(chip, pwm); + clk_disable_unprepare(pc->clk); return 0; } @@ -135,7 +122,7 @@ static int pxa_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, return err; if (!pwm->state.enabled) - return pxa_pwm_enable(chip, pwm); + return clk_prepare_enable(pc->clk); return 0; } From patchwork Mon Oct 3 01:55:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Doug Brown X-Patchwork-Id: 1685388 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2620:137:e000::1:20; helo=out1.vger.email; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=schmorgal.com header.i=@schmorgal.com header.a=rsa-sha256 header.s=google header.b=XVHP93bW; dkim-atps=neutral Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by legolas.ozlabs.org (Postfix) with ESMTP id 4MgkTC5fMsz1yqS for ; Mon, 3 Oct 2022 12:56:15 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229461AbiJCB4N (ORCPT ); Sun, 2 Oct 2022 21:56:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40652 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229458AbiJCB4M (ORCPT ); Sun, 2 Oct 2022 21:56:12 -0400 Received: from mail-pj1-x1035.google.com (mail-pj1-x1035.google.com [IPv6:2607:f8b0:4864:20::1035]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E5F8E2F3B0 for ; Sun, 2 Oct 2022 18:56:11 -0700 (PDT) Received: by mail-pj1-x1035.google.com with SMTP id g1-20020a17090a708100b00203c1c66ae3so8758090pjk.2 for ; Sun, 02 Oct 2022 18:56:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=schmorgal.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=hOfsB7F9RZhnEfTfyOIwklg+MTCgwEM3l5X+V4LN3vM=; b=XVHP93bWWDdjD+o4D+UPOoR1kiNtIjBFUVFAC9bwViyd5NG+fbMYnIKqA+0S3q9Z86 nEFhdCBDkIrT6z+S3GUI3IE2tCfMDvOl6EKcxRLR9q2o/kvuLnvkZLJF4RZWsxRI7r4D d01H+nsei7QI4wUtSJJgV8TbwbtVaDG7gUl6o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=hOfsB7F9RZhnEfTfyOIwklg+MTCgwEM3l5X+V4LN3vM=; b=tWB9WW4/GWCp6DPcxLcN2kz0zC2ZpDdtGMbnjtJLzO6UCwpJFBZPXmLACo9tDCcpBB 06+BqlltM46lk3PMlDqbapq5/XsiM/9u7nKl9WU6x/TczwThEmmI3CJrzMeRGTGGZzfU 02C+2tWtdo+atTY4xak5eTGI6LHgM1MdvTrQbv0uImI7mvcyvUpV5iDaOl23zC9DzKY3 qp5T3OCliusznjMbwTHBA4OvanlBrsbqkqcIZuHNFGP8TrYfm6naLCfFw2FthNIAjkr2 kE8vOOykytUxgESOnKwZoN2L0ZINFv2jwQIlO0/vea2owNkxjg9/dXFZLafwPafW8Ke+ bYoQ== X-Gm-Message-State: ACrzQf1c0E3L9DSN4U7MJi2TvTbuOPlk9Gg04pREGlC5+igMPePFEG6V ohnft8rFUXcv9Wjk1Q4AjDVp1A== X-Google-Smtp-Source: AMsMyM4D5Cds7GBl8+AFUfKQgnpeAncPfaytOhkG/sYstKfcJ0vY6+n46ASI7xyiNOMDH3bdixG8Nw== X-Received: by 2002:a17:903:20d3:b0:17c:8197:c4db with SMTP id i19-20020a17090320d300b0017c8197c4dbmr13517340plb.43.1664762171322; Sun, 02 Oct 2022 18:56:11 -0700 (PDT) Received: from doug-ryzen-5700G.. ([50.45.132.124]) by smtp.gmail.com with ESMTPSA id s9-20020a17090302c900b0017b69f99321sm5893786plk.219.2022.10.02.18.56.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Oct 2022 18:56:10 -0700 (PDT) From: Doug Brown To: Thierry Reding , =?utf-8?q?Uwe_Kleine-K=C3=B6n?= =?utf-8?q?ig?= Cc: linux-pwm@vger.kernel.org, Doug Brown Subject: [PATCH v2 2/5] pwm: pxa: Set duty cycle to 0 when disabling PWM Date: Sun, 2 Oct 2022 18:55:43 -0700 Message-Id: <20221003015546.202308-3-doug@schmorgal.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221003015546.202308-1-doug@schmorgal.com> References: <20221003015546.202308-1-doug@schmorgal.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, 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-pwm@vger.kernel.org When disabling PWM, the duty cycle needs to be set to 0. This prevents the previous duty cycle from showing up momentarily when the clock is re-enabled next time, and also prevents the output pin from being stuck high when the clock is disabled. Because the clock has to be running in order to configure the duty cycle, unconditionally enable it early in pxa_pwm_apply and account for the correct enable count at the end. Suggested-by: Uwe Kleine-König Signed-off-by: Doug Brown Reviewed-by: Uwe Kleine-König --- drivers/pwm/pwm-pxa.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/drivers/pwm/pwm-pxa.c b/drivers/pwm/pwm-pxa.c index 0ac052652c62..9ee9b41d62b8 100644 --- a/drivers/pwm/pwm-pxa.c +++ b/drivers/pwm/pwm-pxa.c @@ -105,24 +105,31 @@ static int pxa_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, const struct pwm_state *state) { struct pxa_pwm_chip *pc = to_pxa_pwm_chip(chip); + u64 duty_cycle; int err; if (state->polarity != PWM_POLARITY_NORMAL) return -EINVAL; - if (!state->enabled) { - if (pwm->state.enabled) - clk_disable_unprepare(pc->clk); + err = clk_prepare_enable(pc->clk); + if (err) + return err; - return 0; - } + duty_cycle = state->enabled ? state->duty_cycle : 0; - err = pxa_pwm_config(chip, pwm, state->duty_cycle, state->period); - if (err) + err = pxa_pwm_config(chip, pwm, duty_cycle, state->period); + if (err) { + clk_disable_unprepare(pc->clk); return err; + } + + if (state->enabled && !pwm->state.enabled) + return 0; + + clk_disable_unprepare(pc->clk); - if (!pwm->state.enabled) - return clk_prepare_enable(pc->clk); + if (!state->enabled && pwm->state.enabled) + clk_disable_unprepare(pc->clk); return 0; } From patchwork Mon Oct 3 01:55:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Doug Brown X-Patchwork-Id: 1685389 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2620:137:e000::1:20; helo=out1.vger.email; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=schmorgal.com header.i=@schmorgal.com header.a=rsa-sha256 header.s=google header.b=VTipjAN6; dkim-atps=neutral Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by legolas.ozlabs.org (Postfix) with ESMTP id 4MgkTF3BMJz1yqS for ; Mon, 3 Oct 2022 12:56:17 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229478AbiJCB4Q (ORCPT ); Sun, 2 Oct 2022 21:56:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40716 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229469AbiJCB4P (ORCPT ); Sun, 2 Oct 2022 21:56:15 -0400 Received: from mail-pl1-x636.google.com (mail-pl1-x636.google.com [IPv6:2607:f8b0:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7326F2F3B3 for ; Sun, 2 Oct 2022 18:56:14 -0700 (PDT) Received: by mail-pl1-x636.google.com with SMTP id b2so3582355plc.7 for ; Sun, 02 Oct 2022 18:56:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=schmorgal.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=2VzSXiyTa2AqhWWV+TIOFyyGIQmkthKoa/iXZbOQnPI=; b=VTipjAN6Ydg8bMvjBJQhSUcB6pQATYm5K/1xzHy6hsdH2mFZeuJmPS0BHc6/UlQWrS s137zgge95AtFgREC4i5SeztBXv6RPdk1CAajMnp7xZDjZLPbgNk0ADM6izr3RR5hyJI 75eoxIDBEnJZcbaK/6j5L5aWD9Gabefamh9RY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=2VzSXiyTa2AqhWWV+TIOFyyGIQmkthKoa/iXZbOQnPI=; b=iRA7BC0ImSpUSye+S0RaXRvJdst/mGf8LBWCLYW9yk5DUzco06mOD7vbpwJ/nFI1KG tBA/ETQ7If5hfdhLakSFN7+sqLGShU274qVt0V374vaUlRsYbmpSZeR0mO37q0jhyrCb 2dWvwcDle4GdU85zsMFL5RTMY/y2RYZyDC+XmKdM3ibxIlfsjPhnljudpoK9/9dbLOUW cdqIJbO4WanA5DgNxeO96MOdle0n1jkfavJuCy0CsLVZuB+GYyn/+kVzcoCI/f2Vlg54 I147Pc2yM+JgsK3zZmroFZ5k+ZJBV0bIcJEHIS11SqweP8rH6n7Myk1NcjBvV6LXeBM/ OSBA== X-Gm-Message-State: ACrzQf0sGHMrpxNb1S3hIKpfrjdDtYIhiFZQFssDX9EMM9zfZmL3Rcyw PH23R1icq7WduEEGNaXrGvMBgQ== X-Google-Smtp-Source: AMsMyM4ClefyXLJI7/2v+AWka9B0nfUVe6FzorXeWHO19YkqIEfED+6p08WFzwcmiBW4K1UVuJq1Eg== X-Received: by 2002:a17:90b:368f:b0:208:1675:8b4c with SMTP id mj15-20020a17090b368f00b0020816758b4cmr9808979pjb.162.1664762173898; Sun, 02 Oct 2022 18:56:13 -0700 (PDT) Received: from doug-ryzen-5700G.. ([50.45.132.124]) by smtp.gmail.com with ESMTPSA id s9-20020a17090302c900b0017b69f99321sm5893786plk.219.2022.10.02.18.56.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Oct 2022 18:56:13 -0700 (PDT) From: Doug Brown To: Thierry Reding , =?utf-8?q?Uwe_Kleine-K=C3=B6n?= =?utf-8?q?ig?= Cc: linux-pwm@vger.kernel.org, Doug Brown Subject: [PATCH v2 3/5] pwm: pxa: Remove clk enable/disable from pxa_pwm_config Date: Sun, 2 Oct 2022 18:55:44 -0700 Message-Id: <20221003015546.202308-4-doug@schmorgal.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221003015546.202308-1-doug@schmorgal.com> References: <20221003015546.202308-1-doug@schmorgal.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, 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-pwm@vger.kernel.org Now that pxa_pwm_apply always enables the clock first, there is no need for pxa_pwm_config to do any clock enabling/disabling. Signed-off-by: Doug Brown Reviewed-by: Uwe Kleine-König --- drivers/pwm/pwm-pxa.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/drivers/pwm/pwm-pxa.c b/drivers/pwm/pwm-pxa.c index 9ee9b41d62b8..cf4d22c91929 100644 --- a/drivers/pwm/pwm-pxa.c +++ b/drivers/pwm/pwm-pxa.c @@ -64,7 +64,6 @@ static int pxa_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, unsigned long long c; unsigned long period_cycles, prescale, pv, dc; unsigned long offset; - int rc; offset = pwm->hwpwm ? 0x10 : 0; @@ -86,18 +85,10 @@ static int pxa_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, else dc = mul_u64_u64_div_u64(pv + 1, duty_ns, period_ns); - /* NOTE: the clock to PWM has to be enabled first - * before writing to the registers - */ - rc = clk_prepare_enable(pc->clk); - if (rc < 0) - return rc; - writel(prescale, pc->mmio_base + offset + PWMCR); writel(dc, pc->mmio_base + offset + PWMDCR); writel(pv, pc->mmio_base + offset + PWMPCR); - clk_disable_unprepare(pc->clk); return 0; } From patchwork Mon Oct 3 01:55:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Brown X-Patchwork-Id: 1685390 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2620:137:e000::1:20; helo=out1.vger.email; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=schmorgal.com header.i=@schmorgal.com header.a=rsa-sha256 header.s=google header.b=SQ6h3lF1; dkim-atps=neutral Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by legolas.ozlabs.org (Postfix) with ESMTP id 4MgkTK5jZYz1yqS for ; Mon, 3 Oct 2022 12:56:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229477AbiJCB4U (ORCPT ); Sun, 2 Oct 2022 21:56:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40794 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229458AbiJCB4T (ORCPT ); Sun, 2 Oct 2022 21:56:19 -0400 Received: from mail-pl1-x62e.google.com (mail-pl1-x62e.google.com [IPv6:2607:f8b0:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1066A2F3B0 for ; Sun, 2 Oct 2022 18:56:18 -0700 (PDT) Received: by mail-pl1-x62e.google.com with SMTP id 10so4857562pli.0 for ; Sun, 02 Oct 2022 18:56:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=schmorgal.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=pcaiLPT+DubPy9DtRxKsi+x1RvZhYRraLwIeAIcWiCA=; b=SQ6h3lF1dfN1IsZsHGCNSqIIJxO6IKipqeoGZ27AQd/lqoStmpFEA7g1QeHrOQmHCd 4kV+LiV0yzqDRB96WFURQrPbqVxNPmprHKrCq4rYjAdjGGYfGE6eMEch7Jgy3Hrrvwl3 9xdggZwPEGi91a1KMH5pUYZK0NBdaoi9R0LZ8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=pcaiLPT+DubPy9DtRxKsi+x1RvZhYRraLwIeAIcWiCA=; b=tksgrkHOa0cd1dtT0Z1Vc4gjnkJBG4VMSbfXI+QR1NveAPguNL47VVj8SKpoaMIS4M vrz+JkK2nASaOT3NEfAH5IVjpj0hxZR9pyy7zlaZgPtENCk6G30AP1JejRNB36hpAiQz DhIr49iVdz5TBvdI/Y7z3PVR1o0g3HDqyyeD+rwnpEnqQ+LQEhHnyhE+33EhjWmmjpqq FNE/59/RO4N4hHv+fagvqiD7W5spnyCca3VuQPYaFpkMpVnBdTgbJPonGjro3/iRfU8I CL4X8ijEGl+F3twFXGRQQ5pB65Jdq9ENoTV+mFeoWfBFccdsLDivGfiMT3BhqKVKwmcC qa0A== X-Gm-Message-State: ACrzQf3aIbKOkqFT9t9waNW1jT4YRgCvclSI/0Tz75wKdzR0zMLAUIph Ia0vs2okE5kRWvU2j2GjwTF+5g== X-Google-Smtp-Source: AMsMyM7ojz1D74xtu+mYbxZpVxaePnSlkRhekMevnYE1t51qkyCXYts3XlD95UoALpOCmxdmJkbNdw== X-Received: by 2002:a17:90a:f286:b0:20a:b521:7bbe with SMTP id fs6-20020a17090af28600b0020ab5217bbemr331750pjb.246.1664762177526; Sun, 02 Oct 2022 18:56:17 -0700 (PDT) Received: from doug-ryzen-5700G.. ([50.45.132.124]) by smtp.gmail.com with ESMTPSA id s9-20020a17090302c900b0017b69f99321sm5893786plk.219.2022.10.02.18.56.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Oct 2022 18:56:17 -0700 (PDT) From: Doug Brown To: Thierry Reding , =?utf-8?q?Uwe_Kleine-K=C3=B6n?= =?utf-8?q?ig?= Cc: linux-pwm@vger.kernel.org, Doug Brown Subject: [PATCH v2 4/5] pwm: pxa: Wait for final PWM period to finish Date: Sun, 2 Oct 2022 18:55:45 -0700 Message-Id: <20221003015546.202308-5-doug@schmorgal.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221003015546.202308-1-doug@schmorgal.com> References: <20221003015546.202308-1-doug@schmorgal.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, 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-pwm@vger.kernel.org If the clock is turned on too quickly after being turned off, it won't actually turn back on. Work around this problem by waiting for the final period to complete when disabling the PWM. The delay logic is borrowed from the pwm-sun4i driver. To avoid unnecessary delays, skip the whole config process if the PWM is already disabled and staying disabled. Signed-off-by: Doug Brown --- drivers/pwm/pwm-pxa.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/pwm/pwm-pxa.c b/drivers/pwm/pwm-pxa.c index cf4d22c91929..edcef67f7ffe 100644 --- a/drivers/pwm/pwm-pxa.c +++ b/drivers/pwm/pwm-pxa.c @@ -17,6 +17,7 @@ #include #include #include +#include #include @@ -96,12 +97,16 @@ static int pxa_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, const struct pwm_state *state) { struct pxa_pwm_chip *pc = to_pxa_pwm_chip(chip); + unsigned int delay_us; u64 duty_cycle; int err; if (state->polarity != PWM_POLARITY_NORMAL) return -EINVAL; + if (!state->enabled && !pwm->state.enabled) + return 0; + err = clk_prepare_enable(pc->clk); if (err) return err; @@ -122,6 +127,18 @@ static int pxa_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, if (!state->enabled && pwm->state.enabled) clk_disable_unprepare(pc->clk); + if (state->enabled) + return 0; + + /* Wait for the final PWM period to finish. This prevents it from + * being re-enabled too quickly (which can fail silently). + */ + delay_us = DIV_ROUND_UP_ULL(state->period, NSEC_PER_USEC); + if ((delay_us / 500) > MAX_UDELAY_MS) + msleep(delay_us / 1000 + 1); + else + usleep_range(delay_us, delay_us * 2); + return 0; } From patchwork Mon Oct 3 01:55:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Doug Brown X-Patchwork-Id: 1685391 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2620:137:e000::1:20; helo=out1.vger.email; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=schmorgal.com header.i=@schmorgal.com header.a=rsa-sha256 header.s=google header.b=bmZ0rCa1; dkim-atps=neutral Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by legolas.ozlabs.org (Postfix) with ESMTP id 4MgkTN5bzMz1yqS for ; Mon, 3 Oct 2022 12:56:24 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229469AbiJCB4X (ORCPT ); Sun, 2 Oct 2022 21:56:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40816 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229458AbiJCB4W (ORCPT ); Sun, 2 Oct 2022 21:56:22 -0400 Received: from mail-pj1-x102b.google.com (mail-pj1-x102b.google.com [IPv6:2607:f8b0:4864:20::102b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 024D12F3B0 for ; Sun, 2 Oct 2022 18:56:22 -0700 (PDT) Received: by mail-pj1-x102b.google.com with SMTP id d1-20020a17090a6a4100b002095b319b9aso8082607pjm.0 for ; Sun, 02 Oct 2022 18:56:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=schmorgal.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=EnV/ld2NipwM/UxxeyFxa6W6VAWGpYuC5Pc6JMzfqhM=; b=bmZ0rCa1Md1jWNyL8uYIYi1ao7DLs4+rI99nqYXdPcrpxoEEm2AXze38PB9Cws7JAd MCa3zSCAdcqMsIdMxA/wDRA3UKHaPjR2PMec+cNgTxONlzmf+NFYygzuj8NA709b7Qs4 MKbEQFm+mYDhMAEiJ631AB4FieGAn/+fk1C+Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=EnV/ld2NipwM/UxxeyFxa6W6VAWGpYuC5Pc6JMzfqhM=; b=5oUC45oKyjQ+fCp6ntbWd3WU4CTVlSp3+bVpq52AZaAdYZd7FoTSik+8faLKmyfSSw MhyvkPABq5LdrReZcKRdZFBKbZLtAHVaetI7lt8oEaKFwEMIUke6QHbUxQuKNxWxjBkd QCwdoCw1oTyKCDKXCVTlgF3GUhbzFrNAHeYL36XUZX7GRU/W8FNnq67JRKAHoYk+lqfe WY63lKjjoPnwnNA/7X8IP13kiVsnRzKwI5oinVEOOXC46jCvPtbro3qSeBBuuTVfh/iO rWoD0+QsGs6cEHgjGMwiAHgGRHaiB+nuFrRahjeJ4PE8EEvYRMdJDvUYBwkanpI1lDD3 3sEQ== X-Gm-Message-State: ACrzQf1lFkPbMlA9pbM6/7KApaxsBo/gxysXsQvvzq1J9CFUir/eQat5 2g3SbVYKLe9HD2Hn4GUY88PYtw== X-Google-Smtp-Source: AMsMyM5VQDHF9RrS57mMLEuK5ILzBKePX4ex8AyaHSvWUp/Z0OhxAl4ktQ/JNCFL9T+ckdiHMc8HEw== X-Received: by 2002:a17:90a:e7d2:b0:202:c6c9:4731 with SMTP id kb18-20020a17090ae7d200b00202c6c94731mr9766686pjb.114.1664762181405; Sun, 02 Oct 2022 18:56:21 -0700 (PDT) Received: from doug-ryzen-5700G.. ([50.45.132.124]) by smtp.gmail.com with ESMTPSA id s9-20020a17090302c900b0017b69f99321sm5893786plk.219.2022.10.02.18.56.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Oct 2022 18:56:21 -0700 (PDT) From: Doug Brown To: Thierry Reding , =?utf-8?q?Uwe_Kleine-K=C3=B6n?= =?utf-8?q?ig?= Cc: linux-pwm@vger.kernel.org, Doug Brown Subject: [PATCH v2 5/5] pwm: pxa: Enable for MMP platform Date: Sun, 2 Oct 2022 18:55:46 -0700 Message-Id: <20221003015546.202308-6-doug@schmorgal.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221003015546.202308-1-doug@schmorgal.com> References: <20221003015546.202308-1-doug@schmorgal.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, 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-pwm@vger.kernel.org The PXA168, which is part of the MMP platform, also uses this driver. Signed-off-by: Doug Brown Acked-by: Uwe Kleine-König --- drivers/pwm/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig index 60d13a949bc5..d0d4caebf12f 100644 --- a/drivers/pwm/Kconfig +++ b/drivers/pwm/Kconfig @@ -434,7 +434,7 @@ config PWM_PCA9685 config PWM_PXA tristate "PXA PWM support" - depends on ARCH_PXA || COMPILE_TEST + depends on ARCH_PXA || ARCH_MMP || COMPILE_TEST depends on HAS_IOMEM help Generic PWM framework driver for PXA.