diff mbox series

[1/6] HID: intel-ish-hid: add support for MODULE_DEVICE_TABLE()

Message ID 20211029152901.297939-2-linux@weissschuh.net (mailing list archive)
State Mainlined
Commit fa443bc3c1e4b28d9315dea882e8358ba6e26f8b
Headers show
Series MODULE_DEVICE_TABLE() support for the ISHTP bus | expand

Commit Message

Thomas Weißschuh Oct. 29, 2021, 3:28 p.m. UTC
This allows to selectively autoload drivers for ISH devices.
Currently all ISH drivers are loaded for all systems having any ISH
device.

Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>

---

Cc: linux-kbuild@vger.kernel.org
Cc: linux-input@vger.kernel.org
Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Cc: Jiri Kosina <jkosina@suse.cz>
Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Cc: Hans de Goede <hdegoede@redhat.com>
Cc: Masahiro Yamada <masahiroy@kernel.org>
Cc: Michal Marek <michal.lkml@markovi.net>
Cc: Nick Desaulniers <ndesaulniers@google.com>
---
 include/linux/mod_devicetable.h   | 13 +++++++++++++
 scripts/mod/devicetable-offsets.c |  3 +++
 scripts/mod/file2alias.c          | 24 ++++++++++++++++++++++++
 3 files changed, 40 insertions(+)

Comments

Hans de Goede Nov. 1, 2021, 9:58 a.m. UTC | #1
Hi,

On 10/29/21 17:28, Thomas Weißschuh wrote:
> This allows to selectively autoload drivers for ISH devices.
> Currently all ISH drivers are loaded for all systems having any ISH
> device.
> 
> Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
> 
> ---
> 
> Cc: linux-kbuild@vger.kernel.org
> Cc: linux-input@vger.kernel.org
> Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> Cc: Jiri Kosina <jkosina@suse.cz>
> Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> Cc: Hans de Goede <hdegoede@redhat.com>
> Cc: Masahiro Yamada <masahiroy@kernel.org>
> Cc: Michal Marek <michal.lkml@markovi.net>
> Cc: Nick Desaulniers <ndesaulniers@google.com>
> ---
>  include/linux/mod_devicetable.h   | 13 +++++++++++++
>  scripts/mod/devicetable-offsets.c |  3 +++
>  scripts/mod/file2alias.c          | 24 ++++++++++++++++++++++++
>  3 files changed, 40 insertions(+)
> 
> diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
> index ae2e75d15b21..befbf53c4b7c 100644
> --- a/include/linux/mod_devicetable.h
> +++ b/include/linux/mod_devicetable.h
> @@ -895,4 +895,17 @@ struct dfl_device_id {
>  	kernel_ulong_t driver_data;
>  };
>  
> +/* ISHTP (Integrated Sensor Hub Transport Protocol) */
> +
> +#define ISHTP_MODULE_PREFIX	"ishtp:"
> +
> +/**
> + * struct ishtp_device_id - ISHTP device identifier
> + * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
> + * @context: pointer to driver specific data
> + */
> +struct ishtp_device_id {
> +	guid_t guid;

The kdoc comment documents a context pointer, but this is missing from the
actual struct. Having some sort of driver_data (1) field here would be good IMHO.

Regards,

Hans

1) "context" is fine, but AFAIK almost all other foo_device_id structs call this
driver_data, so that would be more consistent IMHO.


