From patchwork Fri Apr 10 18:58:50 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Richardson X-Patchwork-Id: 460194 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 74D9614009B for ; Sat, 11 Apr 2015 04:57:58 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753730AbbDJS4m (ORCPT ); Fri, 10 Apr 2015 14:56:42 -0400 Received: from mail-gw1-out.broadcom.com ([216.31.210.62]:5493 "EHLO mail-gw1-out.broadcom.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750876AbbDJS4l (ORCPT ); Fri, 10 Apr 2015 14:56:41 -0400 X-IronPort-AV: E=Sophos;i="5.11,558,1422950400"; d="scan'208";a="61970182" Received: from irvexchcas08.broadcom.com (HELO IRVEXCHCAS08.corp.ad.broadcom.com) ([10.9.208.57]) by mail-gw1-out.broadcom.com with ESMTP; 10 Apr 2015 12:15:03 -0700 Received: from IRVEXCHSMTP2.corp.ad.broadcom.com (10.9.207.52) by IRVEXCHCAS08.corp.ad.broadcom.com (10.9.208.57) with Microsoft SMTP Server (TLS) id 14.3.174.1; Fri, 10 Apr 2015 11:56:39 -0700 Received: from mail-irva-13.broadcom.com (10.10.10.20) by IRVEXCHSMTP2.corp.ad.broadcom.com (10.9.207.52) with Microsoft SMTP Server id 14.3.174.1; Fri, 10 Apr 2015 11:56:38 -0700 Received: from lbrmn-lnxub108.corp.ad.broadcom.com (unknown [10.136.4.151]) by mail-irva-13.broadcom.com (Postfix) with ESMTP id 3134040FE8; Fri, 10 Apr 2015 11:55:11 -0700 (PDT) From: Jonathan Richardson To: Tim Kryger , Dmitry Torokhov , Anatol Pomazau , Arun Ramamurthy , Thierry Reding CC: Scott Branden , Jonathan Richardson , bcm-kernel-feedback-list , , Subject: [PATCH v6 1/4] drivers: pwm: core: Add pwmchip_add_inversed Date: Fri, 10 Apr 2015 11:58:50 -0700 Message-ID: <1428692333-14400-2-git-send-email-jonathar@broadcom.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1428692333-14400-1-git-send-email-jonathar@broadcom.com> References: <1428692333-14400-1-git-send-email-jonathar@broadcom.com> MIME-Version: 1.0 Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org From: Tim Kryger Add a new function to register a PWM chip with channels that have their initial polarity as inversed. This benefits drivers of controllers that by default operate with inversed polarity by removing the need to modify the polarity during initialization. Signed-off-by: Tim Kryger Signed-off-by: Jonathan Richardson --- drivers/pwm/core.c | 36 ++++++++++++++++++++++++++++-------- include/linux/pwm.h | 6 ++++++ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index 810aef3..c0a550b 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -222,14 +222,8 @@ void *pwm_get_chip_data(struct pwm_device *pwm) } EXPORT_SYMBOL_GPL(pwm_get_chip_data); -/** - * pwmchip_add() - register a new PWM chip - * @chip: the PWM chip to add - * - * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base - * will be used. - */ -int pwmchip_add(struct pwm_chip *chip) +static int pwmchip_add_with_polarity(struct pwm_chip *chip, + enum pwm_polarity polarity) { struct pwm_device *pwm; unsigned int i; @@ -259,6 +253,7 @@ int pwmchip_add(struct pwm_chip *chip) pwm->chip = chip; pwm->pwm = chip->base + i; pwm->hwpwm = i; + pwm->polarity = polarity; radix_tree_insert(&pwm_tree, pwm->pwm, pwm); } @@ -279,9 +274,34 @@ out: mutex_unlock(&pwm_lock); return ret; } + +/** + * pwmchip_add() - register a new PWM chip + * @chip: the PWM chip to add + * + * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base + * will be used. The initial polarity for all channels is normal. + */ +int pwmchip_add(struct pwm_chip *chip) +{ + return pwmchip_add_with_polarity(chip, PWM_POLARITY_NORMAL); +} EXPORT_SYMBOL_GPL(pwmchip_add); /** + * pwmchip_add_inversed() - register a new PWM chip + * @chip: the PWM chip to add + * + * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base + * will be used. The initial polarity for all channels is inversed. + */ +int pwmchip_add_inversed(struct pwm_chip *chip) +{ + return pwmchip_add_with_polarity(chip, PWM_POLARITY_INVERSED); +} +EXPORT_SYMBOL_GPL(pwmchip_add_inversed); + +/** * pwmchip_remove() - remove a PWM chip * @chip: the PWM chip to remove * diff --git a/include/linux/pwm.h b/include/linux/pwm.h index e90628c..358547f 100644 --- a/include/linux/pwm.h +++ b/include/linux/pwm.h @@ -183,6 +183,7 @@ int pwm_set_chip_data(struct pwm_device *pwm, void *data); void *pwm_get_chip_data(struct pwm_device *pwm); int pwmchip_add(struct pwm_chip *chip); +int pwmchip_add_inversed(struct pwm_chip *chip); int pwmchip_remove(struct pwm_chip *chip); struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip, unsigned int index, @@ -217,6 +218,11 @@ static inline int pwmchip_add(struct pwm_chip *chip) return -EINVAL; } +static inline int pwmchip_add_inversed(struct pwm_chip *chip) +{ + return -EINVAL; +} + static inline int pwmchip_remove(struct pwm_chip *chip) { return -EINVAL;