Lines Matching full:trigger
13 * hardware trigger or via a conventional SPI controller using a non-Linux MCU
143 struct spi_offload_trigger *trigger = in spi_offload_trigger_free() local
146 mutex_destroy(&trigger->lock); in spi_offload_trigger_free()
147 fwnode_handle_put(trigger->fwnode); in spi_offload_trigger_free()
148 kfree(trigger); in spi_offload_trigger_free()
153 struct spi_offload_trigger *trigger = data; in spi_offload_trigger_put() local
155 scoped_guard(mutex, &trigger->lock) in spi_offload_trigger_put()
156 if (trigger->ops && trigger->ops->release) in spi_offload_trigger_put()
157 trigger->ops->release(trigger); in spi_offload_trigger_put()
159 kref_put(&trigger->ref, spi_offload_trigger_free); in spi_offload_trigger_put()
166 struct spi_offload_trigger *trigger; in spi_offload_trigger_get() local
172 list_for_each_entry(trigger, &spi_offload_triggers, list) { in spi_offload_trigger_get()
173 if (trigger->fwnode != args->fwnode) in spi_offload_trigger_get()
176 match = trigger->ops->match(trigger, type, args->args, args->nargs); in spi_offload_trigger_get()
184 guard(mutex)(&trigger->lock); in spi_offload_trigger_get()
186 if (trigger->ops->request) { in spi_offload_trigger_get()
187 ret = trigger->ops->request(trigger, type, args->args, args->nargs); in spi_offload_trigger_get()
192 kref_get(&trigger->ref); in spi_offload_trigger_get()
194 return trigger; in spi_offload_trigger_get()
198 * devm_spi_offload_trigger_get() - Get an offload trigger instance
200 * @offload: Offload instance connected to a trigger.
201 * @type: Trigger type to get.
203 * Return: Offload trigger instance or error on failure.
210 struct spi_offload_trigger *trigger; in devm_spi_offload_trigger_get() local
215 "trigger-sources", in devm_spi_offload_trigger_get()
216 "#trigger-source-cells", 0, 0, in devm_spi_offload_trigger_get()
221 trigger = spi_offload_trigger_get(type, &args); in devm_spi_offload_trigger_get()
223 if (IS_ERR(trigger)) in devm_spi_offload_trigger_get()
224 return trigger; in devm_spi_offload_trigger_get()
226 ret = devm_add_action_or_reset(dev, spi_offload_trigger_put, trigger); in devm_spi_offload_trigger_get()
230 return trigger; in devm_spi_offload_trigger_get()
235 * spi_offload_trigger_validate - Validate the requested trigger
236 * @trigger: Offload trigger instance
237 * @config: Trigger config to validate
240 * For example, the frequency of a periodic trigger may be adjusted to the
243 * Callers will likely need to do additional validation of the modified trigger
248 int spi_offload_trigger_validate(struct spi_offload_trigger *trigger, in spi_offload_trigger_validate() argument
251 guard(mutex)(&trigger->lock); in spi_offload_trigger_validate()
253 if (!trigger->ops) in spi_offload_trigger_validate()
256 if (!trigger->ops->validate) in spi_offload_trigger_validate()
259 return trigger->ops->validate(trigger, config); in spi_offload_trigger_validate()
264 * spi_offload_trigger_enable - enables trigger for offload
266 * @trigger: Offload trigger instance
267 * @config: Trigger config to validate
272 * instance until the trigger is disabled. Any other attempts to send a
281 struct spi_offload_trigger *trigger, in spi_offload_trigger_enable() argument
286 guard(mutex)(&trigger->lock); in spi_offload_trigger_enable()
288 if (!trigger->ops) in spi_offload_trigger_enable()
297 if (trigger->ops->enable) { in spi_offload_trigger_enable()
298 ret = trigger->ops->enable(trigger, config); in spi_offload_trigger_enable()
311 * spi_offload_trigger_disable - disables hardware trigger for offload
313 * @trigger: Offload trigger instance
315 * Disables the hardware trigger for the offload instance with the specified ID
321 struct spi_offload_trigger *trigger) in spi_offload_trigger_disable() argument
326 guard(mutex)(&trigger->lock); in spi_offload_trigger_disable()
328 if (!trigger->ops) in spi_offload_trigger_disable()
331 if (trigger->ops->disable) in spi_offload_trigger_disable()
332 trigger->ops->disable(trigger); in spi_offload_trigger_disable()
409 struct spi_offload_trigger *trigger = data; in spi_offload_trigger_unregister() local
412 list_del(&trigger->list); in spi_offload_trigger_unregister()
414 scoped_guard(mutex, &trigger->lock) { in spi_offload_trigger_unregister()
415 trigger->priv = NULL; in spi_offload_trigger_unregister()
416 trigger->ops = NULL; in spi_offload_trigger_unregister()
419 kref_put(&trigger->ref, spi_offload_trigger_free); in spi_offload_trigger_unregister()
423 * devm_spi_offload_trigger_register() - Allocate and register an offload trigger
425 * @info: Provider-specific trigger info.
432 struct spi_offload_trigger *trigger; in devm_spi_offload_trigger_register() local
437 trigger = kzalloc(sizeof(*trigger), GFP_KERNEL); in devm_spi_offload_trigger_register()
438 if (!trigger) in devm_spi_offload_trigger_register()
441 kref_init(&trigger->ref); in devm_spi_offload_trigger_register()
442 mutex_init(&trigger->lock); in devm_spi_offload_trigger_register()
443 trigger->fwnode = fwnode_handle_get(info->fwnode); in devm_spi_offload_trigger_register()
444 trigger->ops = info->ops; in devm_spi_offload_trigger_register()
445 trigger->priv = info->priv; in devm_spi_offload_trigger_register()
448 list_add_tail(&trigger->list, &spi_offload_triggers); in devm_spi_offload_trigger_register()
450 return devm_add_action_or_reset(dev, spi_offload_trigger_unregister, trigger); in devm_spi_offload_trigger_register()
455 * spi_offload_trigger_get_priv() - Get the private data for the trigger
457 * @trigger: Offload trigger instance.
459 * Return: Private data for the trigger.
461 void *spi_offload_trigger_get_priv(struct spi_offload_trigger *trigger) in spi_offload_trigger_get_priv() argument
463 return trigger->priv; in spi_offload_trigger_get_priv()