From patchwork Sat Jan 6 16:09:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 760577 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7AD358495 for ; Sat, 6 Jan 2024 16:09:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="KtRfWiAV" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1704557391; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=n2hBJGz2Wi/NPBvzLa93WdECv6trQwPMVFDwcu22NUY=; b=KtRfWiAVldWu6zuQc2acaHhCrR+8+vhdQbwsbzROhKfhdzwiQaH1+GxeEkC0m7WvSgAHD5 iA5NHctoAfTK2fifceCznSL/1n4MDdDNcevM2ebQqdM1kEjB+c+7EWkO++0wW/8WkQXEE4 nX+FNNkhxiN8dBNWPyh+aQk3UMPEAzU= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-623-eCfChzjBMguSfeeVReIJDA-1; Sat, 06 Jan 2024 11:09:46 -0500 X-MC-Unique: eCfChzjBMguSfeeVReIJDA-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6E76B85A588; Sat, 6 Jan 2024 16:09:45 +0000 (UTC) Received: from localhost.localdomain (unknown [10.39.192.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id B0D3D3C27; Sat, 6 Jan 2024 16:09:43 +0000 (UTC) From: Hans de Goede To: =?utf-8?q?Pali_Roh=C3=A1r?= , =?utf-8?q?Ilpo_J=C3=A4rvi?= =?utf-8?q?nen?= , Andy Shevchenko , Paul Menzel , Jean Delvare , Andi Shyti Cc: Hans de Goede , eric.piel@tremplin-utc.net, Marius Hoch , Dell.Client.Kernel@dell.com, Kai Heng Feng , platform-driver-x86@vger.kernel.org, Wolfram Sang , linux-i2c@vger.kernel.org Subject: [PATCH v2 1/6] platform/x86: dell-smo8800: Change probe() ordering a bit Date: Sat, 6 Jan 2024 17:09:28 +0100 Message-ID: <20240106160935.45487-2-hdegoede@redhat.com> In-Reply-To: <20240106160935.45487-1-hdegoede@redhat.com> References: <20240106160935.45487-1-hdegoede@redhat.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 Retrieve the IRQ number from the platform_device a bit earlier and only call platform_set_drvdata() on successful probe (the drvdata is only used from the remove() callback). This is a preparation patch for moving the lis3lv02d i2c_client instantiation from the i2c-i801 driver to dell-smo8800. Signed-off-by: Hans de Goede --- drivers/platform/x86/dell/dell-smo8800.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/platform/x86/dell/dell-smo8800.c b/drivers/platform/x86/dell/dell-smo8800.c index f7ec17c56833..87339cc78880 100644 --- a/drivers/platform/x86/dell/dell-smo8800.c +++ b/drivers/platform/x86/dell/dell-smo8800.c @@ -121,19 +121,17 @@ static int smo8800_probe(struct platform_device *device) init_waitqueue_head(&smo8800->misc_wait); + err = platform_get_irq(device, 0); + if (err < 0) + return err; + smo8800->irq = err; + err = misc_register(&smo8800->miscdev); if (err) { dev_err(&device->dev, "failed to register misc dev: %d\n", err); return err; } - platform_set_drvdata(device, smo8800); - - err = platform_get_irq(device, 0); - if (err < 0) - goto error; - smo8800->irq = err; - err = request_threaded_irq(smo8800->irq, smo8800_interrupt_quick, smo8800_interrupt_thread, IRQF_TRIGGER_RISING | IRQF_ONESHOT, @@ -147,6 +145,7 @@ static int smo8800_probe(struct platform_device *device) dev_dbg(&device->dev, "device /dev/freefall registered with IRQ %d\n", smo8800->irq); + platform_set_drvdata(device, smo8800); return 0; error: From patchwork Sat Jan 6 16:09:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 760733 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 42C878829 for ; Sat, 6 Jan 2024 16:09:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="ETo+EZ+h" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1704557390; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PSuzkqSbfa7IxQh1wOQFjchBTam0XYG42pnx8byXh6M=; b=ETo+EZ+hm5181dSqbeQPh13OTymM2RKToku6mFyKwbUJRnOFCK7FTI7S1fO/gdvk4LYYxb A+g4dZ1qoa+LsFB1xC0ahom4H729ZhjSP+uTvX1aNZQEWpDMWW8CcHIaNmLhcil1+R4HmF vdiGRhoAIrkx1AJaNozvJAmaLAsXN+I= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-98-0bHlWIgFNZedEo8sVr3bdA-1; Sat, 06 Jan 2024 11:09:48 -0500 X-MC-Unique: 0bHlWIgFNZedEo8sVr3bdA-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5866F101A555; Sat, 6 Jan 2024 16:09:47 +0000 (UTC) Received: from localhost.localdomain (unknown [10.39.192.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id A00613C27; Sat, 6 Jan 2024 16:09:45 +0000 (UTC) From: Hans de Goede To: =?utf-8?q?Pali_Roh=C3=A1r?= , =?utf-8?q?Ilpo_J=C3=A4rvi?= =?utf-8?q?nen?= , Andy Shevchenko , Paul Menzel , Jean Delvare , Andi Shyti Cc: Hans de Goede , eric.piel@tremplin-utc.net, Marius Hoch , Dell.Client.Kernel@dell.com, Kai Heng Feng , platform-driver-x86@vger.kernel.org, Wolfram Sang , linux-i2c@vger.kernel.org Subject: [PATCH v2 2/6] platform/x86: dell-smo8800: Move instantiation of lis3lv02d i2c_client from i2c-i801 to dell-smo8800 Date: Sat, 6 Jan 2024 17:09:29 +0100 Message-ID: <20240106160935.45487-3-hdegoede@redhat.com> In-Reply-To: <20240106160935.45487-1-hdegoede@redhat.com> References: <20240106160935.45487-1-hdegoede@redhat.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 It is not necessary to handle the Dell specific instantiation of i2c_client-s for SMO8xxx ACPI devices without an ACPI I2cResource inside the generic i801 I2C adapter driver. The kernel already instantiates platform_device-s for these ACPI devices and the drivers/platform/x86/dell/dell-smo8800.c driver binds to these platform drivers. Move the i2c_client instantiation from the generic i2c-i801 driver to the Dell specific dell-smo8800 driver. Signed-off-by: Hans de Goede --- Changes in v2: - Use a pci_device_id table to check for IDF (non main) i2c-i801 SMBusses - Add a comment documenting the IDF PCI device ids --- drivers/i2c/busses/i2c-i801.c | 126 +---------------------- drivers/platform/x86/dell/dell-smo8800.c | 121 +++++++++++++++++++++- 2 files changed, 123 insertions(+), 124 deletions(-) diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c index 070999139c6d..595e263ba623 100644 --- a/drivers/i2c/busses/i2c-i801.c +++ b/drivers/i2c/busses/i2c-i801.c @@ -975,6 +975,10 @@ static const struct i2c_algorithm smbus_algorithm = { #define FEATURES_ICH4 (FEATURE_SMBUS_PEC | FEATURE_BLOCK_BUFFER | \ FEATURE_HOST_NOTIFY) +/* + * NOTE: If new models with FEATURE_IDF are added please also update + * i801_idf_ids[] in drivers/platform/x86/dell-smo8800.c + */ static const struct pci_device_id i801_ids[] = { { PCI_DEVICE_DATA(INTEL, 82801AA_3, 0) }, { PCI_DEVICE_DATA(INTEL, 82801AB_3, 0) }, @@ -1141,125 +1145,6 @@ static void dmi_check_onboard_devices(const struct dmi_header *dm, void *adap) } } -/* NOTE: Keep this list in sync with drivers/platform/x86/dell-smo8800.c */ -static const char *const acpi_smo8800_ids[] = { - "SMO8800", - "SMO8801", - "SMO8810", - "SMO8811", - "SMO8820", - "SMO8821", - "SMO8830", - "SMO8831", -}; - -static acpi_status check_acpi_smo88xx_device(acpi_handle obj_handle, - u32 nesting_level, - void *context, - void **return_value) -{ - struct acpi_device_info *info; - acpi_status status; - char *hid; - int i; - - status = acpi_get_object_info(obj_handle, &info); - if (ACPI_FAILURE(status)) - return AE_OK; - - if (!(info->valid & ACPI_VALID_HID)) - goto smo88xx_not_found; - - hid = info->hardware_id.string; - if (!hid) - goto smo88xx_not_found; - - i = match_string(acpi_smo8800_ids, ARRAY_SIZE(acpi_smo8800_ids), hid); - if (i < 0) - goto smo88xx_not_found; - - kfree(info); - - *return_value = NULL; - return AE_CTRL_TERMINATE; - -smo88xx_not_found: - kfree(info); - return AE_OK; -} - -static bool is_dell_system_with_lis3lv02d(void) -{ - void *err = ERR_PTR(-ENOENT); - - if (!dmi_match(DMI_SYS_VENDOR, "Dell Inc.")) - return false; - - /* - * Check that ACPI device SMO88xx is present and is functioning. - * Function acpi_get_devices() already filters all ACPI devices - * which are not present or are not functioning. - * ACPI device SMO88xx represents our ST microelectronics lis3lv02d - * accelerometer but unfortunately ACPI does not provide any other - * information (like I2C address). - */ - acpi_get_devices(NULL, check_acpi_smo88xx_device, NULL, &err); - - return !IS_ERR(err); -} - -/* - * Accelerometer's I2C address is not specified in DMI nor ACPI, - * so it is needed to define mapping table based on DMI product names. - */ -static const struct { - const char *dmi_product_name; - unsigned short i2c_addr; -} dell_lis3lv02d_devices[] = { - /* - * Dell platform team told us that these Latitude devices have - * ST microelectronics accelerometer at I2C address 0x29. - */ - { "Latitude E5250", 0x29 }, - { "Latitude E5450", 0x29 }, - { "Latitude E5550", 0x29 }, - { "Latitude E6440", 0x29 }, - { "Latitude E6440 ATG", 0x29 }, - { "Latitude E6540", 0x29 }, - /* - * Additional individual entries were added after verification. - */ - { "Latitude 5480", 0x29 }, - { "Vostro V131", 0x1d }, - { "Vostro 5568", 0x29 }, -}; - -static void register_dell_lis3lv02d_i2c_device(struct i801_priv *priv) -{ - struct i2c_board_info info; - const char *dmi_product_name; - int i; - - dmi_product_name = dmi_get_system_info(DMI_PRODUCT_NAME); - for (i = 0; i < ARRAY_SIZE(dell_lis3lv02d_devices); ++i) { - if (strcmp(dmi_product_name, - dell_lis3lv02d_devices[i].dmi_product_name) == 0) - break; - } - - if (i == ARRAY_SIZE(dell_lis3lv02d_devices)) { - dev_warn(&priv->pci_dev->dev, - "Accelerometer lis3lv02d is present on SMBus but its" - " address is unknown, skipping registration\n"); - return; - } - - memset(&info, 0, sizeof(struct i2c_board_info)); - info.addr = dell_lis3lv02d_devices[i].i2c_addr; - strscpy(info.type, "lis3lv02d", I2C_NAME_SIZE); - i2c_new_client_device(&priv->adapter, &info); -} - /* Register optional slaves */ static void i801_probe_optional_slaves(struct i801_priv *priv) { @@ -1279,9 +1164,6 @@ static void i801_probe_optional_slaves(struct i801_priv *priv) if (dmi_name_in_vendors("FUJITSU")) dmi_walk(dmi_check_onboard_devices, &priv->adapter); - if (is_dell_system_with_lis3lv02d()) - register_dell_lis3lv02d_i2c_device(priv); - /* Instantiate SPD EEPROMs unless the SMBus is multiplexed */ #if IS_ENABLED(CONFIG_I2C_MUX_GPIO) if (!priv->mux_pdev) diff --git a/drivers/platform/x86/dell/dell-smo8800.c b/drivers/platform/x86/dell/dell-smo8800.c index 87339cc78880..c674e3392270 100644 --- a/drivers/platform/x86/dell/dell-smo8800.c +++ b/drivers/platform/x86/dell/dell-smo8800.c @@ -4,18 +4,23 @@ * * Copyright (C) 2012 Sonal Santan * Copyright (C) 2014 Pali Rohár + * Copyright (C) 2023 Hans de Goede * * This is loosely based on lis3lv02d driver. */ #define DRIVER_NAME "smo8800" +#include +#include #include +#include #include #include #include #include #include +#include #include #include @@ -26,6 +31,7 @@ struct smo8800_device { unsigned long misc_opened; /* whether the device is open */ wait_queue_head_t misc_wait; /* Wait queue for the misc dev */ struct device *dev; /* acpi device */ + struct i2c_client *i2c_dev; /* i2c_client for lis3lv02d */ }; static irqreturn_t smo8800_interrupt_quick(int irq, void *data) @@ -103,6 +109,111 @@ static const struct file_operations smo8800_misc_fops = { .release = smo8800_misc_release, }; +/* + * On 2 older PCH generations, Patsburg (for Sandy Bridge and Ivybridge) and + * Wellsburg (for Haswell and Broadwell), the PCH has 3 extra i2c-i801 + * compatible SMBusses called 'Integrated Device Function' busses. These have + * FEATURE_IDF set in the i801_ids[] table in i2c-i801.c. + * The ST microelectronics accelerometer is connected to the main SMBus + * so the IDF controllers should be skipped. + */ +static const struct pci_device_id i801_idf_ids[] = { + { PCI_VDEVICE(INTEL, 0x1d70) }, /* Patsburg IFD0 */ + { PCI_VDEVICE(INTEL, 0x1d71) }, /* Patsburg IFD1 */ + { PCI_VDEVICE(INTEL, 0x1d72) }, /* Patsburg IFD2 */ + { PCI_VDEVICE(INTEL, 0x8d7d) }, /* Wellsburg MS0 */ + { PCI_VDEVICE(INTEL, 0x8d7e) }, /* Wellsburg MS1 */ + { PCI_VDEVICE(INTEL, 0x8d7f) }, /* Wellsburg MS2 */ + {} +}; + +static int smo8800_find_i801(struct device *dev, void *data) +{ + struct i2c_adapter *adap, **adap_ret = data; + + adap = i2c_verify_adapter(dev); + if (!adap) + return 0; + + if (!strstarts(adap->name, "SMBus I801 adapter")) + return 0; + + if (pci_match_id(i801_idf_ids, to_pci_dev(adap->dev.parent))) + return 0; /* Only register client on main SMBus channel */ + + *adap_ret = i2c_get_adapter(adap->nr); + return 1; +} + +/* + * Accelerometer's I2C address is not specified in DMI nor ACPI, + * so it is needed to define mapping table based on DMI product names. + */ +static const struct { + const char *dmi_product_name; + unsigned short i2c_addr; +} dell_lis3lv02d_devices[] = { + /* + * Dell platform team told us that these Latitude devices have + * ST microelectronics accelerometer at I2C address 0x29. + */ + { "Latitude E5250", 0x29 }, + { "Latitude E5450", 0x29 }, + { "Latitude E5550", 0x29 }, + { "Latitude E6440", 0x29 }, + { "Latitude E6440 ATG", 0x29 }, + { "Latitude E6540", 0x29 }, + /* + * Additional individual entries were added after verification. + */ + { "Latitude 5480", 0x29 }, + { "Vostro V131", 0x1d }, + { "Vostro 5568", 0x29 }, +}; + +static void smo8800_instantiate_i2c_client(struct smo8800_device *smo8800) +{ + struct i2c_board_info info = { }; + struct i2c_adapter *adap = NULL; + const char *dmi_product_name; + u8 addr = 0; + int i; + + bus_for_each_dev(&i2c_bus_type, NULL, &adap, smo8800_find_i801); + if (!adap) + return; + + dmi_product_name = dmi_get_system_info(DMI_PRODUCT_NAME); + for (i = 0; i < ARRAY_SIZE(dell_lis3lv02d_devices); ++i) { + if (strcmp(dmi_product_name, + dell_lis3lv02d_devices[i].dmi_product_name) == 0) { + addr = dell_lis3lv02d_devices[i].i2c_addr; + break; + } + } + + if (!addr) { + dev_warn(smo8800->dev, + "Accelerometer lis3lv02d is present on SMBus but its address is unknown, skipping registration\n"); + goto put_adapter; + } + + info.addr = addr; + strscpy(info.type, "lis3lv02d", I2C_NAME_SIZE); + + smo8800->i2c_dev = i2c_new_client_device(adap, &info); + if (IS_ERR(smo8800->i2c_dev)) { + dev_err_probe(smo8800->dev, PTR_ERR(smo8800->i2c_dev), + "registering accel i2c_client\n"); + smo8800->i2c_dev = NULL; + } else { + dev_info(smo8800->dev, "Registered %s accelerometer on address 0x%02x\n", + info.type, info.addr); + } +put_adapter: + i2c_put_adapter(adap); +} + static int smo8800_probe(struct platform_device *device) { int err; @@ -126,10 +237,12 @@ static int smo8800_probe(struct platform_device *device) return err; smo8800->irq = err; + smo8800_instantiate_i2c_client(smo8800); + err = misc_register(&smo8800->miscdev); if (err) { dev_err(&device->dev, "failed to register misc dev: %d\n", err); - return err; + goto error_unregister_i2c_client; } err = request_threaded_irq(smo8800->irq, smo8800_interrupt_quick, @@ -150,6 +263,8 @@ static int smo8800_probe(struct platform_device *device) error: misc_deregister(&smo8800->miscdev); +error_unregister_i2c_client: + i2c_unregister_device(smo8800->i2c_dev); return err; } @@ -160,9 +275,9 @@ static void smo8800_remove(struct platform_device *device) free_irq(smo8800->irq, smo8800); misc_deregister(&smo8800->miscdev); dev_dbg(&device->dev, "device /dev/freefall unregistered\n"); + i2c_unregister_device(smo8800->i2c_dev); } -/* NOTE: Keep this list in sync with drivers/i2c/busses/i2c-i801.c */ static const struct acpi_device_id smo8800_ids[] = { { "SMO8800", 0 }, { "SMO8801", 0 }, @@ -189,3 +304,5 @@ module_platform_driver(smo8800_driver); MODULE_DESCRIPTION("Dell Latitude freefall driver (ACPI SMO88XX)"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Sonal Santan, Pali Rohár"); +/* Ensure the i2c-801 driver is loaded for i2c_client instantiation */ +MODULE_SOFTDEP("pre: i2c-i801"); From patchwork Sat Jan 6 16:09:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 760732 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7AD058494 for ; Sat, 6 Jan 2024 16:09:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="PQI6kKZ0" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1704557391; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CI06OPnX0QyWCxuRAb5gXiPTjDRHhJHYDBQVSbJTJL8=; b=PQI6kKZ0oziH1f3v/VrDLqyS07Lbq66gPKlFiBGfmLxOg/4j/DpDVONsXha15DIH9O7Pma dVaOmuN7fQ6RIkgcPC/Fz8la7pDyQF/yyUXcvvWOScMgc6Dp27xoVmxel4hUPnPXfc+VzI Vqy/YwiP10MXK5CA9IE/5yPuDhFsS+U= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-693-PUPEUM5xM0yQPlUbbdmn7g-1; Sat, 06 Jan 2024 11:09:49 -0500 X-MC-Unique: PUPEUM5xM0yQPlUbbdmn7g-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 44397185A784; Sat, 6 Jan 2024 16:09:49 +0000 (UTC) Received: from localhost.localdomain (unknown [10.39.192.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id 899733C27; Sat, 6 Jan 2024 16:09:47 +0000 (UTC) From: Hans de Goede To: =?utf-8?q?Pali_Roh=C3=A1r?= , =?utf-8?q?Ilpo_J=C3=A4rvi?= =?utf-8?q?nen?= , Andy Shevchenko , Paul Menzel , Jean Delvare , Andi Shyti Cc: Hans de Goede , eric.piel@tremplin-utc.net, Marius Hoch , Dell.Client.Kernel@dell.com, Kai Heng Feng , platform-driver-x86@vger.kernel.org, Wolfram Sang , linux-i2c@vger.kernel.org Subject: [PATCH v2 3/6] platform/x86: dell-smo8800: Pass the IRQ to the lis3lv02d i2c_client Date: Sat, 6 Jan 2024 17:09:30 +0100 Message-ID: <20240106160935.45487-4-hdegoede@redhat.com> In-Reply-To: <20240106160935.45487-1-hdegoede@redhat.com> References: <20240106160935.45487-1-hdegoede@redhat.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 When a lis3lv02d i2c_client has been instantiated pass the IRQ to the i2c_client and let the lis3lv02d driver take care of registering /dev/freefall and handling the IRQ. Signed-off-by: Hans de Goede --- drivers/platform/x86/dell/dell-smo8800.c | 40 ++++++++++++++---------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/drivers/platform/x86/dell/dell-smo8800.c b/drivers/platform/x86/dell/dell-smo8800.c index c674e3392270..3e64ebcf4b21 100644 --- a/drivers/platform/x86/dell/dell-smo8800.c +++ b/drivers/platform/x86/dell/dell-smo8800.c @@ -199,6 +199,7 @@ static void smo8800_instantiate_i2c_client(struct smo8800_device *smo8800) } info.addr = addr; + info.irq = smo8800->irq; strscpy(info.type, "lis3lv02d", I2C_NAME_SIZE); smo8800->i2c_dev = i2c_new_client_device(adap, &info); @@ -239,21 +240,24 @@ static int smo8800_probe(struct platform_device *device) smo8800_instantiate_i2c_client(smo8800); - err = misc_register(&smo8800->miscdev); - if (err) { - dev_err(&device->dev, "failed to register misc dev: %d\n", err); - goto error_unregister_i2c_client; - } + /* smo8800->irq is passed to the i2c_client and its driver will take care of this */ + if (!smo8800->i2c_dev) { + err = misc_register(&smo8800->miscdev); + if (err) { + dev_err(&device->dev, "failed to register misc dev: %d\n", err); + goto error_unregister_i2c_client; + } - err = request_threaded_irq(smo8800->irq, smo8800_interrupt_quick, - smo8800_interrupt_thread, - IRQF_TRIGGER_RISING | IRQF_ONESHOT, - DRIVER_NAME, smo8800); - if (err) { - dev_err(&device->dev, - "failed to request thread for IRQ %d: %d\n", - smo8800->irq, err); - goto error; + err = request_threaded_irq(smo8800->irq, smo8800_interrupt_quick, + smo8800_interrupt_thread, + IRQF_TRIGGER_RISING | IRQF_ONESHOT, + DRIVER_NAME, smo8800); + if (err) { + dev_err(&device->dev, + "failed to request thread for IRQ %d: %d\n", + smo8800->irq, err); + goto error; + } } dev_dbg(&device->dev, "device /dev/freefall registered with IRQ %d\n", @@ -272,9 +276,11 @@ static void smo8800_remove(struct platform_device *device) { struct smo8800_device *smo8800 = platform_get_drvdata(device); - free_irq(smo8800->irq, smo8800); - misc_deregister(&smo8800->miscdev); - dev_dbg(&device->dev, "device /dev/freefall unregistered\n"); + if (!smo8800->i2c_dev) { + free_irq(smo8800->irq, smo8800); + misc_deregister(&smo8800->miscdev); + dev_dbg(&device->dev, "device /dev/freefall unregistered\n"); + } i2c_unregister_device(smo8800->i2c_dev); } From patchwork Sat Jan 6 16:09:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 760576 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 267018493 for ; Sat, 6 Jan 2024 16:09:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="fRfAtf/g" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1704557397; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ETQlQ24aGFnl8f397NMf2mlyswZ/lAOe6fYIvSLYAII=; b=fRfAtf/gLjuJuVgSlLYhj8vA8eVXpzNmIFap4zv55kzrzOhb1BEbKIhz6YhOBNT9ifiZKq b0iaSGFUa23m92eFrTZEGwK5Ogf5rnQ4MPBvrrut6H0kRNowzWryHS75d/AsCvd+mKL885 pLZjZGvWL1y68wxeck5xfo5mzZ44luI= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-37-0YOWuQWNMJ2YEbkqRxbEhA-1; Sat, 06 Jan 2024 11:09:51 -0500 X-MC-Unique: 0YOWuQWNMJ2YEbkqRxbEhA-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 349343C025B9; Sat, 6 Jan 2024 16:09:51 +0000 (UTC) Received: from localhost.localdomain (unknown [10.39.192.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id 76CAB3C27; Sat, 6 Jan 2024 16:09:49 +0000 (UTC) From: Hans de Goede To: =?utf-8?q?Pali_Roh=C3=A1r?= , =?utf-8?q?Ilpo_J=C3=A4rvi?= =?utf-8?q?nen?= , Andy Shevchenko , Paul Menzel , Jean Delvare , Andi Shyti Cc: Hans de Goede , eric.piel@tremplin-utc.net, Marius Hoch , Dell.Client.Kernel@dell.com, Kai Heng Feng , platform-driver-x86@vger.kernel.org, Wolfram Sang , linux-i2c@vger.kernel.org Subject: [PATCH v2 4/6] platform/x86: dell-smo8800: Allow using the IIO st_accel driver Date: Sat, 6 Jan 2024 17:09:31 +0100 Message-ID: <20240106160935.45487-5-hdegoede@redhat.com> In-Reply-To: <20240106160935.45487-1-hdegoede@redhat.com> References: <20240106160935.45487-1-hdegoede@redhat.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 Allow using the IIO st_accel driver so that the accelerometer gets presented to userspace as an IIO device like all modern accelerometer drivers do. Note the default is still to use the drivers/misc/lis3lv02d/lis3lv02d.c /dev/freefall + evdev joystick emulation driver, so as to not break existing userspace consumers. /dev/freefall is used by the tools/laptop/freefall/freefall.c tool which is shipped by the kernel as well as by the linux-thinkpad hdapsd daemon. Using the IIO st_accel driver can be enabled by setting the new use_iio_driver module parameter. Link: https://github.com/linux-thinkpad/hdapsd/ Signed-off-by: Hans de Goede --- Changes in v2: - Keep using drivers/misc/lis3lv02d/lis3lv02d.c be default - Rename the module-parameter to use_iio_driver which can be set to use the IIO st_accel driver instead --- drivers/platform/x86/dell/dell-smo8800.c | 83 ++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 4 deletions(-) diff --git a/drivers/platform/x86/dell/dell-smo8800.c b/drivers/platform/x86/dell/dell-smo8800.c index 3e64ebcf4b21..58bb7275ba5c 100644 --- a/drivers/platform/x86/dell/dell-smo8800.c +++ b/drivers/platform/x86/dell/dell-smo8800.c @@ -10,6 +10,7 @@ */ #define DRIVER_NAME "smo8800" +#define LIS3_WHO_AM_I 0x0f #include #include @@ -24,6 +25,10 @@ #include #include +static bool use_iio_driver; +module_param(use_iio_driver, bool, 0444); +MODULE_PARM_DESC(use_iio_driver, "Use IIO accelerometer driver instead of /dev/freefall chardev + evdev joystick emulation"); + struct smo8800_device { u32 irq; /* acpi device irq */ atomic_t counter; /* count after last read */ @@ -145,6 +150,65 @@ static int smo8800_find_i801(struct device *dev, void *data) return 1; } +/* + * Set label to let iio-sensor-proxy know these freefall sensors are located in + * the laptop base (not the display) and are not intended for screen rotation. + */ +static const struct property_entry smo8800_accel_props[] = { + PROPERTY_ENTRY_STRING("label", "accel-base"), + {} +}; + +const struct software_node smo8800_accel_node = { + .properties = smo8800_accel_props, +}; + +static int smo8800_detect_accel(struct smo8800_device *smo8800, + struct i2c_adapter *adap, u8 addr, + struct i2c_board_info *info) +{ + union i2c_smbus_data smbus_data; + const char *type; + int err; + + err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, LIS3_WHO_AM_I, + I2C_SMBUS_BYTE_DATA, &smbus_data); + if (err < 0) { + dev_warn(smo8800->dev, "Failed to read who-am-i register: %d\n", err); + return err; + } + + /* + * These who-am-i register mappings to model strings have been + * taken from the old /dev/freefall chardev and joystick driver: + * drivers/misc/lis3lv02d/lis3lv02d.c + */ + switch (smbus_data.byte) { + case 0x32: + type = "lis331dlh"; + break; + case 0x33: + type = "lis2de12"; /* LIS3DC / HP3DC in drivers/misc/lis3lv02d/lis3lv02d.c */ + break; + case 0x3a: + type = "lis3lv02dl_accel"; + break; + case 0x3b: + type = "lis302dl"; + break; + default: + dev_warn(smo8800->dev, "Unknown who-am-i register value 0x%02x\n", + smbus_data.byte); + return -ENODEV; + } + + strscpy(info->type, type, I2C_NAME_SIZE); + info->addr = addr; + info->irq = smo8800->irq; + info->swnode = &smo8800_accel_node; + return 0; +} + /* * Accelerometer's I2C address is not specified in DMI nor ACPI, * so it is needed to define mapping table based on DMI product names. @@ -177,7 +241,7 @@ static void smo8800_instantiate_i2c_client(struct smo8800_device *smo8800) struct i2c_adapter *adap = NULL; const char *dmi_product_name; u8 addr = 0; - int i; + int i, err; bus_for_each_dev(&i2c_bus_type, NULL, &adap, smo8800_find_i801); if (!adap) @@ -198,9 +262,20 @@ static void smo8800_instantiate_i2c_client(struct smo8800_device *smo8800) goto put_adapter; } - info.addr = addr; - info.irq = smo8800->irq; - strscpy(info.type, "lis3lv02d", I2C_NAME_SIZE); + /* Always detect the accel-type, this also checks the accel is actually there */ + err = smo8800_detect_accel(smo8800, adap, addr, &info); + if (err) + goto put_adapter; + + /* + * Unless using the IIO driver is requested, override the detected type + * with "lis3lv02d" so that drivers/misc/lis3lv02d/lis3lv02d.c is used + * and /dev/freefall functionality is provided. + */ + if (!use_iio_driver) { + strscpy(info.type, "lis3lv02d", I2C_NAME_SIZE); + info.swnode = NULL; + } smo8800->i2c_dev = i2c_new_client_device(adap, &info); if (IS_ERR(smo8800->i2c_dev)) { From patchwork Sat Jan 6 16:09:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 760731 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 144D479C3 for ; Sat, 6 Jan 2024 16:09:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="KTMnP8cx" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1704557398; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JzpM8XnbTJAfg15a2BeUriVVEF0AwqH58tuAhGJLep4=; b=KTMnP8cxW4AOtbJ0B8NfwzjuGzEqC157i8kK55JNtDPjyFiF26wmhVotRcCbVIiWqZV3fA asP2cbBzbpl45JktInBiVetkhJ5j6res9SmpoSCGsT/+kpKHgZ6v51L7BPOoRKk9OOQDLp pkAZyByjAfjyhVqH/Cc6zEGW43oRSMg= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-131-evxJyZRdM_mNPEcC49dcvg-1; Sat, 06 Jan 2024 11:09:53 -0500 X-MC-Unique: evxJyZRdM_mNPEcC49dcvg-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1FF1438143AE; Sat, 6 Jan 2024 16:09:53 +0000 (UTC) Received: from localhost.localdomain (unknown [10.39.192.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id 65A793C27; Sat, 6 Jan 2024 16:09:51 +0000 (UTC) From: Hans de Goede To: =?utf-8?q?Pali_Roh=C3=A1r?= , =?utf-8?q?Ilpo_J=C3=A4rvi?= =?utf-8?q?nen?= , Andy Shevchenko , Paul Menzel , Jean Delvare , Andi Shyti Cc: Hans de Goede , eric.piel@tremplin-utc.net, Marius Hoch , Dell.Client.Kernel@dell.com, Kai Heng Feng , platform-driver-x86@vger.kernel.org, Wolfram Sang , linux-i2c@vger.kernel.org Subject: [PATCH v2 5/6] platform/x86: dell-smo8800: Add support for probing for the accelerometer i2c address Date: Sat, 6 Jan 2024 17:09:32 +0100 Message-ID: <20240106160935.45487-6-hdegoede@redhat.com> In-Reply-To: <20240106160935.45487-1-hdegoede@redhat.com> References: <20240106160935.45487-1-hdegoede@redhat.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 Unfortunately the SMOxxxx ACPI device does not contain the i2c-address of the accelerometer. So a DMI product-name to address mapping table is used. At support to have the kernel probe for the i2c-address for modesl which are not on the list. The new probing code sits behind a new probe_i2c_addr module parameter, which is disabled by default because probing might be dangerous. Signed-off-by: Hans de Goede --- drivers/platform/x86/dell/dell-smo8800.c | 112 +++++++++++++++++++++-- 1 file changed, 105 insertions(+), 7 deletions(-) diff --git a/drivers/platform/x86/dell/dell-smo8800.c b/drivers/platform/x86/dell/dell-smo8800.c index 58bb7275ba5c..021ad31eb84d 100644 --- a/drivers/platform/x86/dell/dell-smo8800.c +++ b/drivers/platform/x86/dell/dell-smo8800.c @@ -29,6 +29,10 @@ static bool use_iio_driver; module_param(use_iio_driver, bool, 0444); MODULE_PARM_DESC(use_iio_driver, "Use IIO accelerometer driver instead of /dev/freefall chardev + evdev joystick emulation"); +static bool probe_i2c_addr; +module_param(probe_i2c_addr, bool, 0444); +MODULE_PARM_DESC(probe_i2c_addr, "Probe the i801 I2C bus for the accelerometer on models where the address is unknown"); + struct smo8800_device { u32 irq; /* acpi device irq */ atomic_t counter; /* count after last read */ @@ -150,6 +154,82 @@ static int smo8800_find_i801(struct device *dev, void *data) return 1; } +/* + * This is the kernel version of the single register device sanity checks from + * the i2c_safety_check function from lm_sensors sensor-detect script: + * This is meant to prevent access to 1-register-only devices, + * which are designed to be accessed with SMBus receive byte and SMBus send + * byte transactions (i.e. short reads and short writes) and treat SMBus + * read byte as a real write followed by a read. The device detection + * routines would write random values to the chip with possibly very nasty + * results for the hardware. Note that this function won't catch all such + * chips, as it assumes that reads and writes relate to the same register, + * but that's the best we can do. + */ +static int i2c_safety_check(struct smo8800_device *smo8800, struct i2c_adapter *adap, u8 addr) +{ + union i2c_smbus_data smbus_data; + int err; + u8 data; + + /* + * First receive a byte from the chip, and remember it. This + * also checks if there is a device at the address at all. + */ + err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, + I2C_SMBUS_BYTE, &smbus_data); + if (err < 0) + return err; + + data = smbus_data.byte; + + /* + * Receive a byte again; very likely to be the same for + * 1-register-only devices. + */ + err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0, + I2C_SMBUS_BYTE, &smbus_data); + if (err < 0) + return err; + + if (smbus_data.byte != data) + return 0; /* Not a 1-register-only device. */ + + /* + * Then try a standard byte read, with a register offset equal to + * the read byte; for 1-register-only device this should read + * the same byte value in return. + */ + err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, data, + I2C_SMBUS_BYTE_DATA, &smbus_data); + if (err < 0) + return err; + + if (smbus_data.byte != data) + return 0; /* Not a 1-register-only device. */ + + /* + * Then try a standard byte read, with a slightly different register + * offset; this should again read the register offset in return. + */ + err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, data ^ 0x01, + I2C_SMBUS_BYTE_DATA, &smbus_data); + if (err < 0) + return err; + + if (smbus_data.byte != (data ^ 0x01)) + return 0; /* Not a 1-register-only device. */ + + /* + * Apparently this is a 1-register-only device, restore the original + * register value and leave it alone. + */ + i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_WRITE, data, + I2C_SMBUS_BYTE, NULL); + dev_warn(smo8800->dev, "I2C safety check for address 0x%02x failed, skipping\n", addr); + return -ENODEV; +} + /* * Set label to let iio-sensor-proxy know these freefall sensors are located in * the laptop base (not the display) and are not intended for screen rotation. @@ -165,12 +245,19 @@ const struct software_node smo8800_accel_node = { static int smo8800_detect_accel(struct smo8800_device *smo8800, struct i2c_adapter *adap, u8 addr, - struct i2c_board_info *info) + struct i2c_board_info *info, bool probe) { union i2c_smbus_data smbus_data; const char *type; int err; + if (probe) { + dev_info(smo8800->dev, "Probing for accelerometer on address 0x%02x\n", addr); + err = i2c_safety_check(smo8800, adap, addr); + if (err < 0) + return err; + } + err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, LIS3_WHO_AM_I, I2C_SMBUS_BYTE_DATA, &smbus_data); if (err < 0) { @@ -256,17 +343,25 @@ static void smo8800_instantiate_i2c_client(struct smo8800_device *smo8800) } } - if (!addr) { + if (addr) { + /* Always detect the accel-type, this also checks the accel is actually there */ + err = smo8800_detect_accel(smo8800, adap, addr, &info, false); + if (err) + goto put_adapter; + } else if (probe_i2c_addr) { + /* First try address 0x29 (most used) and then try 0x1d */ + if (smo8800_detect_accel(smo8800, adap, 0x29, &info, true) != 0 && + smo8800_detect_accel(smo8800, adap, 0x1d, &info, true) != 0) { + dev_warn(smo8800->dev, "No accelerometer found\n"); + goto put_adapter; + } + } else { dev_warn(smo8800->dev, "Accelerometer lis3lv02d is present on SMBus but its address is unknown, skipping registration\n"); + dev_info(smo8800->dev, "Pass dell_smo8800.probe_i2c_addr=1 on the kernel commandline to probe, this may be dangerous!\n"); goto put_adapter; } - /* Always detect the accel-type, this also checks the accel is actually there */ - err = smo8800_detect_accel(smo8800, adap, addr, &info); - if (err) - goto put_adapter; - /* * Unless using the IIO driver is requested, override the detected type * with "lis3lv02d" so that drivers/misc/lis3lv02d/lis3lv02d.c is used @@ -285,6 +380,9 @@ static void smo8800_instantiate_i2c_client(struct smo8800_device *smo8800) } else { dev_info(smo8800->dev, "Registered %s accelerometer on address 0x%02x\n", info.type, info.addr); + if (!addr) + dev_info(smo8800->dev, + "Please report this address upstream together with the output of 'cat /sys/class/dmi/id/product_name'\n"); } put_adapter: i2c_put_adapter(adap); From patchwork Sat Jan 6 16:09:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 760575 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2BCA279C3 for ; Sat, 6 Jan 2024 16:10:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="g8bZgq2/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1704557401; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=WTBTtEoT636PgY3gnhZioEd6sKtFJCSFKH7xNHvAW9Q=; b=g8bZgq2/sZ4t+vUxaY4Z0ySnl4DV/GzFUR9oggLwFHeNcdWqpCVjmMH0g1SgTfX4dviuU4 Ch0qfTboBnVIvEBxRGux0t21bdCbNcDvqZsiTF3wncfLgAmLtPwEO2mQN1yZegvC/H53rD oNBvoT80g5G49Aa4cZ1DYFVbHqoxW3c= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-218-jnk1nRUCOgWEBZ5GcidPWw-1; Sat, 06 Jan 2024 11:09:55 -0500 X-MC-Unique: jnk1nRUCOgWEBZ5GcidPWw-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 09AB01C0CCAD; Sat, 6 Jan 2024 16:09:55 +0000 (UTC) Received: from localhost.localdomain (unknown [10.39.192.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5169E3C27; Sat, 6 Jan 2024 16:09:53 +0000 (UTC) From: Hans de Goede To: =?utf-8?q?Pali_Roh=C3=A1r?= , =?utf-8?q?Ilpo_J=C3=A4rvi?= =?utf-8?q?nen?= , Andy Shevchenko , Paul Menzel , Jean Delvare , Andi Shyti Cc: Hans de Goede , eric.piel@tremplin-utc.net, Marius Hoch , Dell.Client.Kernel@dell.com, Kai Heng Feng , platform-driver-x86@vger.kernel.org, Wolfram Sang , linux-i2c@vger.kernel.org Subject: [PATCH v2 6/6] platform/x86: dell-smo8800: Add a couple more models to dell_lis3lv02d_devices[] Date: Sat, 6 Jan 2024 17:09:33 +0100 Message-ID: <20240106160935.45487-7-hdegoede@redhat.com> In-Reply-To: <20240106160935.45487-1-hdegoede@redhat.com> References: <20240106160935.45487-1-hdegoede@redhat.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 Add the accelerometer address for the following laptop models to dell_lis3lv02d_devices[]: Dell Latitude E6330 Dell Latitude E6430 Tested-by: Hans de Goede Signed-off-by: Hans de Goede --- Changes in v2: - This is a new patch in v2 of this series --- drivers/platform/x86/dell/dell-smo8800.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/platform/x86/dell/dell-smo8800.c b/drivers/platform/x86/dell/dell-smo8800.c index 021ad31eb84d..49547a077df7 100644 --- a/drivers/platform/x86/dell/dell-smo8800.c +++ b/drivers/platform/x86/dell/dell-smo8800.c @@ -318,6 +318,8 @@ static const struct { * Additional individual entries were added after verification. */ { "Latitude 5480", 0x29 }, + { "Latitude E6330", 0x29 }, + { "Latitude E6430", 0x29 }, { "Vostro V131", 0x1d }, { "Vostro 5568", 0x29 }, };