Skip to content

Commit

Permalink
HID: intel-ish-hid: add support for MODULE_DEVICE_TABLE()
Browse files Browse the repository at this point in the history
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>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Acked-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
Thomas Weißschuh authored and Jiri Kosina committed Nov 9, 2021
1 parent 5af0660 commit fa443bc
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 0 deletions.
13 changes: 13 additions & 0 deletions include/linux/mod_devicetable.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
3 changes: 3 additions & 0 deletions scripts/mod/devicetable-offsets.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
24 changes: 24 additions & 0 deletions scripts/mod/file2alias.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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.
Expand Down

0 comments on commit fa443bc

Please sign in to comment.