From patchwork Thu Dec 14 11:20:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrian Fiergolski X-Patchwork-Id: 848485 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="diIPpus7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yyB2355Ryz9t3t for ; Thu, 14 Dec 2017 22:20:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751520AbdLNLUl (ORCPT ); Thu, 14 Dec 2017 06:20:41 -0500 Received: from mail-he1eur01on0082.outbound.protection.outlook.com ([104.47.0.82]:63872 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751489AbdLNLUj (ORCPT ); Thu, 14 Dec 2017 06:20:39 -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=F/VreHf8Qzgy2XIehhEHFT99iPng4etbeAx910V3Vys=; b=diIPpus7dR1OmCPckukVCcUW/+Hd2NArMqcVnX8Aspb6xWNg1n8XBTbMIrE2wmMsRE9DUSQClB/AnYqjPmlzhlMTneqIvEfr7k0QOgDXmPipZkml/HWY9A1f3XVvuKfo/DOqYkBrKrdHlLqkD80jZoOvJ6LJJoIvrtFZydk5TZQ= Received: from DB6PR0601CA0028.eurprd06.prod.outlook.com (2603:10a6:4:17::14) by AM6PR0602MB3509.eurprd06.prod.outlook.com (2603:10a6:209:d::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.302.9; Thu, 14 Dec 2017 11:20:36 +0000 Received: from VE1EUR02FT029.eop-EUR02.prod.protection.outlook.com (2a01:111:f400:7e06::201) by DB6PR0601CA0028.outlook.office365.com (2603:10a6:4:17::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.302.9 via Frontend Transport; Thu, 14 Dec 2017 11:20:36 +0000 Authentication-Results: spf=pass (sender IP is 188.184.36.50) smtp.mailfrom=cern.ch; axentia.se; dkim=none (message not signed) header.d=none;axentia.se; dmarc=bestguesspass action=none header.from=cern.ch; Received-SPF: Pass (protection.outlook.com: domain of cern.ch designates 188.184.36.50 as permitted sender) receiver=protection.outlook.com; client-ip=188.184.36.50; helo=cernmxgwlb4.cern.ch; Received: from cernmxgwlb4.cern.ch (188.184.36.50) by VE1EUR02FT029.mail.protection.outlook.com (10.152.12.82) 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; Thu, 14 Dec 2017 11:20:35 +0000 Received: from cernfe02.cern.ch (188.184.36.47) by cernmxgwlb4.cern.ch (188.184.36.50) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 14 Dec 2017 12:20:14 +0100 Received: from adrian-laptop.cern.ch (128.141.223.61) by smtp.cern.ch (188.184.36.52) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 14 Dec 2017 12:20:14 +0100 From: Adrian Fiergolski To: CC: , , , Adrian Fiergolski Subject: [PATCH v5] i2c: Add support for NXP PCA984x family. Date: Thu, 14 Dec 2017 12:20:03 +0100 Message-ID: <20171214112003.13701-1-adrian.fiergolski@cern.ch> X-Mailer: git-send-email 2.14.1 In-Reply-To: <990e4a1f-a9ac-c899-0075-ae3211ff9475@axentia.se> References: <990e4a1f-a9ac-c899-0075-ae3211ff9475@axentia.se> MIME-Version: 1.0 X-Originating-IP: [128.141.223.61] X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:188.184.36.50; IPV:NLI; CTRY:CH; EFV:NLI; SFV:NSPM; SFS:(10009020)(39860400002)(376002)(396003)(346002)(2980300002)(438002)(189003)(199004)(356003)(246002)(36756003)(106466001)(7736002)(4326008)(2950100002)(6916009)(8676002)(5660300001)(6666003)(2351001)(107886003)(53416004)(54906003)(7636002)(50466002)(50226002)(305945005)(8936002)(48376002)(47776003)(72206003)(7696005)(51416003)(106002)(2906002)(575784001)(86362001)(786003)(16586007)(478600001)(74482002)(76176011)(16526018)(3846002)(316002)(66066001)(6116002)(1076002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR0602MB3509; H:cernmxgwlb4.cern.ch; FPR:; SPF:Pass; PTR:cernmx11.cern.ch; MX:1; A:1; LANG:en; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1a49ceee-dfb9-46e0-f204-08d542e4b2bf X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(5600026)(4604075)(4608076)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603307); SRVR:AM6PR0602MB3509; X-MS-TrafficTypeDiagnostic: AM6PR0602MB3509: X-Microsoft-Exchange-Diagnostics: 1; AM6PR0602MB3509; 20:nQ1cxLgA9OdkokjDJZxY7JO9ZJD5zU/3gqRrbPSUrn28LS0nsmMk23CinaqIwjGwUuGGxYe6bd3rzJbVJjc8AHomGIja3t/qff4MrnVDcxPQ6pED5OrB8vGCLtzgUrnaHU3QNwEovJz9eSP8q5E3NFvqay3/t68jzV5Fp1epkRARYzIdAK3oNrtQD8bBG7Zf+MqLSbQW6ii2N7kuYUU9/AigTNRRnVMomuY6cYkTyKXs7FX9CcAqTFH0zw4x2IulT7lkRsiZZYMD62RDyaloGcQTKdZro4koS6eLqmxfYO+CnwAiGBWFfvcfqLrR1L9JpYoYWyQIxHog6ABWbzi7YpCuGI+EvQ6pGg0m3Ag2QJOd2pfs2EHz84yv2s/WsvSatxS1w3pPJs9sChTbGcO6o8IxdmSVZ2mjEh2lKRyyZ47+Kj6r+uDhMu+rPRywihIPJQNH6J5eK9aeNa/HM3wcEsMkhiVMYHLI7wzZnIDygt2PglluNFv+Ic8QwiXFgbri; 4:6rIIQ1hv/mWIdb7Rp/Ndb187Dr8BPIRQdQaqrSrg1hNjovtW2IRTPiUPGRvgNGc8jc8tzTmOJQZp1tB7+CLEZB0ycrBHEBNo9XGPJaaUkB6tvdvLQQz7gWE0I2KZ35ZY7mgZ4u74ZjfP8iUTAMWeWf2GI0aWXm/jZfjIag9BLEfjpx6ucsh71FD+dHUtGI3bYG1YbZ0Bj6MwCbusLbdXs9NBfqle03pUfysAIADuNLEkzNnTDOZzDzsepFuS0SYF/tk9dYUiWG0HXGd4c2L7jg== 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)(93006095)(93004095)(3231023)(10201501046)(6041248)(20161123555025)(20161123560025)(20161123564025)(20161123558100)(201703131423075)(201702281529075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(6072148)(201708071742011); SRVR:AM6PR0602MB3509; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM6PR0602MB3509; X-Forefront-PRVS: 05214FD68E X-Microsoft-Exchange-Diagnostics: 1; AM6PR0602MB3509; 23:URIIj2/NogGK7btd/IJj2FB1FIO/SRCZ9uYP76T5juKgYnQH/T/5ftTizDREafsT1a6BQpTmea8JjA2uEHxhulWjNPJ4eI2UUrgznu1FoJ5IRlIybsr/IGfeibBFsR76BWo7NpnP8YIIgzom8JIj4Uh9f03HgJId+1kUwHWkqWtDbuPF9fPrb6H/yK/G8hve/zZDHQmprHRZbbHvzM6xNlHdVBWu/GN+P/LH79cWSg0Yyknir+aSHClnzFsCf/XVYGnB/ykrOLRWt3OWkWBFZ9sYmPkC381VrUSgfFdk30ZGEMrBkaYwYEgTAN/yScwG/LRnKSpur6zLPSjDI7TEbyWiuO6MLe4j385eEn5hGxDvNyaFPakNsr/SBbGPYg1Gsj5WuiU3noCf5QolwTXpq7s1su41j82EL33xrgf3KCRewOUdJd1KYBSa/jvKLz6QRvqctl1zTfqaS5yN0VjvBhhgdI8SPD99rrk4DSOaM6CftIDGjFapbJaFvXzAHLdCBjIssnxpKU7VffhmdjbPBFd6S9j6EmFcPl38bALSOIJAJaOUWt10JP7tztjoHRNJWoTdCR8A4vlb//riBDo8ecgxRYUQ269LhwUeTMg12IOCeaOn05KUU8yQrcZ/Ve82BSmPhnMf7tn7XVfmcj+nb9+VOv7McMzT+EjnYPKiVprSqA5Fu5unpdC+6NSyH7fQHrj0KSbA526eTbZA/4sHffweTB/DNaYVcK47Kno7nz0P18KzbsIX0GVb7LnNTTUUKifo2uWDRt67Cd7S0fYI7HSrGBMPdB/GTNY9P9xswoGan+RO1k6hVlZhLcMxmoyDfpzIyvxplUzHeZqIr0bHY0aWwzBPi8g6zu5zHSfMGB/AcbE/bLrvPZiLrmcgE69GV0p3tqkGbcgCh7iQXcx0tK/p0WonDhgz5GFlv9A9xL9pS1RJsWFomO7ccWZj/h26ooLS7eGK77WocxeBc4k6jNv5WUBQNbZgQq4QABEtIcn8uULX47zPhL2vb703niBWEHGRM1knEI2uSKZfknljO0lHe1+/imfnHLweF4o/5H4eNXAoh/VWtMFJqyM/cteBUVdoboB6BDtgA7dMza+iBw== X-Microsoft-Exchange-Diagnostics: 1; AM6PR0602MB3509; 6:Q0tHOMGA9TMI7XJrfR0kx6U4jEN2ypVa7YRME2RZGAljsaY+Zk4A3I6fBa8OTn8HWYVR92hfGq7jtKX8Nz7ygU6RVBlA/47NQpOrejzx/W+8ckQk+fXlAKV2f0j6LRg3adX9HdLxx/5bTRXoSQKw9v9/x9IIbaz8CwxxJppzGy3aTcjwxR/oWjrGq+luABqyZdlm31xbvYA/QlxIRjNwE1rWeoVgwZA6h0sI2KAsZagVbsua/Ddl2YPlbLnSIchAlFeUhe9LtVIgu7irzPj/ZIDr9kOXHc6v0A2oV75fNdG+frPAAWewNoZ9uGLDmiNDaCRmw35ZrZ5nT0c64L3wPqm8Ju9mOZMjv9A7nDlguVg=; 5:h5/qzhPuepHXZWfXtS2X6PZOU9V3bjGJ5mjBUM4YyXZF5vfj7ym/uvP1CO1Dz86jBN9cgYnDrCSBy/zKmWq4bhHuIBj5BTeUwbnFcLkfer3CPYNEsfnbiNyblWDp+Dk11Xh02Yhs9UAwv0f9fUNKngCxBAGxKo4275DJM1Snbac=; 24:yYM/YWKajYBvgvKXtjgL21NCWCEvx3Q+qZpybk+TMfKThBA6jUrdGddy2L6aqvkOHikcep946bWZ9sGMg/QVwvL6jSRqdL1ucnQOatzRkPQ=; 7:Msk1NdoV/ppgdBn27vv2xHKo3jpfePrLMMluM7GPjvZC3wYRlUCE6VT6GVdcQfLpe6UiM1rH0Nm8NnYmrywVXWchkAwkx6NoD8VCeN5tP35aWqPyJtLvSvM8Bi4Qb3ITZ2pPCBTwD0NXtggtFaP9M9tvktj3iz7t2GfYrHGRQtWJMTvULuTNNcpT/oFTNmJxWL879blKi68Fq9STzCC+G68PnL9Ys+YI8+M89yTt5EN+0ZbnhkD9sAL1j/lHOtXX SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cern.ch X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Dec 2017 11:20:35.9037 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1a49ceee-dfb9-46e0-f204-08d542e4b2bf 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.50]; Helo=[cernmxgwlb4.cern.ch] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR0602MB3509 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 --- I have applied recent Peter's comments. I am waiting for comments from device-tree folks regarding compatibles. .../devicetree/bindings/i2c/i2c-mux-pca954x.txt | 5 ++- drivers/i2c/muxes/Kconfig | 6 ++-- drivers/i2c/muxes/i2c-mux-pca954x.c | 36 +++++++++++++++++++--- 3 files changed, 39 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..9796bd7d61d5 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,22 @@ static const struct chip_desc chips[] = { .nchans = 8, .muxtype = pca954x_isswi, }, + [pca_9846] = { + .nchans = 4, + .muxtype = pca954x_isswi, + }, + [pca_9847] = { + .nchans = 8, + .muxtype = pca954x_ismux, + }, + [pca_9848] = { + .nchans = 8, + .muxtype = pca954x_isswi, + }, + [pca_9849] = { + .nchans = 4, + .muxtype = pca954x_ismux, + }, }; static const struct i2c_device_id pca954x_id[] = { @@ -140,6 +160,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 +178,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);