Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp4486426pxf; Tue, 23 Mar 2021 11:46:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyc7M2/NuBEQB4oW4KdfOcbieHmbmpXZ9H5CGEu5ovBxwbULtbeg52gon0TrPLoYGhzpp3j X-Received: by 2002:a05:6402:1a3c:: with SMTP id be28mr5990040edb.125.1616525172438; Tue, 23 Mar 2021 11:46:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616525172; cv=none; d=google.com; s=arc-20160816; b=wkFaVc9FUeJvXc23a3rswsHHLWuQAFBRnf78/wrOmSPqCdqbTvASmoLbVBsEk9NzWQ h84sm3hPcQU47yKTqw8qeXwQM618Yvjiq171X/PBoLGiWrZykSPlezxt0z2fOyn7lpJ4 wITZ6MkA1Imh+CF9HU19AGPFh3y8IjRwQvz39L+0z0KUQoKE1XW2/yj6KE6M6WY5uQuf 3+JaRifPQrSACogsfWwa7QsnF90712uuYLwvjOMbFwFRXJbU1wHYjlmc+q2O6uu9XkZF kJ4eOfBb03qKxWBnuW1mPis7O/5QZFtruaXNJDX+WkBY+F9fKsgusJe+dnJiW/hztNed 0EmQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from; bh=nOClGiF/whF1cu9d4uVESs6JPqTtabYGFjiWV+xsO+0=; b=rI3hpWaGbBwXJUjnLWZF4s+Px7WW4HmX7kfFxOHSWCeKENTYJJwGQz7Inx6QWPXc7G ETg7IkzWL74JE8LjQlF84hTbgluyrNjNbDmAQONRg+1CISNZayNMH1M1UymNd3/aovET izA+5HM79Ho+bRV0W3xD0o7+zz6K+CIgb0pM8OZMyhu9huaab53NHPYO45T0Gbc78gT8 yMQ469e4Zy+ppx0INsevUCCfZeK1V6UyOuNNuN33QEKxwkBZJCSezPWBNx+HTwfM7vYK aNRuGzAmIKm54bgNQutHYQDWA4NW4woWnxtotQuo9/R3vIE+LQAM2dosivA70o/98/Ew YZUg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l25si14227958ejg.664.2021.03.23.11.45.48; Tue, 23 Mar 2021 11:46:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232042AbhCWSoL (ORCPT + 99 others); Tue, 23 Mar 2021 14:44:11 -0400 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:38065 "EHLO alexa-out-sd-01.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232276AbhCWSnx (ORCPT ); Tue, 23 Mar 2021 14:43:53 -0400 Received: from unknown (HELO ironmsg-SD-alpha.qualcomm.com) ([10.53.140.30]) by alexa-out-sd-01.qualcomm.com with ESMTP; 23 Mar 2021 11:43:53 -0700 X-QCInternal: smtphost Received: from gurus-linux.qualcomm.com (HELO gurus-linux.localdomain) ([10.46.162.81]) by ironmsg-SD-alpha.qualcomm.com with ESMTP; 23 Mar 2021 11:43:53 -0700 Received: by gurus-linux.localdomain (Postfix, from userid 383780) id 751DB1A0E; Tue, 23 Mar 2021 11:43:52 -0700 (PDT) From: Guru Das Srinagesh To: Mark Brown , Markus Elfring , Lee Jones , Rob Herring Cc: Bjorn Andersson , Greg KH , Guenter Roeck , Joe Perches , Subbaraman Narayanamurthy , David Collins , Anirudh Ghayal , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Guru Das Srinagesh Subject: [PATCH v4 0/2] Add support for Qualcomm MFD PMIC register layout Date: Tue, 23 Mar 2021 11:43:49 -0700 Message-Id: X-Mailer: git-send-email 2.7.4 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Changes from v3: - Implemented the scheme proposed in my response to Mark in [4]. - Dropped the RFC tag from this patch series as this series has been tested on target with a client driver utilizing these changes. Changes from v2: - Split up framework changes patch for better comprehension. - Dropped PM8008 driver example and converted it into example code in cover letter and commit text. - Added more info in cover letter and commit message as per v2 feedback. This is a follow-up as promised [1] to the earlier attempts [2] [3] to upstream the driver that has been hitherto used to handle IRQs for Qualcomm's PMICs that have multiple on-board peripherals when they are interfaced over the I2C interface. This series is a rewrite of that driver while making use of the regmap-irq framework, which needs some modifications to handle the register layout of Qualcomm's PMICs. This is an RFC because I would like to get feedback on my general approach before submitting as a patch per se. Qualcomm's MFD chips have a top level interrupt status register and sub-irqs (peripherals). When a bit in the main status register goes high, it means that the peripheral corresponding to that bit has an unserviced interrupt. If the bit is not set, this means that the corresponding peripheral does not. The differences between Qualcomm's register layout and what the regmap-irq framework assumes are best described with an example: Suppose that there are three peripherals onboard an MFD chip: MISC, TEMP_ALARM and GPIO01. Each of these peripherals has the following IRQ configuration registers: mask, type and ack. There is a top level interrupt status register and per-peripheral status registers as well (not shown below). The regmap-irq framework expects all similar registers to be at a fixed stride from each other, for each peripheral, as below (with stride = 1). /* All mask registers together */ MISC_INT_MASK 0x1011 TEMP_ALARM_INT_MASK 0x1012 GPIO01_INT_MASK 0x1013 /* All type registers together */ MISC_INT_TYPE 0x2011 TEMP_ALARM_INT_TYPE 0x2012 GPIO01_INT_TYPE 0x2013 /* All ack registers together */ MISC_INT_ACK 0x3011 TEMP_ALARM_INT_ACK 0x3012 GPIO01_INT_ACK 0x3013 In contrast, QCOM's registers are laid out as follows: /* All of MISC peripheral's registers together */ MISC_INT_MASK 0x1011 MISC_INT_TYPE 0x1012 MISC_INT_ACK 0x1013 /* All of TEMP_ALARM peripheral's registers together */ TEMP_ALARM_INT_MASK 0x2011 TEMP_ALARM_INT_TYPE 0x2012 TEMP_ALARM_INT_ACK 0x2013 /* All of GPIO01 peripheral's registers together */ GPIO01_INT_MASK 0x3011 GPIO01_INT_TYPE 0x3012 GPIO01_INT_ACK 0x3013 As is evident, the different IRQ configuration registers are just (0x11, 0x12, 0x13) with offsets of (0x1000, 0x2000 and 0x3000) respectively in QCOM's case. If the *_base registers fed to the struct regmap_irq_chip could be set to the first peripheral (MISC in this example), then through the sub_reg_offsets mechanism, we could add the offsets _to_ the *_base register values to get at the configuration registers for each peripheral. Hopefully this will help when reviewing the changes in this series. [1] https://lore.kernel.org/lkml/20200519185757.GA13992@codeaurora.org/ [2] https://lore.kernel.org/lkml/cover.1588037638.git.gurus@codeaurora.org/ [3] https://lore.kernel.org/lkml/cover.1588115326.git.gurus@codeaurora.org/ [4] https://lore.kernel.org/lkml/20210315203336.GA8977@codeaurora.org/ Guru Das Srinagesh (2): regmap-irq: Introduce virtual regs to handle more config regs regmap-irq: Add driver callback to configure virtual regs drivers/base/regmap/regmap-irq.c | 43 +++++++++++++++++++++++++++++++++++++++- include/linux/regmap.h | 9 +++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project