@@ -77,6 +77,7 @@ int amd_sfh_get_report(struct hid_device *hid, int report_id, int report_type)
77
77
static void amd_sfh_work (struct work_struct * work )
78
78
{
79
79
struct amdtp_cl_data * cli_data = container_of (work , struct amdtp_cl_data , work .work );
80
+ struct amd_input_data * in_data = cli_data -> in_data ;
80
81
struct request_list * req_node ;
81
82
u8 current_index , sensor_index ;
82
83
u8 report_id , node_type ;
@@ -101,13 +102,11 @@ static void amd_sfh_work(struct work_struct *work)
101
102
pr_err ("AMDSFH: Invalid report size\n" );
102
103
103
104
} else if (node_type == HID_INPUT_REPORT ) {
104
- report_size = get_input_report (sensor_index , report_id ,
105
- cli_data -> input_report [current_index ],
106
- cli_data -> sensor_virt_addr [current_index ]);
105
+ report_size = get_input_report (current_index , sensor_index , report_id , in_data );
107
106
if (report_size )
108
107
hid_input_report (cli_data -> hid_sensor_hubs [current_index ],
109
108
cli_data -> report_type [current_index ],
110
- cli_data -> input_report [current_index ], report_size , 0 );
109
+ in_data -> input_report [current_index ], report_size , 0 );
111
110
else
112
111
pr_err ("AMDSFH: Invalid report size\n" );
113
112
}
@@ -119,21 +118,22 @@ static void amd_sfh_work(struct work_struct *work)
119
118
static void amd_sfh_work_buffer (struct work_struct * work )
120
119
{
121
120
struct amdtp_cl_data * cli_data = container_of (work , struct amdtp_cl_data , work_buffer .work );
121
+ struct amd_input_data * in_data = cli_data -> in_data ;
122
122
u8 report_size ;
123
123
int i ;
124
124
125
125
for (i = 0 ; i < cli_data -> num_hid_devices ; i ++ ) {
126
- report_size = get_input_report (cli_data -> sensor_idx [i ], cli_data -> report_id [i ],
127
- cli_data -> input_report [i ],
128
- cli_data -> sensor_virt_addr [i ]);
126
+ report_size = get_input_report (i , cli_data -> sensor_idx [i ], cli_data -> report_id [i ],
127
+ in_data );
129
128
hid_input_report (cli_data -> hid_sensor_hubs [i ], HID_INPUT_REPORT ,
130
- cli_data -> input_report [i ], report_size , 0 );
129
+ in_data -> input_report [i ], report_size , 0 );
131
130
}
132
131
schedule_delayed_work (& cli_data -> work_buffer , msecs_to_jiffies (AMD_SFH_IDLE_LOOP ));
133
132
}
134
133
135
134
int amd_sfh_hid_client_init (struct amd_mp2_dev * privdata )
136
135
{
136
+ struct amd_input_data * in_data = & privdata -> in_data ;
137
137
struct amdtp_cl_data * cl_data = privdata -> cl_data ;
138
138
struct amd_mp2_sensor_info info ;
139
139
struct device * dev ;
@@ -143,18 +143,16 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
143
143
int rc , i ;
144
144
145
145
dev = & privdata -> pdev -> dev ;
146
- cl_data = devm_kzalloc (dev , sizeof (* cl_data ), GFP_KERNEL );
147
- if (!cl_data )
148
- return - ENOMEM ;
149
146
150
147
cl_data -> num_hid_devices = amd_mp2_get_sensor_num (privdata , & cl_data -> sensor_idx [0 ]);
151
148
152
149
INIT_DELAYED_WORK (& cl_data -> work , amd_sfh_work );
153
150
INIT_DELAYED_WORK (& cl_data -> work_buffer , amd_sfh_work_buffer );
154
151
INIT_LIST_HEAD (& req_list .list );
152
+ cl_data -> in_data = in_data ;
155
153
156
154
for (i = 0 ; i < cl_data -> num_hid_devices ; i ++ ) {
157
- cl_data -> sensor_virt_addr [i ] = dma_alloc_coherent (dev , sizeof (int ) * 8 ,
155
+ in_data -> sensor_virt_addr [i ] = dma_alloc_coherent (dev , sizeof (int ) * 8 ,
158
156
& cl_data -> sensor_dma_addr [i ],
159
157
GFP_KERNEL );
160
158
cl_data -> sensor_sts [i ] = 0 ;
@@ -181,8 +179,8 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
181
179
rc = - ENOMEM ;
182
180
goto cleanup ;
183
181
}
184
- cl_data -> input_report [i ] = devm_kzalloc (dev , input_report_size , GFP_KERNEL );
185
- if (!cl_data -> input_report [i ]) {
182
+ in_data -> input_report [i ] = devm_kzalloc (dev , input_report_size , GFP_KERNEL );
183
+ if (!in_data -> input_report [i ]) {
186
184
rc = - ENOMEM ;
187
185
goto cleanup ;
188
186
}
@@ -205,28 +203,27 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
205
203
privdata -> mp2_ops -> start (privdata , info );
206
204
cl_data -> sensor_sts [i ] = 1 ;
207
205
}
208
- privdata -> cl_data = cl_data ;
209
206
schedule_delayed_work (& cl_data -> work_buffer , msecs_to_jiffies (AMD_SFH_IDLE_LOOP ));
210
207
return 0 ;
211
208
212
209
cleanup :
213
210
for (i = 0 ; i < cl_data -> num_hid_devices ; i ++ ) {
214
- if (cl_data -> sensor_virt_addr [i ]) {
211
+ if (in_data -> sensor_virt_addr [i ]) {
215
212
dma_free_coherent (& privdata -> pdev -> dev , 8 * sizeof (int ),
216
- cl_data -> sensor_virt_addr [i ],
213
+ in_data -> sensor_virt_addr [i ],
217
214
cl_data -> sensor_dma_addr [i ]);
218
215
}
219
216
devm_kfree (dev , cl_data -> feature_report [i ]);
220
- devm_kfree (dev , cl_data -> input_report [i ]);
217
+ devm_kfree (dev , in_data -> input_report [i ]);
221
218
devm_kfree (dev , cl_data -> report_descr [i ]);
222
219
}
223
- devm_kfree (dev , cl_data );
224
220
return rc ;
225
221
}
226
222
227
223
int amd_sfh_hid_client_deinit (struct amd_mp2_dev * privdata )
228
224
{
229
225
struct amdtp_cl_data * cl_data = privdata -> cl_data ;
226
+ struct amd_input_data * in_data = cl_data -> in_data ;
230
227
int i ;
231
228
232
229
for (i = 0 ; i < cl_data -> num_hid_devices ; i ++ )
@@ -237,9 +234,9 @@ int amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata)
237
234
amdtp_hid_remove (cl_data );
238
235
239
236
for (i = 0 ; i < cl_data -> num_hid_devices ; i ++ ) {
240
- if (cl_data -> sensor_virt_addr [i ]) {
237
+ if (in_data -> sensor_virt_addr [i ]) {
241
238
dma_free_coherent (& privdata -> pdev -> dev , 8 * sizeof (int ),
242
- cl_data -> sensor_virt_addr [i ],
239
+ in_data -> sensor_virt_addr [i ],
243
240
cl_data -> sensor_dma_addr [i ]);
244
241
}
245
242
}
0 commit comments