From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: "Pali Rohár" <pali@kernel.org>,
"Andy Shevchenko" <andy@kernel.org>,
"Paul Menzel" <pmenzel@molgen.mpg.de>,
"Wolfram Sang" <wsa@kernel.org>,
eric.piel@tremplin-utc.net, "Marius Hoch" <mail@mariushoch.de>,
Dell.Client.Kernel@dell.com,
"Kai Heng Feng" <kai.heng.feng@canonical.com>,
platform-driver-x86@vger.kernel.org,
"Jean Delvare" <jdelvare@suse.com>,
"Andi Shyti" <andi.shyti@kernel.org>,
linux-i2c@vger.kernel.org
Subject: Re: [PATCH v9 4/4] platform/x86: dell-smo8800: Add support for probing for the accelerometer i2c address
Date: Tue, 17 Dec 2024 18:48:55 +0200 (EET) [thread overview]
Message-ID: <ee90da14-024e-4563-00ff-9b525e700106@linux.intel.com> (raw)
In-Reply-To: <20241209183557.7560-5-hdegoede@redhat.com>
On Mon, 9 Dec 2024, Hans de Goede wrote:
> 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.
>
> Link: https://lore.kernel.org/linux-i2c/4820e280-9ca4-4d97-9d21-059626161bfc@molgen.mpg.de/
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
So what was the result of the private inquiry to Dell?
Did they respond?
Did they provide useful info?
> Changes in v8:
> - Use dev_err() / dev_dbg() where possible using &adap->dev as the device
> for logging
>
> Changes in v6:
> - Use i2c_new_scanned_device() instead of re-inventing it
>
> Changes in v5:
> - Add "this may be dangerous warning" to MODULE_PARM_DESC(probe_i2c_addr)
> ---
> drivers/platform/x86/dell/dell-lis3lv02d.c | 53 ++++++++++++++++++++--
> 1 file changed, 49 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/platform/x86/dell/dell-lis3lv02d.c b/drivers/platform/x86/dell/dell-lis3lv02d.c
> index d2b34e10c5eb..8d9dc59c7d8c 100644
> --- a/drivers/platform/x86/dell/dell-lis3lv02d.c
> +++ b/drivers/platform/x86/dell/dell-lis3lv02d.c
> @@ -15,6 +15,8 @@
> #include <linux/workqueue.h>
> #include "dell-smo8800-ids.h"
>
> +#define LIS3_WHO_AM_I 0x0f
> +
> #define DELL_LIS3LV02D_DMI_ENTRY(product_name, i2c_addr) \
> { \
> .matches = { \
> @@ -57,6 +59,39 @@ static u8 i2c_addr;
> static struct i2c_client *i2c_dev;
> static bool notifier_registered;
>
> +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, this may be dangerous.");
> +
> +static int detect_lis3lv02d(struct i2c_adapter *adap, unsigned short addr)
> +{
> + union i2c_smbus_data smbus_data;
> + int err;
> +
> + dev_info(&adap->dev, "Probing for lis3lv02d on address 0x%02x\n", addr);
> +
> + err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, LIS3_WHO_AM_I,
> + I2C_SMBUS_BYTE_DATA, &smbus_data);
> + if (err < 0)
> + return 0; /* Not found */
> +
> + /* valid who-am-i values are from drivers/misc/lis3lv02d/lis3lv02d.c */
> + switch (smbus_data.byte) {
> + case 0x32:
> + case 0x33:
> + case 0x3a:
> + case 0x3b:
> + break;
> + default:
> + dev_warn(&adap->dev, "Unknown who-am-i register value 0x%02x\n",
> + smbus_data.byte);
> + return 0; /* Not found */
> + }
> +
> + dev_dbg(&adap->dev, "Detected lis3lv02d on address 0x%02x\n", addr);
> + return 1; /* Found */
> +}
> +
> static bool i2c_adapter_is_main_i801(struct i2c_adapter *adap)
> {
> /*
> @@ -97,10 +132,18 @@ static void instantiate_i2c_client(struct work_struct *work)
> if (!adap)
> return;
>
> - info.addr = i2c_addr;
> strscpy(info.type, "lis3lv02d", I2C_NAME_SIZE);
>
> - i2c_dev = i2c_new_client_device(adap, &info);
> + if (i2c_addr) {
> + info.addr = i2c_addr;
> + i2c_dev = i2c_new_client_device(adap, &info);
> + } else {
> + /* First try address 0x29 (most used) and then try 0x1d */
> + static const unsigned short addr_list[] = { 0x29, 0x1d, I2C_CLIENT_END };
> +
> + i2c_dev = i2c_new_scanned_device(adap, &info, addr_list, detect_lis3lv02d);
> + }
> +
> if (IS_ERR(i2c_dev)) {
> dev_err(&adap->dev, "error %ld registering i2c_client\n", PTR_ERR(i2c_dev));
> i2c_dev = NULL;
> @@ -169,12 +212,14 @@ static int __init dell_lis3lv02d_init(void)
> put_device(dev);
>
> lis3lv02d_dmi_id = dmi_first_match(lis3lv02d_devices);
> - if (!lis3lv02d_dmi_id) {
> + if (!lis3lv02d_dmi_id && !probe_i2c_addr) {
> pr_warn("accelerometer is present on SMBus but its address is unknown, skipping registration\n");
> + pr_info("Pass dell_lis3lv02d.probe_i2c_addr=1 on the kernel commandline to probe, this may be dangerous!\n");
> return 0;
> }
>
> - i2c_addr = (long)lis3lv02d_dmi_id->driver_data;
> + if (lis3lv02d_dmi_id)
> + i2c_addr = (long)lis3lv02d_dmi_id->driver_data;
If somebody enables this parameter and it successfully finds a device,
shouldn't the user be instructed to report the info so that new entries
can be added and the probe parameter is no longer needed in those case?
--
i.
next prev parent reply other threads:[~2024-12-17 16:49 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-09 18:35 [PATCH v9 0/4] i2c-i801 / dell-lis3lv02d: Move instantiation of lis3lv02d i2c_client from i2c-i801 to dell-lis3lv02d Hans de Goede
2024-12-09 18:35 ` [PATCH v9 1/4] platform/x86: dell-smo8800: Move SMO88xx acpi_device_ids to dell-smo8800-ids.h Hans de Goede
2024-12-09 18:35 ` [PATCH v9 2/4] platform/x86: dell-smo8800: Move instantiation of lis3lv02d i2c_client from i2c-i801 to dell-lis3lv02d Hans de Goede
2024-12-10 16:30 ` Wolfram Sang
2024-12-09 18:35 ` [PATCH v9 3/4] platform/x86: dell-smo8800: Add a couple more models to lis3lv02d_devices[] Hans de Goede
2024-12-09 18:35 ` [PATCH v9 4/4] platform/x86: dell-smo8800: Add support for probing for the accelerometer i2c address Hans de Goede
2024-12-17 16:48 ` Ilpo Järvinen [this message]
2024-12-21 11:03 ` Hans de Goede
2025-01-13 15:17 ` Ilpo Järvinen
2025-01-13 15:36 ` Andy Shevchenko
2025-01-13 16:49 ` Hans de Goede
2025-01-13 19:47 ` Pali Rohár
2025-01-13 19:52 ` Andy Shevchenko
2025-01-14 15:06 ` Ilpo Järvinen
2025-01-14 14:56 ` Ilpo Järvinen
2024-12-09 18:50 ` [PATCH v9 0/4] i2c-i801 / dell-lis3lv02d: Move instantiation of lis3lv02d i2c_client from i2c-i801 to dell-lis3lv02d Pali Rohár
2024-12-10 14:21 ` Ilpo Järvinen
2024-12-12 14:51 ` Ilpo Järvinen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ee90da14-024e-4563-00ff-9b525e700106@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=Dell.Client.Kernel@dell.com \
--cc=andi.shyti@kernel.org \
--cc=andy@kernel.org \
--cc=eric.piel@tremplin-utc.net \
--cc=hdegoede@redhat.com \
--cc=jdelvare@suse.com \
--cc=kai.heng.feng@canonical.com \
--cc=linux-i2c@vger.kernel.org \
--cc=mail@mariushoch.de \
--cc=pali@kernel.org \
--cc=platform-driver-x86@vger.kernel.org \
--cc=pmenzel@molgen.mpg.de \
--cc=wsa@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.