Received: by 10.213.65.68 with SMTP id h4csp4099107imn; Tue, 10 Apr 2018 09:12:45 -0700 (PDT) X-Google-Smtp-Source: AIpwx48oM8wdIm9Ngx2qG67KyXfwsJpKOLFd2JCUlBumaZaJd+9naT4jLsVYHMIGst2CCJXQvdB+ X-Received: by 2002:a17:902:4481:: with SMTP id l1-v6mr1106295pld.43.1523376765285; Tue, 10 Apr 2018 09:12:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523376765; cv=none; d=google.com; s=arc-20160816; b=oWm3JDmoQyQeMQ6Fs/51o4hKuyYRWaRTMe846hHIEus5zQbpXoBJ5lI5NgrFqZ8Bs2 d2FU87P3BdtWn1IT3Ha5bL4v/eB9mwJP9cb33fP4xyZycIlk4e0wCle01WIQgLElUAtI RcwgcgJ1T8d4vQ2jM/14t+UjSMjPOR6CV7G07fo3Lp/HYALrzGZ19LJo7ovSCrCzxpDA rC48QgOOgVWywgVzG6QREgJzBJEfg6uBJc9DBxlIiLjZefpM2/UsHxUKGf0lIHW5ivOO vNp+5tLl8OyrvmubTEjVTaLB+n1UZzMtio2MRvyWRiF2FbypwycVloKkAqDwE2CAPSKL TY5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=Q0rJ7SYcy14Y0EInEUvwgKcTVcgkk4XAbI2wbJ3HmNY=; b=WbTvsTtfJ8qJik5VQzej0FhFS4shdZlmdaQwqpr1eb86VIwikGtZPVAcNVQutaarFe ULt/EPNE1JOCBuEJNbQ2MaBMJ2l08QxVJJti+tfAmygR24XvvU8m7mpKZnfcfG2RHWlP HHUbDhOZMMdWNHHAFDyuR68FKBv6L+3poSFOH4EGCruFgpZoJigKtV1foPo76lK7Of/e dXYd8TTLEpxEvWpWbveTUwwNLFr2bTTyc4gY53BVK4BO45paJyENRveNObYYM3aRbHqy ovnwoyneGznym/pjpphkv8B7U7Z6dNfx1bjDLaLpZtjqBIrWqbKlKBVvJV8tDY+DcuA1 ZUbQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@goldelico.com header.s=strato-dkim-0002 header.b=IE3vGgtz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d90-v6si2950397pld.515.2018.04.10.09.12.07; Tue, 10 Apr 2018 09:12:45 -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; Authentication-Results: mx.google.com; dkim=fail header.i=@goldelico.com header.s=strato-dkim-0002 header.b=IE3vGgtz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752041AbeDJQHS (ORCPT + 99 others); Tue, 10 Apr 2018 12:07:18 -0400 Received: from mo4-p02-ob.smtp.rzone.de ([81.169.146.168]:16076 "EHLO mo4-p02-ob.smtp.rzone.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751946AbeDJQHP (ORCPT ); Tue, 10 Apr 2018 12:07:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1523376433; s=strato-dkim-0002; d=goldelico.com; h=References:In-Reply-To:References:In-Reply-To:Message-Id:Date: Subject:Cc:To:From:X-RZG-CLASS-ID:X-RZG-AUTH:From:Subject:Sender; bh=Q0rJ7SYcy14Y0EInEUvwgKcTVcgkk4XAbI2wbJ3HmNY=; b=IE3vGgtzQuc/FPwD32XLyz7vOV3Dv83wtbnOS16Hef0jzXh4o1MOCOZA4HqKH826re 8Sz7FfNfab7W3DTvbuOFv7wMBc7budyxOBgwDDXqp9fElqzFNvWFsnxg9C1eTkacL3F6 Jn4d4cSS+ThWRHmry2YG9dEMPsDlDTzs3JQwG2497yFt3qIEG/6XqG/eW0v9xSN8b2ir rNvrwJOHnf0dHlgQ/YuGorygmcMtR2df1lGniTi9d9ExskcoeNMkiyiUEnanJ7TzHjjF U9wIwJvnScmi4JgBIEPEPdqg1uBLWc18HWltCaM4oLsi8mXn5McHSmnWgmdZHyFcOCCc qRYw== X-RZG-AUTH: :JGIXVUS7cutRB/49FwqZ7WcJeFKiMhflhwDubTJ9o12DNO4Ij0NfySCnhA== X-RZG-CLASS-ID: mo00 Received: from localhost.localdomain by smtp.strato.de (RZmta 43.2 DYNA|AUTH) with ESMTPSA id i04eeeu3AG760nz (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA)) (Client did not present a certificate); Tue, 10 Apr 2018 18:07:06 +0200 (CEST) From: "H. Nikolaus Schaller" To: galak@codeaurora.org, andy.shevchenko@gmail.com, Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Linus Walleij , Alexandre Courbot Cc: devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, letux-kernel@openphoenux.org, kernel@pyra-handheld.com, "H. Nikolaus Schaller" Subject: [PATCH v3 2/4] gpio: pca953x: add register definitions for pcal6524 and fix address calculation Date: Tue, 10 Apr 2018 18:07:02 +0200 Message-Id: <0e9bea79eae7504e61fabdb4a0311f8fdc2f6b25.1523376423.git.hns@goldelico.com> X-Mailer: git-send-email 2.12.2 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PCAL chips ("L" seems to stand for "latched") have additional registers starting at address 0x40 to control the latches, interrupt mask, pull-up and pull down etc. The constants are so far defined in a way that they fit for the pcal9555a when shifted by the number of banks, i.e. multiplied by 2. Now the pcal6524 has 3 banks which means the relative offset must be multiplied by 4 which gives a wrong result if not done carefully, since the base offset is already included in the offset. For the basic registers shared with all pca93xx/tca64xx chips there is no such offset. Therefore, we add code to adjust the register number for exended registers to the 24 bit accessor functions. And we add additional register offset constants (not yet used by the driver code) which are specific to the pcal6524. Signed-off-by: H. Nikolaus Schaller --- drivers/gpio/gpio-pca953x.c | 50 ++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c index 4a075619b93e..022307d328ff 100644 --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c @@ -25,25 +25,35 @@ #include -#define PCA953X_INPUT 0 -#define PCA953X_OUTPUT 1 -#define PCA953X_INVERT 2 -#define PCA953X_DIRECTION 3 +#define PCA953X_INPUT 0x0 +#define PCA953X_OUTPUT 0x1 +#define PCA953X_INVERT 0x2 +#define PCA953X_DIRECTION 0x3 #define REG_ADDR_AI 0x80 -#define PCA957X_IN 0 -#define PCA957X_INVRT 1 -#define PCA957X_BKEN 2 -#define PCA957X_PUPD 3 -#define PCA957X_CFG 4 -#define PCA957X_OUT 5 -#define PCA957X_MSK 6 -#define PCA957X_INTS 7 - -#define PCAL953X_IN_LATCH 34 -#define PCAL953X_INT_MASK 37 -#define PCAL953X_INT_STAT 38 +#define PCA957X_IN 0x00 +#define PCA957X_INVRT 0x01 +#define PCA957X_BKEN 0x02 +#define PCA957X_PUPD 0x03 +#define PCA957X_CFG 0x04 +#define PCA957X_OUT 0x05 +#define PCA957X_MSK 0x06 +#define PCA957X_INTS 0x07 + +#define PCAL953X_OUT_STRENGTH 0x20 +#define PCAL953X_IN_LATCH 0x22 +#define PCAL953X_PULL_EN 0x23 +#define PCAL953X_PULL_SEL 0x24 +#define PCAL953X_INT_MASK 0x25 +#define PCAL953X_INT_STAT 0x26 +#define PCAL953X_OUT_CONF 0x27 + +#define PCAL6524_INT_EDGE 0x28 +#define PCAL6524_INT_CLR 0x2a +#define PCAL6524_IN_STATUS 0x2b +#define PCAL6524_OUT_INDCONF 0x2c +#define PCAL6524_DEBOUNCE 0x2d #define PCA_GPIO_MASK 0x00FF #define PCA_INT 0x0100 @@ -208,6 +218,10 @@ static int pca953x_write_regs_24(struct pca953x_chip *chip, int reg, u8 *val) { int bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); + /* adjust register address for pcal6524 */ + if (reg >= PCAL953X_OUT_STRENGTH) + reg -= PCAL953X_OUT_STRENGTH >> 1; + return i2c_smbus_write_i2c_block_data(chip->client, (reg << bank_shift) | REG_ADDR_AI, NBANK(chip), val); @@ -250,6 +264,10 @@ static int pca953x_read_regs_24(struct pca953x_chip *chip, int reg, u8 *val) { int bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); + /* adjust register address for pcal6524 */ + if (reg >= PCAL953X_OUT_STRENGTH) + reg -= PCAL953X_OUT_STRENGTH >> 1; + return i2c_smbus_read_i2c_block_data(chip->client, (reg << bank_shift) | REG_ADDR_AI, NBANK(chip), val); -- 2.12.2