From patchwork Wed Jul 8 12:26:31 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vaibhav Hiremath X-Patchwork-Id: 50876 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-wi0-f197.google.com (mail-wi0-f197.google.com [209.85.212.197]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 0D7DE22A03 for ; Wed, 8 Jul 2015 12:30:40 +0000 (UTC) Received: by wifm2 with SMTP id m2sf29991337wif.1 for ; Wed, 08 Jul 2015 05:30:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:cc:subject :date:message-id:in-reply-to:references:sender:precedence:list-id :x-original-sender:x-original-authentication-results:mailing-list :list-post:list-help:list-archive:list-unsubscribe; bh=+OiBrA80bCLO89NAe/pSYKe1iC7L18uHOfb0f1DuwCs=; b=KG0vP4cTs3A9Yk9YdU88chHMe1WVo7rMxp7b8bVSj4RYR/zBKdYYFh3NCNU+T7gzPf T1ZYuc24Aw82au5pMSoTchm50pXQRaYjlRulTnKJvPvrWV6aYVbvUdTDRHKq7LP8JphH iLODJkCcLM0vzQsK9E6fGmzaeg0UPUNPfW43akzKGxffn6NdOIbDPiWDGIO0JJPfMtQn LtjL89katdnC7AZj6IIi1OX7vrYcYhz2cLfZPMsq2u0E09ijosiVLRXoX0bOz7POGPe2 /9sb2fgO/h7QmG5I8Se92WHlXWZ+YT3yS6N+EbS6GaamYP1fzqwHwAPZyNyANGKfT9YJ HUIQ== X-Gm-Message-State: ALoCoQl25DsLquXN+Nfob4pMcufYd3xESYRjXPS3JA53Iiv6o/D956ELki9nGJC19m+gjS/GUNjp X-Received: by 10.112.13.200 with SMTP id j8mr4833817lbc.14.1436358639233; Wed, 08 Jul 2015 05:30:39 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.37.133 with SMTP id y5ls941886laj.19.gmail; Wed, 08 Jul 2015 05:30:39 -0700 (PDT) X-Received: by 10.112.124.71 with SMTP id mg7mr9195027lbb.38.1436358639048; Wed, 08 Jul 2015 05:30:39 -0700 (PDT) Received: from mail-la0-f54.google.com (mail-la0-f54.google.com. [209.85.215.54]) by mx.google.com with ESMTPS id ya4si1846933lbb.113.2015.07.08.05.30.38 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 08 Jul 2015 05:30:39 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.54 as permitted sender) client-ip=209.85.215.54; Received: by laar3 with SMTP id r3so224716232laa.0 for ; Wed, 08 Jul 2015 05:30:38 -0700 (PDT) X-Received: by 10.112.42.50 with SMTP id k18mr8518727lbl.76.1436358638878; Wed, 08 Jul 2015 05:30:38 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.108.230 with SMTP id hn6csp3060499lbb; Wed, 8 Jul 2015 05:30:37 -0700 (PDT) X-Received: by 10.68.167.197 with SMTP id zq5mr20074181pbb.85.1436358637016; Wed, 08 Jul 2015 05:30:37 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id et9si3841309pac.230.2015.07.08.05.30.35; Wed, 08 Jul 2015 05:30:37 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758547AbbGHM34 (ORCPT + 29 others); Wed, 8 Jul 2015 08:29:56 -0400 Received: from mail-pa0-f54.google.com ([209.85.220.54]:35060 "EHLO mail-pa0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758506AbbGHM3w (ORCPT ); Wed, 8 Jul 2015 08:29:52 -0400 Received: by pactm7 with SMTP id tm7so131156023pac.2 for ; Wed, 08 Jul 2015 05:29:51 -0700 (PDT) X-Received: by 10.68.250.194 with SMTP id ze2mr20352605pbc.24.1436358591572; Wed, 08 Jul 2015 05:29:51 -0700 (PDT) Received: from localhost.localdomain ([202.62.93.138]) by smtp.gmail.com with ESMTPSA id db1sm2415741pdb.50.2015.07.08.05.29.45 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 08 Jul 2015 05:29:49 -0700 (PDT) From: Vaibhav Hiremath To: linux-arm-kernel@lists.infradead.org Cc: Vaibhav Hiremath , Zhao Ye , Samuel Ortiz , Lee Jones , linux-kernel@vger.kernel.org (open list) Subject: [PATCH-v6 5/6] mfd: 88pm800: Set default interrupt clear method Date: Wed, 8 Jul 2015 17:56:31 +0530 Message-Id: <1436358392-15449-6-git-send-email-vaibhav.hiremath@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1436358392-15449-1-git-send-email-vaibhav.hiremath@linaro.org> References: <1436358392-15449-1-git-send-email-vaibhav.hiremath@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: vaibhav.hiremath@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.54 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , As per the spec, bit 1 (INT_CLEAR_MODE) of reg addr 0xe (page 0) controls the method of clearing interrupt status of 88pm800 family of devices; 0: clear on read 1: clear on write If pdata is not coming from board file, then set the default irq clear method to "irq clear on write" Also, as suggested by "Lee Jones" renaming variable field to appropriate name and removed unnecessary field pm80x_chip.irq_mode, using platform_data.irq_clr_method. Signed-off-by: Zhao Ye Signed-off-by: Vaibhav Hiremath Reviewed-by: Krzysztof Kozlowski --- drivers/mfd/88pm800.c | 15 ++++++++++----- include/linux/mfd/88pm80x.h | 9 +++++++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/drivers/mfd/88pm800.c b/drivers/mfd/88pm800.c index 074ba8b..95c8ad4 100644 --- a/drivers/mfd/88pm800.c +++ b/drivers/mfd/88pm800.c @@ -347,8 +347,9 @@ static int device_regulator_init(struct pm80x_chip *chip) static int device_irq_init_800(struct pm80x_chip *chip) { struct regmap *map = chip->regmap; + struct pm80x_platform_data *pdata = dev_get_platdata(chip->dev); unsigned long flags = IRQF_ONESHOT; - int data, mask, ret = -EINVAL; + int irq_clr_mode, mask, ret = -EINVAL; if (!map || !chip->irq) { dev_err(chip->dev, "incorrect parameters\n"); @@ -356,15 +357,16 @@ static int device_irq_init_800(struct pm80x_chip *chip) } /* - * irq_mode defines the way of clearing interrupt. it's read-clear by - * default. + * irq_clr_on_wr defines the way of clearing interrupt by + * read/write(0/1). It's read-clear by default. */ mask = PM800_WAKEUP2_INV_INT | PM800_WAKEUP2_INT_CLEAR | PM800_WAKEUP2_INT_MASK; - data = PM800_WAKEUP2_INT_CLEAR; - ret = regmap_update_bits(map, PM800_WAKEUP2, mask, data); + irq_clr_mode = pdata->irq_clr_method == PM800_IRQ_CLR_ON_WRITE ? + PM800_WAKEUP2_INT_WRITE_CLEAR : PM800_WAKEUP2_INT_READ_CLEAR; + ret = regmap_update_bits(map, PM800_WAKEUP2, mask, irq_clr_mode); if (ret < 0) goto out; @@ -541,6 +543,9 @@ static int pm800_probe(struct i2c_client *client, /* Ensure we only alloc platform data once */ client->dev.platform_data = pdata; + + /* by default, set irq clear method on write */ + pdata->irq_clr_method = PM800_IRQ_CLR_ON_WRITE; } ret = pm80x_init(client); diff --git a/include/linux/mfd/88pm80x.h b/include/linux/mfd/88pm80x.h index 8fcad63..9c5773b 100644 --- a/include/linux/mfd/88pm80x.h +++ b/include/linux/mfd/88pm80x.h @@ -77,6 +77,8 @@ enum { #define PM800_WAKEUP2 (0x0E) #define PM800_WAKEUP2_INV_INT BIT(0) #define PM800_WAKEUP2_INT_CLEAR BIT(1) +#define PM800_WAKEUP2_INT_READ_CLEAR (0 << 1) +#define PM800_WAKEUP2_INT_WRITE_CLEAR (1 << 1) #define PM800_WAKEUP2_INT_MASK BIT(2) #define PM800_POWER_UP_LOG (0x10) @@ -300,11 +302,14 @@ struct pm80x_chip { struct regmap_irq_chip_data *irq_data; int type; int irq; - int irq_mode; unsigned long wu_flag; spinlock_t lock; }; +/* Used by irq_clr_method */ +#define PM800_IRQ_CLR_ON_READ 0 +#define PM800_IRQ_CLR_ON_WRITE 1 + struct pm80x_platform_data { struct pm80x_rtc_pdata *rtc; /* @@ -315,7 +320,7 @@ struct pm80x_platform_data { */ struct regulator_init_data *regulators[PM800_ID_RG_MAX]; unsigned int num_regulators; - int irq_mode; /* Clear interrupt by read/write(0/1) */ + bool irq_clr_method; /* Clear interrupt by read/write(0/1) */ int batt_det; /* enable/disable */ int (*plat_config)(struct pm80x_chip *chip, struct pm80x_platform_data *pdata);