Lines Matching refs:work_data

139 static int cs40l50_effect_bank_set(struct cs40l50_work *work_data,  in cs40l50_effect_bank_set()  argument
142 s16 bank_type = work_data->custom_data[0] & CS40L50_CUSTOM_DATA_MASK; in cs40l50_effect_bank_set()
145 dev_err(work_data->vib->dev, "Invalid bank (%d)\n", bank_type); in cs40l50_effect_bank_set()
149 if (work_data->custom_len > CS40L50_OWT_CUSTOM_DATA_SIZE) in cs40l50_effect_bank_set()
157 static int cs40l50_effect_index_set(struct cs40l50_work *work_data, in cs40l50_effect_index_set() argument
160 struct cs40l50_vibra *vib = work_data->vib; in cs40l50_effect_index_set()
177 effect->index += work_data->custom_data[1] & CS40L50_CUSTOM_DATA_MASK; in cs40l50_effect_index_set()
192 static int cs40l50_effect_gpio_mapping_set(struct cs40l50_work *work_data, in cs40l50_effect_gpio_mapping_set() argument
195 u16 gpio_edge, gpio_num, button = work_data->effect->trigger.button; in cs40l50_effect_gpio_mapping_set()
196 struct cs40l50_vibra *vib = work_data->vib; in cs40l50_effect_gpio_mapping_set()
217 static int cs40l50_upload_owt(struct cs40l50_work *work_data) in cs40l50_upload_owt() argument
220 struct cs40l50_vibra *vib = work_data->vib; in cs40l50_upload_owt()
221 size_t len = work_data->custom_len * 2; in cs40l50_upload_owt()
235 header.type = work_data->custom_data[0] == CS40L50_PCM_ID ? CS40L50_TYPE_PCM : in cs40l50_upload_owt()
245 memcpy(new_owt_effect_data + sizeof(header), work_data->custom_data, len); in cs40l50_upload_owt()
266 struct cs40l50_work *work_data = container_of(work, struct cs40l50_work, work); in cs40l50_add_worker() local
267 struct cs40l50_vibra *vib = work_data->vib; in cs40l50_add_worker()
277 effect = cs40l50_find_effect(work_data->effect->id, &vib->effect_head); in cs40l50_add_worker()
285 effect->id = work_data->effect->id; in cs40l50_add_worker()
289 error = cs40l50_effect_bank_set(work_data, effect); in cs40l50_add_worker()
293 error = cs40l50_effect_index_set(work_data, effect); in cs40l50_add_worker()
297 error = cs40l50_effect_gpio_mapping_set(work_data, effect); in cs40l50_add_worker()
302 error = cs40l50_upload_owt(work_data); in cs40l50_add_worker()
314 work_data->error = error; in cs40l50_add_worker()
322 struct cs40l50_work work_data; in cs40l50_add() local
330 work_data.custom_data = memdup_array_user(effect->u.periodic.custom_data, in cs40l50_add()
333 if (IS_ERR(work_data.custom_data)) in cs40l50_add()
334 return PTR_ERR(work_data.custom_data); in cs40l50_add()
336 work_data.custom_len = effect->u.periodic.custom_len; in cs40l50_add()
337 work_data.vib = vib; in cs40l50_add()
338 work_data.effect = effect; in cs40l50_add()
339 INIT_WORK_ONSTACK(&work_data.work, cs40l50_add_worker); in cs40l50_add()
342 queue_work(vib->vib_wq, &work_data.work); in cs40l50_add()
343 flush_work(&work_data.work); in cs40l50_add()
344 destroy_work_on_stack(&work_data.work); in cs40l50_add()
346 kfree(work_data.custom_data); in cs40l50_add()
348 return work_data.error; in cs40l50_add()
353 struct cs40l50_work *work_data = container_of(work, struct cs40l50_work, work); in cs40l50_start_worker() local
354 struct cs40l50_vibra *vib = work_data->vib; in cs40l50_start_worker()
360 start_effect = cs40l50_find_effect(work_data->effect->id, &vib->effect_head); in cs40l50_start_worker()
362 while (--work_data->count >= 0) { in cs40l50_start_worker()
364 usleep_range(work_data->effect->replay.length, in cs40l50_start_worker()
365 work_data->effect->replay.length + 100); in cs40l50_start_worker()
374 kfree(work_data); in cs40l50_start_worker()
379 struct cs40l50_work *work_data = container_of(work, struct cs40l50_work, work); in cs40l50_stop_worker() local
380 struct cs40l50_vibra *vib = work_data->vib; in cs40l50_stop_worker()
390 kfree(work_data); in cs40l50_stop_worker()
396 struct cs40l50_work *work_data; in cs40l50_playback() local
398 work_data = kzalloc(sizeof(*work_data), GFP_ATOMIC); in cs40l50_playback()
399 if (!work_data) in cs40l50_playback()
402 work_data->vib = vib; in cs40l50_playback()
405 work_data->effect = &dev->ff->effects[effect_id]; in cs40l50_playback()
406 work_data->count = val; in cs40l50_playback()
407 INIT_WORK(&work_data->work, cs40l50_start_worker); in cs40l50_playback()
410 INIT_WORK(&work_data->work, cs40l50_stop_worker); in cs40l50_playback()
413 queue_work(vib->vib_wq, &work_data->work); in cs40l50_playback()
420 struct cs40l50_work *work_data = container_of(work, struct cs40l50_work, work); in cs40l50_erase_worker() local
422 struct cs40l50_vibra *vib = work_data->vib; in cs40l50_erase_worker()
429 erase_effect = cs40l50_find_effect(work_data->effect->id, &vib->effect_head); in cs40l50_erase_worker()
462 work_data->error = error; in cs40l50_erase_worker()
468 struct cs40l50_work work_data; in cs40l50_erase() local
470 work_data.vib = vib; in cs40l50_erase()
471 work_data.effect = &dev->ff->effects[effect_id]; in cs40l50_erase()
473 INIT_WORK_ONSTACK(&work_data.work, cs40l50_erase_worker); in cs40l50_erase()
476 queue_work(vib->vib_wq, &work_data.work); in cs40l50_erase()
477 flush_work(&work_data.work); in cs40l50_erase()
478 destroy_work_on_stack(&work_data.work); in cs40l50_erase()
480 return work_data.error; in cs40l50_erase()