Lines Matching refs:dg00x
24 static void handle_midi_control(struct snd_dg00x *dg00x, __be32 *buf, in handle_midi_control() argument
32 substream = ACCESS_ONCE(dg00x->in_control); in handle_midi_control()
42 snd_rawmidi_receive(dg00x->in_control, b + 1, len); in handle_midi_control()
46 static void handle_unknown_message(struct snd_dg00x *dg00x, in handle_unknown_message() argument
51 spin_lock_irqsave(&dg00x->lock, flags); in handle_unknown_message()
52 dg00x->msg = be32_to_cpu(*buf); in handle_unknown_message()
53 spin_unlock_irqrestore(&dg00x->lock, flags); in handle_unknown_message()
55 wake_up(&dg00x->hwdep_wait); in handle_unknown_message()
63 struct snd_dg00x *dg00x = callback_data; in handle_message() local
66 if (offset == dg00x->async_handler.offset) in handle_message()
67 handle_unknown_message(dg00x, offset, buf); in handle_message()
68 else if (offset == dg00x->async_handler.offset + 4) in handle_message()
69 handle_midi_control(dg00x, buf, length); in handle_message()
74 int snd_dg00x_transaction_reregister(struct snd_dg00x *dg00x) in snd_dg00x_transaction_reregister() argument
76 struct fw_device *device = fw_parent_device(dg00x->unit); in snd_dg00x_transaction_reregister()
82 (dg00x->async_handler.offset >> 32)); in snd_dg00x_transaction_reregister()
83 data[1] = cpu_to_be32(dg00x->async_handler.offset); in snd_dg00x_transaction_reregister()
84 err = snd_fw_transaction(dg00x->unit, TCODE_WRITE_BLOCK_REQUEST, in snd_dg00x_transaction_reregister()
92 (dg00x->async_handler.offset >> 32)); in snd_dg00x_transaction_reregister()
93 data[1] = cpu_to_be32(dg00x->async_handler.offset + 4); in snd_dg00x_transaction_reregister()
94 return snd_fw_transaction(dg00x->unit, TCODE_WRITE_BLOCK_REQUEST, in snd_dg00x_transaction_reregister()
99 int snd_dg00x_transaction_register(struct snd_dg00x *dg00x) in snd_dg00x_transaction_register() argument
107 dg00x->async_handler.length = 12; in snd_dg00x_transaction_register()
108 dg00x->async_handler.address_callback = handle_message; in snd_dg00x_transaction_register()
109 dg00x->async_handler.callback_data = dg00x; in snd_dg00x_transaction_register()
111 err = fw_core_add_address_handler(&dg00x->async_handler, in snd_dg00x_transaction_register()
116 err = snd_dg00x_transaction_reregister(dg00x); in snd_dg00x_transaction_register()
120 err = snd_fw_async_midi_port_init(&dg00x->out_control, dg00x->unit, in snd_dg00x_transaction_register()
128 fw_core_remove_address_handler(&dg00x->async_handler); in snd_dg00x_transaction_register()
129 dg00x->async_handler.address_callback = NULL; in snd_dg00x_transaction_register()
133 void snd_dg00x_transaction_unregister(struct snd_dg00x *dg00x) in snd_dg00x_transaction_unregister() argument
135 snd_fw_async_midi_port_destroy(&dg00x->out_control); in snd_dg00x_transaction_unregister()
136 fw_core_remove_address_handler(&dg00x->async_handler); in snd_dg00x_transaction_unregister()