[PATCH] mfd: intel_soc_pmic_crc: Add support for non ACPI instantiated i2c_client

Hans de Goede posted 1 patch 1 month ago
There is a newer version of this series
drivers/mfd/intel_soc_pmic_crc.c | 7 +++++++
1 file changed, 7 insertions(+)
[PATCH] mfd: intel_soc_pmic_crc: Add support for non ACPI instantiated i2c_client
Posted by Hans de Goede 1 month ago
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
Re: [PATCH] mfd: intel_soc_pmic_crc: Add support for non ACPI instantiated i2c_client
Posted by Andy Shevchenko 1 month ago
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
Re: [PATCH] mfd: intel_soc_pmic_crc: Add support for non ACPI instantiated i2c_client
Posted by Hans de Goede 1 month ago
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,
>>  	},
>
Re: [PATCH] mfd: intel_soc_pmic_crc: Add support for non ACPI instantiated i2c_client
Posted by Andy Shevchenko 4 weeks ago
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