mirror of
https://github.com/wessel-novacustom/clevo-keyboard.git
synced 2024-11-15 03:34:01 +01:00
Add uniwill interface str id and read for tuxedo_io
This commit is contained in:
parent
ea720826e8
commit
d2ff4e4b83
|
@ -252,28 +252,6 @@ u32 uw_ec_write_addr(u8 addr_low, u8 addr_high, u8 data_low, u8 data_high, union
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(uw_ec_write_addr);
|
EXPORT_SYMBOL(uw_ec_write_addr);
|
||||||
|
|
||||||
static u32 uniwill_identify(void)
|
|
||||||
{
|
|
||||||
int status;
|
|
||||||
|
|
||||||
// Look for for GUIDs used on uniwill devices
|
|
||||||
status =
|
|
||||||
wmi_has_guid(UNIWILL_WMI_EVENT_GUID_0) &&
|
|
||||||
wmi_has_guid(UNIWILL_WMI_EVENT_GUID_1) &&
|
|
||||||
wmi_has_guid(UNIWILL_WMI_EVENT_GUID_2) &&
|
|
||||||
wmi_has_guid(UNIWILL_WMI_MGMT_GUID_BA) &&
|
|
||||||
wmi_has_guid(UNIWILL_WMI_MGMT_GUID_BB) &&
|
|
||||||
wmi_has_guid(UNIWILL_WMI_MGMT_GUID_BC);
|
|
||||||
|
|
||||||
if (!status)
|
|
||||||
{
|
|
||||||
pr_debug("probe: At least one Uniwill GUID missing\n");
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void uniwill_init(void)
|
static void uniwill_init(void)
|
||||||
{
|
{
|
||||||
/* u32 i;
|
/* u32 i;
|
||||||
|
|
|
@ -51,6 +51,11 @@ static u32 clevo_identify(void)
|
||||||
return clevo_get_active_interface_id(NULL) == 0 ? 1 : 0;
|
return clevo_get_active_interface_id(NULL) == 0 ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u32 uniwill_identify(void)
|
||||||
|
{
|
||||||
|
return uniwill_get_active_interface_id(NULL) == 0 ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*static int fop_open(struct inode *inode, struct file *file)
|
/*static int fop_open(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -205,6 +210,8 @@ static long uniwill_ioctl_interface(struct file *file, unsigned int cmd, unsigne
|
||||||
u32 copy_result;
|
u32 copy_result;
|
||||||
u32 argument;
|
u32 argument;
|
||||||
u8 byte_data;
|
u8 byte_data;
|
||||||
|
const char str_no_if[] = "";
|
||||||
|
char *str_uniwill_if;
|
||||||
union uw_ec_read_return reg_read_return;
|
union uw_ec_read_return reg_read_return;
|
||||||
union uw_ec_write_return reg_write_return;
|
union uw_ec_write_return reg_write_return;
|
||||||
|
|
||||||
|
@ -218,6 +225,13 @@ static long uniwill_ioctl_interface(struct file *file, unsigned int cmd, unsigne
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
|
case R_UW_HW_IF_STR:
|
||||||
|
if (uniwill_get_active_interface_id(&str_uniwill_if) == 0) {
|
||||||
|
copy_result = copy_to_user((char *) arg, str_uniwill_if, strlen(str_uniwill_if) + 1);
|
||||||
|
} else {
|
||||||
|
copy_result = copy_to_user((char *) arg, str_no_if, strlen(str_no_if) + 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case R_UW_FANSPEED:
|
case R_UW_FANSPEED:
|
||||||
uniwill_read_ec_ram(0x1804, &byte_data);
|
uniwill_read_ec_ram(0x1804, &byte_data);
|
||||||
result = byte_data;
|
result = byte_data;
|
||||||
|
@ -363,11 +377,7 @@ static int __init tuxedo_io_init(void)
|
||||||
|
|
||||||
// Hardware identification
|
// Hardware identification
|
||||||
id_check_clevo = clevo_identify();
|
id_check_clevo = clevo_identify();
|
||||||
id_check_uniwill = uniwill_identify() == 0 ? 1 : 0;
|
id_check_uniwill = uniwill_identify();
|
||||||
|
|
||||||
if (id_check_uniwill == 1) {
|
|
||||||
uniwill_init();
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (id_check_clevo == 0 && id_check_uniwill == 0) {
|
if (id_check_clevo == 0 && id_check_uniwill == 0) {
|
||||||
|
|
|
@ -71,6 +71,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Read
|
// Read
|
||||||
|
#define R_UW_HW_IF_STR _IOR(MAGIC_READ_UW, 0x00, char*)
|
||||||
#define R_UW_FANSPEED _IOR(MAGIC_READ_UW, 0x10, int32_t*)
|
#define R_UW_FANSPEED _IOR(MAGIC_READ_UW, 0x10, int32_t*)
|
||||||
#define R_UW_FANSPEED2 _IOR(MAGIC_READ_UW, 0x11, int32_t*)
|
#define R_UW_FANSPEED2 _IOR(MAGIC_READ_UW, 0x11, int32_t*)
|
||||||
#define R_UW_FAN_TEMP _IOR(MAGIC_READ_UW, 0x12, int32_t*)
|
#define R_UW_FAN_TEMP _IOR(MAGIC_READ_UW, 0x12, int32_t*)
|
||||||
|
|
|
@ -50,5 +50,6 @@ u32 uniwill_add_interface(struct uniwill_interface_t *new_interface);
|
||||||
u32 uniwill_remove_interface(struct uniwill_interface_t *interface);
|
u32 uniwill_remove_interface(struct uniwill_interface_t *interface);
|
||||||
uniwill_read_ec_ram_t uniwill_read_ec_ram;
|
uniwill_read_ec_ram_t uniwill_read_ec_ram;
|
||||||
uniwill_write_ec_ram_t uniwill_write_ec_ram;
|
uniwill_write_ec_ram_t uniwill_write_ec_ram;
|
||||||
|
u32 uniwill_get_active_interface_id(char **id_str);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -90,7 +90,7 @@ static struct key_entry uniwill_wmi_keymap[] = {
|
||||||
|
|
||||||
static struct uniwill_interfaces_t {
|
static struct uniwill_interfaces_t {
|
||||||
struct uniwill_interface_t *wmi;
|
struct uniwill_interface_t *wmi;
|
||||||
} uniwill_interfaces;
|
} uniwill_interfaces = { .wmi = NULL };
|
||||||
|
|
||||||
uniwill_event_callb_t uniwill_event_callb;
|
uniwill_event_callb_t uniwill_event_callb;
|
||||||
|
|
||||||
|
@ -168,6 +168,18 @@ u32 uniwill_remove_interface(struct uniwill_interface_t *interface)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(uniwill_remove_interface);
|
EXPORT_SYMBOL(uniwill_remove_interface);
|
||||||
|
|
||||||
|
u32 uniwill_get_active_interface_id(char **id_str)
|
||||||
|
{
|
||||||
|
if (IS_ERR_OR_NULL(uniwill_interfaces.wmi))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (!IS_ERR_OR_NULL(id_str))
|
||||||
|
*id_str = uniwill_interfaces.wmi->string_id;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(uniwill_get_active_interface_id);
|
||||||
|
|
||||||
static void key_event_work(struct work_struct *work)
|
static void key_event_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
sparse_keymap_report_known_event(
|
sparse_keymap_report_known_event(
|
||||||
|
|
Loading…
Reference in a new issue