From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751183AbeAVLhV (ORCPT ); Mon, 22 Jan 2018 06:37:21 -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 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; 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 Content-Type: text/plain 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; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;AM4PR0202MB2771;23:XZnB73kJXmo/5CVTU9bHKjRoxUl8ODvGa5J3DIp?= =?us-ascii?Q?7Eys60qIfDbehEv2OhVQjt1VnnyaAr0qTRK/W0HXWqJnjDY+0VujipSYgbWU?= =?us-ascii?Q?3AAW6x8B2ra/HwucvNm3B90m0i8cd1phdBbOTR0rUYu4y2uTA5VCH5BxoEsR?= =?us-ascii?Q?UdSUBav7eXuPASCY3NV8anaJDulIaa1+RiL1nRySIVoVSTgIISI+kjDMYOUJ?= =?us-ascii?Q?6HLDsBUSGrHpMsjPUm9IwJ/6nYF3UcLr4KLvWTeEYLPsneqr1e9DKEfwe2wZ?= =?us-ascii?Q?Uk+pNAWa6AUPAJ7U+J4fObaPKkn2g3mzNyy0CDRQy6z5y6CysBnjGqcO+t5u?= =?us-ascii?Q?5AqKvsVi72LhmbMGML+6jFTXRCunvA+sCGuPdj4rCjq4h15gT64YZi+VO7Xh?= =?us-ascii?Q?gc2qVEZFyK9acw+nV99nQ/6vg+5Ba6beSnUNbJvs4PFksteeKReEzLgUgv7W?= =?us-ascii?Q?62tVITav+sVS8s/e0zSmDNyyX6hMtp/Gm8btCAImXjB8Jkc0rQq12Uy0ydSh?= =?us-ascii?Q?a8BahC/KVUW/a9EGtbpZpjK942SCUb5niZZzWLlM+w3wGBfpKhxTJwJcSe1L?= =?us-ascii?Q?GqK0vhY3CKmhkZzE/B8MMf8WC2QTazduBFXtx/NgAhjd1Rmum+D4lOxWlBbY?= =?us-ascii?Q?b7HAs9QWWsKVuFT76F3Dxd2XUXzG5MDXnHyS3AC47Y5cB6mPsiu8SQXBmdH7?= =?us-ascii?Q?tkG6NwucFoLY3ytuJEl304Ds+8WfPxNDjRJraebIOALcpQwNlztM6ROWF34e?= =?us-ascii?Q?GqHBD6dQkCF6/CkNGcsOGNIdtfTZ4Os/9antmy/1ECRrSGmeRAjynIFXE++T?= =?us-ascii?Q?kIRonH48Nexoub1OBQUdh8U4+NfvAHeQ7fvRljJ4LgcVJrOObnHVTBlU1sVM?= =?us-ascii?Q?VUj1tnYbiKMZK2yJQea/9XTojw7oEWj+UJ6wrwrDUSqkvnv56atVY/SnJaJm?= =?us-ascii?Q?MtVsy82PYSXe3pL3wdfG15KBQxXStn4NUrIYpBoEKaJqqs87CHpJHnzNihTC?= =?us-ascii?Q?bIiO6Y1mSZ6xANeCO1bnp8n4ntIdbOTHtCYbYha6wgASdsfFBaf+O8yO4BNz?= =?us-ascii?Q?4mn6MOv61HiEbZH67zKRg2y6M0OWfQgo4l6PNxPU81M8ZC+1Q9anbD4qClHF?= =?us-ascii?Q?0c3uEjyqRDhvo2gN6l3XTq1Yx6MK+0kixHc8+6DBR4kjHVKnRNVi19PGBSt8?= =?us-ascii?Q?fHdGu+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-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@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 && -- 2.11.0