Lines Matching refs:pm
39 struct pcmidi_snd *pm; /* pcmidi device context */
44 struct pcmidi_snd *pm;
105 dbg_hid("pcmidi sysfs read channel=%u\n", pk->pm->midi_channel);
107 return sprintf(buf, "%u (min:%u, max:%u)\n", pk->pm->midi_channel,
122 pk->pm->midi_channel = channel;
142 dbg_hid("pcmidi sysfs read sustain=%u\n", pk->pm->midi_sustain);
144 return sprintf(buf, "%u (off:%u, max:%u (ms))\n", pk->pm->midi_sustain,
159 pk->pm->midi_sustain = sustain;
160 pk->pm->midi_sustain_mode =
161 (0 == sustain || !pk->pm->midi_mode) ? 0 : 1;
181 dbg_hid("pcmidi sysfs read octave=%d\n", pk->pm->midi_octave);
183 return sprintf(buf, "%d (min:%d, max:%d)\n", pk->pm->midi_octave,
199 pk->pm->midi_octave = octave;
213 static void pcmidi_send_note(struct pcmidi_snd *pm,
223 spin_lock_irqsave(&pm->rawmidi_in_lock, flags);
225 if (!pm->in_substream)
227 if (!test_bit(pm->in_substream->number, &pm->in_triggered))
230 snd_rawmidi_receive(pm->in_substream, buffer, 3);
233 spin_unlock_irqrestore(&pm->rawmidi_in_lock, flags);
242 pcmidi_send_note(pms->pm, pms->status, pms->note, pms->velocity);
246 static void init_sustain_timers(struct pcmidi_snd *pm)
252 pms = &pm->sustained_notes[i];
254 pms->pm = pm;
259 static void stop_sustain_timers(struct pcmidi_snd *pm)
265 pms = &pm->sustained_notes[i];
271 static int pcmidi_get_output_report(struct pcmidi_snd *pm)
273 struct hid_device *hdev = pm->pk->hdev;
289 pm->pcmidi_report6 = report;
296 static void pcmidi_submit_output_report(struct pcmidi_snd *pm, int state)
298 struct hid_device *hdev = pm->pk->hdev;
299 struct hid_report *report = pm->pcmidi_report6;
306 static int pcmidi_handle_report1(struct pcmidi_snd *pm, u8 *data)
314 dbg_hid("pcmidi mode: %d\n", pm->midi_mode);
317 if (pm->midi_mode && bit_mask == 0x004000) {
319 pm->midi_octave--;
320 if (pm->midi_octave < -2)
321 pm->midi_octave = -2;
323 pm->midi_mode, pm->midi_octave);
327 else if (pm->midi_mode && bit_mask == 0x000004) {
329 pm->midi_sustain_mode ^= 0x1;
336 static int pcmidi_handle_report3(struct pcmidi_snd *pm, u8 *data, int size)
348 status = 128 + 16 + pm->midi_channel; /* 1001nnnn */
350 (pm->midi_octave * 12);
354 status = 128 + pm->midi_channel; /* 1000nnnn */
356 (pm->midi_octave*12);
358 if (pm->midi_sustain_mode) {
360 pms = &pm->sustained_notes[i];
369 msecs_to_jiffies(pm->midi_sustain));
375 pcmidi_send_note(pm, status, note, velocity);
381 static int pcmidi_handle_report4(struct pcmidi_snd *pm, u8 *data)
394 input_event(pm->input_ep82, EV_KEY,
395 pm->last_key[bit_index], 0);
396 pm->last_key[bit_index] = 0;
405 pm->fn_state ^= 0x000010;
406 if (pm->fn_state)
407 pcmidi_submit_output_report(pm, 0xc5);
409 pcmidi_submit_output_report(pm, 0xc6);
412 pcmidi_submit_output_report(pm, 0xc1);
413 pm->midi_mode ^= 0x01;
415 dbg_hid("pcmidi mode: %d\n", pm->midi_mode);
418 dbg_hid("pcmidi mode: %d\n", pm->midi_mode);
419 if (pm->midi_mode) {
420 pm->midi_octave++;
421 if (pm->midi_octave > 2)
422 pm->midi_octave = 2;
424 pm->midi_mode, pm->midi_octave);
485 input_event(pm->input_ep82, EV_KEY, key, 1);
486 pm->last_key[bit_index] = key;
494 struct pcmidi_snd *pm, unsigned report_id, u8 *data, int size)
500 ret = pcmidi_handle_report1(pm, data);
503 ret = pcmidi_handle_report3(pm, data, size);
506 ret = pcmidi_handle_report4(pm, data);
513 struct pcmidi_snd *pm, struct input_dev *input)
538 if (pm->ifnum != 1) /* only set up ONCE for interace 1 */
541 pm->input_ep82 = input;
544 pm->last_key[i] = 0;
547 set_bit(*pkeys, pm->input_ep82->keybit);
552 static int pcmidi_set_operational(struct pcmidi_snd *pm)
556 if (pm->ifnum != 1)
559 rc = pcmidi_get_output_report(pm);
562 pcmidi_submit_output_report(pm, 0xc1);
573 struct pcmidi_snd *pm = substream->rmidi->private_data;
576 pm->in_substream = substream;
588 struct pcmidi_snd *pm = substream->rmidi->private_data;
592 pm->in_triggered = up;
601 static int pcmidi_snd_initialise(struct pcmidi_snd *pm)
612 if (pm->ifnum != 1)
625 err = snd_card_new(&pm->pk->hdev->dev, index[dev], id[dev],
632 pm->card = card;
635 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, pm, &ops);
654 pm->rwmidi = rwmidi;
657 rwmidi->private_data = pm;
663 err = device_create_file(&pm->pk->hdev->dev,
671 err = device_create_file(&pm->pk->hdev->dev,
679 err = device_create_file(&pm->pk->hdev->dev,
687 spin_lock_init(&pm->rawmidi_in_lock);
689 init_sustain_timers(pm);
690 err = pcmidi_set_operational(pm);
708 stop_sustain_timers(pm);
709 device_remove_file(&pm->pk->hdev->dev, sysfs_device_attr_octave);
711 device_remove_file(&pm->pk->hdev->dev, sysfs_device_attr_sustain);
713 device_remove_file(&pm->pk->hdev->dev, sysfs_device_attr_channel);
715 if (pm->card) {
716 snd_card_free(pm->card);
717 pm->card = NULL;
722 static int pcmidi_snd_terminate(struct pcmidi_snd *pm)
724 if (pm->card) {
725 stop_sustain_timers(pm);
727 device_remove_file(&pm->pk->hdev->dev,
729 device_remove_file(&pm->pk->hdev->dev,
731 device_remove_file(&pm->pk->hdev->dev,
734 snd_card_disconnect(pm->card);
735 snd_card_free_when_closed(pm->card);
763 struct pcmidi_snd *pm;
765 pm = pk->pm;
768 1 == pm->ifnum) {
769 pcmidi_setup_extra_keys(pm, hi->input);
783 if (1 == pk->pm->ifnum) {
789 ret = pcmidi_handle_report(pk->pm,
805 struct pcmidi_snd *pm = NULL;
821 pm = kzalloc(sizeof(*pm), GFP_KERNEL);
822 if (pm == NULL) {
828 pm->pk = pk;
829 pk->pm = pm;
830 pm->ifnum = ifnum;
850 ret = pcmidi_snd_initialise(pm);
858 kfree(pm);
868 struct pcmidi_snd *pm;
870 pm = pk->pm;
871 if (pm) {
872 pcmidi_snd_terminate(pm);
873 kfree(pm);