@@ -77,6 +77,7 @@ int amd_sfh_get_report(struct hid_device *hid, int report_id, int report_type)
7777static void amd_sfh_work (struct work_struct * work )
7878{
7979 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 ;
8081 struct request_list * req_node ;
8182 u8 current_index , sensor_index ;
8283 u8 report_id , node_type ;
@@ -101,13 +102,11 @@ static void amd_sfh_work(struct work_struct *work)
101102 pr_err ("AMDSFH: Invalid report size\n" );
102103
103104 } 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 );
107106 if (report_size )
108107 hid_input_report (cli_data -> hid_sensor_hubs [current_index ],
109108 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 );
111110 else
112111 pr_err ("AMDSFH: Invalid report size\n" );
113112 }
@@ -119,21 +118,22 @@ static void amd_sfh_work(struct work_struct *work)
119118static void amd_sfh_work_buffer (struct work_struct * work )
120119{
121120 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 ;
122122 u8 report_size ;
123123 int i ;
124124
125125 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 );
129128 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 );
131130 }
132131 schedule_delayed_work (& cli_data -> work_buffer , msecs_to_jiffies (AMD_SFH_IDLE_LOOP ));
133132}
134133
135134int amd_sfh_hid_client_init (struct amd_mp2_dev * privdata )
136135{
136+ struct amd_input_data * in_data = & privdata -> in_data ;
137137 struct amdtp_cl_data * cl_data = privdata -> cl_data ;
138138 struct amd_mp2_sensor_info info ;
139139 struct device * dev ;
@@ -143,18 +143,16 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
143143 int rc , i ;
144144
145145 dev = & privdata -> pdev -> dev ;
146- cl_data = devm_kzalloc (dev , sizeof (* cl_data ), GFP_KERNEL );
147- if (!cl_data )
148- return - ENOMEM ;
149146
150147 cl_data -> num_hid_devices = amd_mp2_get_sensor_num (privdata , & cl_data -> sensor_idx [0 ]);
151148
152149 INIT_DELAYED_WORK (& cl_data -> work , amd_sfh_work );
153150 INIT_DELAYED_WORK (& cl_data -> work_buffer , amd_sfh_work_buffer );
154151 INIT_LIST_HEAD (& req_list .list );
152+ cl_data -> in_data = in_data ;
155153
156154 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 ,
158156 & cl_data -> sensor_dma_addr [i ],
159157 GFP_KERNEL );
160158 cl_data -> sensor_sts [i ] = 0 ;
@@ -181,8 +179,8 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
181179 rc = - ENOMEM ;
182180 goto cleanup ;
183181 }
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 ]) {
186184 rc = - ENOMEM ;
187185 goto cleanup ;
188186 }
@@ -205,28 +203,27 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
205203 privdata -> mp2_ops -> start (privdata , info );
206204 cl_data -> sensor_sts [i ] = 1 ;
207205 }
208- privdata -> cl_data = cl_data ;
209206 schedule_delayed_work (& cl_data -> work_buffer , msecs_to_jiffies (AMD_SFH_IDLE_LOOP ));
210207 return 0 ;
211208
212209cleanup :
213210 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 ]) {
215212 dma_free_coherent (& privdata -> pdev -> dev , 8 * sizeof (int ),
216- cl_data -> sensor_virt_addr [i ],
213+ in_data -> sensor_virt_addr [i ],
217214 cl_data -> sensor_dma_addr [i ]);
218215 }
219216 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 ]);
221218 devm_kfree (dev , cl_data -> report_descr [i ]);
222219 }
223- devm_kfree (dev , cl_data );
224220 return rc ;
225221}
226222
227223int amd_sfh_hid_client_deinit (struct amd_mp2_dev * privdata )
228224{
229225 struct amdtp_cl_data * cl_data = privdata -> cl_data ;
226+ struct amd_input_data * in_data = cl_data -> in_data ;
230227 int i ;
231228
232229 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)
237234 amdtp_hid_remove (cl_data );
238235
239236 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 ]) {
241238 dma_free_coherent (& privdata -> pdev -> dev , 8 * sizeof (int ),
242- cl_data -> sensor_virt_addr [i ],
239+ in_data -> sensor_virt_addr [i ],
243240 cl_data -> sensor_dma_addr [i ]);
244241 }
245242 }
0 commit comments