> +};
> +
>  #endif /* LINUX_MOD_DEVICETABLE_H */
> diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c
> index cc3625617a0e..c0d3bcb99138 100644
> --- a/scripts/mod/devicetable-offsets.c
> +++ b/scripts/mod/devicetable-offsets.c
> @@ -259,5 +259,8 @@ int main(void)
>  	DEVID_FIELD(dfl_device_id, type);
>  	DEVID_FIELD(dfl_device_id, feature_id);
>  
> +	DEVID(ishtp_device_id);
> +	DEVID_FIELD(ishtp_device_id, guid);
> +
>  	return 0;
>  }
> diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
> index 49aba862073e..5258247d78ac 100644
> --- a/scripts/mod/file2alias.c
> +++ b/scripts/mod/file2alias.c
> @@ -115,6 +115,17 @@ static inline void add_uuid(char *str, uuid_le uuid)
>  		uuid.b[12], uuid.b[13], uuid.b[14], uuid.b[15]);
>  }
>  
> +static inline void add_guid(char *str, guid_t guid)
> +{
> +	int len = strlen(str);
> +
> +	sprintf(str + len, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
> +		guid.b[3], guid.b[2], guid.b[1], guid.b[0],
> +		guid.b[5], guid.b[4], guid.b[7], guid.b[6],
> +		guid.b[8], guid.b[9], guid.b[10], guid.b[11],
> +		guid.b[12], guid.b[13], guid.b[14], guid.b[15]);
> +}
> +
>  /**
>   * Check that sizeof(device_id type) are consistent with size of section
>   * in .o file. If in-consistent then userspace and kernel does not agree
> @@ -1380,6 +1391,18 @@ static int do_mhi_entry(const char *filename, void *symval, char *alias)
>  	return 1;
>  }
>  
> +/* Looks like: ishtp:{guid} */
> +static int do_ishtp_entry(const char *filename, void *symval, char *alias)
> +{
> +	DEF_FIELD(symval, ishtp_device_id, guid);
> +
> +	strcpy(alias, ISHTP_MODULE_PREFIX "{");
> +	add_guid(alias, guid);
> +	strcat(alias, "}");
> +
> +	return 1;
> +}
> +
>  static int do_auxiliary_entry(const char *filename, void *symval, char *alias)
>  {
>  	DEF_FIELD_ADDR(symval, auxiliary_device_id, name);
> @@ -1499,6 +1522,7 @@ static const struct devtable devtable[] = {
>  	{"auxiliary", SIZE_auxiliary_device_id, do_auxiliary_entry},
>  	{"ssam", SIZE_ssam_device_id, do_ssam_entry},
>  	{"dfl", SIZE_dfl_device_id, do_dfl_entry},
> +	{"ishtp", SIZE_ishtp_device_id, do_ishtp_entry},
>  };
>  
>  /* Create MODULE_ALIAS() statements.
>
Thomas Weißschuh Nov. 1, 2021, 10:09 a.m. UTC | #2
On 2021-11-01 10:58+0100, Hans de Goede wrote:
> On 10/29/21 17:28, Thomas Weißschuh wrote:
> > This allows to selectively autoload drivers for ISH devices.
> > Currently all ISH drivers are loaded for all systems having any ISH
> > device.
> > 
> > Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
> > 
> > ---
> > 
> > Cc: linux-kbuild@vger.kernel.org
> > Cc: linux-input@vger.kernel.org
> > Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> > Cc: Jiri Kosina <jkosina@suse.cz>
> > Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> > Cc: Hans de Goede <hdegoede@redhat.com>
> > Cc: Masahiro Yamada <masahiroy@kernel.org>
> > Cc: Michal Marek <michal.lkml@markovi.net>
> > Cc: Nick Desaulniers <ndesaulniers@google.com>
> > ---
> >  include/linux/mod_devicetable.h   | 13 +++++++++++++
> >  scripts/mod/devicetable-offsets.c |  3 +++
> >  scripts/mod/file2alias.c          | 24 ++++++++++++++++++++++++
> >  3 files changed, 40 insertions(+)
> > 
> > diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
> > index ae2e75d15b21..befbf53c4b7c 100644
> > --- a/include/linux/mod_devicetable.h
> > +++ b/include/linux/mod_devicetable.h
> > @@ -895,4 +895,17 @@ struct dfl_device_id {
> >  	kernel_ulong_t driver_data;
> >  };
> >  
> > +/* ISHTP (Integrated Sensor Hub Transport Protocol) */
> > +
> > +#define ISHTP_MODULE_PREFIX	"ishtp:"
> > +
> > +/**
> > + * struct ishtp_device_id - ISHTP device identifier
> > + * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
> > + * @context: pointer to driver specific data
> > + */
> > +struct ishtp_device_id {
> > +	guid_t guid;
> 
> The kdoc comment documents a context pointer, but this is missing from the
> actual struct. Having some sort of driver_data (1) field here would be good IMHO.

Fine for me.

I left it out because nothing would be using it at the moment and
it would have been easy to add when needed.

Do you want me to send a v2 for that or would you add it when merging?
(Or remove the spurious comment)

> Regards,
> 
> Hans
> 
> 1) "context" is fine, but AFAIK almost all other foo_device_id structs call this
> driver_data, so that would be more consistent IMHO.

Thomas
Hans de Goede Nov. 1, 2021, 10:15 a.m. UTC | #3
Hi,

On 11/1/21 11:09, Thomas Weißschuh wrote:
> On 2021-11-01 10:58+0100, Hans de Goede wrote:
>> On 10/29/21 17:28, Thomas Weißschuh wrote:
>>> This allows to selectively autoload drivers for ISH devices.
>>> Currently all ISH drivers are loaded for all systems having any ISH
>>> device.
>>>
>>> Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
>>>
>>> ---
>>>
>>> Cc: linux-kbuild@vger.kernel.org
>>> Cc: linux-input@vger.kernel.org
>>> Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
>>> Cc: Jiri Kosina <jkosina@suse.cz>
>>> Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>
>>> Cc: Hans de Goede <hdegoede@redhat.com>
>>> Cc: Masahiro Yamada <masahiroy@kernel.org>
>>> Cc: Michal Marek <michal.lkml@markovi.net>
>>> Cc: Nick Desaulniers <ndesaulniers@google.com>
>>> ---
>>>  include/linux/mod_devicetable.h   | 13 +++++++++++++
>>>  scripts/mod/devicetable-offsets.c |  3 +++
>>>  scripts/mod/file2alias.c          | 24 ++++++++++++++++++++++++
>>>  3 files changed, 40 insertions(+)
>>>
>>> diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
>>> index ae2e75d15b21..befbf53c4b7c 100644
>>> --- a/include/linux/mod_devicetable.h
>>> +++ b/include/linux/mod_devicetable.h
>>> @@ -895,4 +895,17 @@ struct dfl_device_id {
>>>  	kernel_ulong_t driver_data;
>>>  };
>>>  
>>> +/* ISHTP (Integrated Sensor Hub Transport Protocol) */
>>> +
>>> +#define ISHTP_MODULE_PREFIX	"ishtp:"
>>> +
>>> +/**
>>> + * struct ishtp_device_id - ISHTP device identifier
>>> + * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
>>> + * @context: pointer to driver specific data
>>> + */
>>> +struct ishtp_device_id {
>>> +	guid_t guid;
>>
>> The kdoc comment documents a context pointer, but this is missing from the
>> actual struct. Having some sort of driver_data (1) field here would be good IMHO.
> 
> Fine for me.
> 
> I left it out because nothing would be using it at the moment and
> it would have been easy to add when needed.

IMHO having a device_id without a context/driver_data field would be
weird and is likely asking for needless churn in the future, but see
below.

> Do you want me to send a v2 for that or would you add it when merging?
> (Or remove the spurious comment)

As I indicated in my reply to the cover-letter, I believe this series
should be merged through the HID tree, so this is up to the HID maintainers
to decide.

Regards,

Hans


p.s.

Thank you for doing this series I did not realize that the eclite driver
would end up being loaded on all systems where the ISH is used, thank you
for fixing this.
diff mbox series

Patch

diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index ae2e75d15b21..befbf53c4b7c 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -895,4 +895,17 @@  struct dfl_device_id {
 	kernel_ulong_t driver_data;
 };
 
+/* ISHTP (Integrated Sensor Hub Transport Protocol) */
+
+#define ISHTP_MODULE_PREFIX	"ishtp:"
+
+/**
+ * struct ishtp_device_id - ISHTP device identifier
+ * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
+ * @context: pointer to driver specific data
+ */
+struct ishtp_device_id {
+	guid_t guid;
+};
+
 #endif /* LINUX_MOD_DEVICETABLE_H */
diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c
index cc3625617a0e..c0d3bcb99138 100644
--- a/scripts/mod/devicetable-offsets.c
+++ b/scripts/mod/devicetable-offsets.c
@@ -259,5 +259,8 @@  int main(void)
 	DEVID_FIELD(dfl_device_id, type);
 	DEVID_FIELD(dfl_device_id, feature_id);
 
+	DEVID(ishtp_device_id);
+	DEVID_FIELD(ishtp_device_id, guid);
+
 	return 0;
 }
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index 49aba862073e..5258247d78ac 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -115,6 +115,17 @@  static inline void add_uuid(char *str, uuid_le uuid)
 		uuid.b[12], uuid.b[13], uuid.b[14], uuid.b[15]);
 }
 
