From patchwork Mon Dec 17 14:13:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Beznea X-Patchwork-Id: 10733535 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BF97214E2 for ; Mon, 17 Dec 2018 14:14:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A41AD28813 for ; Mon, 17 Dec 2018 14:14:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 96A7928867; Mon, 17 Dec 2018 14:14:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id CB53C29F84 for ; Mon, 17 Dec 2018 14:14:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=yv+nVZERql8+baExA2Kut8xC8BD2U3uUjOkpk1KDuNA=; b=VqLwu9HF9cHsuG ZSQEB2JV5FUGyKSA7gVQt9jebxUHd7k6fZaKr3kfYk+bh85D+D44at6MN4IgGYS6WcwR9dhQGjNFL nN5PGScz5nYkQvLrZiCm5duspz/R1NPjqr8AGldbsk8w60SQkBcRK+TbYhZZi7tZdvgdeHlT1H+jJ IwkrvyxQdCoraHUrscWw5aRg0AbCFn+EpvyC74NLRpUO3Oawxg4c6UPoi6oOt2uPZwscRM12DQ9i/ uwsqMQGLeIANZY2bVWVzT+hd2xT5em15X/QN16BUK+stUjm5l86FBLidnsen1rs83/yUsMNMugk/Y WsvIJQfpwoa1g/abb+hQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYtef-0007Ja-7s; Mon, 17 Dec 2018 14:13:57 +0000 Received: from esa2.microchip.iphmx.com ([68.232.149.84]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYteb-0007IO-Iq for linux-arm-kernel@lists.infradead.org; Mon, 17 Dec 2018 14:13:55 +0000 X-IronPort-AV: E=Sophos;i="5.56,365,1539673200"; d="scan'208";a="24311046" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa2.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 17 Dec 2018 07:13:42 -0700 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.76.106) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 17 Dec 2018 07:13:42 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector1-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+BMkSmX/0HT0VNAH+rqVTriEboRLGFCp1YYtHWxHBGw=; b=J0GL08JQ9oqUy7++5zsOTEcILeFqOwczVuiwgrgDjmAIfIRmZYxrbvClgoNtlB0P014ngVZ19QVBYC2AOk/DKqbXuQSWWzTRlLUgGWpsD3F6P+xZxg73pWYKygSY1LvKpFpnPx3WdZu10/IF3rfksfyiqybV6Dyd+lUDtfAGrdQ= Received: from BY2PR11MB0744.namprd11.prod.outlook.com (10.163.112.142) by BY2PR11MB0584.namprd11.prod.outlook.com (10.163.159.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1425.19; Mon, 17 Dec 2018 14:13:40 +0000 Received: from BY2PR11MB0744.namprd11.prod.outlook.com ([fe80::cd88:53bd:589a:ab7f]) by BY2PR11MB0744.namprd11.prod.outlook.com ([fe80::cd88:53bd:589a:ab7f%2]) with mapi id 15.20.1425.021; Mon, 17 Dec 2018 14:13:40 +0000 From: To: , , , , , Subject: [PATCH v7 1/6] pwm: extend PWM framework with PWM modes Thread-Topic: [PATCH v7 1/6] pwm: extend PWM framework with PWM modes Thread-Index: AQHUlhK1b8ZkGsIsyE+4dj10q48ORg== Date: Mon, 17 Dec 2018 14:13:40 +0000 Message-ID: <1545055999-23950-2-git-send-email-claudiu.beznea@microchip.com> References: <1545055999-23950-1-git-send-email-claudiu.beznea@microchip.com> In-Reply-To: <1545055999-23950-1-git-send-email-claudiu.beznea@microchip.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1P195CA0015.EURP195.PROD.OUTLOOK.COM (2603:10a6:800:d0::25) To BY2PR11MB0744.namprd11.prod.outlook.com (2a01:111:e400:52de::14) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Claudiu.Beznea@microchip.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [94.177.32.154] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY2PR11MB0584; 6:qgtMfrgiRrBHZSj1g7ttRclzKBMnVp2eZWmn0tJLB9a8pmLaPFaZQg/C33glVR3HS40pwjjej3dbywwswv9cBngnI3VYDi7AWXJlZGCJ1HhxVSNplcsAZaPpP2Vs+TmwS9wu0MS+0Km6HSwcb6zl6Jj9QSDsR4DWczYmmGlWZo+hxE/rwIm2MKNAryjCc7HXuXJpojTQmAYlo4hUlB3QkiwDwJ+1Npn4Gqhf2zNGilSSWQSvOMKuDxOHtIzKQLfV3Qs4LTgQ0TXapWClOJcXTf16DpHvRmCw/YUlizadB7bLL+j1iI/885tJ2sXopySAymFq2HT18shgxDLLPdVEMuTERILd8x+0KptpW2SdP7ceLkI0j7W85sYb/NZr2DCiu/JYquKPK4msVNirSkZLmqVfR1Iz1px/fmVaehSsOMvCIEBF/z/YYJA6dLAW2cRMTFHUVYXhHfMpSHhugc3+iQ==; 5:7rjm/oR/cdyQnNKELFbaw6ns3lcBRc2TXJ3hVZqJyVJjWXbwyY5qSWkEgqNat0lZqGgIFkQHLVvEwftyvDVnNSOA1FWFB0C8NAboImrMp5XtQF8tIn5907q+DPdhuegswGrZvHaGBCD0m+9u3A+ZKN/BfQ2NABm0tJK49yTwwCg=; 7:VpTS31mTyEJcqBJ2yeKRBMzhb+/fJYU9tD/clYbPiiF0n+iI3251JypvjR1QvqBdidSP6/BHD2YVR3ZXPbMCNplysr5a2JQhm4mUWaTFT+fbXcX9eiMqg65+IGGHNH1Z6Cc21vbadGBJgPiWho0LgQ== x-ms-office365-filtering-correlation-id: b89fa3ed-50f3-4d4a-9874-08d66429d7ea x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY2PR11MB0584; x-ms-traffictypediagnostic: BY2PR11MB0584: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(3230021)(999002)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(3231475)(944501520)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123560045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:BY2PR11MB0584; BCL:0; PCL:0; RULEID:; SRVR:BY2PR11MB0584; x-forefront-prvs: 08897B549D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(396003)(39860400002)(376002)(346002)(366004)(199004)(189003)(8676002)(25786009)(68736007)(6506007)(386003)(6116002)(102836004)(5660300001)(6436002)(66066001)(3846002)(39060400002)(478600001)(107886003)(71190400001)(2501003)(72206003)(256004)(305945005)(71200400001)(6486002)(7736002)(186003)(97736004)(26005)(52116002)(316002)(54906003)(476003)(4326008)(2201001)(99286004)(14444005)(14454004)(4744004)(11346002)(2616005)(446003)(2906002)(76176011)(6512007)(36756003)(53936002)(110136005)(86362001)(6636002)(8936002)(81156014)(486006)(81166006)(105586002)(106356001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR11MB0584; H:BY2PR11MB0744.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: fFVQnAxVUQ8nmdAKqhViIABDtKeEBn1jaJAmCsBYO78Zd7CSbldqLSXPRa6vS1RP5wQGS0Ppe9HovogNI4X9kyvSQOEyjJuQwUf+dOSV2wmJa/m8QnuT+UE9z+ilfjXDtXNaV/O9IibOK62HORnMIW+wZ10EJOm6k/qyM151GoTFjbHe3wbpJ9thUQns1fuT2z4JYCItFSikxCqUBohYC/xEfblD1Wbol7Aqx3MwAm0I6KQi5iDjwXOYY3fprwhyFnCkc0gm0LnkZnY+dU75C5jzuJ1pzd/8QDK/owbV5ohphBX21RvfKtGGguAC8vT2 spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: b89fa3ed-50f3-4d4a-9874-08d66429d7ea X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Dec 2018 14:13:40.1889 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR11MB0584 X-OriginatorOrg: microchip.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181217_061353_684839_AD8DACE5 X-CRM114-Status: GOOD ( 22.31 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-pwm@vger.kernel.org, Claudiu.Beznea@microchip.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Claudiu Beznea Add basic PWM modes: normal and complementary. These modes should differentiate the single output PWM channels from two outputs PWM channels. These modes could be set as follow: 1. PWM channels with one output per channel: - normal mode 2. PWM channels with two outputs per channel: - normal mode - complementary mode Since users could use a PWM channel with two output as one output PWM channel, the PWM normal mode is allowed to be set for PWM channels with two outputs; in fact PWM normal mode should be supported by all PWMs. The PWM capabilities were implemented per PWM channel. Every PWM controller will register a function to get PWM capabilities. If this is not explicitly set by the driver a default function will be used to retrieve the PWM capabilities (in this case the PWM capabilities will contain only PWM normal mode). To retrieve capabilities the pwm_get_caps() function could be used. Every PWM channel have associated a mode in the PWM state. Proper support was added to get/set PWM mode. Only modes supported by PWM channel could be set. Signed-off-by: Claudiu Beznea --- drivers/pwm/core.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++- drivers/pwm/sysfs.c | 61 +++++++++++++++++++++++++++++++++++ include/linux/pwm.h | 35 +++++++++++++++++++++ 3 files changed, 186 insertions(+), 1 deletion(-) diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index 1581f6ab1b1f..eb444ee8d486 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -249,6 +249,88 @@ static bool pwm_ops_check(const struct pwm_ops *ops) return false; } +static int pwm_get_default_caps(struct pwm_caps *caps) +{ + static const struct pwm_caps default_caps = { + .modes_msk = PWM_MODE_BIT(NORMAL), + }; + + if (!caps) + return -EINVAL; + + *caps = default_caps; + + return 0; +} + +/** + * pwm_get_caps() - get PWM capabilities of a PWM device + * @pwm: PWM device to get the capabilities for + * @caps: returned capabilities + * + * Returns: 0 on success or a negative error code on failure + */ +int pwm_get_caps(const struct pwm_device *pwm, struct pwm_caps *caps) +{ + if (!pwm || !caps) + return -EINVAL; + + if (pwm->chip->ops->get_caps) + return pwm->chip->ops->get_caps(pwm->chip, pwm, caps); + + return pwm_get_default_caps(caps); +} +EXPORT_SYMBOL_GPL(pwm_get_caps); + +/** + * pwm_get_default_modebit() - get the default mode for PWM (as a bit mask) + * @pwm: PWM device to get the default mode for + * + * Returns: the default PWM mode (as a bit mask) for PWM device + */ +unsigned long pwm_get_default_modebit(const struct pwm_device *pwm) +{ + struct pwm_caps caps; + + if (pwm_get_caps(pwm, &caps)) + return PWM_MODE_BIT(NORMAL); + + return BIT(ffs(caps.modes_msk) - 1); +} +EXPORT_SYMBOL_GPL(pwm_get_default_modebit); + +/** + * pwm_supports_mode() - check if PWM mode is supported by PWM device + * @pwm: PWM device + * @modebit: PWM mode bit mask to be checked (see PWM_MODE_BIT()) + * + * Returns: true if PWM mode is supported, false otherwise + */ +bool pwm_supports_mode(const struct pwm_device *pwm, unsigned long modebit) +{ + struct pwm_caps caps; + + if (!pwm || !modebit) + return false; + + if (hweight_long(modebit) != 1 || ffs(modebit) - 1 >= PWM_MODE_CNT) + return false; + + if (pwm_get_caps(pwm, &caps)) + return false; + + return !!(caps.modes_msk & modebit); +} +EXPORT_SYMBOL_GPL(pwm_supports_mode); + +const char *pwm_get_mode_name(unsigned long modebit) +{ + if (modebit == PWM_MODE_BIT(COMPLEMENTARY)) + return "complementary"; + + return "normal"; +} + /** * pwmchip_add_with_polarity() - register a new PWM chip * @chip: the PWM chip to add @@ -294,6 +376,7 @@ int pwmchip_add_with_polarity(struct pwm_chip *chip, pwm->pwm = chip->base + i; pwm->hwpwm = i; pwm->state.polarity = polarity; + pwm->state.modebit = pwm_get_default_modebit(pwm); if (chip->ops->get_state) chip->ops->get_state(chip, pwm, &pwm->state); @@ -469,7 +552,8 @@ int pwm_apply_state(struct pwm_device *pwm, struct pwm_state *state) int err; if (!pwm || !state || !state->period || - state->duty_cycle > state->period) + state->duty_cycle > state->period || + !pwm_supports_mode(pwm, state->modebit)) return -EINVAL; if (!memcmp(state, &pwm->state, sizeof(*state))) @@ -530,6 +614,8 @@ int pwm_apply_state(struct pwm_device *pwm, struct pwm_state *state) pwm->state.enabled = state->enabled; } + + pwm->state.modebit = state->modebit; } return 0; @@ -579,6 +665,8 @@ int pwm_adjust_config(struct pwm_device *pwm) pwm_get_args(pwm, &pargs); pwm_get_state(pwm, &state); + state.modebit = pwm_get_default_modebit(pwm); + /* * If the current period is zero it means that either the PWM driver * does not support initial state retrieval or the PWM has not yet @@ -999,6 +1087,7 @@ static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s) seq_printf(s, " duty: %u ns", state.duty_cycle); seq_printf(s, " polarity: %s", state.polarity ? "inverse" : "normal"); + seq_printf(s, " mode: %s", pwm_get_mode_name(state.modebit)); seq_puts(s, "\n"); } diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c index ceb233dd6048..7865fbafbeb4 100644 --- a/drivers/pwm/sysfs.c +++ b/drivers/pwm/sysfs.c @@ -223,11 +223,71 @@ static ssize_t capture_show(struct device *child, return sprintf(buf, "%u %u\n", result.period, result.duty_cycle); } +static ssize_t mode_show(struct device *child, + struct device_attribute *attr, + char *buf) +{ + struct pwm_device *pwm = child_to_pwm_device(child); + struct pwm_state state; + unsigned long modebit; + enum pwm_mode mode; + int len = 0; + + pwm_get_state(pwm, &state); + + for (mode = PWM_MODE_NORMAL; mode < PWM_MODE_CNT; mode++) { + modebit = BIT(mode); + if (pwm_supports_mode(pwm, modebit)) { + if (state.modebit == modebit) + len += scnprintf(buf + len, + PAGE_SIZE - len, "[%s] ", + pwm_get_mode_name(modebit)); + else + len += scnprintf(buf + len, + PAGE_SIZE - len, "%s ", + pwm_get_mode_name(modebit)); + } + } + + len += scnprintf(buf + len, PAGE_SIZE - len, "\n"); + return len; +} + +static ssize_t mode_store(struct device *child, + struct device_attribute *attr, + const char *buf, size_t size) +{ + struct pwm_export *export = child_to_pwm_export(child); + struct pwm_device *pwm = export->pwm; + struct pwm_state state; + unsigned long modebit; + enum pwm_mode mode; + int ret; + + for (mode = PWM_MODE_NORMAL; mode < PWM_MODE_CNT; mode++) { + modebit = BIT(mode); + if (sysfs_streq(buf, pwm_get_mode_name(modebit))) + break; + } + + if (mode == PWM_MODE_CNT) + return -EINVAL; + + mutex_lock(&export->lock); + pwm_get_state(pwm, &state); + state.modebit = modebit; + ret = pwm_apply_state(pwm, &state); + mutex_unlock(&export->lock); + + return ret ? : size; +} + static DEVICE_ATTR_RW(period); static DEVICE_ATTR_RW(duty_cycle); static DEVICE_ATTR_RW(enable); static DEVICE_ATTR_RW(polarity); static DEVICE_ATTR_RO(capture); +static DEVICE_ATTR_RW(mode); static struct attribute *pwm_attrs[] = { &dev_attr_period.attr, @@ -235,6 +295,7 @@ static struct attribute *pwm_attrs[] = { &dev_attr_enable.attr, &dev_attr_polarity.attr, &dev_attr_capture.attr, + &dev_attr_mode.attr, NULL }; ATTRIBUTE_GROUPS(pwm); diff --git a/include/linux/pwm.h b/include/linux/pwm.h index 56518adc31dd..abe189d891af 100644 --- a/include/linux/pwm.h +++ b/include/linux/pwm.h @@ -10,6 +10,9 @@ struct pwm_capture; struct seq_file; struct pwm_chip; +struct pwm_device; + +unsigned long pwm_get_default_modebit(const struct pwm_device *pwm); /** * enum pwm_polarity - polarity of a PWM signal @@ -26,6 +29,28 @@ enum pwm_polarity { }; /** + * PWM modes capabilities + * @PWM_MODE_NORMAL: PWM has one output + * @PWM_MODE_COMPLEMENTARY: PWM has 2 outputs with opposite polarities + * @PWM_MODE_CNT: PWM modes count + */ +enum pwm_mode { + PWM_MODE_NORMAL, + PWM_MODE_COMPLEMENTARY, + PWM_MODE_CNT, +}; + +#define PWM_MODE_BIT(name) BIT(PWM_MODE_##name) + +/** + * struct pwm_caps - PWM capabilities + * @modes_msk: bitmask of supported modes (see PWM_MODE_*) + */ +struct pwm_caps { + unsigned long modes_msk; +}; + +/** * struct pwm_args - board-dependent PWM arguments * @period: reference period * @polarity: reference polarity @@ -53,12 +78,14 @@ enum { * @period: PWM period (in nanoseconds) * @duty_cycle: PWM duty cycle (in nanoseconds) * @polarity: PWM polarity + * @modebit: PWM mode bit * @enabled: PWM enabled status */ struct pwm_state { unsigned int period; unsigned int duty_cycle; enum pwm_polarity polarity; + unsigned long modebit; bool enabled; }; @@ -181,6 +208,7 @@ static inline void pwm_init_state(const struct pwm_device *pwm, state->period = args.period; state->polarity = args.polarity; state->duty_cycle = 0; + state->modebit = pwm_get_default_modebit(pwm); } /** @@ -254,6 +282,7 @@ pwm_set_relative_duty_cycle(struct pwm_state *state, unsigned int duty_cycle, * @get_state: get the current PWM state. This function is only * called once per PWM device when the PWM chip is * registered. + * @get_caps: get PWM capabilities. * @dbg_show: optional routine to show contents in debugfs * @owner: helps prevent removal of modules exporting active PWMs */ @@ -272,6 +301,8 @@ struct pwm_ops { struct pwm_state *state); void (*get_state)(struct pwm_chip *chip, struct pwm_device *pwm, struct pwm_state *state); + int (*get_caps)(const struct pwm_chip *chip, + const struct pwm_device *pwm, struct pwm_caps *caps); #ifdef CONFIG_DEBUG_FS void (*dbg_show)(struct pwm_chip *chip, struct seq_file *s); #endif @@ -438,6 +469,9 @@ struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip, unsigned int index, const char *label); +int pwm_get_caps(const struct pwm_device *pwm, struct pwm_caps *caps); +bool pwm_supports_mode(const struct pwm_device *pwm, unsigned long modebit); +const char *pwm_get_mode_name(unsigned long modebit); struct pwm_device *of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args); @@ -592,6 +626,7 @@ static inline void pwm_apply_args(struct pwm_device *pwm) state.enabled = false; state.polarity = pwm->args.polarity; state.period = pwm->args.period; + state.modebit = pwm_get_default_modebit(pwm); pwm_apply_state(pwm, &state); } From patchwork Mon Dec 17 14:13:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Beznea X-Patchwork-Id: 10733557 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EADBC1399 for ; Mon, 17 Dec 2018 14:15:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DD71E29DC9 for ; Mon, 17 Dec 2018 14:15:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D17B429F79; Mon, 17 Dec 2018 14:15:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6DEA229DC9 for ; Mon, 17 Dec 2018 14:15:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=B7rX01O/rpbWvyR6ni1a319MEi2IOSQKLiVCjnc/dGw=; b=Xsl+96H0Rxmm0f LHuSfMAzv1shQ5O6fBFBI8/r5q5yNeFM7b/YXyQ+fWz4RncceVQhCMwiMFoLr5/v/ummDCAQRRfoB tE7C/MLY4gzsbjKUSLLJzMX0HmStqjH5dhKe20jeCeGri1unjVfp9VQ1ZXPCOa7eT+JGHKDmv4hSi stAsCric2Zn2H+/TfvJ0nBLX1uhgzNh2D8T0b1vgz7xwSqU9WOaliaMAmqBdCb3xCeF/WuZsNmX0E RLP0cqiybz1nyjgSHFZu5Yza3+VrlFQlEL43/2TsdKkskqcQRVpVGa7mmm9RPi8jsCvGbrVUtIAoG RtZJ/8fvNYUqFmm4K0Qg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYtg9-0001W8-EK; Mon, 17 Dec 2018 14:15:29 +0000 Received: from esa3.microchip.iphmx.com ([68.232.153.233]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYtef-0007IU-W0 for linux-arm-kernel@lists.infradead.org; Mon, 17 Dec 2018 14:14:09 +0000 X-IronPort-AV: E=Sophos;i="5.56,365,1539673200"; d="scan'208";a="24462322" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa3.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 17 Dec 2018 07:13:46 -0700 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.76.38) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 17 Dec 2018 07:13:46 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector1-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yq2ha2Zp/A7gCczGWZsdnelFEYRsJlhMhMg3kS8FWDM=; b=NEE+OgSkB3+g2cfAEgcr/L8jtZc0DrzZtADLrOpvJkycukM1GIzHhDD3Oi3MAVPEDhwMpgHG3NA6BH+gj9UZsZb/Flw4CqX9zaahq+NqinTztFRMju+XM+7s1Kbh0tOgwwjLYB7B9Dhk5196BeYoaCs1Q1i012uJXLPJJcSoBWQ= Received: from BY2PR11MB0744.namprd11.prod.outlook.com (10.163.112.142) by BY2PR11MB0584.namprd11.prod.outlook.com (10.163.159.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1425.19; Mon, 17 Dec 2018 14:13:44 +0000 Received: from BY2PR11MB0744.namprd11.prod.outlook.com ([fe80::cd88:53bd:589a:ab7f]) by BY2PR11MB0744.namprd11.prod.outlook.com ([fe80::cd88:53bd:589a:ab7f%2]) with mapi id 15.20.1425.021; Mon, 17 Dec 2018 14:13:43 +0000 From: To: , , , , , Subject: [PATCH v7 2/6] pwm: add PWM modes Thread-Topic: [PATCH v7 2/6] pwm: add PWM modes Thread-Index: AQHUlhK3V6I/hxlnQUewIiLG5Q4CBw== Date: Mon, 17 Dec 2018 14:13:43 +0000 Message-ID: <1545055999-23950-3-git-send-email-claudiu.beznea@microchip.com> References: <1545055999-23950-1-git-send-email-claudiu.beznea@microchip.com> In-Reply-To: <1545055999-23950-1-git-send-email-claudiu.beznea@microchip.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1P195CA0015.EURP195.PROD.OUTLOOK.COM (2603:10a6:800:d0::25) To BY2PR11MB0744.namprd11.prod.outlook.com (2a01:111:e400:52de::14) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Claudiu.Beznea@microchip.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [94.177.32.154] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY2PR11MB0584; 6:S0odE+pcd7XT3VCDmRezdKzkWdh1GRNekAD3wJKqO5gSSIog//uuCjCvETkAfdkKR4+B0QRmSsFRaCtuwvALfropIyliPJjgZzfXeYSfOY00r0F+/h93DT0mnlbLX7ue7mYHqElJUgRNjIwLSIPcLMd7ZRBL/PuRx1VowjZbvRc0rdn/n5KS2Sgw1PNPdCtif6uxcwHOs71Zr4mO4rvx1+1rekzB8jpSxZZPcWmVlzx57sE+vx/o+S3q66p1Q39L1J3DRAhrxUdT7W2IXsvGxctNpkjES1KW9fVwRBKoDU2XuC74pBBvEh6sqAGx0L1P8VQkaIJ/Y7wA9170KUYEIEHkTzi6zWXWblAWArSb5JYq6Btqra+WWmzFhcB8kAjlxvmwYXzIQ6qk+a4AvZjNsSiigsRZEzMOlWvgRijEu7TfQDBt9RXp4JClJF9tTDIbv/0TJH52oKHDXXPaDZngjw==; 5:rICT7nZY1atqfQM9grmEIG58evq8n3egOC/omo1kqEiUdy3u9eeVsJXrOwtpX12lo4++VXUmSSa8EQaeaP4FB6+MDUeVGfbNorB9p/abGqWDdkjbrLbYdX1jFklLGApMpiBgJp3YgpR1UI7HK/2t7KlNw/Ox7v4prqsVrHOqGwA=; 7:22gOiSiHYCQdEcmiOJnuC9RT2ISL+ErAnhkLP2Bmcxsdl3CrmnLrLX6ChQjocuTy2n3roLC2Ak/GxY1OT8nqYjk9CY6dlg+P0ff2PQWcLmQ4tN13P/NuR3Twt/cQ5M9GZIc2x+2Hv5HhWemiHg/UXQ== x-ms-office365-filtering-correlation-id: 0b0ecb3d-b280-4d7b-08f6-08d66429da25 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY2PR11MB0584; x-ms-traffictypediagnostic: BY2PR11MB0584: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(3230021)(999002)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(3231475)(944501520)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123560045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:BY2PR11MB0584; BCL:0; PCL:0; RULEID:; SRVR:BY2PR11MB0584; x-forefront-prvs: 08897B549D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(396003)(39860400002)(376002)(346002)(366004)(199004)(189003)(8676002)(25786009)(68736007)(6506007)(386003)(6116002)(102836004)(5660300001)(6436002)(66066001)(3846002)(39060400002)(478600001)(107886003)(71190400001)(2501003)(72206003)(256004)(305945005)(71200400001)(6486002)(7736002)(186003)(97736004)(26005)(52116002)(316002)(54906003)(476003)(4326008)(2201001)(99286004)(14444005)(14454004)(11346002)(2616005)(446003)(2906002)(76176011)(6512007)(36756003)(53936002)(110136005)(86362001)(6636002)(8936002)(81156014)(575784001)(486006)(81166006)(105586002)(106356001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR11MB0584; H:BY2PR11MB0744.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: ZbtrvEKvJ6pUGUNWbhdGtiSkSoqM2xCoK+Ry9U4ljZOuyHWGo4lcCj29LDLdZAwBtkGs5oaM1fJYl5CBi3uYzPXFJOze2zivw/0G+8sQTMxqHt1WryE0mK6oUbMMJmOCw6euZ+5PRt4NKH6+IFcs25w53DkpOKNvMAzbdWR5oTZFf+PCLHaeMKuH0En9Jbo6xcf36umoE2M9Do4bLEx6pwmhOYIFPSLRRM8yRUcb2ZuHey3dMA8cm/hUiryrN7RrsJ3LQ7a51K8mLy309/PCxWZjC6i2q39bvGicHIdYBu/u+xAZizmF6XkAUDo5Z75j spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 0b0ecb3d-b280-4d7b-08f6-08d66429da25 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Dec 2018 14:13:43.8863 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR11MB0584 X-OriginatorOrg: microchip.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181217_061358_451782_3F2D857C X-CRM114-Status: GOOD ( 13.55 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-pwm@vger.kernel.org, Claudiu.Beznea@microchip.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Claudiu Beznea Add PWM normal and complementary modes. Signed-off-by: Claudiu Beznea --- Hi Rob, In prevous version I had your Acked-by tag on this patch but I removed it in this version since there are some changes b/w the previous one and this one. Please see bellow and let me know if you are ok with this. Thank you, Claudiu Beznea Changes in v6: - remove DT bindings since they were also removed from code - use 1/3 duty factor ratio - use '^' symbols to emphasize the beginning of a new period - use PWMx_y to refrer to output y of PWM x Documentation/pwm.txt | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Documentation/pwm.txt b/Documentation/pwm.txt index 8fbf0aa3ba2d..669fd4c9cc8e 100644 --- a/Documentation/pwm.txt +++ b/Documentation/pwm.txt @@ -110,6 +110,28 @@ channel that was exported. The following properties will then be available: - 0 - disabled - 1 - enabled + mode + Get/set PWM channel working mode. + + In the following description PWMx_y refers to output y of PWM with ID x. + + Normal mode - for PWM channels with one output; this should be the + default working mode for every PWM channel; output waveforms looks + like this: + __ __ __ __ + PWMx __| |____| |____| |____| |__ + ^ ^ ^ ^ + + Complementary mode - for PWM channels with two outputs; output waveforms + looks line this: + __ __ __ __ + PWMx_0 __| |____| |____| |____| |__ + __ ____ ____ ____ __ + PWMx_1 |__| |__| |__| |__| + ^ ^ ^ ^ + + Where '^' specifies the beginning of a period. + Implementing a PWM driver ------------------------- From patchwork Mon Dec 17 14:13:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Beznea X-Patchwork-Id: 10733539 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0D00314E2 for ; Mon, 17 Dec 2018 14:14:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F37042964A for ; Mon, 17 Dec 2018 14:14:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E705C29ECF; Mon, 17 Dec 2018 14:14:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id C3ED92964A for ; Mon, 17 Dec 2018 14:14:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ZJtoh10wC+FUhyLM/cwLD4Bf+S2umWRfchT/cG5X2ac=; b=Of2KPgfkMfJ4fj qxgO+2REiub6+PjmhwhrRh00XOlAb6q5XS1xYHyQY4sYajG7RbqkG3S5kLGsg46Jx8j4otGSS3tQf PELy+S36tE1TSDGxjoxEeFp1mJhgeJwYnjNAN0wmEhEI4/0aksZIDDQMV7ltY3LpsrL3iTh9LrOoz m9VveiV8IngsNOI0b3QLavl9hoDHDSvT3CJEHAtrQHLSVrflM22+twKaCmdoH2pBUp7E0VJUaoadf XIaTXCmFQPiILEK+QJfmhk/+8br2NEQZInEOmZKZQFOAOlWxsfFb6X7rg/Q0puSlA3zzp+hnJEuli xe3dH6hNrZewPQRHjpEA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYteq-0007Y5-4Z; Mon, 17 Dec 2018 14:14:08 +0000 Received: from esa5.microchip.iphmx.com ([216.71.150.166]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYtec-0007IX-L3 for linux-arm-kernel@lists.infradead.org; Mon, 17 Dec 2018 14:13:56 +0000 X-IronPort-AV: E=Sophos;i="5.56,365,1539673200"; d="scan'208";a="22366015" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa5.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 17 Dec 2018 07:13:51 -0700 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.76.38) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 17 Dec 2018 07:13:49 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector1-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fgevUhPYg5Bh3SNVnyZSPjukuIyPbHAlU740fVrcAwU=; b=wZ67lp8jOxQCwok+7vHftu2aL1am6csJCyojxZxQvYc7dFrVIyU1gsKhkG1rsM8+GJmb8EYeVnaPw7wpYtuKoMjOg0XGaCc3Txd/mkJoLSRa2P1dTsit0xwWP3EYLGYlD5j1LrWrSavBXAz5RLFfjSKTgo0F7xIGqsWjBlYmP3w= Received: from BY2PR11MB0744.namprd11.prod.outlook.com (10.163.112.142) by BY2PR11MB0584.namprd11.prod.outlook.com (10.163.159.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1425.19; Mon, 17 Dec 2018 14:13:47 +0000 Received: from BY2PR11MB0744.namprd11.prod.outlook.com ([fe80::cd88:53bd:589a:ab7f]) by BY2PR11MB0744.namprd11.prod.outlook.com ([fe80::cd88:53bd:589a:ab7f%2]) with mapi id 15.20.1425.021; Mon, 17 Dec 2018 14:13:47 +0000 From: To: , , , , , Subject: [PATCH v7 3/6] pwm: atmel: add pwm capabilities Thread-Topic: [PATCH v7 3/6] pwm: atmel: add pwm capabilities Thread-Index: AQHUlhK5wQUDgP4280m8i+nAkdfkdA== Date: Mon, 17 Dec 2018 14:13:47 +0000 Message-ID: <1545055999-23950-4-git-send-email-claudiu.beznea@microchip.com> References: <1545055999-23950-1-git-send-email-claudiu.beznea@microchip.com> In-Reply-To: <1545055999-23950-1-git-send-email-claudiu.beznea@microchip.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1P195CA0015.EURP195.PROD.OUTLOOK.COM (2603:10a6:800:d0::25) To BY2PR11MB0744.namprd11.prod.outlook.com (2a01:111:e400:52de::14) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Claudiu.Beznea@microchip.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [94.177.32.154] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY2PR11MB0584; 6:u6aFTf3sCBXRMESchsNDmu7+d4aLqRaCv+4OPeQO4vvdEjC2itErcTuB6Dxhy+ty78amjltd+P2vPXqM7EMTBMqZSthLVYflFnhYlwXnuAgSSK6k1h4b4UNvx0nUQcRC/7uBXJfy5UpIz7NKay4XRZ66bG3pIhaJf0ZpDK6E2FPY98dM9ZnKgyZxkl3qY16s8+4qIUUqPp8EBrphJ3hiYX32oLPaWgmi8VZGifYOTklO0nk9pQuC14P13sUCkT9UVsDs6zHmnvgggSRAQaQ7gVRyNEXYmonJv9XyFMmfTrhSg795EnoCITrC+cPyGFG7owTRUx8AceHkDiWLY45RnLLRp+3If3KAhzH8Fz5YGwvSqpCLnrDQ+rCvThHVpzpzyLbnsV6ax3Tl1TjPMq7uaaFTvmq89qfzS/3bQaQK7kx3O4m4rPnpMQGSbwuzBhKeWSxxX64jRvVX6PvTgxXjAw==; 5:g4exStloA8uHdcSs+JtIZt4QO/4LrQSE6tQydQMPl4k2fehNO623iJM6fjtVzjDbzWVbiXCWPRdXleSGTE8WVsS5QiChc9YfEarJRNzNItmeXjpLYrhnLcCENl2YjyVooszKtxlTVncCZnXwH9LkQ1ZtTPVc/x68qCPPK1VL5Vo=; 7:zbKXIPXR5TGQDlyfczVG2hsV3fl+vl7A7g8lryN0KJol1qVmR4AXBhU8tNRoUEU1ZpvemoCTNQmuWUMAdf3vFFZA/ACkBey8KXoo8Mm/4D2zZXerEFh2WymrDOg+0hHHqJbZiszrL4sJ94FiPnzMyQ== x-ms-office365-filtering-correlation-id: 0d37d477-e010-40a4-ae83-08d66429dc0e x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY2PR11MB0584; x-ms-traffictypediagnostic: BY2PR11MB0584: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(3230021)(999002)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(3231475)(944501520)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123560045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:BY2PR11MB0584; BCL:0; PCL:0; RULEID:; SRVR:BY2PR11MB0584; x-forefront-prvs: 08897B549D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(396003)(39860400002)(376002)(346002)(366004)(199004)(189003)(8676002)(25786009)(68736007)(6506007)(386003)(6116002)(102836004)(5660300001)(6436002)(66066001)(3846002)(39060400002)(478600001)(107886003)(71190400001)(2501003)(72206003)(256004)(305945005)(71200400001)(6486002)(7736002)(186003)(97736004)(26005)(52116002)(316002)(54906003)(476003)(4326008)(2201001)(99286004)(14444005)(14454004)(11346002)(2616005)(446003)(2906002)(76176011)(6512007)(36756003)(53936002)(110136005)(86362001)(6636002)(8936002)(81156014)(486006)(81166006)(105586002)(106356001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR11MB0584; H:BY2PR11MB0744.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: n7uKdTJnNULEpOeyoju2oNrBfTnTHD5GOfXajeQkzZPFlIu8XtDUbJt6SpJKoz9hergfcSpSWeDuJtNNs3cZznSYEW/WLcxcT6zct2BQ6i+90p1cg+HqHRzF9F9SDXsXRmJKRulibzxdr7JBzgDZci3GW2cuI6M8ufq7W+MVAuoV0EpPhTgQUtU4Pj3mAg/1uy1IqjqFx1t/wFoaAcobtZM/exQbTY7v0peOsQdCbRlHgAaRYM2JMzao0EB7OiSJDxy5aW4s1XH92daRsiodCbSw1JHVUvfWwm23a658Eg/ZMz7TgLVnI4ZQwkYdD4eV spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 0d37d477-e010-40a4-ae83-08d66429dc0e X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Dec 2018 14:13:47.0853 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR11MB0584 X-OriginatorOrg: microchip.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181217_061354_806245_2FE9A108 X-CRM114-Status: GOOD ( 13.43 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-pwm@vger.kernel.org, Claudiu.Beznea@microchip.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Claudiu Beznea Add pwm capabilities for Atmel/Microchip PWM controllers. Signed-off-by: Claudiu Beznea --- drivers/pwm/pwm-atmel.c | 86 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 57 insertions(+), 29 deletions(-) diff --git a/drivers/pwm/pwm-atmel.c b/drivers/pwm/pwm-atmel.c index 530d7dc5f1b5..b72cacd5dca3 100644 --- a/drivers/pwm/pwm-atmel.c +++ b/drivers/pwm/pwm-atmel.c @@ -65,18 +65,23 @@ struct atmel_pwm_registers { u8 duty_upd; }; +struct atmel_pwm_data { + struct atmel_pwm_registers regs; + struct pwm_caps caps; +}; + struct atmel_pwm_chip { struct pwm_chip chip; struct clk *clk; void __iomem *base; - const struct atmel_pwm_registers *regs; + const struct atmel_pwm_data *data; unsigned int updated_pwms; /* ISR is cleared when read, ensure only one thread does that */ struct mutex isr_lock; }; -static inline struct atmel_pwm_chip *to_atmel_pwm_chip(struct pwm_chip *chip) +static inline struct atmel_pwm_chip *to_atmel_pwm_chip(const struct pwm_chip *chip) { return container_of(chip, struct atmel_pwm_chip, chip); } @@ -150,15 +155,15 @@ static void atmel_pwm_update_cdty(struct pwm_chip *chip, struct pwm_device *pwm, struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); u32 val; - if (atmel_pwm->regs->duty_upd == - atmel_pwm->regs->period_upd) { + if (atmel_pwm->data->regs.duty_upd == + atmel_pwm->data->regs.period_upd) { val = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, PWM_CMR); val &= ~PWM_CMR_UPD_CDTY; atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWM_CMR, val); } atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, - atmel_pwm->regs->duty_upd, cdty); + atmel_pwm->data->regs.duty_upd, cdty); } static void atmel_pwm_set_cprd_cdty(struct pwm_chip *chip, @@ -168,9 +173,9 @@ static void atmel_pwm_set_cprd_cdty(struct pwm_chip *chip, struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, - atmel_pwm->regs->duty, cdty); + atmel_pwm->data->regs.duty, cdty); atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, - atmel_pwm->regs->period, cprd); + atmel_pwm->data->regs.period, cprd); } static void atmel_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm, @@ -225,7 +230,7 @@ static int atmel_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, cstate.polarity == state->polarity && cstate.period == state->period) { cprd = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, - atmel_pwm->regs->period); + atmel_pwm->data->regs.period); atmel_pwm_calculate_cdty(state, cprd, &cdty); atmel_pwm_update_cdty(chip, pwm, cdty); return 0; @@ -272,32 +277,55 @@ static int atmel_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, return 0; } +static int atmel_pwm_get_caps(const struct pwm_chip *chip, + const struct pwm_device *pwm, + struct pwm_caps *caps) +{ + struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); + + *caps = atmel_pwm->data->caps; + + return 0; +} + static const struct pwm_ops atmel_pwm_ops = { .apply = atmel_pwm_apply, + .get_caps = atmel_pwm_get_caps, .owner = THIS_MODULE, }; -static const struct atmel_pwm_registers atmel_pwm_regs_v1 = { - .period = PWMV1_CPRD, - .period_upd = PWMV1_CUPD, - .duty = PWMV1_CDTY, - .duty_upd = PWMV1_CUPD, +static const struct atmel_pwm_data atmel_pwm_data_v1 = { + .regs = { + .period = PWMV1_CPRD, + .period_upd = PWMV1_CUPD, + .duty = PWMV1_CDTY, + .duty_upd = PWMV1_CUPD, + }, + .caps = { + .modes_msk = PWM_MODE_BIT(NORMAL), + }, }; -static const struct atmel_pwm_registers atmel_pwm_regs_v2 = { - .period = PWMV2_CPRD, - .period_upd = PWMV2_CPRDUPD, - .duty = PWMV2_CDTY, - .duty_upd = PWMV2_CDTYUPD, +static const struct atmel_pwm_data atmel_pwm_data_v2 = { + .regs = { + .period = PWMV2_CPRD, + .period_upd = PWMV2_CPRDUPD, + .duty = PWMV2_CDTY, + .duty_upd = PWMV2_CDTYUPD, + }, + .caps = { + .modes_msk = PWM_MODE_BIT(NORMAL) | + PWM_MODE_BIT(COMPLEMENTARY), + }, }; static const struct platform_device_id atmel_pwm_devtypes[] = { { .name = "at91sam9rl-pwm", - .driver_data = (kernel_ulong_t)&atmel_pwm_regs_v1, + .driver_data = (kernel_ulong_t)&atmel_pwm_data_v1, }, { .name = "sama5d3-pwm", - .driver_data = (kernel_ulong_t)&atmel_pwm_regs_v2, + .driver_data = (kernel_ulong_t)&atmel_pwm_data_v2, }, { /* sentinel */ }, @@ -307,20 +335,20 @@ MODULE_DEVICE_TABLE(platform, atmel_pwm_devtypes); static const struct of_device_id atmel_pwm_dt_ids[] = { { .compatible = "atmel,at91sam9rl-pwm", - .data = &atmel_pwm_regs_v1, + .data = &atmel_pwm_data_v1, }, { .compatible = "atmel,sama5d3-pwm", - .data = &atmel_pwm_regs_v2, + .data = &atmel_pwm_data_v2, }, { .compatible = "atmel,sama5d2-pwm", - .data = &atmel_pwm_regs_v2, + .data = &atmel_pwm_data_v2, }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, atmel_pwm_dt_ids); -static inline const struct atmel_pwm_registers * +static inline const struct atmel_pwm_data * atmel_pwm_get_driver_data(struct platform_device *pdev) { const struct platform_device_id *id; @@ -330,18 +358,18 @@ atmel_pwm_get_driver_data(struct platform_device *pdev) id = platform_get_device_id(pdev); - return (struct atmel_pwm_registers *)id->driver_data; + return (struct atmel_pwm_data *)id->driver_data; } static int atmel_pwm_probe(struct platform_device *pdev) { - const struct atmel_pwm_registers *regs; + const struct atmel_pwm_data *data; struct atmel_pwm_chip *atmel_pwm; struct resource *res; int ret; - regs = atmel_pwm_get_driver_data(pdev); - if (!regs) + data = atmel_pwm_get_driver_data(pdev); + if (!data) return -ENODEV; atmel_pwm = devm_kzalloc(&pdev->dev, sizeof(*atmel_pwm), GFP_KERNEL); @@ -373,7 +401,7 @@ static int atmel_pwm_probe(struct platform_device *pdev) atmel_pwm->chip.base = -1; atmel_pwm->chip.npwm = 4; - atmel_pwm->regs = regs; + atmel_pwm->data = data; atmel_pwm->updated_pwms = 0; mutex_init(&atmel_pwm->isr_lock); From patchwork Mon Dec 17 14:13:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Beznea X-Patchwork-Id: 10733563 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4345C1575 for ; Mon, 17 Dec 2018 14:19:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 358C929612 for ; Mon, 17 Dec 2018 14:19:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 297D529A0C; Mon, 17 Dec 2018 14:19:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id CF05129612 for ; Mon, 17 Dec 2018 14:19:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=eSXVZ0nQuPJ2NrEDjJEXNFVtroHBLciq90wwuxEDYKg=; b=Z+JEm9TKG11YjI O9h6bGZo7dlx4MXhcUjBqntyHIX4aTzLqMzHp8Hhr0UlsqxLcXmdlrRvQrEZFOl5Y4NflYYJpaSiG 7rxSdcHdHqaYUobSRWqpqbVcfcINdwULtbuNMSfaxTaQ1NpBtUsdwA++/mHNJeiw8qrJ3mKIeoiyn 7alkZvD5X12tsijoueAgGfoM6u0DcwkQ9nN3g9SrWDTGeojvEa7Kd5G0ssgfsTxwgeGoIlpWYkR6I KPpFTdcfwo2N1uGefel+1IQ3LvXch78fdU4j9G5uHdX+FQNqtGYxBXO9PIkYfXRkdBXzWiw1A5dEN xtmDTroPa1h71KmKwfWw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYtjs-0002Ar-96; Mon, 17 Dec 2018 14:19:20 +0000 Received: from esa3.microchip.iphmx.com ([68.232.153.233]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYtef-0007If-Vk for linux-arm-kernel@lists.infradead.org; Mon, 17 Dec 2018 14:14:01 +0000 X-IronPort-AV: E=Sophos;i="5.56,365,1539673200"; d="scan'208";a="24462328" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa3.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 17 Dec 2018 07:13:53 -0700 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.76.38) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 17 Dec 2018 07:13:52 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector1-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1/jkLcqWaHllnls9ZlExlDdmmrsn65dPM/sYdupYrjU=; b=QESDq/r2Mvx7XdZxmR1s7jFyQxTXKhiF9LF/7weKp1dKz79CdInGHc0k5KsE/BWbT8bGdDorAmYAbpf3+V8QMjdqzdMaOd/r1sNt4zWtwQ5IFDZZj443C4EBllW7qW+iHPxOYwu6B2nRSU37YS1k+O3vEEIntd+4COzGt6OCFCE= Received: from BY2PR11MB0744.namprd11.prod.outlook.com (10.163.112.142) by BY2PR11MB0584.namprd11.prod.outlook.com (10.163.159.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1425.19; Mon, 17 Dec 2018 14:13:50 +0000 Received: from BY2PR11MB0744.namprd11.prod.outlook.com ([fe80::cd88:53bd:589a:ab7f]) by BY2PR11MB0744.namprd11.prod.outlook.com ([fe80::cd88:53bd:589a:ab7f%2]) with mapi id 15.20.1425.021; Mon, 17 Dec 2018 14:13:50 +0000 From: To: , , , , , Subject: [PATCH v7 4/6] pwm: add push-pull mode support Thread-Topic: [PATCH v7 4/6] pwm: add push-pull mode support Thread-Index: AQHUlhK7NNxUrpqG30KBDgyJqVCMRA== Date: Mon, 17 Dec 2018 14:13:50 +0000 Message-ID: <1545055999-23950-5-git-send-email-claudiu.beznea@microchip.com> References: <1545055999-23950-1-git-send-email-claudiu.beznea@microchip.com> In-Reply-To: <1545055999-23950-1-git-send-email-claudiu.beznea@microchip.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1P195CA0015.EURP195.PROD.OUTLOOK.COM (2603:10a6:800:d0::25) To BY2PR11MB0744.namprd11.prod.outlook.com (2a01:111:e400:52de::14) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Claudiu.Beznea@microchip.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [94.177.32.154] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY2PR11MB0584; 6:3AdtupeoP6JlYANA/DXLBj9q+9rqt5eMmrYao9wwtZnMhbwWv5CjL8GWufZZJPvoYnZ1IfbyW61iy9etotqKHcRpTh5f0MpM5WwUdFoRqMzOn7hYxqVAe8SNUk0LBDH8qeJrKDs1c3BCM+FW1HjegfMkgGQ+feLs33cRrpUo+FuYJo0IqaJmN1jHvnw/ugsvOu42tu91MeCBHeSTaPUMdjVScOJVNuATNPqwlQsJpconk9Fr42fkg6J51/ijoYSMK0MPh610wQ/TCU7VqL7N3zRE/AuZ8ik7KUHEdGHPzR3m8h8TkdaoAHUk+DCgfh73kX2dXW5L77/9z4QGCf83PNGwL+0hjlNJADRgM9QIuM1pjdlvp0XGBjFWUl1FcbA+FlJuTozRIbhij5l9C3VVa7JYLB+Z/HK8rSsQWR8HhwJhF84sziyKlzWgfTgZcg23N7m/UYHZ6U8Xy1SPjeNxhA==; 5:MPFL1DJLVaTDXmtlWnQQxbt18W7pUrWZ+zg41TmcmUaXZEUjPl80dzuwmTuPyvVkpj52+HsUoPdU+kflI2h/ggDH+7TdOS7i0Nxa5frAvxDIYqH9/kU0CKDh6pSrKerFMrFVl+jqpX0vjI7PyXn/0dHeTg2eJb6ONTuPHzgOVSU=; 7:fezMoWv9DiMGNekMSl6FmoVvdHZ/ayltRpgbNlAIHrLeI7YPoRKyMoDSuYc1+W88Rx6BCqDaaknzRVcdk9wuSJV09rVVgSvkjR6d4TRwGsic7wXMQMGfGUTLuZ1nqpXnQvdCsmoc9IAiJOm/zdDgcg== x-ms-office365-filtering-correlation-id: edf7b881-225e-41da-2a0f-08d66429ddef x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY2PR11MB0584; x-ms-traffictypediagnostic: BY2PR11MB0584: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(3230021)(999002)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(3231475)(944501520)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123560045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:BY2PR11MB0584; BCL:0; PCL:0; RULEID:; SRVR:BY2PR11MB0584; x-forefront-prvs: 08897B549D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(396003)(39860400002)(376002)(346002)(366004)(199004)(189003)(8676002)(25786009)(68736007)(6506007)(386003)(6116002)(102836004)(5660300001)(6436002)(66066001)(3846002)(39060400002)(478600001)(107886003)(71190400001)(2501003)(72206003)(256004)(305945005)(71200400001)(6486002)(7736002)(186003)(97736004)(26005)(52116002)(316002)(54906003)(476003)(4326008)(2201001)(99286004)(14454004)(11346002)(2616005)(446003)(2906002)(76176011)(6512007)(36756003)(53936002)(110136005)(86362001)(6636002)(8936002)(81156014)(486006)(81166006)(105586002)(106356001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR11MB0584; H:BY2PR11MB0744.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: HQN+ExOls/wfupbcwFtzp9Vx1nDKcT8j4l+4u27JluXsItZkayh/2oKCkQfPUCCDFaNM+EOIqL7UG9X0wJVEtDtf8sbL8f6FTCRqIuqG3AS6r3Ed33HBYrRDe5Cg0poJOVyMkl65Fu6sw+/mKk71onclpw9AZh0W4tSRUo9ektzJryMIAJbrVsql/EhmLUZRcgkNFJn2i4jL31aA0K3eMpgtzFZcZ14u/0PZfUE42nIXnk9APNZzqcXChYSUlw4oE6f7FPCEtAgN7Cbf8moa+5mAW6Y3CFxaZdp60eEtpW25MTwtj74cQW8bj6Xo/5/l spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: edf7b881-225e-41da-2a0f-08d66429ddef X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Dec 2018 14:13:50.3442 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR11MB0584 X-OriginatorOrg: microchip.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181217_061358_474404_19B82DE1 X-CRM114-Status: GOOD ( 10.22 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-pwm@vger.kernel.org, Claudiu.Beznea@microchip.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Claudiu Beznea Add push-pull mode support. In push-pull mode the channels' outputs have same polarities and the edges are complementary delayed for one period. Signed-off-by: Claudiu Beznea --- drivers/pwm/core.c | 3 +++ include/linux/pwm.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index eb444ee8d486..f182d1eb564e 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -328,6 +328,9 @@ const char *pwm_get_mode_name(unsigned long modebit) if (modebit == PWM_MODE_BIT(COMPLEMENTARY)) return "complementary"; + if (modebit == PWM_MODE_BIT(PUSH_PULL)) + return "push-pull"; + return "normal"; } diff --git a/include/linux/pwm.h b/include/linux/pwm.h index abe189d891af..cce29733d44e 100644 --- a/include/linux/pwm.h +++ b/include/linux/pwm.h @@ -32,11 +32,14 @@ enum pwm_polarity { * PWM modes capabilities * @PWM_MODE_NORMAL: PWM has one output * @PWM_MODE_COMPLEMENTARY: PWM has 2 outputs with opposite polarities + * @PWM_MODE_PUSH_PULL: PWM has 2 outputs with same polarities and the edges + * are complementary delayed for one period * @PWM_MODE_CNT: PWM modes count */ enum pwm_mode { PWM_MODE_NORMAL, PWM_MODE_COMPLEMENTARY, + PWM_MODE_PUSH_PULL, PWM_MODE_CNT, }; From patchwork Mon Dec 17 14:13:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Beznea X-Patchwork-Id: 10733551 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 668A01399 for ; Mon, 17 Dec 2018 14:14:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 57C3D29DC9 for ; Mon, 17 Dec 2018 14:14:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4BC6529F79; Mon, 17 Dec 2018 14:14:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id EC3FE29DC9 for ; Mon, 17 Dec 2018 14:14:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=r9tJ3L8JD7JYCbegsBfX1Nt1hQqSdpNJzaDcr9+t8V8=; b=gXJKRaRyEDvelK jMlxt0MfFTvKUu1wBvEihsUcNPBp5wRL0vh4SEB4v+hLk+zv+SE1qv6YZNkM/pgA8jY0pw3BzBOD/ K/wskxI0CdN0Rq6Vyd9RwvVeYQlHXjFUj0/HfvkwB4je9mKMXNdlidd+23qurogvqbRcLl+qilqsr RrBxqngk2GPoFXgfvVqLGICardRLRxq9g7nQdt6ZY9/zUBjEhryVchSFrkHTRCWinuac0fh4bWop3 c1GmeB2cMyZPdPASgslpPPbO5R0PwM3NlSVYRvGkKSFT7PG8xnSzrcfXcwOGNeDuBby+48jBvj1Q1 +kIiY4YYU3/g9xSGm3Qg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYtfa-0008AE-L8; Mon, 17 Dec 2018 14:14:54 +0000 Received: from esa5.microchip.iphmx.com ([216.71.150.166]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYtef-0007IX-2N for linux-arm-kernel@lists.infradead.org; Mon, 17 Dec 2018 14:13:59 +0000 X-IronPort-AV: E=Sophos;i="5.56,365,1539673200"; d="scan'208";a="22366018" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa5.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 17 Dec 2018 07:13:57 -0700 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.76.38) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 17 Dec 2018 07:13:55 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector1-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kfL7X0b3B5YjBnM2HDFj/FM/xyJZEsMgCFf8ly0kq3Y=; b=JW2dmZA3ioXYO2kUa/Dmmz9Kar6sY44GDYu96kmsD/JSaXsAfJRCZMNbNk8enqEcssjbzX8edn+Vc1p4Req/5HVpy0i+ugMl7RpzzqSl60PZXpQ4LZddXkp4YQjf2N/gvQEmHNenjVWJCW2eVD8H/w+Px8nzXFDh9nKbGMc+C8k= Received: from BY2PR11MB0744.namprd11.prod.outlook.com (10.163.112.142) by BY2PR11MB0584.namprd11.prod.outlook.com (10.163.159.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1425.19; Mon, 17 Dec 2018 14:13:53 +0000 Received: from BY2PR11MB0744.namprd11.prod.outlook.com ([fe80::cd88:53bd:589a:ab7f]) by BY2PR11MB0744.namprd11.prod.outlook.com ([fe80::cd88:53bd:589a:ab7f%2]) with mapi id 15.20.1425.021; Mon, 17 Dec 2018 14:13:53 +0000 From: To: , , , , , Subject: [PATCH v7 5/6] pwm: add documentation for pwm push-pull mode Thread-Topic: [PATCH v7 5/6] pwm: add documentation for pwm push-pull mode Thread-Index: AQHUlhK9I49utgtcdEWdXv/ljRnxJQ== Date: Mon, 17 Dec 2018 14:13:53 +0000 Message-ID: <1545055999-23950-6-git-send-email-claudiu.beznea@microchip.com> References: <1545055999-23950-1-git-send-email-claudiu.beznea@microchip.com> In-Reply-To: <1545055999-23950-1-git-send-email-claudiu.beznea@microchip.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1P195CA0015.EURP195.PROD.OUTLOOK.COM (2603:10a6:800:d0::25) To BY2PR11MB0744.namprd11.prod.outlook.com (2a01:111:e400:52de::14) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Claudiu.Beznea@microchip.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [94.177.32.154] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY2PR11MB0584; 6:laQj0meJvHY30HUSa6mnci1XRv2zWylnT9IGjMd6PjUSgnp1/ZIu7rQUw37nyzkS12pUzD4b9h3E5hWGG/Zs/SaANDAd9ogQAfElKj44cxJBt9j9ggMOblwpZuxA25lXAOCliAmJdgdZA/wQtzV59Qq9/sGtRZFhfActjST3j5TPfBC2s1CMRpy70lNU1sWqI5XMX942WJAVwwXq8sJKkbJgmbS0K3aG8eBAcLZPrwXNIH3EYMv0pz+EHT5csbi6IDrJcC9r0oMQQ+DesbdaDbnIzMFCzFvLBdkzBHK1dAXSgMAnHUszTb6WvbReQcT0IvHXdBOq6iuJsbdhwQsoIeU+HQqWUv3cJgZPk6byKg6kQfkp8vdATenK+YU8njWYsU3kerInSMtEUl73mQGQtmQU4E5qZTV+jhKD5F6Q/d92Fj06omtYDAnXZIRKxiHvZaW70wYnUSme9kYBYWcFaw==; 5:oHOVE4HqOIx605SW5OXfgx+KAAnsFEpbXoGKjEInaQLKGBkv6559R8DlqIAayF8RLX926/RR5OOXQG2tXWRWJ3oKILiQXwavbvavBQtVcnxpeZ8Jwy3LZQ5F0U/WHNLna5vOkA+SllBCS1BcU4VjQ8KZEa6ZmAI9OqL4DxxX6mg=; 7:8MeaoqQ7JjjfUvyrdx98Kt6vU9djQAZIqge5t2NsAzMPQ96wTfwH6A8emnRsZkMaNOEgkNucLwDy6/oGTL0eNMSzHusVaxWDgCU8gO6Jbg1+VrjDE8qITJ0vESmAHTq/xE++FqhnzinxJW9XjlrCmA== x-ms-office365-filtering-correlation-id: 2b029d4a-237c-41db-1566-08d66429dfe8 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY2PR11MB0584; x-ms-traffictypediagnostic: BY2PR11MB0584: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(3230021)(999002)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(3231475)(944501520)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123560045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:BY2PR11MB0584; BCL:0; PCL:0; RULEID:; SRVR:BY2PR11MB0584; x-forefront-prvs: 08897B549D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(396003)(39860400002)(376002)(346002)(366004)(199004)(189003)(8676002)(25786009)(68736007)(6506007)(386003)(6116002)(102836004)(5660300001)(6436002)(66066001)(3846002)(39060400002)(478600001)(107886003)(71190400001)(2501003)(72206003)(256004)(305945005)(71200400001)(6486002)(7736002)(186003)(97736004)(26005)(52116002)(316002)(54906003)(476003)(4326008)(2201001)(99286004)(14454004)(11346002)(2616005)(446003)(2906002)(76176011)(6512007)(36756003)(53936002)(110136005)(86362001)(6636002)(8936002)(81156014)(486006)(81166006)(105586002)(106356001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR11MB0584; H:BY2PR11MB0744.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 7lUkR90f7ZIfSAU8oL8WfFoIDj0QGK/UtsT0zB6hvcxfrkQyCxow5wIzcy1zO8Dza4qc1Gdm84C7Yo6K3RX1z9r1FogGQRWV11Q4yKnoMIYTNbxohloW2p/r9HWNcVfVvj+BM+MXOYnd7A9z5WgHoPD57A0psvJDeFB4pNeJTZpclWTI2eIAFlp+uUvuoBsMBny2QqVGkSVduU1pZsagmaZJRzvigWjzpkiKHigWl2OPFssjZ/fNSXL6ISmGtkhPeSnENAI6jtwF7CrpMzxF7FFJHlgRbewBetgRTWVyEpzarU5l9GQMUk0lJgKuH5AX spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 2b029d4a-237c-41db-1566-08d66429dfe8 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Dec 2018 14:13:53.5392 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR11MB0584 X-OriginatorOrg: microchip.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181217_061357_511373_73CEE40D X-CRM114-Status: GOOD ( 11.18 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-pwm@vger.kernel.org, Claudiu.Beznea@microchip.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Claudiu Beznea Add documentation for PWM push-pull mode. Signed-off-by: Claudiu Beznea --- Hi Rob, In prevous version I had your Reviewed-by tag on this patch but I removed it in this version since there are some changes b/w the previous one and this one. Please see bellow and let me know if you are ok with this. Thank you, Claudiu Beznea Changes in v6: - remove bindings part - use 1/3 duty factor ratio - use '^' symbols to emphasize the beginning of a new period - use PWMx_y to refrer to output y of PWM x Documentation/pwm.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Documentation/pwm.txt b/Documentation/pwm.txt index 669fd4c9cc8e..80552627627d 100644 --- a/Documentation/pwm.txt +++ b/Documentation/pwm.txt @@ -130,6 +130,22 @@ channel that was exported. The following properties will then be available: PWMx_1 |__| |__| |__| |__| ^ ^ ^ ^ + Push-pull mode - for PWM channels with two outputs; output waveforms + for a PWM channel in push-pull mode, with normal polarity looks like + this: + __ __ + PWMx_0 __| |____________| |__________ + __ __ + PWMx_1 __________| |____________| |__ + ^ ^ ^ ^ + + If polarity is inversed: + __ ____________ __________ + PWMx_0 |__| |__| + __________ ____________ __ + PWMx_1 |__| |__| + ^ ^ ^ ^ + Where '^' specifies the beginning of a period. Implementing a PWM driver From patchwork Mon Dec 17 14:13:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Beznea X-Patchwork-Id: 10733555 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7318D1399 for ; Mon, 17 Dec 2018 14:15:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 63DFC29DC9 for ; Mon, 17 Dec 2018 14:15:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 56ADA29F79; Mon, 17 Dec 2018 14:15:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D7A0429DC9 for ; Mon, 17 Dec 2018 14:15:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=3+amQ0AzeoGn5xFlzyGSZJ+WMcaJB5ZNkTlYjFnzpSA=; b=bPBfZG/Diw1GLJ GL72LwWKRe/o0kTP457ffxBRINW4fMLtmZb5KnHXW4B7XPEkxvgwMAWaJXR5vXGZPUyWlZlZRisSq 0qNB912PqJvu+NzlyUiF1dPa0Xc1wsID2yWSDWMcXqhjU15sJyHBK4zo1zx8E5eFFhE4mKLTzT5Yu knZYAbJ9INIV9rmzhm5JzhPtW3I8IWt86tzTMZiLNMTrOrqV82a6N5XUnGo2Ww19XpYZraiYfx9tt Hcq4/y6SrrnTORnazI6XC0gwrtEHy6eVz6RPQls6y14LJPq44t2M3w5Adxd2UGvMwCK5UhHm+JVHD GAtN0/9qpUXgmi1sv2Hg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYtfv-0000bZ-Qu; Mon, 17 Dec 2018 14:15:15 +0000 Received: from esa2.microchip.iphmx.com ([68.232.149.84]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYtei-0007IO-76 for linux-arm-kernel@lists.infradead.org; Mon, 17 Dec 2018 14:14:04 +0000 X-IronPort-AV: E=Sophos;i="5.56,365,1539673200"; d="scan'208";a="24311049" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa2.microchip.iphmx.com with ESMTP/TLS/AES128-SHA; 17 Dec 2018 07:13:59 -0700 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.76.37) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 17 Dec 2018 07:13:59 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector1-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XvVjPyoaV+bK8s4DYjcBuwUc1zpXS76CKb2RhaH4FuE=; b=ZsAh0GblGMqmnSNf8GithG2oFf5VmSwg1VsFwGHSPb+pjAXAsg6OF2EVLc+7v/O6EtLzsyLFJroPOTCEuREnzVkIZsVxQiwuv8fgcslPpcDeYtRdIeZTFKIgR2AFOan4Z+DOXkqm71Hs2GmHMLoMfDC8c4h2urVh/IeuQca8akI= Received: from BY2PR11MB0744.namprd11.prod.outlook.com (10.163.112.142) by BY2PR11MB0584.namprd11.prod.outlook.com (10.163.159.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1425.19; Mon, 17 Dec 2018 14:13:56 +0000 Received: from BY2PR11MB0744.namprd11.prod.outlook.com ([fe80::cd88:53bd:589a:ab7f]) by BY2PR11MB0744.namprd11.prod.outlook.com ([fe80::cd88:53bd:589a:ab7f%2]) with mapi id 15.20.1425.021; Mon, 17 Dec 2018 14:13:56 +0000 From: To: , , , , , Subject: [PATCH v7 6/6] pwm: atmel: add push-pull mode support Thread-Topic: [PATCH v7 6/6] pwm: atmel: add push-pull mode support Thread-Index: AQHUlhK/YNrd5tGcekuRqvgsmc9ZwQ== Date: Mon, 17 Dec 2018 14:13:56 +0000 Message-ID: <1545055999-23950-7-git-send-email-claudiu.beznea@microchip.com> References: <1545055999-23950-1-git-send-email-claudiu.beznea@microchip.com> In-Reply-To: <1545055999-23950-1-git-send-email-claudiu.beznea@microchip.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1P195CA0015.EURP195.PROD.OUTLOOK.COM (2603:10a6:800:d0::25) To BY2PR11MB0744.namprd11.prod.outlook.com (2a01:111:e400:52de::14) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Claudiu.Beznea@microchip.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [94.177.32.154] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY2PR11MB0584; 6:AoQ0QGzzp+MlkHg3v2sP7hNYfj1ngPsJEbjXtdap8AcRG1MQEfSe+G6U/OYpzL/UJXIm8jwxoRUfvIIAmTZsxGxq2i9KZEE16i7O4cxJ/mjK3nweig1UEEd8lGFkAs1WA+2WebEeLKw8RikoG6xvXXxC6gzsWLSojC1KNqfjIRTSOhgX5s37NCM9OvEHrEnMtOOkggh2piBwSKcyCbMNvTto9nROo3BGueV1aTwaMa4tf5dLq0yweTxe6QeecCj2zwCvsNj8xOYH9dXHR3G9OcYg3mzAeNjjUxbQND9+O50lb9d596xf4AX1oy9TfeKSXbR/XXWNjmruOcJWS9Y+HY6VMvsLMfnm4i3kYjd30FC9iYDEZVSi8I4pghg1g7AjMdAZSHxg8EYXOPBd/t0aGx+G9nDOu+IFPMgbS1sFxmJ3V8aVd/qxDE7bcAOelvvyfWCxAkAz4XvQbX+h7YAMvA==; 5:mpH4D+rJHtyeGjSyXhjLVYqnZllNc6uh2v4h38saophONl7KfXesvx2JArPZCZGZAqoeVKy5AG4QiSX2f1yUBYyyukfDLI6p3F/N0qTKliOTigUHm7w+mjrepkchZHGV63n2XlWSlksOvWcAFi7uwcnW1/dodte/keiv7/NSgBc=; 7:7bkb0zWRPMRZYuzGjGd1twYNWM7arXihwqwBpy8cAcR6pmP8J7BzE9Y0Ydqj4qWAyh1tNlmILDxaKp/DvSdfpnnYNIfyPt1LiGcLolKC6VQhZx6jFK6TEMJ93jc6u5Ir7PISSeoSas3OLhm8dEYl0w== x-ms-office365-filtering-correlation-id: f10fc0e4-9509-47f4-9fdb-08d66429e1c0 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY2PR11MB0584; x-ms-traffictypediagnostic: BY2PR11MB0584: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(3230021)(999002)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(3231475)(944501520)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123560045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:BY2PR11MB0584; BCL:0; PCL:0; RULEID:; SRVR:BY2PR11MB0584; x-forefront-prvs: 08897B549D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(396003)(39860400002)(376002)(346002)(366004)(199004)(189003)(8676002)(25786009)(68736007)(6506007)(386003)(6116002)(102836004)(5660300001)(6436002)(66066001)(3846002)(39060400002)(478600001)(107886003)(71190400001)(2501003)(72206003)(256004)(305945005)(71200400001)(6486002)(7736002)(186003)(97736004)(26005)(52116002)(316002)(54906003)(476003)(4326008)(2201001)(99286004)(14444005)(14454004)(11346002)(2616005)(446003)(2906002)(76176011)(6512007)(36756003)(53936002)(110136005)(86362001)(6636002)(8936002)(81156014)(575784001)(486006)(81166006)(105586002)(106356001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR11MB0584; H:BY2PR11MB0744.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: ulsTaBJ+0Tf6UoEBzf6DJxt5Gqwuaeg4ihmAyPgWtYe0ebi7rQGA/WRESkAIUV4fxsJUgxhky7IF/hFgqrCz24UkWGbKMC95fNzRQ9nWEqfmXQbsW0Kw/kKU6Rk19PlnL5sColN/wRZ1Cc2AhuuUP/iY/wIHBEaufYswh5g6DKeGa0qV7iO7GFhhHa0Gk9V9+xracJsirwxWUWjfARXVzM67ZywlduRBmboNEZ2ibydrDGEJ77IFn+9T9SLDdqX3LZseL7//4/5TgJTlehjR+5VNHQfppm89gB4guOU1W6u1yPskDxHVBbiQnmbARnGp spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: f10fc0e4-9509-47f4-9fdb-08d66429e1c0 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Dec 2018 14:13:56.6290 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR11MB0584 X-OriginatorOrg: microchip.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181217_061400_704923_4F406A0C X-CRM114-Status: GOOD ( 12.92 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-pwm@vger.kernel.org, Claudiu.Beznea@microchip.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP From: Claudiu Beznea Add support for PWM push-pull mode. This is only supported by SAMA5D2 SoCs. Signed-off-by: Claudiu Beznea --- drivers/pwm/pwm-atmel.c | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/drivers/pwm/pwm-atmel.c b/drivers/pwm/pwm-atmel.c index b72cacd5dca3..650d475a4c34 100644 --- a/drivers/pwm/pwm-atmel.c +++ b/drivers/pwm/pwm-atmel.c @@ -33,8 +33,11 @@ #define PWM_CMR 0x0 /* Bit field in CMR */ -#define PWM_CMR_CPOL (1 << 9) -#define PWM_CMR_UPD_CDTY (1 << 10) +#define PWM_CMR_CPOL BIT(9) +#define PWM_CMR_UPD_CDTY BIT(10) +#define PWM_CMR_DTHI BIT(17) +#define PWM_CMR_DTLI BIT(18) +#define PWM_CMR_PPM BIT(19) #define PWM_CMR_CPRE_MSK 0xF /* The following registers for PWM v1 */ @@ -219,16 +222,19 @@ static int atmel_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, { struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); struct pwm_state cstate; + struct pwm_caps caps; unsigned long cprd, cdty; u32 pres, val; int ret; pwm_get_state(pwm, &cstate); + pwm_get_caps(pwm, &caps); if (state->enabled) { if (cstate.enabled && cstate.polarity == state->polarity && - cstate.period == state->period) { + cstate.period == state->period && + cstate.modebit == state->modebit) { cprd = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, atmel_pwm->data->regs.period); atmel_pwm_calculate_cdty(state, cprd, &cdty); @@ -263,6 +269,18 @@ static int atmel_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, val &= ~PWM_CMR_CPOL; else val |= PWM_CMR_CPOL; + + /* PWM mode. */ + if (caps.modes_msk & PWM_MODE_BIT(PUSH_PULL)) { + if (state->modebit == PWM_MODE_BIT(PUSH_PULL)) { + val |= PWM_CMR_PPM | PWM_CMR_DTLI; + val &= ~PWM_CMR_DTHI; + } else { + val &= ~(PWM_CMR_PPM | PWM_CMR_DTLI | + PWM_CMR_DTHI); + } + } + atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWM_CMR, val); atmel_pwm_set_cprd_cdty(chip, pwm, cprd, cdty); mutex_lock(&atmel_pwm->isr_lock); @@ -319,6 +337,20 @@ static const struct atmel_pwm_data atmel_pwm_data_v2 = { }, }; +static const struct atmel_pwm_data atmel_pwm_data_v3 = { + .regs = { + .period = PWMV2_CPRD, + .period_upd = PWMV2_CPRDUPD, + .duty = PWMV2_CDTY, + .duty_upd = PWMV2_CDTYUPD, + }, + .caps = { + .modes_msk = PWM_MODE_BIT(NORMAL) | + PWM_MODE_BIT(COMPLEMENTARY) | + PWM_MODE_BIT(PUSH_PULL), + }, +}; + static const struct platform_device_id atmel_pwm_devtypes[] = { { .name = "at91sam9rl-pwm", @@ -341,7 +373,7 @@ static const struct of_device_id atmel_pwm_dt_ids[] = { .data = &atmel_pwm_data_v2, }, { .compatible = "atmel,sama5d2-pwm", - .data = &atmel_pwm_data_v2, + .data = &atmel_pwm_data_v3, }, { /* sentinel */ },