drivers/mfd/intel_soc_pmic_crc.c | 7 +++++++ 1 file changed, 7 insertions(+)
On some x86 Bay Trail tablets which shipped with Android as factory OS,
the DSDT is so broken that the PMIC needs to be manually instantiated by
the special x86-android-tablets.ko "fixup" driver for cases like this.
Add an i2c_device_id table so that the driver can match on manually
instantiated i2c_client-s (which lack an ACPI fwnode to match on).
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
drivers/mfd/intel_soc_pmic_crc.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/mfd/intel_soc_pmic_crc.c b/drivers/mfd/intel_soc_pmic_crc.c
index 876d017f74fe..ba22458ccb84 100644
--- a/drivers/mfd/intel_soc_pmic_crc.c
+++ b/drivers/mfd/intel_soc_pmic_crc.c
@@ -259,12 +259,19 @@ static const struct acpi_device_id crystal_cove_acpi_match[] = {
};
MODULE_DEVICE_TABLE(acpi, crystal_cove_acpi_match);
+static const struct i2c_device_id crystal_cove_i2c_match[] = {
+ { "intel-crystal-cove" },
+ { }
+};
+MODULE_DEVICE_TABLE(i2c, crystal_cove_i2c_match);
+
static struct i2c_driver crystal_cove_i2c_driver = {
.driver = {
.name = "crystal_cove_i2c",
.pm = pm_sleep_ptr(&crystal_cove_pm_ops),
.acpi_match_table = crystal_cove_acpi_match,
},
+ .id_table = crystal_cove_i2c_match,
.probe = crystal_cove_i2c_probe,
.remove = crystal_cove_i2c_remove,
.shutdown = crystal_cove_shutdown,
--
2.47.0
On Fri, Oct 25, 2024 at 10:37:12AM +0200, Hans de Goede wrote:
> On some x86 Bay Trail tablets which shipped with Android as factory OS,
> the DSDT is so broken that the PMIC needs to be manually instantiated by
> the special x86-android-tablets.ko "fixup" driver for cases like this.
>
> Add an i2c_device_id table so that the driver can match on manually
> instantiated i2c_client-s (which lack an ACPI fwnode to match on).
...
> +static const struct i2c_device_id crystal_cove_i2c_match[] = {
> + { "intel-crystal-cove" },
Why this can't be "crystal_cove_i2c"?
> + { }
> +};
...
> .driver = {
> .name = "crystal_cove_i2c",
> .pm = pm_sleep_ptr(&crystal_cove_pm_ops),
> .acpi_match_table = crystal_cove_acpi_match,
> },
--
With Best Regards,
Andy Shevchenko
Hi Andy,
On 25-Oct-24 3:27 PM, Andy Shevchenko wrote:
> On Fri, Oct 25, 2024 at 10:37:12AM +0200, Hans de Goede wrote:
>> On some x86 Bay Trail tablets which shipped with Android as factory OS,
>> the DSDT is so broken that the PMIC needs to be manually instantiated by
>> the special x86-android-tablets.ko "fixup" driver for cases like this.
>>
>> Add an i2c_device_id table so that the driver can match on manually
>> instantiated i2c_client-s (which lack an ACPI fwnode to match on).
>
> ...
>
>> +static const struct i2c_device_id crystal_cove_i2c_match[] = {
>> + { "intel-crystal-cove" },
>
> Why this can't be "crystal_cove_i2c"?
It can be any string as long as it is unique. Typically this will
be vendor-model-name though and having i2c in there is a bit weird
since this is used for the modalias, which gets prefixed with
"i2c:" already.
Therefor I would prefer to keep this as is. But if you have
a strong preference I can change this for v2.
Please let me know how you want to proceed with this patch.
Regards,
Hans
>
>> + { }
>> +};
>
> ...
>
>> .driver = {
>> .name = "crystal_cove_i2c",
>> .pm = pm_sleep_ptr(&crystal_cove_pm_ops),
>> .acpi_match_table = crystal_cove_acpi_match,
>> },
>
On Sat, Oct 26, 2024 at 01:42:36PM +0200, Hans de Goede wrote:
> On 25-Oct-24 3:27 PM, Andy Shevchenko wrote:
> > On Fri, Oct 25, 2024 at 10:37:12AM +0200, Hans de Goede wrote:
...
> >> +static const struct i2c_device_id crystal_cove_i2c_match[] = {
> >> + { "intel-crystal-cove" },
> >
> > Why this can't be "crystal_cove_i2c"?
>
> It can be any string as long as it is unique. Typically this will
> be vendor-model-name though and having i2c in there is a bit weird
> since this is used for the modalias, which gets prefixed with
> "i2c:" already.
>
> Therefor I would prefer to keep this as is. But if you have
> a strong preference I can change this for v2.
>
> Please let me know how you want to proceed with this patch.
I think that I would like to have the same name there and in the .driver below.
If you think we need align these across PMIC MFD drivers, I'm fine with that as
well.
> >> + { }
> >> +};
...
> >> .driver = {
> >> .name = "crystal_cove_i2c",
At least two options based on the existing code:
"Crystal Cove PMIC" or "intel_soc_pmic_crc". I'm also
not against other one as long as it's done for all
PMIC MFD drivers.
> >> .pm = pm_sleep_ptr(&crystal_cove_pm_ops),
> >> .acpi_match_table = crystal_cove_acpi_match,
> >> },
--
With Best Regards,
Andy Shevchenko
© 2016 - 2026 Red Hat, Inc.