25
25
#include <linux/kernel.h>
26
26
#include <linux/module.h>
27
27
#include <linux/pm.h>
28
+ #include <linux/uuid.h>
28
29
29
30
#include "i2c-hid.h"
30
31
31
32
struct i2c_hid_acpi {
32
33
struct i2chid_ops ops ;
33
- struct i2c_client * client ;
34
+ struct acpi_device * adev ;
34
35
};
35
36
36
37
static const struct acpi_device_id i2c_hid_acpi_blacklist [] = {
@@ -42,29 +43,24 @@ static const struct acpi_device_id i2c_hid_acpi_blacklist[] = {
42
43
{ },
43
44
};
44
45
45
- static int i2c_hid_acpi_get_descriptor (struct i2c_client * client )
46
+ /* HID I²C Device: 3cdff6f7-4267-4555-ad05-b30a3d8938de */
47
+ static guid_t i2c_hid_guid =
48
+ GUID_INIT (0x3CDFF6F7 , 0x4267 , 0x4555 ,
49
+ 0xAD , 0x05 , 0xB3 , 0x0A , 0x3D , 0x89 , 0x38 , 0xDE );
50
+
51
+ static int i2c_hid_acpi_get_descriptor (struct acpi_device * adev )
46
52
{
47
- static guid_t i2c_hid_guid =
48
- GUID_INIT (0x3CDFF6F7 , 0x4267 , 0x4555 ,
49
- 0xAD , 0x05 , 0xB3 , 0x0A , 0x3D , 0x89 , 0x38 , 0xDE );
53
+ acpi_handle handle = acpi_device_handle (adev );
50
54
union acpi_object * obj ;
51
- struct acpi_device * adev ;
52
- acpi_handle handle ;
53
55
u16 hid_descriptor_address ;
54
56
55
- handle = ACPI_HANDLE (& client -> dev );
56
- if (!handle || acpi_bus_get_device (handle , & adev )) {
57
- dev_err (& client -> dev , "Error could not get ACPI device\n" );
58
- return - ENODEV ;
59
- }
60
-
61
57
if (acpi_match_device_ids (adev , i2c_hid_acpi_blacklist ) == 0 )
62
58
return - ENODEV ;
63
59
64
60
obj = acpi_evaluate_dsm_typed (handle , & i2c_hid_guid , 1 , 1 , NULL ,
65
61
ACPI_TYPE_INTEGER );
66
62
if (!obj ) {
67
- dev_err ( & client -> dev , "Error _DSM call to get HID descriptor address failed\n" );
63
+ acpi_handle_err ( handle , "Error _DSM call to get HID descriptor address failed\n" );
68
64
return - ENODEV ;
69
65
}
70
66
@@ -76,36 +72,38 @@ static int i2c_hid_acpi_get_descriptor(struct i2c_client *client)
76
72
77
73
static void i2c_hid_acpi_shutdown_tail (struct i2chid_ops * ops )
78
74
{
79
- struct i2c_hid_acpi * ihid_acpi =
80
- container_of (ops , struct i2c_hid_acpi , ops );
81
- struct device * dev = & ihid_acpi -> client -> dev ;
82
- acpi_device_set_power (ACPI_COMPANION (dev ), ACPI_STATE_D3_COLD );
75
+ struct i2c_hid_acpi * ihid_acpi = container_of (ops , struct i2c_hid_acpi , ops );
76
+
77
+ acpi_device_set_power (ihid_acpi -> adev , ACPI_STATE_D3_COLD );
83
78
}
84
79
85
- static int i2c_hid_acpi_probe (struct i2c_client * client ,
86
- const struct i2c_device_id * dev_id )
80
+ static int i2c_hid_acpi_probe (struct i2c_client * client )
87
81
{
88
82
struct device * dev = & client -> dev ;
89
83
struct i2c_hid_acpi * ihid_acpi ;
90
84
struct acpi_device * adev ;
91
85
u16 hid_descriptor_address ;
92
86
int ret ;
93
87
88
+ adev = ACPI_COMPANION (dev );
89
+ if (!adev ) {
90
+ dev_err (& client -> dev , "Error could not get ACPI device\n" );
91
+ return - ENODEV ;
92
+ }
93
+
94
94
ihid_acpi = devm_kzalloc (& client -> dev , sizeof (* ihid_acpi ), GFP_KERNEL );
95
95
if (!ihid_acpi )
96
96
return - ENOMEM ;
97
97
98
- ihid_acpi -> client = client ;
98
+ ihid_acpi -> adev = adev ;
99
99
ihid_acpi -> ops .shutdown_tail = i2c_hid_acpi_shutdown_tail ;
100
100
101
- ret = i2c_hid_acpi_get_descriptor (client );
101
+ ret = i2c_hid_acpi_get_descriptor (adev );
102
102
if (ret < 0 )
103
103
return ret ;
104
104
hid_descriptor_address = ret ;
105
105
106
- adev = ACPI_COMPANION (dev );
107
- if (adev )
108
- acpi_device_fix_up_power (adev );
106
+ acpi_device_fix_up_power (adev );
109
107
110
108
if (acpi_gbl_FADT .flags & ACPI_FADT_LOW_POWER_S0 ) {
111
109
device_set_wakeup_capable (dev , true);
@@ -128,10 +126,10 @@ static struct i2c_driver i2c_hid_acpi_driver = {
128
126
.name = "i2c_hid_acpi" ,
129
127
.pm = & i2c_hid_core_pm ,
130
128
.probe_type = PROBE_PREFER_ASYNCHRONOUS ,
131
- .acpi_match_table = ACPI_PTR ( i2c_hid_acpi_match ) ,
129
+ .acpi_match_table = i2c_hid_acpi_match ,
132
130
},
133
131
134
- .probe = i2c_hid_acpi_probe ,
132
+ .probe_new = i2c_hid_acpi_probe ,
135
133
.remove = i2c_hid_core_remove ,
136
134
.shutdown = i2c_hid_core_shutdown ,
137
135
};
0 commit comments