From patchwork Wed Dec 13 16:12:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrian Fiergolski X-Patchwork-Id: 848044 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="xG6DhvJq"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yxhYY6LG9z9s9Y for ; Thu, 14 Dec 2017 03:12:49 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752550AbdLMQMs (ORCPT ); Wed, 13 Dec 2017 11:12:48 -0500 Received: from mail-db5eur01on0048.outbound.protection.outlook.com ([104.47.2.48]:3444 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750916AbdLMQMr (ORCPT ); Wed, 13 Dec 2017 11:12:47 -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=M9oSyWR1PQYIQjm5DJbODw2e0806RVpW0Aj2vr3/4Cc=; b=xG6DhvJqnWicBKNQruzDjTvMaGEptV90qSqCLNQ7pSD0Iqf2NupX+AYjBnl5XxE/JZgImPyqv7oROVJ2/oSEMF0weOywRNO9EJyYsqsLFG+sueBsVY4v/vwORhkWcxSmbCQaWvG2I0iaAzFUqYYBJ+xtWA+R/NCi3xDR+YS3WmY= Received: from DB6PR0601CA0007.eurprd06.prod.outlook.com (2603:10a6:4:7b::17) by HE1PR0601MB1916.eurprd06.prod.outlook.com (2a01:111:e400:c520::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.302.9; Wed, 13 Dec 2017 16:12:43 +0000 Received: from HE1EUR02FT025.eop-EUR02.prod.protection.outlook.com (2a01:111:f400:7e05::207) by DB6PR0601CA0007.outlook.office365.com (2603:10a6:4:7b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.302.9 via Frontend Transport; Wed, 13 Dec 2017 16:12:42 +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 HE1EUR02FT025.mail.protection.outlook.com (10.152.10.79) 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; Wed, 13 Dec 2017 16:12:41 +0000 Received: from cernfe04.cern.ch (188.184.36.41) by cernmxgwlb4.cern.ch (188.184.36.48) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 13 Dec 2017 17:12:35 +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; Wed, 13 Dec 2017 17:12:33 +0100 From: Adrian Fiergolski To: CC: , Adrian Fiergolski Subject: [PATCH v4] i2c: Add support for NXP PCA984x family. Date: Wed, 13 Dec 2017 17:12:23 +0100 Message-ID: <20171213161223.23832-1-adrian.fiergolski@cern.ch> X-Mailer: git-send-email 2.14.1 In-Reply-To: <5cbfd97a-146b-8851-c63a-f2f60da33f5b@axentia.se> References: <5cbfd97a-146b-8851-c63a-f2f60da33f5b@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)(39860400002)(346002)(376002)(2980300002)(438002)(189003)(199004)(2906002)(66066001)(76176011)(305945005)(86362001)(575784001)(7696005)(7736002)(7636002)(47776003)(36756003)(51416003)(50466002)(246002)(6116002)(8936002)(16526018)(106002)(8676002)(50226002)(3846002)(48376002)(1076002)(316002)(786003)(74482002)(72206003)(53416004)(54906003)(6666003)(16586007)(356003)(59450400001)(5660300001)(107886003)(478600001)(4326008)(2950100002)(106466001)(2351001)(6916009); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0601MB1916; H:cernmxgwlb4.cern.ch; FPR:; SPF:Pass; PTR:cernmx12.cern.ch; MX:1; A:1; LANG:en; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 743d3ea8-d269-42dd-902b-08d542445685 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(5600026)(4604075)(4608076)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603307); SRVR:HE1PR0601MB1916; X-MS-TrafficTypeDiagnostic: HE1PR0601MB1916: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0601MB1916; 20:Gf8GKJ+7BSQ0n1a+lpNnV6YzoLXy71LIJ8giZU8U/cYaFG3l8WgNl/xw0Y39IOTNDjmXOktHEK1a3kuYR7s9fcWut4f1q/pHDD7t9Ja8J+gH70WU+YC3PBwCiRzMMSV+4X+zgzbXleu68fsssfgZKB0piIuLobCrcO0TeMpZA46zAz9pTAHaLgBJvQhkEIj4wdcuw6pxxVR0Lm/r6vS5EoLpmYohbDIwbWKuhq2rwM2xASCp8pPyIEDf66f65TcuVj3LO7KgRgWg7Qc4DlHMKxaieiK8bneoQaPMNVtZBmCUw+4JYnf6CYdp/vjcaZhxG7V6fwjUajKMk96LHzog1Lg0FX6W5WxfDffx2fl1qaC/s9yE+P2d+kqDNg+KbrGl9G1m9qanUiSBbey+xN8iMQ3rRFoN6dUGntx+720DltIP0trJpXZopAu2h07TUwjDg0bTnCbquwNJBkYroeurrDDM1r3OLQGJipU2WH8PBYRsuLtml1Lpq1/RVC+9k525; 4:sHDFNY26hsx590ax0KYdQXc2i3pJrHcNAeRQDZ++gTpmi2It5fJa6e7VAwx2c0FLT46D+6GuWZMF6DPWn8ABOFy2iibxGlznQC6e8tl4RMZKqlESrApN7yeL1PzRMo0up9oZOl+/4GNpsCwHCdFKN67XnEeCuwVqYehcmtIAGiaJb1eJ4C1g9GsZYi+zjFVOe70fxIx2+RYHhEftmC528Mz6trsqxPG0JxFoBrhzaSWZSWUClbLEX1sD2KGcyDVv6Nlv/r+hbJ0VudkbtOIeSQ== 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)(93006095)(93004095)(3231023)(10201501046)(3002001)(6041248)(20161123562025)(20161123564025)(201703131423075)(201702281529075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123555025)(20161123558100)(6072148)(201708071742011); SRVR:HE1PR0601MB1916; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:HE1PR0601MB1916; X-Forefront-PRVS: 052017CAF1 X-Microsoft-Exchange-Diagnostics: 1; HE1PR0601MB1916; 23:PKChw3/fWp22tplErN4XTROP0V4KXp9/aCX2oe3N9r4owq2P3spcFC5OoHi5+MKPFiWi3un7Ij6Oruo2IDtCLgjISMeLP9ddwEVizIWvbD5uBTTJtATiqcUla/1zTrvNwNV2K8lfZxdaUC7GjAglPksZDI1a4612HMoBGXNC1chSX1KcEB1drf221cpm08fidBAKd3ndWEVtmmS3HlpME6UdHybvINbuk2YbnG4FyXZXAqoXn888ebC9gs7jSJu0dLodXKX/yUvi1qxkkRS0+48BI0j8/hdrPSmSz/I21MREXP7Uud71pzrCCSTRoXK4Nwji8FggavqoELZwkU5u/DDjArepgOzhrTBM2tJgZcvqPbXCBy7Q+VT70JHFB4nqUchgL4rAaa/LthdDUacqaiztkjqYUBR/yj0XA7SObDyvBQF8RCyoV6OJTDZuvdSXG6Q2vAKDUkOGxZMEhuZZS7n2UyX+w8yj4/TJPQ4S9kKGaaQjuqSyT59EWEn3AXx2MEakcLBdz0StA979qWB04pCRrnQeeogd943M1KpGegghssWfv0+MBkAlzgb21clnBF+OCRZ9bzdf/PZyK/z4i2/CHvM7vgt6ewrQFv22y75q8RtZRSX4VtbC7N1Ir8KD/E7694muPjPeOREz429mZ3JlTXlE7XMo4emcfmjUomiZzXyJGoj/dHiXbM+P34DwyqrW5lnwgFDGpkXvTq1YvwArbXZz+UFkzA8vZC+Lf8kIy+tt452SIYW848ubAnIw6vgt6NrVTfZs73c4UK7/V1Q44RgAm7xxYrscLZHVTHXqR/OPUalOF8/mRhXcG/eaznXOSs3iLD+48Fk/SNQ0uPKVHrZ2p9TQZhkw9sWhKoFM2CMLRbVcjrjIja/KYJNKK1arpd1Gs1PEUM1fS1tZTI5gDzaO0PoaNJsqaucLv64FG9Y2xyhnDAMVmPCoOh9Gq1FvC0Ti8dH0Obgju5dyJ144XJIwYqtMrHSTX7NtJdlfbNiJc0Zz7j59sNFaCGwjrnwYw4bPs9HAZx+3GcWMAUnm+f0nLmEDSKSU5RAFdouw6hT/Ka9UpCqhk8brz68ZJJ9gEAyQ4alm2T6PBjC1Hw== X-Microsoft-Exchange-Diagnostics: 1; HE1PR0601MB1916; 6:utcq/5D1cmvLzOUnpo5TTnctSGCgBxRTrwRWsKP/J2a/DVZXsDqEXQrFRaUQYC4PJ51gOViRI71bPNMmSQyl2h3qymt2EqYyfG1TqC0GbWIGCYlxtIJrmP64aE6vdvRH9ua80YjMS7x5DxBsbv8MKpbTHRFraDSMO48IGTmgoDtZ53/J08UqK5jTlbBx7w1agZABbVO0iqNcMO1x6XLaRFxdXijcCJEGuIglfpTQJAviWgBuJD198urFPIGjqC6N2ci2hxd8Zs0mETeKrePOe28ZI1Sm1cbZ92A545oQOglv2egntEDrpLedw6OD+jpr50pIS/5y1seHVBDArYdU4r2yk/ipOFwb5Ghhz7to0wQ=; 5:Ti/UVxB4aP6M18f5Srpe7VUdbUHFt9dUMpOnp6WttRD/XpMXrpMhXS/o86i+N2LG868US4Xj8cctmlwt2shPzI/EHk9eszuDbip7nCBfAgGEmcm5fuElxe/bjT1kHG4jwkv9NCkRgPHwe0X96Z36/fUco8TRLZznZ1WbyT3oD+4=; 24:n1ozMyS0hoEHq5xIXvqajjvLrJAXsW6hzI9hqhWEwmVY9tt244kf6IYJ+KEkjbd2SZr9WCeF38of/qtbp6gZGoflPDjBMl3W4hjVnS43vRo=; 7:Uc6wnwsqAVdsyJsdM2RYQbFBLL9wTAVEr0lOJycds/uLsM+3NH36Ut9el+jwKpG2J0vXIXDDsJSBPYuXromxTdeeIyA3/QHjW+eadyfJJgqVKicBoZ1s/lKsPejGWeVReig/D1NsrK22MkqDKHWzujYks9gChTMEbVPTBUJqq14egIgu0TtrvwADZvcXlUpF8aSOZob5KIidIYf9W6Yjdtokuy10OByxeS2Bs7frzEsrcwykStH7XJkUDXroTjab SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cern.ch X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2017 16:12:41.6627 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 743d3ea8-d269-42dd-902b-08d542445685 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: HE1PR0601MB1916 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org This patch exetends 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 --- As suggested by Peter, for a moment the device_id checks have been removed and need to wait for a support in the I2C core. .../devicetree/bindings/i2c/i2c-mux-pca954x.txt | 5 ++- drivers/i2c/muxes/Kconfig | 6 ++-- drivers/i2c/muxes/i2c-mux-pca954x.c | 41 +++++++++++++++++++--- 3 files changed, 43 insertions(+), 9 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..23cc41866a91 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 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..b4a41d013538 100644 --- a/drivers/i2c/muxes/i2c-mux-pca954x.c +++ b/drivers/i2c/muxes/i2c-mux-pca954x.c @@ -1,14 +1,15 @@ /* * I2C multiplexer * + * Copyright (c) 2017 Adrian Fiergolski * 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 +64,10 @@ enum pca_type { pca_9546, pca_9547, pca_9548, + pca_9846, + pca_9847, + pca_9848, + pca_9849, }; struct chip_desc { @@ -129,6 +134,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 +161,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 +179,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); @@ -339,7 +368,8 @@ static int pca954x_probe(struct i2c_client *client, if (IS_ERR(gpio)) return PTR_ERR(gpio); - /* Write the mux register at addr to verify + /* + * Write the mux register at addr to verify * that the mux is in fact present. This also * initializes the mux to disconnected state. */ @@ -443,6 +473,7 @@ static struct i2c_driver pca954x_driver = { module_i2c_driver(pca954x_driver); +MODULE_AUTHOR("Adrian Fiergolski "); MODULE_AUTHOR("Rodolfo Giometti "); MODULE_DESCRIPTION("PCA954x I2C mux/switch driver"); MODULE_LICENSE("GPL v2");