From: Hans de Goede <hdegoede@redhat.com>
To: "Pali Rohár" <pali@kernel.org>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
"Andy Shevchenko" <andy@kernel.org>,
"Paul Menzel" <pmenzel@molgen.mpg.de>,
"Wolfram Sang" <wsa@kernel.org>
Cc: Hans de Goede <hdegoede@redhat.com>,
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: [PATCH v3 4/6] platform/x86: dell-smo8800: Allow lis3lv02d i2c_client instantiation without IRQ
Date: Fri, 21 Jun 2024 14:24:59 +0200 [thread overview]
Message-ID: <20240621122503.10034-5-hdegoede@redhat.com> (raw)
In-Reply-To: <20240621122503.10034-1-hdegoede@redhat.com>
The Dell XPS 15 9550 can have a 60Wh battery, leaving space for a 2.5"
sata disk; or a 90Wh battery in which case the battery occupies the space
for the optional 2.5" sata disk.
On models with the 90Wh battery and thus without a 2.5" sata disk, the BIOS
does not add an IRQ resource to the SMO8810 ACPI device.
Make the misc-device registration and the requesting of the IRQ optional
and instantiate a lis3lv02d i2c_client independent of the IRQ being there,
so that the non freefall lis3lv02d functionality can still be used.
Note that IRQ 0 is not a valid IRQ number for platform IRQs
and this patch relies on that.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
drivers/platform/x86/dell/dell-smo8800.c | 67 +++++++++++++-----------
1 file changed, 37 insertions(+), 30 deletions(-)
diff --git a/drivers/platform/x86/dell/dell-smo8800.c b/drivers/platform/x86/dell/dell-smo8800.c
index cd2e48405859..2e49bbb569c6 100644
--- a/drivers/platform/x86/dell/dell-smo8800.c
+++ b/drivers/platform/x86/dell/dell-smo8800.c
@@ -310,33 +310,32 @@ static int smo8800_probe(struct platform_device *device)
init_waitqueue_head(&smo8800->misc_wait);
INIT_WORK(&smo8800->i2c_work, smo8800_instantiate_i2c_client);
- err = misc_register(&smo8800->miscdev);
- if (err) {
- dev_err(&device->dev, "failed to register misc dev: %d\n", err);
- return err;
+ err = platform_get_irq_optional(device, 0);
+ if (err > 0)
+ smo8800->irq = err;
+
+ if (smo8800->irq) {
+ err = misc_register(&smo8800->miscdev);
+ if (err) {
+ dev_err(&device->dev, "failed to register misc dev: %d\n", err);
+ return err;
+ }
+
+ 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",
+ smo8800->irq);
}
- 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,
- 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",
- smo8800->irq);
-
if (dmi_check_system(smo8800_lis3lv02d_devices)) {
/*
* Register i2c-bus notifier + queue initial scan for lis3lv02d
@@ -350,14 +349,20 @@ static int smo8800_probe(struct platform_device *device)
} else {
dev_warn(&device->dev,
"lis3lv02d accelerometer is present on SMBus but its address is unknown, skipping registration\n");
+ if (!smo8800->irq)
+ return -ENODEV;
}
+ platform_set_drvdata(device, smo8800);
return 0;
error_free_irq:
- free_irq(smo8800->irq, smo8800);
+ if (smo8800->irq) {
+ free_irq(smo8800->irq, smo8800);
error:
- misc_deregister(&smo8800->miscdev);
+ misc_deregister(&smo8800->miscdev);
+ }
+
return err;
}
@@ -371,9 +376,11 @@ static void smo8800_remove(struct platform_device *device)
i2c_unregister_device(smo8800->i2c_dev);
}
- free_irq(smo8800->irq, smo8800);
- misc_deregister(&smo8800->miscdev);
- dev_dbg(&device->dev, "device /dev/freefall unregistered\n");
+ if (smo8800->irq) {
+ free_irq(smo8800->irq, smo8800);
+ misc_deregister(&smo8800->miscdev);
+ dev_dbg(&device->dev, "device /dev/freefall unregistered\n");
+ }
}
static const struct acpi_device_id smo8800_ids[] = {
--
2.45.1
next prev parent reply other threads:[~2024-06-21 12:26 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-21 12:24 [PATCH v3 0/6] i2c-i801 / dell-smo8800: Move instantiation of lis3lv02d i2c_client from i2c-i801 to dell-smo8800 Hans de Goede
2024-06-21 12:24 ` [PATCH v3 1/6] i2c: core: Setup i2c_adapter runtime-pm before calling device_add() Hans de Goede
2024-06-21 15:08 ` Andy Shevchenko
2024-06-21 12:24 ` [PATCH v3 2/6] i2c: i801: Use a different adapter-name for IDF adapters Hans de Goede
2024-06-21 15:13 ` Andy Shevchenko
2024-06-22 12:46 ` Pali Rohár
2024-06-22 13:56 ` Hans de Goede
2024-06-22 14:08 ` Pali Rohár
2024-06-22 14:14 ` Hans de Goede
2024-06-22 14:23 ` Pali Rohár
2024-06-22 14:29 ` Hans de Goede
2024-06-22 15:07 ` Pali Rohár
2024-06-23 13:58 ` Hans de Goede
2024-06-21 12:24 ` [PATCH v3 3/6] platform/x86: dell-smo8800: Move instantiation of lis3lv02d i2c_client from i2c-i801 to dell-smo8800 Hans de Goede
2024-06-21 15:24 ` Andy Shevchenko
2024-06-22 13:59 ` Hans de Goede
2024-06-22 13:16 ` Pali Rohár
2024-06-22 14:06 ` Hans de Goede
2024-06-22 14:20 ` Pali Rohár
2024-06-22 14:26 ` Hans de Goede
2024-06-22 15:12 ` Pali Rohár
2024-06-22 16:35 ` Pali Rohár
2024-06-23 13:56 ` Hans de Goede
2024-06-23 14:09 ` Hans de Goede
2024-06-22 22:36 ` Andy Shevchenko
2024-06-22 22:41 ` Pali Rohár
2024-06-22 16:26 ` Pali Rohár
2024-06-23 13:46 ` Hans de Goede
2024-06-22 16:43 ` Pali Rohár
2024-06-22 22:43 ` Andy Shevchenko
2024-06-22 22:50 ` Pali Rohár
2024-06-22 22:53 ` Andy Shevchenko
2024-06-23 14:00 ` Hans de Goede
2024-06-22 15:35 ` Pali Rohár
2024-06-23 13:45 ` Hans de Goede
2024-06-23 14:30 ` Pali Rohár
2024-06-21 12:24 ` Hans de Goede [this message]
2024-06-21 15:30 ` [PATCH v3 4/6] platform/x86: dell-smo8800: Allow lis3lv02d i2c_client instantiation without IRQ Andy Shevchenko
2024-06-22 13:20 ` Pali Rohár
2024-06-22 14:07 ` Hans de Goede
2024-06-22 15:14 ` Pali Rohár
2024-06-21 12:25 ` [PATCH v3 5/6] platform/x86: dell-smo8800: Add a couple more models to dell_lis3lv02d_devices[] Hans de Goede
2024-06-21 12:25 ` [PATCH v3 6/6] platform/x86: dell-smo8800: Add support for probing for the accelerometer i2c address Hans de Goede
2024-06-21 15:37 ` Andy Shevchenko
2024-06-22 13:32 ` Pali Rohár
2024-06-22 14:21 ` Hans de Goede
2024-06-22 14:50 ` Pali Rohár
2024-06-22 22:50 ` Andy Shevchenko
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=20240621122503.10034-5-hdegoede@redhat.com \
--to=hdegoede@redhat.com \
--cc=Dell.Client.Kernel@dell.com \
--cc=andi.shyti@kernel.org \
--cc=andy@kernel.org \
--cc=eric.piel@tremplin-utc.net \
--cc=ilpo.jarvinen@linux.intel.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.