From patchwork Mon Dec 18 17:45:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrian Fiergolski X-Patchwork-Id: 850217 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-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=cern.onmicrosoft.com header.i=@cern.onmicrosoft.com header.b="jqBMhEl+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3z0pNT0tF5z9s7m for ; Tue, 19 Dec 2017 04:45:42 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934669AbdLRRp0 (ORCPT ); Mon, 18 Dec 2017 12:45:26 -0500 Received: from mail-db5eur01on0040.outbound.protection.outlook.com ([104.47.2.40]:35634 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934614AbdLRRpV (ORCPT ); Mon, 18 Dec 2017 12:45:21 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cern.onmicrosoft.com; s=selector1-cern-ch; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=LruZ5VIbfsL0NqhCQfrybXunvxAidOQg9EG5fA9WSaU=; b=jqBMhEl+ywAajaBVei1YRQeT70JClIT2FcOzIt4YnHdqbPY7d9D+Md0Ss+QycYEqPsXJkIypnGSWRd9pTyRUllGYEK/j2CSoX14iGzVK9+7YDH/Pk7AvZFRusgd5nlPqrQpYRWbFFXuAAWGUqsKkhSYI8nFsyz9Wm0OF0UghElU= Received: from DB6PR06CA0009.eurprd06.prod.outlook.com (2603:10a6:6:1::22) by VI1PR0601MB1917.eurprd06.prod.outlook.com (2a01:111:e400:c544::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.323.15; Mon, 18 Dec 2017 17:45:17 +0000 Received: from VE1EUR02FT026.eop-EUR02.prod.protection.outlook.com (2a01:111:f400:7e06::201) by DB6PR06CA0009.outlook.office365.com (2603:10a6:6:1::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.323.15 via Frontend Transport; Mon, 18 Dec 2017 17:45:17 +0000 Authentication-Results: spf=pass (sender IP is 188.184.36.48) smtp.mailfrom=cern.ch; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=bestguesspass action=none header.from=cern.ch; Received-SPF: Pass (protection.outlook.com: domain of cern.ch designates 188.184.36.48 as permitted sender) receiver=protection.outlook.com; client-ip=188.184.36.48; helo=cernmxgwlb4.cern.ch; Received: from cernmxgwlb4.cern.ch (188.184.36.48) by VE1EUR02FT026.mail.protection.outlook.com (10.152.12.77) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.302.6 via Frontend Transport; Mon, 18 Dec 2017 17:45:17 +0000 Received: from cernfe02.cern.ch (188.184.36.47) by cernmxgwlb4.cern.ch (188.184.36.48) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 18 Dec 2017 18:45:16 +0100 Received: from adrian-laptop.cern.ch (128.141.234.113) by smtp.cern.ch (188.184.36.52) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 18 Dec 2017 18:45:17 +0100 From: Adrian Fiergolski To: CC: , , , Adrian Fiergolski Subject: [PATCH v6] i2c: Add support for NXP PCA984x family. Date: Mon, 18 Dec 2017 18:45:06 +0100 Message-ID: <20171218174506.20543-1-adrian.fiergolski@cern.ch> X-Mailer: git-send-email 2.14.1 In-Reply-To: <07bf7aae-59ab-cb2b-dcb0-95ec2de66633@axentia.se> References: <07bf7aae-59ab-cb2b-dcb0-95ec2de66633@axentia.se> MIME-Version: 1.0 X-Originating-IP: [128.141.234.113] X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:188.184.36.48; IPV:NLI; CTRY:CH; EFV:NLI; SFV:NSPM; SFS:(10009020)(376002)(39860400002)(396003)(346002)(2980300002)(438002)(199004)(189003)(74482002)(4326008)(7636002)(7736002)(246002)(6666003)(305945005)(53416004)(50226002)(356003)(107886003)(478600001)(72206003)(16526018)(8936002)(86362001)(6116002)(47776003)(76176011)(50466002)(316002)(3846002)(36756003)(2351001)(2950100002)(7696005)(48376002)(6916009)(51416003)(1076002)(575784001)(786003)(16586007)(54906003)(106002)(5660300001)(2906002)(8676002)(106466001)(66066001); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0601MB1917; H:cernmxgwlb4.cern.ch; FPR:; SPF:Pass; PTR:cernmx12.cern.ch; A:1; MX:1; LANG:en; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fabf516c-fb51-4a46-3cd3-08d5463f19d8 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(5600026)(4604075)(4608076)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603307); SRVR:VI1PR0601MB1917; X-MS-TrafficTypeDiagnostic: VI1PR0601MB1917: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0601MB1917; 20:kSfH10txdTFVOAT2PoPh+JJm+oN5mGw+WHKzvyihTkNvyyg7pwhifVBEcBSvZBUwbdSCnHKX6mYvte5FJiEYP7ukeace1kfXaCl6Z8hdAGGYdqEBoKnllQCOKOXjG8YjTls3VHZOPFaIi++Xq/Y7SRc9IKSrkGBuhi2QmlS/9T/8XFqF8xqmYdScyNIPv2j42UpMYRv886UYerXW+NXNHibp8MWJ6RS4wGWkvsgqZ7LrkWMRqEQN0EBaaaZROLbnAlp/QKED1AfnMVZtkPObwyXZ23FKtHEjlzdtHo7Nnum73Q2xUbDYw7MQGY6WPjkR2OJ9GIxdX+tdooOMfsvc+Nt0jlBF7Lv6FBjOpXF0yNIqavU+ltVFYs+r0/J+TqmZMsrB3IqA4aLMe/wkR3gVZnrNJbId2gVTWghc2uaNz9LIUfHvNUKY70vE2AjEl8yWvghkAhYeXwIBKG4EvHzWc7F8rdctFnUYyYqW+/5kGtjjOnCxkf7vonN8RMJJzd/k; 4:FxXbMP9pIV2UOvU2UCeXT8b8M9nRh8W1y8zNfr89NBTeyRke5FmK7Z9cOUd7Jp+CTKuCHproUMZzLo2hnkxZRJsWyTjgUIh+AauCSpDPoXcFWA9JSVKlDSxQ5Tu4LpewbbGN0/so+9/POFLdWaTtVesgAI2gLCfijtPQ2oQMf8pefdX0A11SI9ikSclqZhXx5pGu8N0sO3FsvOvYR97Oh/KGBG9NfCdXOQGC4VoyFvF2gFoteG395OyYdmwtguyaOgXxrTecQ+D5m4wjAC/UbQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231023)(93006095)(93004095)(6041248)(20161123560025)(201703131423075)(201702281529075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123558100)(20161123555025)(20161123564025)(6072148)(201708071742011); SRVR:VI1PR0601MB1917; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:VI1PR0601MB1917; X-Forefront-PRVS: 0525BB0ADF X-Microsoft-Exchange-Diagnostics: 1; VI1PR0601MB1917; 23:AD3katMYSSYb4nXnRWULqjx6N+9DOo+lvoCcUa2EDkDX/qefCTeIEQo/UfoP2CYUTaA35FUS7CFY7N6Wt3D1bFp3nCcPhj3uVUrASFrvyzKUId6bAXihZ44o04+/zfLFxb50LNq2ocHdKe5OR00H1O+75AW1SQdS2I/ZWQVvjWC9zVqhsbniMDDatmhP4IS8FxlXIixbXtCF5AH1qW+Rrf+uko3EyRiyX6jIkKCh7uENip49v7R7CuPHtZdiWD+SbnzzRdfZnx/y/7lwynwtbZLU1he7wMrmWgmmjXHx5GvwwszT94NWtPKAWEokfQv0ZIe+XmbEjbwnPgUr4Nqm6r8WBRFvVFUlAZ8I/dho7iLd3CaJ+rUN1vP38W9j27PZNo1AOj61iv4WFgoYGfbQe9J4xjFbFIJ1fpgacs2Xfp1tDnACIbASZbEcUHk3ETUpyMAS0xOPSRy7IDco+mhiHD7hxhotGbQdgd6ZnH9qVH6g082W12yMeTzZtOmBQPYcwKcAhqmg3ChlQhKyYFjv/deREkxEAEu+Wu2dYtiiVVRgxyA9HSjclTbjc1CHm+pFM26gzxWMg5WbFesQvGVPnZEWlg8IWuvpZVCOhRKXYY5t/8HanNALr7kQ02Vkm6fmnkp20+kP4mnNT298rG0vSmeh90ULUgH8raKKK6p+zf8Fj8TDYCPObzAJ8wK4OVFhLri6U5I6doKfJDXaJapGnAPoGIwRbwaFR8rz4/1DCTLrdagTbj2E06/x1JEmineg7mo/JwOwcZ+vIb0roiGJKq55uT096cq18QszsAGVSWeNegf8nV1NuYt8ibL5lgFVjydUra1JOoh98AqR4BYNPOo8ANaAE5OZIpMNfsb+g/7D7L5m7pOcCqxuYzyalaL7fS8RzibDWWt0YsfBMNtUgqzZ6Ni37dH3oa9DmhBEs7gmKYWpLT/19XvC1dcVOjvDvGKtMjeZ82DvWupxvfhh9LO2RsHTalNd3IcnB5SDkjePqdPM3o7UGC3VMfz/nBFYmfqAxln4kHp0kbvLtoF3zGE6lEaR4j789K6uhybclJ/LTfTeqSwwW9qoG5xepPpxDAjfIl/XEJywpS6elYiDaA== X-Microsoft-Exchange-Diagnostics: 1; VI1PR0601MB1917; 6:I0obxZJ+Az64CxnPILENB9w+zv8g+qFIGvygeBbSSG0OQaYyjlbe/7KdK4ek84mEh/fJdxMv+QSFynlHJzIpubMdbpXuvTFQeHj7kHwyVyeSKdObeaS8BSsiajrhuGdQGsc5rlkFH5/Jz7/LunneI16d3GI4aa/Xo3+yUvLTjRufZ+lEOR9NMYkAmHQsw3oCmR4RgQL88imVOhyeShX4N+pbrz07qb1PrcbYlNTpE5NbN9FLA2/UFN67yJCfE2tbIJEBp+rp9E24CwGS8lVju1XfgSAR16sH2Zyqa+thbxZKichUL6UonLOAsJYhVyzGfI2qiLHDvTTUm2Q7is9mZaEhx7FALoL/5+LFsE7ehkA=; 5:rhOXoHEDmcioIBmI8lZL6AdoWgv7pClGbeR2sVIin+9TPvgB3ggBppT7sVEgDsyDjaQRHQGwGnehenH5wqUZAMp9NerXaPu7Y8mzJIWEY0p8AaO37APncTzalGAzJBA2IAMxG4+0D2MSN5Amqg2J8fr1rvKntAtgsQrbtYnWVxo=; 24:C8eTuZwjkWV3Edc07n82iJcZxZfCI93sgAq/+WERmIGXQRJrr4ChwUdW0/4A/wkiSLvACuGGhj+a9OKaNVq2+IpKPsgK46FInTH07yuzuR4=; 7:4cXlWK841QNFpzfXuZ8mj73sUynJ8oZPDhQZDaqyop7KPy0ARtA1FlCiPeTiEHEgb1MVzM4/7u3/bkUqWbGZcTjSYxNyF0IMU+45azJ5BzQDygArQvsYwwq2JqDYd3Vfxh7Oamj1uk9Ytdsmi5lmSPN7T1BlGid/kEqdBW/fBI8sUEhHykTrfhRPf91BTaBuZvg6PEbORwTCKV8E4wLNvbfuspwQxc/lJOWFyTx9cV8CsjnMViRhrN+qFIh8H/XQ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cern.ch X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Dec 2017 17:45:17.0778 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fabf516c-fb51-4a46-3cd3-08d5463f19d8 X-MS-Exchange-CrossTenant-Id: c80d3499-4a40-4a8c-986e-abce017d6b19 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=c80d3499-4a40-4a8c-986e-abce017d6b19; Ip=[188.184.36.48]; Helo=[cernmxgwlb4.cern.ch] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0601MB1917 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org This patch extends the current i2c-mux-pca954x driver and adds support for a newer PCA984x family of the I2C switches and multiplexers from NXP. Signed-off-by: Adrian Fiergolski --- .../devicetree/bindings/i2c/i2c-mux-pca954x.txt | 5 ++- drivers/i2c/muxes/Kconfig | 6 ++-- drivers/i2c/muxes/i2c-mux-pca954x.c | 38 +++++++++++++++++++--- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.txt b/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.txt index aa097045a10e..b428bc0d81b1 100644 --- a/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.txt +++ b/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.txt @@ -1,10 +1,13 @@ * NXP PCA954x I2C bus switch +The driver supports NXP PCA954x and PCA984x I2C mux/switch devices. + Required Properties: - compatible: Must contain one of the following. "nxp,pca9540", "nxp,pca9542", "nxp,pca9543", "nxp,pca9544", - "nxp,pca9545", "nxp,pca9546", "nxp,pca9547", "nxp,pca9548" + "nxp,pca9545", "nxp,pca9546", "nxp,pca9547", "nxp,pca9548", + "nxp,pca9846", "nxp,pca9847", "nxp,pca9848", "nxp,pca9849" - reg: The I2C address of the device. diff --git a/drivers/i2c/muxes/Kconfig b/drivers/i2c/muxes/Kconfig index 0f5c8fc36625..52a4a922e7e6 100644 --- a/drivers/i2c/muxes/Kconfig +++ b/drivers/i2c/muxes/Kconfig @@ -64,11 +64,11 @@ config I2C_MUX_PCA9541 will be called i2c-mux-pca9541. config I2C_MUX_PCA954x - tristate "Philips PCA954x I2C Mux/switches" + tristate "NXP PCA954x and PCA984x I2C Mux/switches" depends on GPIOLIB || COMPILE_TEST help - If you say yes here you get support for the Philips PCA954x - I2C mux/switch devices. + If you say yes here you get support for the NXP PCA954x + and PCA984x I2C mux/switch devices. This driver can also be built as a module. If so, the module will be called i2c-mux-pca954x. diff --git a/drivers/i2c/muxes/i2c-mux-pca954x.c b/drivers/i2c/muxes/i2c-mux-pca954x.c index 2ca068d8b92d..fbb84c7ef282 100644 --- a/drivers/i2c/muxes/i2c-mux-pca954x.c +++ b/drivers/i2c/muxes/i2c-mux-pca954x.c @@ -4,11 +4,11 @@ * Copyright (c) 2008-2009 Rodolfo Giometti * Copyright (c) 2008-2009 Eurotech S.p.A. * - * This module supports the PCA954x series of I2C multiplexer/switch chips - * made by Philips Semiconductors. + * This module supports the PCA954x and PCA954x series of I2C multiplexer/switch + * chips made by NXP Semiconductors. * This includes the: - * PCA9540, PCA9542, PCA9543, PCA9544, PCA9545, PCA9546, PCA9547 - * and PCA9548. + * PCA9540, PCA9542, PCA9543, PCA9544, PCA9545, PCA9546, PCA9547, + * PCA9548, PCA9846, PCA9847, PCA9848 and PCA9849. * * These chips are all controlled via the I2C bus itself, and all have a * single 8-bit register. The upstream "parent" bus fans out to two, @@ -63,6 +63,10 @@ enum pca_type { pca_9546, pca_9547, pca_9548, + pca_9846, + pca_9847, + pca_9848, + pca_9849, }; struct chip_desc { @@ -129,6 +133,24 @@ static const struct chip_desc chips[] = { .nchans = 8, .muxtype = pca954x_isswi, }, + [pca_9846] = { + .nchans = 4, + .muxtype = pca954x_isswi, + }, + [pca_9847] = { + .nchans = 8, + .enable = 0x8, + .muxtype = pca954x_ismux, + }, + [pca_9848] = { + .nchans = 8, + .muxtype = pca954x_isswi, + }, + [pca_9849] = { + .nchans = 4, + .enable = 0x4, + .muxtype = pca954x_ismux, + }, }; static const struct i2c_device_id pca954x_id[] = { @@ -140,6 +162,10 @@ static const struct i2c_device_id pca954x_id[] = { { "pca9546", pca_9546 }, { "pca9547", pca_9547 }, { "pca9548", pca_9548 }, + { "pca9846", pca_9846 }, + { "pca9847", pca_9847 }, + { "pca9848", pca_9848 }, + { "pca9849", pca_9849 }, { } }; MODULE_DEVICE_TABLE(i2c, pca954x_id); @@ -154,6 +180,10 @@ static const struct of_device_id pca954x_of_match[] = { { .compatible = "nxp,pca9546", .data = &chips[pca_9546] }, { .compatible = "nxp,pca9547", .data = &chips[pca_9547] }, { .compatible = "nxp,pca9548", .data = &chips[pca_9548] }, + { .compatible = "nxp,pca9846", .data = &chips[pca_9846] }, + { .compatible = "nxp,pca9847", .data = &chips[pca_9847] }, + { .compatible = "nxp,pca9848", .data = &chips[pca_9848] }, + { .compatible = "nxp,pca9849", .data = &chips[pca_9849] }, {} }; MODULE_DEVICE_TABLE(of, pca954x_of_match);