From patchwork Tue Dec 5 02:17:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Cooks X-Patchwork-Id: 844538 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=opengearcom.onmicrosoft.com header.i=@opengearcom.onmicrosoft.com header.b="TOhWd5FS"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yrQQB1jWPz9s8J for ; Tue, 5 Dec 2017 13:18:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752344AbdLECSI (ORCPT ); Mon, 4 Dec 2017 21:18:08 -0500 Received: from mail-bl2nam02on0073.outbound.protection.outlook.com ([104.47.38.73]:38086 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751756AbdLECSH (ORCPT ); Mon, 4 Dec 2017 21:18:07 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=opengearcom.onmicrosoft.com; s=selector1-opengear-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=b3xufGsn6BQF6c9qb1H60vRzIWMwAeBlqsCgJp2Tu24=; b=TOhWd5FSQJreAae1N7Ez2Axa4q7hC0WawrUadyi8wAK/hub9Gysn/shF6YW0K1jwJGjdtcivXlIaubZ1HsbbxYhVC4VPifGCyRtTfuE/Dn6/HvMGLEmTEllfbrEETTEwibZLr7TiR00ChVWNQK1HwQCiqEs0BIUC2RjhpuGFIlo= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=andrew.cooks@opengear.com; Received: from andrewc.bne.opengear.com (59.167.150.161) by CO2PR15MB0027.namprd15.prod.outlook.com (10.161.86.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.282.5; Tue, 5 Dec 2017 02:18:00 +0000 From: Andrew Cooks To: Linus Walleij , linux-gpio@vger.kernel.org (open list:GPIO SUBSYSTEM), linux-kernel@vger.kernel.org (open list) Cc: platypus-sw@opengear.com, Andrew Cooks Subject: [PATCH] gpio-pca953x: fall back to byte-at-a-time for 24-bit io Date: Tue, 5 Dec 2017 12:17:22 +1000 Message-Id: <1512440242-8983-1-git-send-email-andrew.cooks@opengear.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 X-Originating-IP: [59.167.150.161] X-ClientProxiedBy: SY3PR01CA0108.ausprd01.prod.outlook.com (10.173.248.145) To CO2PR15MB0027.namprd15.prod.outlook.com (10.161.86.142) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5d3f3dd2-68bf-49d6-aa20-08d53b866910 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603286); SRVR:CO2PR15MB0027; X-Microsoft-Exchange-Diagnostics: 1; CO2PR15MB0027; 3:qGTb9CLFn9GK3tDDkjPdyC6eRWo8BjpNnRzcPQ2zdmDQ8eV9jVJLdjPxUJL+bHKRCjNzS0fcyHrwYqP3ZUbs9Bf+04BfGYEcVTVSPRSswjpFLkrj7kcskYmrBcpPdvB+dwjEaLHqtD+iXdLQYf0dJJ7wLyBHwSxdGHlZMeoDX8HN/3bYaBog4WMa7+xg6H+D+pmNg3RQLHvWyQudyj/WGcmeRMnsUnk9OaOFTjRtX7ebam6Np4DruHk1nl5j5G7I; 25:2F+zX4145XNZ3GwCTksiBkYHsj9q0XqbSz34SzzB4TQSw0XeMoQs1m/rEI64jqmzJWCIQUeRRefMhiZHsX6NLaVhsIkEM4BBeaIF2YOHli5gCUgLl77C7lXAGTK4LDKG6pCQOXQDSdNwMc4+bF6wPf9UaG6dFmY/lwsqGUtdJC8uJQ7tyCGnlImhNEYdooM+8+Ub8nYrGBv+oc4/7J6UhIbw+4inzsN0ZLp8jxGdMX3/MKeKsDm6hpALUcM0+5GzB0rIn2Epcx8iXYWrusqZ23l+K6A+L6XeNK9uNQvYQsAmvTjs5SgIaxS6xaJtvkGWDf6jQOKYo69fawjNReo/vg==; 31:BQNe1dVtfx7nHnsAVrMs9XHqnQNPjONSIzzYl+Nuz39RqoYEtmE7+EG/t3bdEDAb9SCDJQrjYEhw7V+babVdM1+YfZw4YzRrvyXeaq8DwWqmk3jtfL+bO86Qp6frE9ZL0Zw+MGzAiAv/menJnrMT8bpKJEi/3mcgsGTRzH5AWAOaQQWspEJJ+mSNu560UgW2+sWAuaO69EWnb5ns3wX6MfrjNpzmzThFBZ4c6d8h4sc= X-MS-TrafficTypeDiagnostic: CO2PR15MB0027: X-Microsoft-Exchange-Diagnostics: 1; CO2PR15MB0027; 20:Y5caXJQmgl9my1LhEH7fzvn+TeLOrtuNBi20bCwYXIXksXwFYpS5uTzv2ZHoTtkXrVgSy0tpKATd2nPoxMZphwrmHf00jGeyIuAL81F1+55+WdMYmDZkJoqI93copMztZe3HEIvdF8xHhv0jjuvprJ4OHGSBYeULOIRSlURd6SA=; 4:tEfnyWUwmnytqe89CkCx0rKzXc4CAiuXnOUOHCTU/RTxNAnD5KmRdcXN5IJFt3FUNNeRWfEr4edm+5jHWgu2szJRC8fu8t3hRtdB+QE2fhcDZ1HE4G7agixuiFGoUxupHRFzKKRPDraWRpc0DA7y7ZdSVkfGk8LGLpIdSUNM3WSl7ViOgvNFexO2ZO14pBZVa6sT81yyjrZwPkA0pcqwyFq293ht51ihPi9Yj0WidSr7WNhqARzRCAVcuPq+c2YnzepjqeTqYNWBddfQ6zjb5A== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(5005006)(8121501046)(3002001)(3231022)(10201501046)(93006095)(93001095)(6041248)(20161123562025)(20161123555025)(20161123560025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(201708071742011); SRVR:CO2PR15MB0027; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:CO2PR15MB0027; X-Forefront-PRVS: 0512CC5201 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(346002)(376002)(366004)(39830400002)(199003)(189002)(48376002)(81166006)(81156014)(189998001)(101416001)(8936002)(50226002)(8676002)(7696005)(7736002)(105586002)(51416003)(47776003)(478600001)(6666003)(86362001)(106356001)(66066001)(33646002)(50466002)(36756003)(5660300001)(6116002)(16526018)(6486002)(52116002)(305945005)(107886003)(53936002)(4326008)(2906002)(97736004)(25786009)(68736007)(16586007)(3846002)(316002)(230783001); DIR:OUT; SFP:1101; SCL:1; SRVR:CO2PR15MB0027; H:andrewc.bne.opengear.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: opengear.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; CO2PR15MB0027; 23:e97uoKl5tOj8Vlf++/aAxXPwNVXrWFGlrCn9qi2+RyPqVKGMmzj9Jujqgvtb7ocNoWS91I/mFT6kqaaNxBmCmWobdHZ1LNH9iTm45+IpQGTtWtgwgBOiLFVm1JPd/MIEeGrhEXL5y/fB2EoF9Nw1JROKmcIewSU/mrLFkSRhm1NyM48SGvP655+nIGG9lzMIRr9VEnpBFcflY3GX41F5fmCnKpz7GHE2G+LTTE/9A2EIMu/yxA398R/uF9vs7HaU3Z9E0QXmOVZmQWMdXywJzvWPf8mcPcnrPZ2l1hNkFJIoqOTj/rRk27kxezhjAw8iyn+BBW6p4GkPumjczJK+PW8cdcxmMokCj44UkDyE5HB1McJjnUrnhMfwiKdDhikF9AcL3DD2yKJJnRJ/oYMW9Z7x5Kn83id8wwMuYB+ceReaMPNz4iSi9fxEchP71RgZLhwy08ahFXBvWAq3bjZBAE8NntmeTEkAUJi8tOujr1U4Yv4CfZAmhCY+0ZqV6KwxIAyWirdvzTc3/q/7fJPXczdJft/1jUkyBd1hOfmE+G4+54dfM5spEOlL5skGNJyYslUeN27uzU1Hz4ItVw1b/r+MO+DCDGFx8c+hHLeF01pY8rdP0yE2DQWdBAKi6kqX6QEyqsDKNCVmVEN/l0ZznpecQ8scthtL/9McOxdruMLIDYVuJowtBrgioxCowykBYKgAIvD2EbwpdTrlBIHMQwi22kcgwi89LEmuS+i3jGwMXKjb9xIR/U2kx4HpdeCJXqq4lBzLHHPDdFRZNqgn1jX3zgN9/yDs5ZAJoXXNPxcqkngjdUI1qr+7EQGbUhRX/mV+BVSKSbTySTCJHWBwnf3VAYD2G6WQkExM+Rc+SY24CXQceoj/3eiOWvl4B6oQ/sjCPLv5ho7RvGxKQDNRH4duBkrt8pr31xVD41YAxruuAa0lFcqxOQ+ipHfnn5339Dlu8dUPZD/qfaWzve0WfQFxLrDhURyNZtStT1Lfp7qUZCNLpU/CRyXJmFmW4hB7vO9g8m0ZLmOHyYv9cBVJprzZDLW0PIw2KShLEDzFSzo= X-Microsoft-Exchange-Diagnostics: 1; CO2PR15MB0027; 6:9v8eoWrEvR5ACuSOmRzQt0tO2GVGP2oZmOYAk/fkQalxjLhAsMM64zqu9/JJoYsdp5fd3JLN2rfSIJ9J4xV2Ys6e2P9fWgxsOG5/thC4POlj9EbByWloiCIUS5tCYej2/dAOcK4TX5qjJzeDzJdEaQ6bhTugOwmAB4L7BeAZ1P4QVbyQjNGS+Phok0kAkx0v185nnSjON2nu/MhGng61yvQnmtatrJO8GIGWtogt1lXKteIJB2EIjfCdb33PD47j6phOh1B22oEyh2v/FCKQZKc71uq4LPOLnVlbEzXGveE9twh8lLfSOeKltd+MxY6GEVyT94iYBZpzyIZS5WqBSmEAIXGgdmLjdJZRdNYwmKg=; 5:NZhrhgvxsHUn2gz9mnW+ru250IiLL6chylF0W1rBGvvAgtvp3QwMgTuk8vqswSkljkGZYpeCPbPYWfiX3mKVw1dKQWvlsQAKu8CI+yEh9fNwLv4ExQW0WuGzZoBClVcWbkiqkqwqJqwwAkL6ENkMuJ8EHajw3/2bDta4M/eWq2Y=; 24:KTj9RMpydJFhxVedM2V4PgWzKR+Hi3lO+5srcNhtqN13qfY9q/vCN79MdO8hso2saBTzUgqCGiWZHoE+fcL2Tw/9UwyYcBq4+PgeuixpbIc=; 7:K0+2iwFPsV2lVGaSN0DFazjN8P7pU22QLS5yZcU/eTMJsUCiNhCXMAWmZFs1DQbp3XlnKncBmqDOHpSCfxBXLq4aBShPP0j141iO/8Ae3Opp9Vx1Xfq+PR0W5oALpSo3CfVRaSoNMoK9jGoPsbtGR7Yu8UcZwh5Vxk3xJuilpDffNrE9AX/+i80gW6v7p+yyYH3JJjAX+oSx/TJ6mTz5WoViJaazIrjTxWcpB8eB3utqmt8hHEnwDqmNFF8jyxgj SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: opengear.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Dec 2017 02:18:00.4180 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5d3f3dd2-68bf-49d6-aa20-08d53b866910 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a6251c26-d21f-4164-a225-1f4eaebf5f9a X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO2PR15MB0027 Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org Using TCA6424A with i2c-piix4 bus driver requires byte-at-a-time IO, because the i2c-piix4 driver (and probably some SMBus controllers) don't support I2C_SMBUS_I2C_BLOCK_DATA. Signed-off-by: Andrew Cooks --- drivers/gpio/gpio-pca953x.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c index 1b9dbf6..9e74934 100644 --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c @@ -205,11 +205,23 @@ static int pca957x_write_regs_16(struct pca953x_chip *chip, int reg, u8 *val) static int pca953x_write_regs_24(struct pca953x_chip *chip, int reg, u8 *val) { + int ret, i; int bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); - return i2c_smbus_write_i2c_block_data(chip->client, + if (i2c_check_functionality(chip->client->adapter, + I2C_FUNC_SMBUS_WRITE_I2C_BLOCK)) { + return i2c_smbus_write_i2c_block_data(chip->client, (reg << bank_shift) | REG_ADDR_AI, NBANK(chip), val); + } else { + for (i = 0; i < NBANK(chip); i++) { + ret = i2c_smbus_write_byte_data(chip->client, + (reg << 1) + i, val[i]); + if (ret < 0) + return ret; + } + return ret; + } } static int pca953x_write_regs(struct pca953x_chip *chip, int reg, u8 *val) @@ -249,7 +261,7 @@ 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); - return i2c_smbus_read_i2c_block_data(chip->client, + return i2c_smbus_read_i2c_block_data_or_emulated(chip->client, (reg << bank_shift) | REG_ADDR_AI, NBANK(chip), val); }