From patchwork Mon Jan 22 11:36:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Rosin X-Patchwork-Id: 864229 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=axentiatech.onmicrosoft.com header.i=@axentiatech.onmicrosoft.com header.b="t86k6AWb"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zQ8Yz3y6rz9s7n for ; Mon, 22 Jan 2018 22:37:59 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751191AbeAVLhp (ORCPT ); Mon, 22 Jan 2018 06:37:45 -0500 Received: from mail-eopbgr10097.outbound.protection.outlook.com ([40.107.1.97]:27111 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751116AbeAVLhP (ORCPT ); Mon, 22 Jan 2018 06:37:15 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axentiatech.onmicrosoft.com; s=selector1-axentia-se; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=azgo3n9eVwNgMmHvuHBkgLjPMn1Ae9gtwEX1D1fZcS4=; b=t86k6AWbIjW5/UfbVdIBbZcS6C7MrJo3LqVwDN7+mOXyR+s9UZPHdwEDHN6RB13UTfc4MbEVcmqawjTXUPCIdEitzvFSG8gyFCNDa6hjIvIU6gL5ipMnYS/Q8sFVd/kVM87KdKsQR0R3DfORFko/lpj1rVimK1bwV1k/5jWKZ/I= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; Received: from orc.pedanet (85.226.244.23) by AM4PR0202MB2771.eurprd02.prod.outlook.com (2603:10a6:200:8c::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.428.17; Mon, 22 Jan 2018 11:37:10 +0000 From: Peter Rosin To: Adrian Fiergolski Cc: Peter Rosin , Wolfram Sang , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 1/2] i2c: add i2c_get_device_id() to get the standard i2c device id Date: Mon, 22 Jan 2018 12:36:56 +0100 Message-Id: <20180122113657.32094-2-peda@axentia.se> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180122113657.32094-1-peda@axentia.se> References: <20180122113657.32094-1-peda@axentia.se> MIME-Version: 1.0 X-Originating-IP: [85.226.244.23] X-ClientProxiedBy: HE1PR0102CA0065.eurprd01.prod.exchangelabs.com (2603:10a6:7:7d::42) To AM4PR0202MB2771.eurprd02.prod.outlook.com (2603:10a6:200:8c::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e44ecded-4f3c-4c0f-8546-08d5618c79e8 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(7021125)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:AM4PR0202MB2771; X-Microsoft-Exchange-Diagnostics: 1; AM4PR0202MB2771; 3:ZYnT+o1D3ceQ1To291/qjZn9B/aiQiemmXDB9MQetM65JH+7Eals9cdOkk7IV3av3K/2TlcE5A+gr6/Q1JYVj3w7XWZyjaOVWpczFKxLdxhrU7/OVcQ+jlIjcC7FSp8L6Qzgg5wpCRVLH0Qm4qX/7Q0soVLt4V3wWnhmSO5Ii5syaKRSotIri2B9c15MfmQwrjV1/gXKzCt5Lwyf6e5YIfZ+9EGE+RJ0tv/Ow9C+33RCBEY/yXKVtdBd+yK+xXfU; 25:Bx+nfZgY3QHaX5TbpZabbQFk2Z19MIS2FB2ihTvf1kHA97w80yNvIMN9Iuu6bt0UVPp71mTKB12quZz1cZdBt2i1H4WginRrbI1mVZofQ5dYZOOZgenIJxYhhSx9yXCfpYQFjKjcLMliFRWOsADOGs7YNt5PSk5qhdR0HEPOy9vX11Ff1dgJHi8vunRk/GtblS7JDUtoyPC1+a3s321bxEMQDMeV3nyJa78hdSLrjFkAZQKnozDOSpAEFfdmgFMxgBM6nqzSPMeB4Wr8pVDhtEmBC8GVU3QRlhL1pMxOLrKvgCnFcdZUz0x6LqaIl/+3mKz/Ok6XMoA+wOrIv5c8TQ==; 31:2pqhTzzB4Aa3pb85UF8CjDVzRTP7JF3qeQEMNUmD0YMowjG8pDEUzS8jcSbz/TGrq1B2E/wPL7NhXRBxzs+Xw/TlCY4XI3Unp30pvMGPc8tTYFM9FkUjeIxG0b+S5AX1+ehz1FXvpQAsdGxhMZCw/7j02kiVGVuJVvdtGfj1Hgjm/aghdmSE3Gm9vSAgnT1SXw4GKFPvmRrVN45VjRc1UCZAJl43JywMpBwUbJr+ZFw= X-MS-TrafficTypeDiagnostic: AM4PR0202MB2771: X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(8121501046)(5005006)(3231023)(2400081)(944501161)(93006095)(93001095)(10201501046)(3002001)(6041288)(20161123560045)(2016111802025)(20161123564045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6043046)(6072148)(201708071742011); SRVR:AM4PR0202MB2771; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM4PR0202MB2771; X-Microsoft-Exchange-Diagnostics: 1; AM4PR0202MB2771; 4:4QUR84FGChZTYaf4oht35DXBKqlutk0xnLw3bhGQJUbs+cSEtWJVHhUEVBdAZsq/E7xKHSp+MSNr81wCC8w6YjJwf/sCzQntzcO+Nwnep8Rj2fOQWPQJfHLepEtfB7LFQHhX0xIZbJvVZfZf9HkGGSD4VEf6GBzfCfXilagpvOFBmcYvTyHTyDetdlIZOIhWxbjvAsQ+7DVydziUaG/PPCaHQ6tvJBiwP7KY4PV9z5KXTg4ytsmdko4B1bGGpeXYNBhpbo9WpxZDuVNzC/KYWA== X-Forefront-PRVS: 0560A2214D X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(366004)(39380400002)(346002)(39830400003)(396003)(376002)(199004)(189003)(5660300001)(16526018)(68736007)(305945005)(6116002)(3846002)(25786009)(7736002)(8936002)(2906002)(47776003)(6512007)(6916009)(2950100002)(81166006)(6486002)(50226002)(4326008)(36756003)(6666003)(53936002)(81156014)(106356001)(15760500003)(386003)(48376002)(59450400001)(8676002)(51416003)(1076002)(97736004)(74482002)(6506007)(5890100001)(316002)(105586002)(66066001)(26005)(54906003)(50466002)(478600001)(16586007)(76176011)(86362001)(52116002)(15583001)(217873001)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:AM4PR0202MB2771; H:orc.pedanet; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: axentia.se does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; AM4PR0202MB2771; 23:tyx0Rb7IRdrD6om7lHUQWGR85Vc5DHyhcq3TBfTChF6VERBo/Bw15idMDk2bgbrJgbS116As9Tj9tGCh94jm/vwg/dx8NSKsQJt7qXTcunmHSoTKG73HnmjZ9tlhoL/ASZ/N8/nEncSj6O5ckcGZObRLgbA31C4BIJ/DwFc5Wv0ZnrdWE2wmDYvfJsju1jIWLeP+TdGS2Dzo9O220pnvNfs25AIZnVDklOHI6qJHz+rLPFMz8gFOQuN8xlZ4NZIlNveJL3EgevuNheISWOyLhp+jKD/yWj/DuWDoROWbAaJXb7Y5ayNsFlaR9yLOpNAfR1t0H/YvusrlQgHEE7GJ29Fn/CvUI/N8kOzyTy3bopKSZgPkG5G96jF+8gI0ufc0bKRvgb8V5dmuKNBt7ON4Y/OmrRDjw3bUW6TC/fjidQ6yvx1V4AnHu9dDuJAy4NZoYojUY8XmskfWr2wP2Erai5Do0vCPbs1BzgbubrbePF4amFYWzmrL616RIVHqd3kJqshBVU5hp+j1ziqgv99OAXXrUWvT99WLBJSyC6i2NrT4hiosboKDpgD6pVDD45JFiDA2IAqo50Bi/WAZ0T1gAsadGNFZ6EzlG8pLeb3rKFwrGMciHfFT+Y1VwbRQwkNYeZ34ux1u5eXcBp68/B4PoelnPfxYMEngaGpfkRy/3ntkoUjl0WbT0wtSazIKahoy0peHEwjCMbQun9tvWKVDGimTnNZJY5mOJn8ItjYhN/Hydrbq7g89QqH6Sjyk+AOtdTXaDaVHP0YRU4cvhMeHcId2DDoY/FjyKt9ZQKNvN4vTPEPczEABiFNEh9jRy+ilh1NeOyckeUGhPHLCqFHkT84XhXiqE9LGSA++cdyon/tVlxoEANG8k4iybCoYBE2BU+dTg67w1qUVf0nlHGTk+hmo9CCMDaORpQr983x5gDE/lANJD8KvBiS60GdCesetyOqgdjvDeqBERguYKE6GmsuC2Hfbew01oOyuV25IK9RntLykNj5jzzsVIy40n4MvGPw6KRww2EvlpWGIObo5boLSOjls7V78hhZuVVc4DteG6VGe9YzGAxENxviDjyIiPAuTcbacO5P6HMPkcXazzgku8ROHCIeZycA3JF7PUiGVObjf3ZcxwQCmGDVaw1L9SXQ19jT7/+FgkbKj57GS0loVvSlhB+0FzmuHGFTC/Bzl37v7liWbDKD52IbQHxFyJDOL/xxijtZZQX3/oLG63UtvrSe+LCXo2HB8weyCCRuLuG7BzzDra1QRzQl0YpcraQyj/zFjdZkocstJmNPjjQ== X-Microsoft-Exchange-Diagnostics: 1; AM4PR0202MB2771; 6:6OKBlPbY2Uwypc0O/FQx6CDqpYksHGgJ2KQUzPMZcZmXRAgJk/NezY1kspQJNC4NFcmGiGgNw8EvmA1RshDm1U1VJC44A/uJRVtGY4y8LNrpYzn65IOvZHMeFsCxoQ0fX7jfmumaqUI7yvSJIr8i0ITOldKayh6SbAFxA9DPlOPKYOGttHaAPBvZjyvAGUCXgZnPBkzo/9rJvvr6c0TP7NTjnvJIbFvfXShfWmwZGIB8MxF4IlQ1zQM5Hj1M8Qpbm/y2lKOO8x+tUXvyKv/auyjPDFu+apbMtHN+7rcf7t+f464U335HLY72bQM+yoWeGaPRTQ/aJkG0XVTDzkLxUoCldwFnnkwqkNpfWC0A1AQ=; 5:T6MGPjQMcwSk0MSYWje6CEHdT9l/41O/xx5c7AhWYi8WkhJ7Hc/y/d0fjIw8/jvj7QHLjSTiiqR+on/ID+icDQfmBVsNPyqje3lPSUDdmU6lBMpJqKXpV3sQriyq/0Po/9hWl6buk3u/WhdNJF5hOf6nHcm7hK27/dIeUeV+m2U=; 24:otiUu5MnQS/236jD6kx91F7xdIuVGPrjiWO5YzM38Gn9jbvQKmSiDpo3RSxwnA+P2vSY/XlwOYjWAIfWYbTjsmYAnDIDGoOzu6N91cIS2/4=; 7:PANf4vTlTuBmQsLzkQF60N4wNFu2fvNA15U+y1fdFmdhJfhAlPddKC3oUu8mJq2p6K95iodpbI9FR0LoG7YCsgSgmLmGSltzEtyZjVWEYW9/Jtof9dUKHeQ7KZWEf2dZQoiCcjk2Rq921QF8RiPV2dgtBa5+1O+rCEIPuPNw0KpZ35VJ7wDoCOrETnHhQvEtnQeHWHwi8SxvdW8inm5WBi8vEc17E0J6g/ItAB2E0kSwysfjlmgpdU8NOdRMqq4m SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jan 2018 11:37:10.7640 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e44ecded-4f3c-4c0f-8546-08d5618c79e8 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4ee68585-03e1-4785-942a-df9c1871a234 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0202MB2771 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Can be used during probe to double check that the probed device is what is expected. Loosely based on code from Adrian Fiergolski . Signed-off-by: Peter Rosin Reviewed-by: Wolfram Sang --- drivers/i2c/i2c-core-base.c | 33 +++++++++++++++++++++++++++++++++ include/linux/i2c.h | 30 ++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c index 5a00bf443d06..f496b917529d 100644 --- a/drivers/i2c/i2c-core-base.c +++ b/drivers/i2c/i2c-core-base.c @@ -58,6 +58,8 @@ #define I2C_ADDR_7BITS_MAX 0x77 #define I2C_ADDR_7BITS_COUNT (I2C_ADDR_7BITS_MAX + 1) +#define I2C_ADDR_DEVICE_ID 0x7c + /* * core_lock protects i2c_adapter_idr, and guarantees that device detection, * deletion of detected devices, and attach_adapter calls are serialized @@ -1968,6 +1970,37 @@ int i2c_transfer_buffer_flags(const struct i2c_client *client, char *buf, } EXPORT_SYMBOL(i2c_transfer_buffer_flags); +/** + * i2c_get_device_id - get manufacturer, part id and die revision of a device + * @client: The device to query + * @id: The queried information + * + * Returns negative errno on error, zero on success. + */ +int i2c_get_device_id(const struct i2c_client *client, + struct i2c_device_identity *id) +{ + struct i2c_adapter *adap = client->adapter; + union i2c_smbus_data raw_id; + int ret; + + if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_I2C_BLOCK)) + return -EOPNOTSUPP; + + raw_id.block[0] = 3; + ret = i2c_smbus_xfer(adap, I2C_ADDR_DEVICE_ID, client->flags, + I2C_SMBUS_READ, client->addr << 1, + I2C_SMBUS_I2C_BLOCK_DATA, &raw_id); + if (ret) + return ret; + + id->manufacturer_id = (raw_id.block[1] << 4) | (raw_id.block[2] >> 4); + id->part_id = ((raw_id.block[2] & 0xf) << 5) | (raw_id.block[3] >> 3); + id->die_revision = raw_id.block[3] & 0x7; + return 0; +} +EXPORT_SYMBOL_GPL(i2c_get_device_id); + /* ---------------------------------------------------- * the i2c address scanning function * Will not work for 10-bit addresses! diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 419a38e7c315..44ad14e016b5 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h @@ -47,6 +47,7 @@ struct i2c_algorithm; struct i2c_adapter; struct i2c_client; struct i2c_driver; +struct i2c_device_identity; union i2c_smbus_data; struct i2c_board_info; enum i2c_slave_event; @@ -186,8 +187,37 @@ extern s32 i2c_smbus_write_i2c_block_data(const struct i2c_client *client, extern s32 i2c_smbus_read_i2c_block_data_or_emulated(const struct i2c_client *client, u8 command, u8 length, u8 *values); +int i2c_get_device_id(const struct i2c_client *client, + struct i2c_device_identity *id); #endif /* I2C */ +/** + * struct i2c_device_identity - i2c client device identification + * @manufacturer_id: 0 - 4095, database maintained by NXP + * @part_id: 0 - 511, according to manufacturer + * @die_revision: 0 - 7, according to manufacturer + */ +struct i2c_device_identity { + u16 manufacturer_id; +#define I2C_DEVICE_ID_NXP_SEMICONDUCTORS 0 +#define I2C_DEVICE_ID_NXP_SEMICONDUCTORS_1 1 +#define I2C_DEVICE_ID_NXP_SEMICONDUCTORS_2 2 +#define I2C_DEVICE_ID_NXP_SEMICONDUCTORS_3 3 +#define I2C_DEVICE_ID_RAMTRON_INTERNATIONAL 4 +#define I2C_DEVICE_ID_ANALOG_DEVICES 5 +#define I2C_DEVICE_ID_STMICROELECTRONICS 6 +#define I2C_DEVICE_ID_ON_SEMICONDUCTOR 7 +#define I2C_DEVICE_ID_SPRINTEK_CORPORATION 8 +#define I2C_DEVICE_ID_ESPROS_PHOTONICS_AG 9 +#define I2C_DEVICE_ID_FUJITSU_SEMICONDUCTOR 10 +#define I2C_DEVICE_ID_FLIR 11 +#define I2C_DEVICE_ID_O2MICRO 12 +#define I2C_DEVICE_ID_ATMEL 13 +#define I2C_DEVICE_ID_NONE 0xffff + u16 part_id; + u8 die_revision; +}; + enum i2c_alert_protocol { I2C_PROTOCOL_SMBUS_ALERT, I2C_PROTOCOL_SMBUS_HOST_NOTIFY, From patchwork Mon Jan 22 11:36:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Rosin X-Patchwork-Id: 864228 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=axentiatech.onmicrosoft.com header.i=@axentiatech.onmicrosoft.com header.b="v98Fo+KZ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zQ8YG0DSQz9sNc for ; Mon, 22 Jan 2018 22:37:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751107AbeAVLhT (ORCPT ); Mon, 22 Jan 2018 06:37:19 -0500 Received: from mail-eopbgr10097.outbound.protection.outlook.com ([40.107.1.97]:27111 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751137AbeAVLhR (ORCPT ); Mon, 22 Jan 2018 06:37:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axentiatech.onmicrosoft.com; s=selector1-axentia-se; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=K4XxruF23uOzCfo7IzCPQohRcJ2tT93qVwSp+oDHGbk=; b=v98Fo+KZActxaIaYON6xk6sUbKTuTG/B0aYEIAfLI0BL0qn8wLSK8bCIKJ9ukz9h7UybL7WLq3rowcOCePs0VgQSPq86QBjNDwzv8p0qlw6fgsq6AMtramph0FAKIyhkaCN0++jmqiEEIPzwandNWutLxgXrg6RHF0wAMJcePyc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; Received: from orc.pedanet (85.226.244.23) by AM4PR0202MB2771.eurprd02.prod.outlook.com (2603:10a6:200:8c::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.428.17; Mon, 22 Jan 2018 11:37:11 +0000 From: Peter Rosin To: Adrian Fiergolski Cc: Peter Rosin , Wolfram Sang , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 2/2] i2c: mux: pca954x: verify the device id of the pca984x chips Date: Mon, 22 Jan 2018 12:36:57 +0100 Message-Id: <20180122113657.32094-3-peda@axentia.se> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180122113657.32094-1-peda@axentia.se> References: <20180122113657.32094-1-peda@axentia.se> MIME-Version: 1.0 X-Originating-IP: [85.226.244.23] X-ClientProxiedBy: HE1PR0102CA0065.eurprd01.prod.exchangelabs.com (2603:10a6:7:7d::42) To AM4PR0202MB2771.eurprd02.prod.outlook.com (2603:10a6:200:8c::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1f9ab9b4-4836-4c89-0a49-08d5618c7a4f X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(7021125)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:AM4PR0202MB2771; X-Microsoft-Exchange-Diagnostics: 1; AM4PR0202MB2771; 3:+6Wh4+qZqylGNlwBeMW0fcV+68D3TZI/UxzgzqNpOYgsAmK2LziZ5Ui0JhVDyXMDWzuR8GSSmuaTqm+KlOOZCl5V/unlTg8xa7uavVyrBUDMtJMdRFBfkKnEeWx978dLDNM2PzeMYPHUpQnhX6mG3IFJJ+qGwFmOSAQ/mOexC53tnMxvJQwOEiczLi401OLFOfkvdCTBPNjiE+18rudsjZUWEuqZm4Dw1UGC+RW7hUvPmrstid/ejIJouJRw3HOr; 25:a3crA5Fc0lq+cDGjbutypbEodSLg9W6o1pWSaDC4iUYqlZyHz5d+eMhaE58kCYnCdmJlNKu8sONYpZXiWVUbzTBt3L1WXYurAopQm7QJHnIYs9v1/205jh0aWeWrOqhG5/8BqBuipkGJiJ8ABB0go3kHFXOZDtwD28hrA3lTumZskEPzKm/uUPsiwTHmH24HTVag9BmELpX/bpA6IEEe9jVOhnHtdxWaLrTh6LSt6vC3N1fF8499FY36gQ52ACZpSfgWMT/SlJM+8WXiadsVxUVSH981sStRmxKXAgwEdEFuiV/9ELzyzfRiI9utStTE9KPQBde1QjXY16CAcrFyKQ==; 31:HsZh7hzBvSf2zqx8O0G/f27TP1pe8wV3IWl6o8/5bUBGLqqCrw3LjtzecPaKjiOOpuzz+hrEMsL/EIeuBsrGNkNixQC9tyye6QIgksY2hgSjJ3hywr4nDLGmbnkxm2ygSL12EM1lAttXwckIPwdvp8jOokTpceaV7OcB1LVxZBvssH/0pehirjaXSbpn7X2z02reRWycAapEInMdaaXlPyI28AaJy+MDeaPo8FIheSk= X-MS-TrafficTypeDiagnostic: AM4PR0202MB2771: X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(8121501046)(5005006)(3231023)(2400081)(944501161)(93006095)(93001095)(10201501046)(3002001)(6041288)(20161123560045)(2016111802025)(20161123564045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6043046)(6072148)(201708071742011); SRVR:AM4PR0202MB2771; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM4PR0202MB2771; X-Microsoft-Exchange-Diagnostics: 1; AM4PR0202MB2771; 4:aYAdsvCNlH0DLuUXmuzVz9cMqIi7pJgc8irzEZdCiPVn+hjpWjBF5olFs5qMXH07QPQE2EJ3LPN2oq6bBnlRw/gPmWDeppXIRYa4m5TJ1p2vqbmvivl/pqb70OPW7lpcMa9wZK9a4uKiP4r/4p8qb66Ib84rxlB4jrAIZu1OJJg5dfjZjl+1MgOB4HqEpq3GAjFD23gzRPL94v9E+hnAxxwaE8uooEEvfVhw6NrZhUhY2rzlyzsaVShICtQL0+Sr5UaGCcmcmlsg1v2TM+KyIw== X-Forefront-PRVS: 0560A2214D X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(366004)(39380400002)(346002)(39830400003)(396003)(376002)(199004)(189003)(5660300001)(16526018)(68736007)(305945005)(6116002)(3846002)(25786009)(7736002)(8936002)(2906002)(47776003)(6512007)(6916009)(2950100002)(81166006)(6486002)(50226002)(4326008)(36756003)(6666003)(53936002)(81156014)(106356001)(386003)(48376002)(8676002)(51416003)(1076002)(97736004)(74482002)(6506007)(316002)(105586002)(66066001)(26005)(54906003)(575784001)(50466002)(478600001)(16586007)(76176011)(86362001)(52116002)(217873001)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:AM4PR0202MB2771; H:orc.pedanet; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: axentia.se does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; AM4PR0202MB2771; 23:XZnB73kJXmo/5CVTU9bHKjRoxUl8ODvGa5J3DIp7Eys60qIfDbehEv2OhVQjt1VnnyaAr0qTRK/W0HXWqJnjDY+0VujipSYgbWU3AAW6x8B2ra/HwucvNm3B90m0i8cd1phdBbOTR0rUYu4y2uTA5VCH5BxoEsRUdSUBav7eXuPASCY3NV8anaJDulIaa1+RiL1nRySIVoVSTgIISI+kjDMYOUJ6HLDsBUSGrHpMsjPUm9IwJ/6nYF3UcLr4KLvWTeEYLPsneqr1e9DKEfwe2wZUk+pNAWa6AUPAJ7U+J4fObaPKkn2g3mzNyy0CDRQy6z5y6CysBnjGqcO+t5u5AqKvsVi72LhmbMGML+6jFTXRCunvA+sCGuPdj4rCjq4h15gT64YZi+VO7Xhgc2qVEZFyK9acw+nV99nQ/6vg+5Ba6beSnUNbJvs4PFksteeKReEzLgUgv7W62tVITav+sVS8s/e0zSmDNyyX6hMtp/Gm8btCAImXjB8Jkc0rQq12Uy0ydSha8BahC/KVUW/a9EGtbpZpjK942SCUb5niZZzWLlM+w3wGBfpKhxTJwJcSe1LGqK0vhY3CKmhkZzE/B8MMf8WC2QTazduBFXtx/NgAhjd1Rmum+D4lOxWlBbYb7HAs9QWWsKVuFT76F3Dxd2XUXzG5MDXnHyS3AC47Y5cB6mPsiu8SQXBmdH7tkG6NwucFoLY3ytuJEl304Ds+8WfPxNDjRJraebIOALcpQwNlztM6ROWF34eGqHBD6dQkCF6/CkNGcsOGNIdtfTZ4Os/9antmy/1ECRrSGmeRAjynIFXE++TkIRonH48Nexoub1OBQUdh8U4+NfvAHeQ7fvRljJ4LgcVJrOObnHVTBlU1sVMVUj1tnYbiKMZK2yJQea/9XTojw7oEWj+UJ6wrwrDUSqkvnv56atVY/SnJaJmMtVsy82PYSXe3pL3wdfG15KBQxXStn4NUrIYpBoEKaJqqs87CHpJHnzNihTCbIiO6Y1mSZ6xANeCO1bnp8n4ntIdbOTHtCYbYha6wgASdsfFBaf+O8yO4BNz4mn6MOv61HiEbZH67zKRg2y6M0OWfQgo4l6PNxPU81M8ZC+1Q9anbD4qClHF0c3uEjyqRDhvo2gN6l3XTq1Yx6MK+0kixHc8+6DBR4kjHVKnRNVi19PGBSt8fHdGu+AlN+xJV3VUPB/HEHEYCIbwg41mfI9+a X-Microsoft-Exchange-Diagnostics: 1; AM4PR0202MB2771; 6:NYstPKngVm5m05jSiqoOWeVPJUCCGcR4LCUx1ms2kHhBjWbR6IhlChS5OomtUsNa17Anzj2iahBK1B+EGoBzBq/GEhWX7lH5UPDdffjWC5E7gBJ4+WDx7jH75gDmhv2b7rbWGYHy7Xftt2KukTT25fXK73nKcbg/6Sir2cDVEEMrGbXDx2RBwcGvJzWECeCBg/Yi9/ZJVB4uYP4AepDb88PUFSuss/uUH4/2/ZPxLh2iR1EZtY3Aeh+AqBIsmPlUZ4M3DEYN5i2DjkdEgXeiZWm8WgPlvCx5P7TLUcPH7O+93B8tPm09ASxGCB/A5U/ACZMk0v+ISXQ31FfjdadngmuQqrQrnW0gGo+QHj2NMkE=; 5:ef+4eaHq2KDContLhwmlAxPVzCN221vsHnvkOE2RK5q0rHXP3ogHgKR4296SUsrN3DQeBV8bmm128L9W3Bax2gDefUqJcUA1q4dxG97qEGagLiLBk68Y2kjUX62CAQR1WkOjnecCQVKoKZY/w8m5c0A/6ixGsrncoRcCAYANZjM=; 24:V2WiQl76kBbX8zS7VtvYVjRouH0IcG8u1fxwNPD5D/6euT1iWYPDD6CmkbpfnZOZ5LAhyeps2y5dOCNVipFgfA7OgQCwziN9makPdzwc+xI=; 7:hs38GELfcocAIqJZcWk+piR7QVNKcmMflryOyQa6BzAwuAsAK/LQsyMwtfVynxrV52Id+O/qHT20tYpi6CedK5vflpbPHsscaHlo8exf4GF0aRYzsvZELFYopet6iEROqf0pLz2gQha2dBgz7Pa5sNY9ShE+xMEUBXyqfhc2n3YgwDNo/avE/fMmmbHteTJ479SBvQnd9LBbN2Ui+sgiJfEUvZ0snOFjon/gfyvAKq26Gy0zuB73Rn+pQVJ2Adps SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jan 2018 11:37:11.4359 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1f9ab9b4-4836-4c89-0a49-08d5618c7a4f X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4ee68585-03e1-4785-942a-df9c1871a234 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0202MB2771 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org Make sure to not disallow the chips on adapters that are not capable of reading the device id. Signed-off-by: Peter Rosin --- drivers/i2c/muxes/i2c-mux-pca954x.c | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/drivers/i2c/muxes/i2c-mux-pca954x.c b/drivers/i2c/muxes/i2c-mux-pca954x.c index fbb84c7ef282..ff0c7a144fbb 100644 --- a/drivers/i2c/muxes/i2c-mux-pca954x.c +++ b/drivers/i2c/muxes/i2c-mux-pca954x.c @@ -77,6 +77,7 @@ struct chip_desc { pca954x_ismux = 0, pca954x_isswi } muxtype; + struct i2c_device_identity id; }; struct pca954x { @@ -97,59 +98,83 @@ static const struct chip_desc chips[] = { .nchans = 2, .enable = 0x4, .muxtype = pca954x_ismux, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, }, [pca_9542] = { .nchans = 2, .enable = 0x4, .has_irq = 1, .muxtype = pca954x_ismux, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, }, [pca_9543] = { .nchans = 2, .has_irq = 1, .muxtype = pca954x_isswi, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, }, [pca_9544] = { .nchans = 4, .enable = 0x4, .has_irq = 1, .muxtype = pca954x_ismux, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, }, [pca_9545] = { .nchans = 4, .has_irq = 1, .muxtype = pca954x_isswi, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, }, [pca_9546] = { .nchans = 4, .muxtype = pca954x_isswi, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, }, [pca_9547] = { .nchans = 8, .enable = 0x8, .muxtype = pca954x_ismux, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, }, [pca_9548] = { .nchans = 8, .muxtype = pca954x_isswi, + .id = { .manufacturer_id = I2C_DEVICE_ID_NONE }, }, [pca_9846] = { .nchans = 4, .muxtype = pca954x_isswi, + .id = { + .manufacturer_id = I2C_DEVICE_ID_NXP_SEMICONDUCTORS, + .part_id = 0x10b, + }, }, [pca_9847] = { .nchans = 8, .enable = 0x8, .muxtype = pca954x_ismux, + .id = { + .manufacturer_id = I2C_DEVICE_ID_NXP_SEMICONDUCTORS, + .part_id = 0x108, + }, }, [pca_9848] = { .nchans = 8, .muxtype = pca954x_isswi, + .id = { + .manufacturer_id = I2C_DEVICE_ID_NXP_SEMICONDUCTORS, + .part_id = 0x10a, + }, }, [pca_9849] = { .nchans = 4, .enable = 0x4, .muxtype = pca954x_ismux, + .id = { + .manufacturer_id = I2C_DEVICE_ID_NXP_SEMICONDUCTORS, + .part_id = 0x109, + }, }, }; @@ -384,6 +409,24 @@ static int pca954x_probe(struct i2c_client *client, else data->chip = &chips[id->driver_data]; + if (data->chip->id.manufacturer_id != I2C_DEVICE_ID_NONE) { + struct i2c_device_identity id; + + ret = i2c_get_device_id(client, &id); + if (ret && ret != -EOPNOTSUPP) + return ret; + + if (!ret && + (id.manufacturer_id != data->chip->id.manufacturer_id || + id.part_id != data->chip->id.part_id)) { + dev_warn(&client->dev, + "unexpected device id %03x-%03x-%x\n", + id.manufacturer_id, id.part_id, + id.die_revision); + return -ENODEV; + } + } + data->last_chan = 0; /* force the first selection */ idle_disconnect_dt = of_node &&