+static inline void add_guid(char *str, guid_t guid)
+{
+	int len = strlen(str);
+
+	sprintf(str + len, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
+		guid.b[3], guid.b[2], guid.b[1], guid.b[0],
+		guid.b[5], guid.b[4], guid.b[7], guid.b[6],
+		guid.b[8], guid.b[9], guid.b[10], guid.b[11],
+		guid.b[12], guid.b[13], guid.b[14], guid.b[15]);
+}
+
 /**
  * Check that sizeof(device_id type) are consistent with size of section
  * in .o file. If in-consistent then userspace and kernel does not agree
@@ -1380,6 +1391,18 @@  static int do_mhi_entry(const char *filename, void *symval, char *alias)
 	return 1;
 }
 
+/* Looks like: ishtp:{guid} */
+static int do_ishtp_entry(const char *filename, void *symval, char *alias)
+{
+	DEF_FIELD(symval, ishtp_device_id, guid);
+
+	strcpy(alias, ISHTP_MODULE_PREFIX "{");
+	add_guid(alias, guid);
+	strcat(alias, "}");
+
+	return 1;
+}
+
 static int do_auxiliary_entry(const char *filename, void *symval, char *alias)
 {
 	DEF_FIELD_ADDR(symval, auxiliary_device_id, name);
@@ -1499,6 +1522,7 @@  static const struct devtable devtable[] = {
 	{"auxiliary", SIZE_auxiliary_device_id, do_auxiliary_entry},
 	{"ssam", SIZE_ssam_device_id, do_ssam_entry},
 	{"dfl", SIZE_dfl_device_id, do_dfl_entry},
+	{"ishtp", SIZE_ishtp_device_id, do_ishtp_entry},
 };
 
 /* Create MODULE_ALIAS() statements.