This message generated a parse failure. Raw output follows here. Please use 'back' to navigate. From devnull@lkml.org Thu Apr 25 01:21:54 2024 >From mailfetcher Sun Jan 14 23:26:12 2018 Envelope-to: lkml@grols.ch Delivery-date: Sun, 14 Jan 2018 15:52:29 +0100 Received: from srv.grols.ch [5.172.41.101] by 1eb738dfd482 with IMAP (fetchmail-6.3.26) for (single-drop); Sun, 14 Jan 2018 23:26:12 +0100 (CET) Received: from vger.kernel.org ([209.132.180.67]) by home.grols.ch with esmtp (Exim 4.89) (envelope-from ) id 1eaje9-0003Fc-0l for lkml@grols.ch; Sun, 14 Jan 2018 15:52:29 +0100 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752075AbeANOwM (ORCPT ); Sun, 14 Jan 2018 09:52:12 -0500 Received: from webmail.no-log.org ([80.67.172.39]:44394 "EHLO webmail.no-log.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751735AbeANOwL (ORCPT ); Sun, 14 Jan 2018 09:52:11 -0500 Received: by webmail.no-log.org (Postfix, from userid 33) id D9A7C4C245; Sun, 14 Jan 2018 15:41:20 +0100 (CET) X-Squirrel-UserHash: WRwEDR8GDDgGQQAK X-Squirrel-FromHash: AVFfWQtRUC8= Message-Id: Date: Sun, 14 Jan 2018 15:41:20 +0100 Subject: Re: [PATCH v7 2/4] i2c-acpi : exclude ARA address for smbus device From: "Marc CAPDEVILLE" To: "Jonathan Cameron" Cc: "Marc CAPDEVILLE" , "Kevin Tsai" , "Hartmut Knaack" , "Lars-Peter Clausen" , "Peter Meerwald-Stadler" , "Mika Wes User-Agent: SquirrelMail/1.4.21 Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7BIT X-Priority: 3 (Normal) Importance: Normal Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-Id: X-Mailing-List: linux-kernel@vger.kernel.org Received-SPF: none client-ip=209.132.180.67; envelope-from=linux-kernel-owner@vger.kernel.org; helo=vger.kernel.org X-Spam-Score: 6.2 X-Spam-Score-Bar: ++++++ X-Spam-Action: no action X-Spam-Report: Action: no action Symbol: AUTH_NA(1.00) Symbol: TO_DN_SOME(0.00) Symbol: DMARC_NA(0.00) Symbol: RCVD_COUNT_THREE(0.00) Symbol: ASN(0.00) Symbol: MIME_GOOD(-0.10) Symbol: FROM_HAS_DN(0.00) Symbol: R_SPF_NA(0.00) Symbol: HAS_X_PRIO_THREE(0.00) Symbol: FAKE > On Sat, 13 Jan 2018 14:37:03 +0100 > Marc CAPDEVILLE wrote: >> Somme ACPI enumerated devices are known to support smbus alert protocol. >> Theses devices may be miss-enumerated with the reserved smbus ARA address. >> This is the case on Asus T100 tablet where cm3218 ambiant light sensor expose two i2c serial bus connections, with the first one being the alert >> response address. >> This patch make a match on known ACPI ids for which devices are smbus ARA >> capable, then skip the connection if it has the reserved 0x0c address and >> mark it with I2C_CLIENT_ALERT flag. So device is enumerated with the correct address. > I wonder if we are safe to always skip 0x0c address whether or not we know the device supports ARA. The exception may be for devices that do support ARA but are rolling their own support the hard way... The device is only flagged with I2C_CLIENT_ALERT if its ID is in the i2c_acpi_alert_device_ids. IF a driver want to be enumerated with the reserved Ox0c address, It just have to not put its Id in this table. But this may break with registering the smbus_alert device as the address will be marked as busy for this adapter. > I suppose it's possible there are i2c devices (not smbus where the spec says you must not use 0x0c for normal address IIRC) that use this address. Does anyone know of any? I think this possible, but a such device can't share the bus with a smbus alert capable device. > Jonathan >> Signed-off-by: Marc CAPDEVILLE >> --- >> drivers/i2c/i2c-core-acpi.c | 23 +++++++++++++++++++++-- >> include/linux/i2c.h | 1 + >> 2 files changed, 22 insertions(+), 2 deletions(-) >> diff --git a/drivers/i2c/i2c-core-acpi.c b/drivers/i2c/i2c-core-acpi.c index a9126b3cda61..5a8886f14329 100644 >> --- a/drivers/i2c/i2c-core-acpi.c >> +++ b/drivers/i2c/i2c-core-acpi.c >> @@ -59,8 +59,14 @@ static int i2c_acpi_fill_info(struct acpi_resource *ares, void *data) >> if (sb->type != ACPI_RESOURCE_SERIAL_TYPE_I2C) >> return 1; >> - if (lookup->index != -1 && lookup->n++ != lookup->index) >> - return 1; >> + if (lookup->index != -1) { >> + if (lookup->n++ != lookup->index) >> + return 1; >> + } else { >> + if (lookup->info->flags & I2C_CLIENT_ALERT && >> + sb->slave_address == 0x0c) >> + return 1; >> + } >> status = acpi_get_handle(lookup->device_handle, >> sb->resource_source.string_ptr, >> @@ -85,6 +91,15 @@ static const struct acpi_device_id >> i2c_acpi_ignored_device_ids[] = { >> {} >> }; >> +static const struct acpi_device_id i2c_acpi_alert_device_ids[] = { + /* >> + * Smbus alert capable device which may have the reserved ARA address + * in their serial bus resources list. >> + */ >> + { "CPLM3218", 0 }, >> + {} >> +}; >> + >> static int i2c_acpi_do_lookup(struct acpi_device *adev, >> struct i2c_acpi_lookup *lookup) >> { >> @@ -100,6 +115,10 @@ static int i2c_acpi_do_lookup(struct acpi_device *adev, >> return -ENODEV; >> memset(info, 0, sizeof(*info)); >> + >> + if (acpi_match_device_ids(adev, i2c_acpi_alert_device_ids) == 0) + info->flags |= I2C_CLIENT_ALERT; >> + >> lookup->device_handle = acpi_device_handle(adev); >> /* Look up for I2cSerialBus resource */ >> diff --git a/include/linux/i2c.h b/include/linux/i2c.h >> index 7592dce12923..b0d6f1333442 100644 >> --- a/include/linux/i2c.h >> +++ b/include/linux/i2c.h >> @@ -743,6 +743,7 @@ i2c_unlock_adapter(struct i2c_adapter *adapter) >> #define I2C_CLIENT_SLAVE 0x20 /* we are the slave */ >> #define I2C_CLIENT_HOST_NOTIFY 0x40 /* We want to use I2C host notify >> */ >> #define I2C_CLIENT_WAKE 0x80 /* for board_info; true iff can wake */ >> +#define I2C_CLIENT_ALERT 0x100 /* Client use SMBUS alert protocol */ >> #define I2C_CLIENT_SCCB 0x9000 /* Use Omnivision SCCB protocol */ >> /* Must match I2C_M_STOP|IGNORE_NAK */ -- Marc CAPDEVILLE