From patchwork Mon Dec 17 14:03:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Beznea X-Patchwork-Id: 10733515 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 1782C14E2 for ; Mon, 17 Dec 2018 14:04:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 05E21286EE for ; Mon, 17 Dec 2018 14:04:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EDE2529231; Mon, 17 Dec 2018 14:04:05 +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 21542286EE for ; Mon, 17 Dec 2018 14:04:05 +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=QKuyCVhAyo6onq odB/IVyYqYlFmPXjJad1S0OMNfmmDqDTQY1akJX5IYaJjplgUeJs9iF9q6DSKnw9RhwDvEu2MFHZo hOazkb2bldup2r0aBbgCwBDOCN/C3v3342CB+8XzadaazxXfTHbdUCE1RLfHu06MkjGpb1wM4hTMt NZpJM6urjrsqZpIZT0oHwU0//if+Rzvrp3T3ohxD3xOkXShfg7eVQmFcSYuDF6JmwLrXiX4/fHB07 HNtHV7oJLIUROjH6hWfBzyayVeFP8pWSLYwccR/wJGm+5f+WurZfzaNAjd8ZbbaUIbGH5bH4aIw9C l/NalQwh+wS0NPXG4d1A==; 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 1gYtV4-0001mz-Je; Mon, 17 Dec 2018 14:04:02 +0000 Received: from esa1.microchip.iphmx.com ([68.232.147.91]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYtUU-000194-GA for linux-arm-kernel@lists.infradead.org; Mon, 17 Dec 2018 14:03:38 +0000 X-IronPort-AV: E=Sophos;i="5.56,365,1539673200"; d="scan'208";a="25348228" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa1.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 17 Dec 2018 07:03:13 -0700 Received: from NAM03-DM3-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.76.107) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 17 Dec 2018 07:03:13 -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=qznG7HxO5g4n3M7sQV4Y6WpRke+KRQxVYgk6+tDF44F/Q2EHqUQsemL1x31HA6hjbJlJDB/Mh1MSSFoeBkUl9V4ZN9Vik7Ow/2maCsKYjVZk4D9DKcSOmsjyKhu4MpC3r8msbMd4PEA+TlvWuBZx69IWQgyfa8rSFkL77U8/ygc= Received: from BY2PR11MB0744.namprd11.prod.outlook.com (10.163.112.142) by BY2PR11MB0504.namprd11.prod.outlook.com (10.163.158.26) 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:03:10 +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:03:10 +0000 From: To: , , , , , Subject: [PATCH v6 1/6] pwm: extend PWM framework with PWM modes Thread-Topic: [PATCH v6 1/6] pwm: extend PWM framework with PWM modes Thread-Index: AQHUlhE+GrlwQCMgUU2o1NRWZN9iBA== Date: Mon, 17 Dec 2018 14:03:10 +0000 Message-ID: <1545055368-23338-2-git-send-email-claudiu.beznea@microchip.com> References: <1545055368-23338-1-git-send-email-claudiu.beznea@microchip.com> In-Reply-To: <1545055368-23338-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: CWLP123CA0118.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:5f::34) 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; BY2PR11MB0504; 6:PmI476miHhZIZyCgVQAGQdaQHi8tCF8irHmIfqurGjFRHKPrFU8uzAUXbI/tah1h7SQeybQvv6/Iwt1jhL8dFo47RQEYdlQx2gkNsyK8sF0d3u98/Ii4MaTLv0FhJUH9T+vIE61m9mIVGf0W3MBdTq7nh15BFkJf1BaF/wakV4srditsG0s2Q+QgTCzsz2z+UIQ85V0Ks1L8dO8JwBYQcqK/X/Q06z3kqUuUsJ6h+BWsJXdUVhhAFL3Zg2t1fYcvnImo1Fx4K80dZlQPrG9fNWaJrMFfqmLoDVH/bIZ/3se60KxJKc9H+z5+u5/j1uyBi2/VMG4Jxyt/WpqUUagEdQ+vRr/HP9n60LUJSbdAdsx4I18dMSdhVDrVvCr0FgB0/n0Jpc3mjwL0ZJPxPFa8h/QciSrIJDpHMhsdkYTSUjSqFYGMaijHFuxrr4Lhq77n1Imkbv3O/j4gfyRRYf2xlA==; 5:VD/gBq9dnSoEAnOI1zUElBuLPfhFuO81EqD44GUm+iyZ8v9Np3DCkn717l7H71k/UbOezYtyX3SF1e5GX5irRisqFQuf6C6ifLOxDnTDTOI3Ct2aMtGOFdJBXxog4omh6voyKkQznyogoul0SoB/pbI4ppscFElR2xWb3l91YK0=; 7:aQxhqNjKABBAftbFphjruCuVH1LFlYcBzplVcDD9ka1+TBRzc0OTXGvdjlTEnBwqylislQajL+pF2uj5iCWwNn66bnHN7zrfCE55kvOAWhtE7vPFDHj3jNW+5Ehllunr0LSUAKmrGld8kFgC/YjTAg== x-ms-office365-filtering-correlation-id: 17428bbd-cee4-4631-20de-08d66428608a x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:BY2PR11MB0504; x-ms-traffictypediagnostic: BY2PR11MB0504: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(3230021)(999002)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(3231475)(944501520)(52105112)(10201501046)(148016)(149066)(150057)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:BY2PR11MB0504; BCL:0; PCL:0; RULEID:; SRVR:BY2PR11MB0504; x-forefront-prvs: 08897B549D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(346002)(366004)(39860400002)(396003)(136003)(199004)(189003)(4744004)(52116002)(476003)(186003)(106356001)(14454004)(5660300001)(2906002)(97736004)(99286004)(25786009)(86362001)(11346002)(2616005)(71200400001)(71190400001)(6436002)(6486002)(3846002)(6116002)(316002)(110136005)(54906003)(66066001)(486006)(26005)(6512007)(8936002)(81166006)(8676002)(446003)(36756003)(105586002)(102836004)(53936002)(72206003)(81156014)(305945005)(6506007)(76176011)(386003)(68736007)(39060400002)(478600001)(107886003)(7736002)(14444005)(256004)(4326008)(2501003); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR11MB0504; 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: p1sx3MR5qCHcTZIYqtfqvIJQnJXNDfXdu+9XCqq4NISFXeBTsdF/mJK7ZQPtJ0xdSxSYM2nJcm/8OyKDg5RjX6UD8PkB4YrXL54XN2DgCosHjLws0v2WEXiOaNQSqyB3/iPqJ4GEedFch1gshRa1G/k+ZtDhM+4oPxdaBWrg1Tzoqkhp/BroFcdWEaW+OW5dJnV5xWxsmCfD1XgS9/XE4hNnj/qsCXqaAlk92XnT8GnK6ZULaTDszXVrOWGa15HaLlNq8UM83/MNqOm9CWQBl1A3/r7LNUCfCTGt46yCtA3grWbrZhqkU5YqS3OArl5n spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 17428bbd-cee4-4631-20de-08d66428608a X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Dec 2018 14:03:10.7474 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR11MB0504 X-OriginatorOrg: microchip.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181217_060326_767647_E8DD0473 X-CRM114-Status: GOOD ( 22.04 ) 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:03:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Beznea X-Patchwork-Id: 10733517 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 9F4D71399 for ; Mon, 17 Dec 2018 14:04:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8E177292CA for ; Mon, 17 Dec 2018 14:04:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8273F29343; Mon, 17 Dec 2018 14:04:25 +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 1E880292CA for ; Mon, 17 Dec 2018 14:04:25 +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=i9yceCBd1NkMZ8 V4bYu2UdOAOHU+yVm+Oio0OWu934aS7Z4Bo9ITD/o6CjCQtB2gemGs07mjAnvI72xsYMCR9g+wLOz abNzcH4GQj6iRPshgi7MV+G48rimcdNLVrlHSDM9WMouyMP6g+rz7IoW/tJzHJK5Wvj+pLj3iFwHx clwHHMuK0PLtU8O8+LLjs2u7cXKg+0PMX54s4pcaTO9PqlnsAXQZtj5KE0oQwLoILtrygF8Da77Wn NfrJ9VNYAL9V1rpFX/pxlKQwbDhFTqKIFm10d0+r97h2TUG4N4VISfmOGN5SaJzQx523Mc/xlhabr fvc//mpJ0s2e6PqKQAQw==; 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 1gYtVL-00020a-Fm; Mon, 17 Dec 2018 14:04:19 +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 1gYtUc-0001CH-AJ for linux-arm-kernel@lists.infradead.org; Mon, 17 Dec 2018 14:03:42 +0000 X-IronPort-AV: E=Sophos;i="5.56,365,1539673200"; d="scan'208";a="24461888" 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:03:21 -0700 Received: from NAM03-DM3-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.76.107) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 17 Dec 2018 07:03:20 -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=BNmKIrHsIJH/k55mRvxZOdnRP0a8uQ8VKYwZ7pRNq+JoRjC7bzzkh+P+/B2MARQNcea9p4b+1QIDLGbpn57LN4cZbUb5YNAMbXKUs7p/Px1lu1BsqSVkKpEKqnZ+h9+LNSxvHWF/ATKV51Y876Qc3Yo82NQlHHYQ3ZYJ2R+R/Xo= Received: from BY2PR11MB0744.namprd11.prod.outlook.com (10.163.112.142) by BY2PR11MB0504.namprd11.prod.outlook.com (10.163.158.26) 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:03:19 +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:03:19 +0000 From: To: , , , , , Subject: [PATCH v6 2/6] pwm: add PWM modes Thread-Topic: [PATCH v6 2/6] pwm: add PWM modes Thread-Index: AQHUlhFDh5ZEGoOjWEKwF+46Bd4N3Q== Date: Mon, 17 Dec 2018 14:03:18 +0000 Message-ID: <1545055368-23338-3-git-send-email-claudiu.beznea@microchip.com> References: <1545055368-23338-1-git-send-email-claudiu.beznea@microchip.com> In-Reply-To: <1545055368-23338-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: CWLP123CA0118.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:5f::34) 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; BY2PR11MB0504; 6:VQEXbrKAkgO4K3S3/+Yud+zAmjFjRR52ptxsWRl4VpL/TdP1Kh6oIfOCTROnIFBBC7AhOPSBvB7nb1Q6Ty3SoKV4uie+tS0NppzAOzsVWk9POuZRIV/u+OT+2v9OttA2lTlRa0pqOsYmeq/Lg0Oy58uuofBa52j7Tn6zKhvgKRGys4JRsTJCOfqqDnmG+saTG3NSpMMxYd6SwjdGU1Gwm9+wDo3MgBT7VDy6IvAJFwJu1i3NUawjM4Ol/UucOG854fpnNJQHJtbHWFD6FSsi8QqstF80azSGtj+Kg6tNhwwSL1hyjdoz6UGER6fyagYJkQB+jLN5SOr6Mu5aLGrJUFds8Jy/w7RLFoSUShLHgj2Fuv+9hXXWCjrrfNrCav0Y9NQsSpQbN5axLBDyGbDpY75gdAQCSaxWTo93Xn30kUOzheE+IkG+mBjvoKRILfV7hWcohJ+pqU1vRNcWdzSNBw==; 5:o/hbWnxBNDluWT0e0VPa6HdfjS/6KVbKl3nFpBC8Xu4iNFNqZ/U27jl+0NIb+yOMQaKJICvwPhxV12RqZsbkZ+YE3uQhUJnp2MFP/Erh2GspyNNVcX/o+g5sf/txge1xAzoHGwP0QG+xDH9SK7rsnYe5tV3nuvnW1nuyiH63unI=; 7:Tsn6e2l+rcbtdGq5uIE10U1fqFZHUsfsjYyVv7celVtZujpZp5Kw3MBYS2PwlaAbczZCjZ57S6x3NeKj8QZklpVswgSq9F1NKISYSB2zbjk0Nr8lHVeQ8ozSH+Ch98ri9sObiMmP7XXOSHFebs+27A== x-ms-office365-filtering-correlation-id: a9461861-e2e8-43c8-406e-08d6642862a9 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:BY2PR11MB0504; x-ms-traffictypediagnostic: BY2PR11MB0504: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(3230021)(999002)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(3231475)(944501520)(52105112)(10201501046)(148016)(149066)(150057)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:BY2PR11MB0504; BCL:0; PCL:0; RULEID:; SRVR:BY2PR11MB0504; x-forefront-prvs: 08897B549D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(346002)(366004)(39860400002)(396003)(136003)(199004)(189003)(52116002)(476003)(186003)(106356001)(14454004)(5660300001)(2906002)(97736004)(99286004)(25786009)(86362001)(11346002)(2616005)(71200400001)(71190400001)(6436002)(6486002)(3846002)(6116002)(316002)(110136005)(54906003)(66066001)(575784001)(486006)(26005)(6512007)(8936002)(81166006)(8676002)(446003)(36756003)(105586002)(102836004)(53936002)(72206003)(81156014)(305945005)(6506007)(76176011)(386003)(68736007)(39060400002)(478600001)(107886003)(7736002)(14444005)(256004)(4326008)(2501003); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR11MB0504; 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: sjke3QPU0SVmI3EaNAkKo2EFL+PD1SPoRd2MmspSszV1EgvIsjhF8dGpkFJ4LIx1oZO9vWkE5H3phCG/IGTdpFr66Hxy3lzVmVSr5hnxZe3iDJRq4IAoeVMkUGLaYRXzgzRl/WCtktko2mpS5S4ef/u9wPCr2KEZjloUCj5ANyYMW7f8KMb3FmJBQ7kIiioYufstZxI6KvFZhHJg+EHyEE3uOTT2G23QiV7pVSHTKv55w6LkNclBJsVGyOn5BV8FKxcxxYTHDn+C0rSkUEbFAw2k0u66YBKE2KMhoKE+pE1tZ34N0YmD2reV55YVLtPJ spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: a9461861-e2e8-43c8-406e-08d6642862a9 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Dec 2018 14:03:18.9103 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR11MB0504 X-OriginatorOrg: microchip.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181217_060334_729154_579168C6 X-CRM114-Status: GOOD ( 13.49 ) 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:03:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Beznea X-Patchwork-Id: 10733511 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 C79C314E2 for ; Mon, 17 Dec 2018 14:03:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B4A77286EE for ; Mon, 17 Dec 2018 14:03:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A4B2E285D8; Mon, 17 Dec 2018 14:03:43 +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 16A2B285D8 for ; Mon, 17 Dec 2018 14:03:43 +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=FUhxfrFN6avYCy BJj2Div6vpAEScSRQHTrsldpkys+MKprJr8qD5vg9RMN54CoeKMKgnh2F2kOw+z1pa27WccW0Yucz HOAFMZkFwxilF/PbKxd5mkQiPL3K3HY8QRVijAcxWVa6WdEqqd6RlagPF5WSCMsRHBJrNeqrIfBsZ a6NZAO5tUflYbW2QgJDaADxV0yAn0CdsBVAYufRODewqJov7DP+go6Zm4VlI0g//IsdvoNCQiBhRS Ix7ZoACPsLIrn2bWVpZoHi4EWOyPzYmiprMvje3Gt9HDiM5fgHc86MbPGJfdvmj2uyKDSmB1lKMrQ x7HZgnh2XHvCNgiqFhEQ==; 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 1gYtUg-0001O1-G1; Mon, 17 Dec 2018 14:03:38 +0000 Received: from esa1.microchip.iphmx.com ([68.232.147.91]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYtUU-0001Cp-GC for linux-arm-kernel@lists.infradead.org; Mon, 17 Dec 2018 14:03:29 +0000 X-IronPort-AV: E=Sophos;i="5.56,365,1539673200"; d="scan'208";a="25348242" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa1.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 17 Dec 2018 07:03:25 -0700 Received: from NAM03-DM3-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.76.107) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 17 Dec 2018 07:03:25 -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=Cz6X50K6oM/LABC2Dx4jhugYEtpNr175xkcIN11jY3/Lol5fXSjwkzd/KT7hk9pcsRjft/RUONsilWhZf4qSOXE8pdMKoyCaKj988aXC+np2c0tWYPKG3t3Qn2AwMw4DF5lXVs3/ZvgxHr7tuQAUaI/ZByA5iyKR8XWFb+v7fYk= Received: from BY2PR11MB0744.namprd11.prod.outlook.com (10.163.112.142) by BY2PR11MB0504.namprd11.prod.outlook.com (10.163.158.26) 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:03:22 +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:03:22 +0000 From: To: , , , , , Subject: [PATCH v6 3/6] pwm: atmel: add pwm capabilities Thread-Topic: [PATCH v6 3/6] pwm: atmel: add pwm capabilities Thread-Index: AQHUlhFFiWApEZCL3E6bEM7Gu1fkXQ== Date: Mon, 17 Dec 2018 14:03:22 +0000 Message-ID: <1545055368-23338-4-git-send-email-claudiu.beznea@microchip.com> References: <1545055368-23338-1-git-send-email-claudiu.beznea@microchip.com> In-Reply-To: <1545055368-23338-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: CWLP123CA0118.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:5f::34) 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; BY2PR11MB0504; 6:Fv+6MSa98QTSk0WjdyRQCj8/wfs89NG1Sq8F16j1IfMyvchAxl/bKOJCrzoBhx0zuSMP5YGm/OxBx1WNO/iV9c+WYL4J8+xD8ELFEAYvK6SuBXa+cr0TZxk2zpA9qHp9r7IdtQ1F9ttJx41izL8dmw+9/37rj7gHaTgN6zmdmTBqO4MPdJQt6LCXuCB/UrhteCwu/BySqpAbEaYF9Qt/4311TcqPZbie++KOzvbCFv/9/5PZR5zTZVxzoCGSa4pMS+rFwaDHuSVH1hL/fAcX622Gs2+23WyammxC12PGlYspz3wdFlCcFZD1uALDHWC4l6ybzzLWeAopKrkwvtFQnLemle21+kZDBlcJzgjPYQ2A1JLNv+8kPeauAXSjsZK9Hizr+fq56Zd+jBt4iS1crEAvFoZqBJMOiON+DXepXgsJcPwapMVMvQjDOdcCe2fcebHGdvC+UInTRDVyCm4hZw==; 5:8bsieWR8tHkmoi/q5CoxySfAHjWc82KHMn7/DHRh/1bMYdeOeNytZy6Ky1jpgr8CLTU88F/lrowlEZG6BmEG3RdERxWdL+z2lVgadSDsSDtb7IGNUquGBtM+WElHuBDcGzpjJqEpqZsdK+Fj9nzmDRxwDTzty++3sdoovEmAYlA=; 7:5w+425Odx5IlsYcq5gRqIkRAcQPuqboY1kunsAYMEjlMQfTHGTg8EB72Rpkmm51+b0bBPpjj1ZsKkMnliDIJd5za0jPcPbvRiggX5tNtrcfNm/weGiTCnbHp79K/PHfncrrdlA+8C4UDpSgbjM95+Q== x-ms-office365-filtering-correlation-id: 0eb8dcd3-4520-4081-77a6-08d6642867b4 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:BY2PR11MB0504; x-ms-traffictypediagnostic: BY2PR11MB0504: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(3230021)(999002)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(3231475)(944501520)(52105112)(10201501046)(148016)(149066)(150057)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:BY2PR11MB0504; BCL:0; PCL:0; RULEID:; SRVR:BY2PR11MB0504; x-forefront-prvs: 08897B549D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(346002)(366004)(39860400002)(396003)(136003)(199004)(189003)(52116002)(476003)(186003)(106356001)(14454004)(5660300001)(2906002)(97736004)(99286004)(25786009)(86362001)(11346002)(2616005)(71200400001)(71190400001)(6436002)(6486002)(3846002)(6116002)(316002)(110136005)(54906003)(66066001)(486006)(26005)(6512007)(8936002)(81166006)(8676002)(446003)(36756003)(105586002)(102836004)(53936002)(72206003)(81156014)(305945005)(6506007)(76176011)(386003)(68736007)(39060400002)(478600001)(107886003)(7736002)(14444005)(256004)(4326008)(2501003); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR11MB0504; 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: uM8RteFdGqqNYzGs/rlOemQ/OXzaXhISL4UrvulsF64jYxQRXSFX+k6vhIQFN40L9OjKDxLBMpVhHse4+zj4lI4GsXyj59K08fDiLe+rmTjqlNYCBDfOaIV7uJ/PYkpI1GDpPJu63AqaivXUD2OAmTyktjTyBpM5v+SgeYLn8qAFTHC3NehZpXwuERlb7smfvUEXcZ8pZxFLRzra0qFa+8SrH0s8Tlp7CpWZMGh86Ttrcv2JGrVSK3BuWzPe65sTzNpxXhBAkSJD4pZWqBuh5+dtwPQfCJ2bKhogSyM4E/XbttxdkqydiDEyS0qb8mnj spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 0eb8dcd3-4520-4081-77a6-08d6642867b4 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Dec 2018 14:03:22.8320 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR11MB0504 X-OriginatorOrg: microchip.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181217_060326_660238_84B84923 X-CRM114-Status: GOOD ( 13.36 ) 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:03:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Beznea X-Patchwork-Id: 10733521 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 A43B614E2 for ; Mon, 17 Dec 2018 14:04:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 92B04292CE for ; Mon, 17 Dec 2018 14:04:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 86C4829345; Mon, 17 Dec 2018 14:04:45 +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 38367292CE for ; Mon, 17 Dec 2018 14:04:45 +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=K7tpRGDcKF+RbC SsFYaD8atJOJAPTdRjEsgD4hWKUhAeZy5U5FP2xG3sADPYB3np8vHm4yFfy7L7T6xHPx6ieX0FceV 9VVCVq5lIIpDFTRVAKpoY0cXnbN1kztuucAKnbVmhtZfjMn/+Ue8/wO8eW/Z3abXEeHjBhqh+8OBc xArBWi4jxBKQY1CquM0JERutTCSB3HzzCIzhzTGCWeqI9zbAO5k0Sw3pAIV0D35ozCGwkzPU4eK89 evEVMaawIMODtA2i5tnvvSGSJtkja4eVcBXJ/AvWXcExnsmQ+SZk9+flo2b6+VN3z0++Lvf7YmLNY qtZ9zjdJrdvGLJmM6xOg==; 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 1gYtVb-0002F8-Pt; Mon, 17 Dec 2018 14:04:35 +0000 Received: from esa4.microchip.iphmx.com ([68.232.154.123]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gYtUi-0001F2-Nx for linux-arm-kernel@lists.infradead.org; Mon, 17 Dec 2018 14:03:45 +0000 X-IronPort-AV: E=Sophos;i="5.56,365,1539673200"; d="scan'208";a="24021593" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa4.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 17 Dec 2018 07:03:28 -0700 Received: from NAM03-DM3-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.76.105) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 17 Dec 2018 07:03: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=1/jkLcqWaHllnls9ZlExlDdmmrsn65dPM/sYdupYrjU=; b=HzGulEAULaAehAtJPxtvDqYOyHbp6jYdBLx2zqVRxn5j/1FdKUTWqOcafSk+WTaPGdxyPGMCOHtFLHbetVMzgfjlRKmH6ioy/EvOHfEiaEbPm4PDV+RHce4t7hXmjtSRJ/JPRmoLZATrUNXMXivESDdfLaFEKTG6E8XhDybTpi8= Received: from BY2PR11MB0744.namprd11.prod.outlook.com (10.163.112.142) by BY2PR11MB0504.namprd11.prod.outlook.com (10.163.158.26) 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:03:26 +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:03:26 +0000 From: To: , , , , , Subject: [PATCH v6 4/6] pwm: add push-pull mode support Thread-Topic: [PATCH v6 4/6] pwm: add push-pull mode support Thread-Index: AQHUlhFH71mIPc7Zok2Ua+rawUhruA== Date: Mon, 17 Dec 2018 14:03:26 +0000 Message-ID: <1545055368-23338-5-git-send-email-claudiu.beznea@microchip.com> References: <1545055368-23338-1-git-send-email-claudiu.beznea@microchip.com> In-Reply-To: <1545055368-23338-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: CWLP123CA0118.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:5f::34) 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; BY2PR11MB0504; 6:X1izm4E+i6O1t0+SW1I7i+vDcvwQpnROe1pWVKxQI9WowvVME0jFYiVH37Dxmb5pvFyJ19D67RTCvrtjoltKdv3aGguE2TQmkLZWjBiU2TM/VSD2u2lSV4Ttlv3yKekUnxeU0x6nnmb7lIs2CjLylj/Fus3+JWM04oXxUEAnSmPlqARDso2ZyyGhBlpErZMxnXQ93qTy5bGmK6gin29ORb1CzVaNp+jn6jphIATs6skUGyVqgI3d+beyMj9Z1Oxpa/Nw30V9qlXPsUkf8rkbk6p0COSlIK5kY0VTX/t8J4QlgIKKPGMVqsEbK6RkpIzrptX9XAPnUcVGa5Ia03ZCYiFe2IRSwZWJuIxNbpis7riV6NPA1BC53XM6KK7xbLpmKqJtzW4QwDR7r2g0M/PRpiHRod7ii+5LLQgZIW5VAn/mtDrEoIVUto2TRpzKSVyufYZv94NsRQQn20XKVxs55Q==; 5:tYdNsbA5EWm0CM4OOsWu46vctfS1sDi/8sONuB9IhK1EIOspB3PjmkYLtpCng9ZSXtFaacpmR/lpshrHQybZP0zyq9t4Bo4h0tp9D0BglpfKQoGEHDaLQsfZpgsDcRrFDmFu1iHB3DRqj8v2aYy+La2CkbT7b4HZ+qqX6c9kucQ=; 7:5RuYcOdg+5JfTIot+JhbwNvov2f52EAqEO1haoEnbKY0f7Rusya8Fz+Sr1swzZsjVrGmuwDOU0BeF9rhpNSOqq1PahA+Y5/sENdHuCRoWWlHxmNm7JrtvqDcPuvny/p+KbDDtdGP/mBzYzZM8th4RA== x-ms-office365-filtering-correlation-id: 156c415d-aed1-4020-45be-08d6642869ff x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:BY2PR11MB0504; x-ms-traffictypediagnostic: BY2PR11MB0504: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(3230021)(999002)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(3231475)(944501520)(52105112)(10201501046)(148016)(149066)(150057)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:BY2PR11MB0504; BCL:0; PCL:0; RULEID:; SRVR:BY2PR11MB0504; x-forefront-prvs: 08897B549D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(346002)(366004)(39860400002)(396003)(136003)(199004)(189003)(52116002)(476003)(186003)(106356001)(14454004)(5660300001)(2906002)(97736004)(99286004)(25786009)(86362001)(11346002)(2616005)(71200400001)(71190400001)(6436002)(6486002)(3846002)(6116002)(316002)(110136005)(54906003)(66066001)(486006)(26005)(6512007)(8936002)(81166006)(8676002)(446003)(36756003)(105586002)(102836004)(53936002)(72206003)(81156014)(305945005)(6506007)(76176011)(386003)(68736007)(39060400002)(478600001)(107886003)(7736002)(256004)(4326008)(2501003); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR11MB0504; 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: ZDCFF6X1zeXQ3mW1BknhKjX83DERykrBWKLfTM1htRFudbXFkSlkwap41lKscMdDbwnN1wIYhr2rlXohzrFiPBhEXd8Q4EZ/wsRG05IEwPNdVeL8FUoZNmfon9xhYH8aTxgTzBGdzCD4toocwXC16pE5IfNrsCg+E4bXIUHNK+0yGHAZPNp4E7JiA7Od/j9PZ2+78YXb5GpBBZbgQQ/may2iqYIaaMVeOw9o9Hu2sTTvY7zlatUpvpJlehKbe8B/jcuAV3FvOZ3eb+b+LLMVoq+hMksLuKVdzQLwv73a45LI1VLZFyrp65+vpU2urWPE spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 156c415d-aed1-4020-45be-08d6642869ff X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Dec 2018 14:03:26.6537 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR11MB0504 X-OriginatorOrg: microchip.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181217_060341_936070_40ABC5F2 X-CRM114-Status: GOOD ( 10.11 ) 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:03:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Beznea X-Patchwork-Id: 10733523 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 ACCE31399 for ; Mon, 17 Dec 2018 14:04:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 99D0C292CE for ; Mon, 17 Dec 2018 14:04:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8C58429345; Mon, 17 Dec 2018 14:04:56 +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 37C25292CE for ; Mon, 17 Dec 2018 14:04:56 +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=FhJFFGBAOA2FWL HZ44BOdUU0/vmd+mJbUFeVzVBc8EHlznog2Qmec3rM77eTV9i9DAImOwvrqf9Ibcd2MpnwQOxTXlB SM2tGmDhkwyIDJ5ph5J46TdwQsGyK1DiUtW1igVKD/KWKmF3/oUMHLwH/4kmx1C0uAoH7cSo3uhA2 5uFUJi1rKccJ0P7CGbk2+aRdAfzUtfK1xS64mB0M9iIp67IUoUaQDkVDSbM98X3rxCNSnM9W4wSx+ D3YnrA9sC5ckZkbSLS7QhmphEn6hQkyLq5xXe2iMGfUWjXrC3yE1D/LI+PQDCbey6i4pj495QgPzQ PeFkbu3ZfmNvdQdq19oQ==; 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 1gYtVs-0002UO-Nt; Mon, 17 Dec 2018 14:04:52 +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 1gYtUn-0001Jw-4y for linux-arm-kernel@lists.infradead.org; Mon, 17 Dec 2018 14:03:56 +0000 X-IronPort-AV: E=Sophos;i="5.56,365,1539673200"; d="scan'208";a="24310650" 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:03:33 -0700 Received: from NAM02-CY1-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.76.49) with Microsoft SMTP Server (TLS) id 14.3.352.0; Mon, 17 Dec 2018 07:03:33 -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=GvGFdlzQtIkHmEdUkpMWOrJ0+BeD/wMFMiROAEjN+xg1F4Kz74/+RMJ8UYXuDiQQDSXkhhZ6GSlnBZUArc0dDGjRnNhxVEvtkWDlSND4SpDxI9AHfGrTTqNEiwe6KaeLscnyphEWqoINif69504BsFOLkYgyNVBRMtYgbnJd/g8= Received: from BY2PR11MB0744.namprd11.prod.outlook.com (10.163.112.142) by BY2PR11MB0646.namprd11.prod.outlook.com (10.163.159.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1425.22; Mon, 17 Dec 2018 14:03:30 +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:03:30 +0000 From: To: , , , , , Subject: [PATCH v6 5/6] pwm: add documentation for pwm push-pull mode Thread-Topic: [PATCH v6 5/6] pwm: add documentation for pwm push-pull mode Thread-Index: AQHUlhFJC78Tfvz0ZUyNsGfLOQh1Mg== Date: Mon, 17 Dec 2018 14:03:29 +0000 Message-ID: <1545055368-23338-6-git-send-email-claudiu.beznea@microchip.com> References: <1545055368-23338-1-git-send-email-claudiu.beznea@microchip.com> In-Reply-To: <1545055368-23338-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: CWLP123CA0118.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:5f::34) 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; BY2PR11MB0646; 6:MoJTYK90PTeu+3UtJAktL3Wsa+M78TzVHgwJs/0wvNRimsABhHb4qOZrrGKO0sJp5DILwAgIiSQxRECeZZ3wWe/YRCq9GkhY54c4SEGI0qCrEeAmwsoOXAwda+TWAc/pp+zQEJ9rGoU+O9G+J2Gj/iqAS32C9VhaCW46QOxx+BMARI7LysH4h1dF6YunC3L4+Euz5o+ynCovmBtC5bF5Ktr8blkR55xXJjq6SX+fFjjPoOozWs2rsOsvyREiffLH/9jTnYt0UFwFiIaMk16cdBeHXw4Z7l3WLZMmMRXSbZHz1svC3+P+3qMlAX5jOECAQNBuJPxv+WX0kFqiw6MjrSDUmcQtCkTHhjt7yu1ZmoZwDmxYT7yiue/eAf2O29Eaihzxom7Lg6Da0OHSax1KiDubTLNHvP58gEyvucyVPMJggDIxcdzo7QAlAhUWyiOi4Xlnkc9jE56ABNJrTwLdlA==; 5:EDdAtBXD6/sCLah+3aOVh+bjzboVtchD+tHQ1Ku8jrgSRwoC4R/W1iWA1pJ0SR+mGJeaAxqDuGLa7vdhytwV5e4lfMijOKQzEbMDupi0CBKlW4Eb4gtbbmu7nw2FA61V7KAeZ1P8qUNoDvzSAZWl+K+DAhGCyM1gVeq6Zn8Ffq0=; 7:yTs0rR0eZNsWmDdDD4uon69g/13DwES8VdqblnBsrbgL66dKuF8sMHmlzQWNMTAN1CzYIu4W64oeZ8kHKospjxs/Xo4Kqw0IxaYwQfqxszV/AulOj9706/1UP9u5PUYQ0LxinTZc//fw7Q/XEBqtpg== x-ms-office365-filtering-correlation-id: 1b2f6cb0-dd9f-4590-a71a-08d664286c2f x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY2PR11MB0646; x-ms-traffictypediagnostic: BY2PR11MB0646: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(3230021)(999002)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(10201501046)(3231475)(944501520)(52105112)(148016)(149066)(150057)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123558120)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:BY2PR11MB0646; BCL:0; PCL:0; RULEID:; SRVR:BY2PR11MB0646; x-forefront-prvs: 08897B549D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(39860400002)(346002)(376002)(136003)(366004)(189003)(199004)(72206003)(478600001)(53936002)(2906002)(446003)(256004)(8936002)(36756003)(3846002)(6116002)(2616005)(11346002)(107886003)(316002)(110136005)(54906003)(2501003)(14454004)(68736007)(81166006)(4326008)(97736004)(8676002)(39060400002)(305945005)(71190400001)(71200400001)(476003)(186003)(7736002)(25786009)(106356001)(6512007)(66066001)(102836004)(26005)(81156014)(6436002)(386003)(6506007)(76176011)(52116002)(6486002)(5660300001)(99286004)(105586002)(486006)(86362001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR11MB0646; H:BY2PR11MB0744.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: myHa1s9xEVntpSOwCgLdLPT0XAJux7WVRUQyZGcEFOZeh0efFhQuLz5yokiIM7J76Rc0ejMogSn7XLX0qZ5xz6ESXavGDDvze4oGisqjiApB+ANVlvint598QUePAv+FvoGIWNyBB2hyGtuS6jWFiLmqUPLNIzuEDRKsCwtM0kkuXNpBO7fOjcsSHYu0TroNkTAHb5KPjft2Qv/ZQCZdi6eMLD1fwc01/FzwvZvZ7DrrhxQ/Vn62+WIqfhIrRpZf+0h52Toy8SUYGMZQSGoZz82PcIBQY2kKOjqFsZOhikwZH8YcEZJo06KelRAWPnPq spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 1b2f6cb0-dd9f-4590-a71a-08d664286c2f X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Dec 2018 14:03:29.9148 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR11MB0646 X-OriginatorOrg: microchip.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181217_060345_906014_7A60D2B9 X-CRM114-Status: GOOD ( 11.11 ) 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:03:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Beznea X-Patchwork-Id: 10733525 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 77FE81399 for ; Mon, 17 Dec 2018 14:05:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 68050292CE for ; Mon, 17 Dec 2018 14:05:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5BD4429345; Mon, 17 Dec 2018 14:05:14 +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 CA10D293C0 for ; Mon, 17 Dec 2018 14:05:13 +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=Q4z1HJZaMTJXRK XC0Ay+B6qk1CZemgRT5ER/SEVVaR4Ocfgm61UysyewwZSKyO2acvPbuBbk/m73ok4wUWlhjZsOVfS njdUnH+TsArVhQ4ay4P60a9VMopva8CcdrbTzNplJ6GnfBCB/49Va+wdqQk2I0zSNhGUckJc7noJy KV88gKzRg/sxWNAB3G+FkS7z1c/yS9kR7j0TkCzhY9cBQavCj3AKlZtaC59ybFwJpo8gfbykNjNTi Od8DjJqCI34Yj4yszLOU1vBUQu88MGvixNgdpZZBaJ4g9SllDoU9G4O9hgyV/D5CqotCl9EtKreCe e2SNyX4Bl1QY6idI0AbA==; 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 1gYtWB-0003FM-Go; Mon, 17 Dec 2018 14:05:11 +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 1gYtUn-0001WI-DC for linux-arm-kernel@lists.infradead.org; Mon, 17 Dec 2018 14:04:02 +0000 X-IronPort-AV: E=Sophos;i="5.56,365,1539673200"; d="scan'208";a="24310660" 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:03:44 -0700 Received: from NAM04-BN3-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:03:44 -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=rtSYOITj0LGAT6Z2DjbAwbFT5/tepdSKLyhYc0cQj+vK7lQAMyDx9S2IcUacF2ZaKK3LL1B/OzXZT8A9Xl9YOlwcUIzNE8Pb5q9JJcJ7NK3r516xg26ACBhexKCskL+fKBJMDZBKw2d5RGz7T8WpAGS/raHOoVHr5t9lso11niQ= Received: from BY2PR11MB0744.namprd11.prod.outlook.com (10.163.112.142) by BY2PR11MB0646.namprd11.prod.outlook.com (10.163.159.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1425.22; Mon, 17 Dec 2018 14:03:41 +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:03:41 +0000 From: To: , , , , , Subject: [PATCH v6 6/6] pwm: atmel: add push-pull mode support Thread-Topic: [PATCH v6 6/6] pwm: atmel: add push-pull mode support Thread-Index: AQHUlhFQlu0Xw9HO/kiWgX12GBAvAw== Date: Mon, 17 Dec 2018 14:03:41 +0000 Message-ID: <1545055368-23338-7-git-send-email-claudiu.beznea@microchip.com> References: <1545055368-23338-1-git-send-email-claudiu.beznea@microchip.com> In-Reply-To: <1545055368-23338-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: CWLP123CA0118.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:5f::34) 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; BY2PR11MB0646; 6:DBM/QIhWq121EFrupFmO0J7ukDGjWXQpi5EJYKn56VYBJ94m/7LKOIFD2TJ5EDJljzzq3FgRyuq+UAtU4/tL+o74FStdYakwueLn7KKMrkc+CuuCInTPd2iylhj0yP6JG1kithSdeNRM0jlaWQHxVwsAeHQsuSpi/CSFtQFvkWt1uQM9gqnG48Yv74cLmGMVqGGyMQH/XkqIonk091yGK5y0g/ubPUC2zD5btkFyrXeALl0rcuO60ridNxnZg9oyqfyy1rOZJlTcxbdrQqf99o64C+d/+CmE5Y7QTPsQU3Qgsk4/C4zGfBMSBHTerKEnqA8hk5nGfVkyStNAl50w9Js9RRLo9v1reJFoOVUGjPlW0P8r1tGLsURZjzWcbrGzcpLf7lRjvjzB7oGsVesWPA9opPlUmBTRFtNZ3YCLH1VRHbIoPOcVD1ZIMaDDu0Q85NTpauPmNmVPx91sP80AXQ==; 5:+noUaH3eCjxxpzRDk+QwWwJBw8pax0ldXRlwSFQvNn6dNGwcz4/XFRqxjURWgk53EeE7hHIG1eel3FdQjODtEnIoLLuPE1oLEt7OGX3omRX5Ro9eiVJd5U/0EtbPY3cR6ZJhrjtoyw/xkw1ElWfQJ1pHD1sYLK2yFN1JqaCzFeU=; 7:JhUZBb3bv5yW0oJrVg8HqbEqlxHYiMhCvKlW6ttZKy9L/dCJZJD2ElRppD7SpAK49Gces/spmylKB33yZWYa7vNWsigSQlgHSMoVR80fCUvc3fxWGXT6YEdlKAwkisBhYMMTsRz4lv1vEpdBQ8v1Vw== x-ms-office365-filtering-correlation-id: 12ef0c84-5501-4b81-6cdc-08d664287327 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY2PR11MB0646; x-ms-traffictypediagnostic: BY2PR11MB0646: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(3230021)(999002)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(10201501046)(3231475)(944501520)(52105112)(148016)(149066)(150057)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123558120)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:BY2PR11MB0646; BCL:0; PCL:0; RULEID:; SRVR:BY2PR11MB0646; x-forefront-prvs: 08897B549D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(39860400002)(346002)(376002)(136003)(366004)(189003)(199004)(72206003)(478600001)(53936002)(2906002)(446003)(256004)(14444005)(8936002)(36756003)(3846002)(6116002)(2616005)(11346002)(107886003)(316002)(110136005)(54906003)(2501003)(14454004)(68736007)(81166006)(4326008)(97736004)(8676002)(39060400002)(305945005)(71190400001)(71200400001)(476003)(186003)(7736002)(25786009)(106356001)(6512007)(66066001)(102836004)(26005)(81156014)(6436002)(386003)(6506007)(76176011)(52116002)(6486002)(5660300001)(575784001)(99286004)(105586002)(486006)(86362001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR11MB0646; H:BY2PR11MB0744.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: agPynI1t6s2cUd+BVCye79OVqYMiozce8AH+58FfiUEO231lyh/nigAveUiNJDBvE5BQXZBuy3X/EXJkOmvsIN2vMTPjRGeT9dW3aU9Y44SsTq0F9GgBqXeiOuwig1nmGTZsBb6wDeynkpnEKs9LTcR4oLGWWtjc/l/4EHklqnI+/bxMK+EzJr0iCeSsZXPWf8YjCVzCZK/YDDP5jZoVdAJjsimgY3exye2er+81+L5J4xlLZ8JsP98hvS09APe/lio19WCTJaAYzpOMzTmA95PmykQ3ZLD2cIZJBCufEm19VVlrPVMbFQ6fDNMnc0Pi spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 12ef0c84-5501-4b81-6cdc-08d664287327 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Dec 2018 14:03:41.6910 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR11MB0646 X-OriginatorOrg: microchip.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181217_060346_418044_88EBD402 X-CRM114-Status: GOOD ( 12.76 ) 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 */ },