From: Jean Delvare <jdelvare@suse.de>
To: "Pali Rohár" <pali.rohar@gmail.com>
Cc: "Wolfram Sang" <wsa@the-dreams.de>,
"Michał Kępień" <kernel@kempniu.pl>,
"Steven Honeyman" <stevenhoneyman@gmail.com>,
Valdis.Kletnieks@vt.edu,
"Jochen Eisinger" <jochen@penguin-breeder.org>,
"Gabriele Mazzotta" <gabriele.mzt@gmail.com>,
"Andy Lutomirski" <luto@kernel.org>,
Mario_Limonciello@dell.com, "Alex Hung" <alex.hung@canonical.com>,
"Takashi Iwai" <tiwai@suse.de>,
linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org,
platform-driver-x86@vger.kernel.org
Subject: Re: [PATCH v4] i2c: i801: Register optional lis3lv02d I2C device on Dell machines
Date: Thu, 6 Jun 2019 16:53:09 +0200 [thread overview]
Message-ID: <20190606165309.4a3c81c0@endymion> (raw)
In-Reply-To: <20190604223303.31945-1-pali.rohar@gmail.com>
Hi Pali,
On Wed, 5 Jun 2019 00:33:03 +0200, Pali Rohár wrote:
> Dell platform team told us that some (DMI whitelisted) Dell Latitude
> machines have ST microelectronics accelerometer at I2C address 0x29.
>
> Presence of that ST microelectronics accelerometer is verified by existence
> of SMO88xx ACPI device which represent that accelerometer. Unfortunately
> ACPI device does not specify I2C address.
>
> This patch registers lis3lv02d device for selected Dell Latitude machines
> at I2C address 0x29 after detection. And for Dell Vostro V131 machine at
> I2C address 0x1d which was manually detected.
>
> Finally commit a7ae81952cda ("i2c: i801: Allow ACPI SystemIO OpRegion to
> conflict with PCI BAR") allowed to use i2c-i801 driver on Dell machines so
> lis3lv02d correctly initialize accelerometer.
>
> Tested on Dell Latitude E6440.
>
> Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
>
> ---
> Changes since v3:
> * Use char * [] type for list of acpi ids
> * Check that SMO88xx acpi device is present, enabled and functioning
> * Simplify usage of acpi_get_devices()
> * Change i2c to I2C
> * Make dell_lis3lv02d_devices const
>
> Changes since v2:
> * Use explicit list of SMOxx ACPI devices
>
> Changes since v1:
> * Added Dell Vostro V131 based on Michał Kępień testing
> * Changed DMI product structure to include also i2c address
> ---
> drivers/i2c/busses/i2c-i801.c | 123 ++++++++++++++++++++++++++++++++++++
> drivers/platform/x86/dell-smo8800.c | 1 +
> 2 files changed, 124 insertions(+)
>
> diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
> index ac7f7817dc89..9060d4b16f4f 100644
> --- a/drivers/i2c/busses/i2c-i801.c
> +++ b/drivers/i2c/busses/i2c-i801.c
> @@ -1134,6 +1134,126 @@ 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;
> + unsigned long long sta;
> + acpi_status status;
> + char *hid;
> + int i;
> +
> + status = acpi_bus_get_status_handle(obj_handle, &sta);
> + if (!ACPI_SUCCESS(status))
> + return AE_OK;
> + if (!(sta & (ACPI_STA_DEVICE_PRESENT |
> + ACPI_STA_DEVICE_ENABLED |
> + ACPI_STA_DEVICE_FUNCTIONING)))
> + return AE_OK;
This is testing that *either* bit is set. Is it what you intend to
achieve, or would you rather want to ensure that *all* these bits are
set?
> +
> + status = acpi_get_object_info(obj_handle, &info);
> + if (!ACPI_SUCCESS(status) || !(info->valid & ACPI_VALID_HID))
> + return AE_OK;
> +
> + hid = info->hardware_id.string;
> + if (!hid)
> + return AE_OK;
> +
> + for (i = 0; i < ARRAY_SIZE(acpi_smo8800_ids); ++i) {
> + if (strcmp(hid, acpi_smo8800_ids[i]) == 0) {
> + *((bool *)return_value) = true;
> + return AE_CTRL_TERMINATE;
> + }
> + }
> +
> + return AE_OK;
> +}
> +
> +static bool is_dell_system_with_lis3lv02d(void)
> +{
> + bool found;
> + const char *vendor;
> +
> + vendor = dmi_get_system_info(DMI_SYS_VENDOR);
> + if (strcmp(vendor, "Dell Inc.") != 0)
> + return false;
> +
> + /*
> + * Check that ACPI device SMO88xx exists and is enabled. That ACPI
> + * device represent our ST microelectronics lis3lv02d accelerometer but
> + * unfortunately without any other information (like I2C address).
> + */
> + found = false;
> + acpi_get_devices(NULL, check_acpi_smo88xx_device, NULL,
> + (void **)&found);
Alignment is incorrect now - but don't resend just for this.
> +
> + return found;
> +}
> (...)
Everything else looks good to me now. Has the latest version of your
patch been tested on real hardware?
--
Jean Delvare
SUSE L3 Support
next prev parent reply other threads:[~2019-06-06 14:53 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-04 22:33 [PATCH v4] i2c: i801: Register optional lis3lv02d I2C device on Dell machines Pali Rohár
2019-06-06 14:53 ` Jean Delvare [this message]
2019-06-06 15:48 ` Pali Rohár
2019-06-06 17:37 ` Jean Delvare
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=20190606165309.4a3c81c0@endymion \
--to=jdelvare@suse.de \
--cc=Mario_Limonciello@dell.com \
--cc=Valdis.Kletnieks@vt.edu \
--cc=alex.hung@canonical.com \
--cc=gabriele.mzt@gmail.com \
--cc=jochen@penguin-breeder.org \
--cc=kernel@kempniu.pl \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=pali.rohar@gmail.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=stevenhoneyman@gmail.com \
--cc=tiwai@suse.de \
--cc=wsa@the-dreams.de \
/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.