Lines Matching +full:phase +full:- +full:shift

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (c) 2000-2002 Vojtech Pavlik <vojtech@ucw.cz>
4 * Copyright (c) 2001-2002, 2007 Johann Deneux <johann.deneux@gmail.com>
6 * USB/RS232 I-Force joysticks and wheels.
24 guard(mutex)(&iforce->mem_mutex); in make_magnitude_modifier()
26 if (allocate_resource(&iforce->device_memory, mod_chunk, 2, in make_magnitude_modifier()
27 iforce->device_memory.start, in make_magnitude_modifier()
28 iforce->device_memory.end, in make_magnitude_modifier()
30 return -ENOSPC; in make_magnitude_modifier()
33 data[0] = LO(mod_chunk->start); in make_magnitude_modifier()
34 data[1] = HI(mod_chunk->start); in make_magnitude_modifier()
44 * Upload the component of an effect dealing with the period, phase and magnitude
49 __s16 magnitude, __s16 offset, u16 period, u16 phase) in make_period_modifier() argument
56 guard(mutex)(&iforce->mem_mutex); in make_period_modifier()
58 if (allocate_resource(&iforce->device_memory, mod_chunk, 0x0c, in make_period_modifier()
59 iforce->device_memory.start, in make_period_modifier()
60 iforce->device_memory.end, in make_period_modifier()
62 return -ENOSPC; in make_period_modifier()
65 data[0] = LO(mod_chunk->start); in make_period_modifier()
66 data[1] = HI(mod_chunk->start); in make_period_modifier()
70 data[4] = HI(phase); in make_period_modifier()
95 guard(mutex)(&iforce->mem_mutex); in make_envelope_modifier()
97 if (allocate_resource(&(iforce->device_memory), mod_chunk, 0x0e, in make_envelope_modifier()
98 iforce->device_memory.start, in make_envelope_modifier()
99 iforce->device_memory.end, in make_envelope_modifier()
101 return -ENOSPC; in make_envelope_modifier()
104 data[0] = LO(mod_chunk->start); in make_envelope_modifier()
105 data[1] = HI(mod_chunk->start); in make_envelope_modifier()
131 guard(mutex)(&iforce->mem_mutex); in make_condition_modifier()
133 if (allocate_resource(&(iforce->device_memory), mod_chunk, 8, in make_condition_modifier()
134 iforce->device_memory.start, in make_condition_modifier()
135 iforce->device_memory.end, in make_condition_modifier()
137 return -ENOSPC; in make_condition_modifier()
140 data[0] = LO(mod_chunk->start); in make_condition_modifier()
141 data[1] = HI(mod_chunk->start); in make_condition_modifier()
143 …00 * rk) >> 15; /* Dangerous: the sign is extended by gcc on plateforms providing an arith shift */ in make_condition_modifier()
144 data[3] = (100 * lk) >> 15; /* This code is incorrect on cpus lacking arith shift */ in make_condition_modifier()
167 for (i = 1; iforce->type->btn[i] >= 0; i++) in find_button()
168 if (iforce->type->btn[i] == button) in find_button()
184 if (new->type != FF_SPRING && new->type != FF_FRICTION) { in need_condition_modifier()
185 dev_warn(&iforce->dev->dev, "bad effect type in %s\n", in need_condition_modifier()
191 ret |= old->u.condition[i].right_saturation != new->u.condition[i].right_saturation in need_condition_modifier()
192 || old->u.condition[i].left_saturation != new->u.condition[i].left_saturation in need_condition_modifier()
193 || old->u.condition[i].right_coeff != new->u.condition[i].right_coeff in need_condition_modifier()
194 || old->u.condition[i].left_coeff != new->u.condition[i].left_coeff in need_condition_modifier()
195 || old->u.condition[i].deadband != new->u.condition[i].deadband in need_condition_modifier()
196 || old->u.condition[i].center != new->u.condition[i].center; in need_condition_modifier()
209 if (effect->type != FF_CONSTANT) { in need_magnitude_modifier()
210 dev_warn(&iforce->dev->dev, "bad effect type in %s\n", in need_magnitude_modifier()
215 return old->u.constant.level != effect->u.constant.level; in need_magnitude_modifier()
225 switch (effect->type) { in need_envelope_modifier()
227 if (old->u.constant.envelope.attack_length != effect->u.constant.envelope.attack_length in need_envelope_modifier()
228 || old->u.constant.envelope.attack_level != effect->u.constant.envelope.attack_level in need_envelope_modifier()
229 || old->u.constant.envelope.fade_length != effect->u.constant.envelope.fade_length in need_envelope_modifier()
230 || old->u.constant.envelope.fade_level != effect->u.constant.envelope.fade_level) in need_envelope_modifier()
235 if (old->u.periodic.envelope.attack_length != effect->u.periodic.envelope.attack_length in need_envelope_modifier()
236 || old->u.periodic.envelope.attack_level != effect->u.periodic.envelope.attack_level in need_envelope_modifier()
237 || old->u.periodic.envelope.fade_length != effect->u.periodic.envelope.fade_length in need_envelope_modifier()
238 || old->u.periodic.envelope.fade_level != effect->u.periodic.envelope.fade_level) in need_envelope_modifier()
243 dev_warn(&iforce->dev->dev, "bad effect type in %s\n", in need_envelope_modifier()
257 if (new->type != FF_PERIODIC) { in need_period_modifier()
258 dev_warn(&iforce->dev->dev, "bad effect type in %s\n", in need_period_modifier()
262 return (old->u.periodic.period != new->u.periodic.period in need_period_modifier()
263 || old->u.periodic.magnitude != new->u.periodic.magnitude in need_period_modifier()
264 || old->u.periodic.offset != new->u.periodic.offset in need_period_modifier()
265 || old->u.periodic.phase != new->u.periodic.phase); in need_period_modifier()
274 if (old->direction != new->direction in need_core()
275 || old->trigger.button != new->trigger.button in need_core()
276 || old->trigger.interval != new->trigger.interval in need_core()
277 || old->replay.length != new->replay.length in need_core()
278 || old->replay.delay != new->replay.delay) in need_core()
322 if (test_bit(FF_CORE_SHOULD_PLAY, iforce->core_effects[id].flags)) { in make_core()
337 int core_id = effect->id; in iforce_upload_periodic()
338 struct iforce_core_effect* core_effect = iforce->core_effects + core_id; in iforce_upload_periodic()
339 struct resource* mod1_chunk = &(iforce->core_effects[core_id].mod1_chunk); in iforce_upload_periodic()
340 struct resource* mod2_chunk = &(iforce->core_effects[core_id].mod2_chunk); in iforce_upload_periodic()
348 effect->u.periodic.magnitude, effect->u.periodic.offset, in iforce_upload_periodic()
349 effect->u.periodic.period, effect->u.periodic.phase); in iforce_upload_periodic()
352 set_bit(FF_MOD1_IS_USED, core_effect->flags); in iforce_upload_periodic()
358 effect->u.periodic.envelope.attack_length, in iforce_upload_periodic()
359 effect->u.periodic.envelope.attack_level, in iforce_upload_periodic()
360 effect->u.periodic.envelope.fade_length, in iforce_upload_periodic()
361 effect->u.periodic.envelope.fade_level); in iforce_upload_periodic()
364 set_bit(FF_MOD2_IS_USED, core_effect->flags); in iforce_upload_periodic()
367 switch (effect->u.periodic.waveform) { in iforce_upload_periodic()
377 core_err = make_core(iforce, effect->id, in iforce_upload_periodic()
378 mod1_chunk->start, in iforce_upload_periodic()
379 mod2_chunk->start, in iforce_upload_periodic()
382 effect->replay.length, in iforce_upload_periodic()
383 effect->replay.delay, in iforce_upload_periodic()
384 effect->trigger.button, in iforce_upload_periodic()
385 effect->trigger.interval, in iforce_upload_periodic()
386 effect->direction); in iforce_upload_periodic()
407 int core_id = effect->id; in iforce_upload_constant()
408 struct iforce_core_effect* core_effect = iforce->core_effects + core_id; in iforce_upload_constant()
409 struct resource* mod1_chunk = &(iforce->core_effects[core_id].mod1_chunk); in iforce_upload_constant()
410 struct resource* mod2_chunk = &(iforce->core_effects[core_id].mod2_chunk); in iforce_upload_constant()
418 effect->u.constant.level); in iforce_upload_constant()
421 set_bit(FF_MOD1_IS_USED, core_effect->flags); in iforce_upload_constant()
427 effect->u.constant.envelope.attack_length, in iforce_upload_constant()
428 effect->u.constant.envelope.attack_level, in iforce_upload_constant()
429 effect->u.constant.envelope.fade_length, in iforce_upload_constant()
430 effect->u.constant.envelope.fade_level); in iforce_upload_constant()
433 set_bit(FF_MOD2_IS_USED, core_effect->flags); in iforce_upload_constant()
437 core_err = make_core(iforce, effect->id, in iforce_upload_constant()
438 mod1_chunk->start, in iforce_upload_constant()
439 mod2_chunk->start, in iforce_upload_constant()
442 effect->replay.length, in iforce_upload_constant()
443 effect->replay.delay, in iforce_upload_constant()
444 effect->trigger.button, in iforce_upload_constant()
445 effect->trigger.interval, in iforce_upload_constant()
446 effect->direction); in iforce_upload_constant()
463 int core_id = effect->id; in iforce_upload_condition()
464 struct iforce_core_effect* core_effect = iforce->core_effects + core_id; in iforce_upload_condition()
465 struct resource* mod1_chunk = &(core_effect->mod1_chunk); in iforce_upload_condition()
466 struct resource* mod2_chunk = &(core_effect->mod2_chunk); in iforce_upload_condition()
471 switch (effect->type) { in iforce_upload_condition()
474 default: return -1; in iforce_upload_condition()
480 effect->u.condition[0].right_saturation, in iforce_upload_condition()
481 effect->u.condition[0].left_saturation, in iforce_upload_condition()
482 effect->u.condition[0].right_coeff, in iforce_upload_condition()
483 effect->u.condition[0].left_coeff, in iforce_upload_condition()
484 effect->u.condition[0].deadband, in iforce_upload_condition()
485 effect->u.condition[0].center); in iforce_upload_condition()
488 set_bit(FF_MOD1_IS_USED, core_effect->flags); in iforce_upload_condition()
492 effect->u.condition[1].right_saturation, in iforce_upload_condition()
493 effect->u.condition[1].left_saturation, in iforce_upload_condition()
494 effect->u.condition[1].right_coeff, in iforce_upload_condition()
495 effect->u.condition[1].left_coeff, in iforce_upload_condition()
496 effect->u.condition[1].deadband, in iforce_upload_condition()
497 effect->u.condition[1].center); in iforce_upload_condition()
500 set_bit(FF_MOD2_IS_USED, core_effect->flags); in iforce_upload_condition()
505 core_err = make_core(iforce, effect->id, in iforce_upload_condition()
506 mod1_chunk->start, mod2_chunk->start, in iforce_upload_condition()
508 effect->replay.length, effect->replay.delay, in iforce_upload_condition()
509 effect->trigger.button, effect->trigger.interval, in iforce_upload_condition()
510 effect->direction); in iforce_upload_condition()