Lines Matching refs:pm

93 static int portman_free(struct portman *pm)  in portman_free()  argument
95 kfree(pm); in portman_free()
103 struct portman *pm; in portman_create() local
107 pm = kzalloc(sizeof(struct portman), GFP_KERNEL); in portman_create()
108 if (pm == NULL) in portman_create()
112 spin_lock_init(&pm->reg_lock); in portman_create()
113 pm->card = card; in portman_create()
114 pm->pardev = pardev; in portman_create()
116 *rchip = pm; in portman_create()
196 static inline void portman_write_command(struct portman *pm, u8 value) in portman_write_command() argument
198 parport_write_control(pm->pardev->port, value); in portman_write_command()
201 static inline u8 portman_read_command(struct portman *pm) in portman_read_command() argument
203 return parport_read_control(pm->pardev->port); in portman_read_command()
206 static inline u8 portman_read_status(struct portman *pm) in portman_read_status() argument
208 return parport_read_status(pm->pardev->port); in portman_read_status()
211 static inline u8 portman_read_data(struct portman *pm) in portman_read_data() argument
213 return parport_read_data(pm->pardev->port); in portman_read_data()
216 static inline void portman_write_data(struct portman *pm, u8 value) in portman_write_data() argument
218 parport_write_data(pm->pardev->port, value); in portman_write_data()
221 static void portman_write_midi(struct portman *pm, in portman_write_midi() argument
243 portman_write_command(pm, command); in portman_write_midi()
249 portman_write_data(pm, mididata); in portman_write_midi()
254 } while ((portman_read_status(pm) & TXEMPTY) != TXEMPTY); in portman_write_midi()
261 portman_write_command(pm, command | STROBE); in portman_write_midi()
268 while ((portman_read_status(pm) & ESTB) == 0) in portman_write_midi()
272 portman_write_command(pm, command); in portman_write_midi()
274 while ((portman_read_status(pm) & ESTB) == ESTB) in portman_write_midi()
281 while ((portman_read_status(pm) & BUSY) == BUSY) in portman_write_midi()
293 static int portman_read_midi(struct portman *pm, int port) in portman_read_midi() argument
299 portman_write_data(pm, 0); /* Make sure edge is down. */ in portman_read_midi()
303 portman_write_command(pm, cmdout); in portman_read_midi()
305 while ((portman_read_status(pm) & ESTB) == ESTB) in portman_read_midi()
311 if ((portman_read_status(pm) & RXAVAIL) == 0) in portman_read_midi()
315 portman_write_command(pm, cmdout | STROBE); /* Write address+IE+Strobe. */ in portman_read_midi()
317 while ((portman_read_status(pm) & ESTB) == 0) in portman_read_midi()
321 midi_data = (portman_read_status(pm) & 128); in portman_read_midi()
322 portman_write_data(pm, 1); /* Cause rising edge, which shifts data. */ in portman_read_midi()
325 portman_write_data(pm, 0); /* Cause falling edge while data settles. */ in portman_read_midi()
326 midi_data |= (portman_read_status(pm) >> 1) & 64; in portman_read_midi()
327 portman_write_data(pm, 1); /* Cause rising edge, which shifts data. */ in portman_read_midi()
330 portman_write_data(pm, 0); /* Cause falling edge while data settles. */ in portman_read_midi()
331 midi_data |= (portman_read_status(pm) >> 2) & 32; in portman_read_midi()
332 portman_write_data(pm, 1); /* Cause rising edge, which shifts data. */ in portman_read_midi()
335 portman_write_data(pm, 0); /* Cause falling edge while data settles. */ in portman_read_midi()
336 midi_data |= (portman_read_status(pm) >> 3) & 16; in portman_read_midi()
337 portman_write_data(pm, 1); /* Cause rising edge, which shifts data. */ in portman_read_midi()
340 portman_write_data(pm, 0); /* Cause falling edge while data settles. */ in portman_read_midi()
341 midi_data |= (portman_read_status(pm) >> 4) & 8; in portman_read_midi()
342 portman_write_data(pm, 1); /* Cause rising edge, which shifts data. */ in portman_read_midi()
345 portman_write_data(pm, 0); /* Cause falling edge while data settles. */ in portman_read_midi()
346 midi_data |= (portman_read_status(pm) >> 5) & 4; in portman_read_midi()
347 portman_write_data(pm, 1); /* Cause rising edge, which shifts data. */ in portman_read_midi()
350 portman_write_data(pm, 0); /* Cause falling edge while data settles. */ in portman_read_midi()
351 midi_data |= (portman_read_status(pm) >> 6) & 2; in portman_read_midi()
352 portman_write_data(pm, 1); /* Cause rising edge, which shifts data. */ in portman_read_midi()
355 portman_write_data(pm, 0); /* Cause falling edge while data settles. */ in portman_read_midi()
356 midi_data |= (portman_read_status(pm) >> 7) & 1; in portman_read_midi()
357 portman_write_data(pm, 1); /* Cause rising edge, which shifts data. */ in portman_read_midi()
358 portman_write_data(pm, 0); /* Return data clock low. */ in portman_read_midi()
362 portman_write_command(pm, cmdout); /* Output saved address+IE. */ in portman_read_midi()
365 while ((portman_read_status(pm) & ESTB) == ESTB) in portman_read_midi()
375 static int portman_data_avail(struct portman *pm, int channel) in portman_data_avail() argument
387 portman_write_command(pm, command); in portman_data_avail()
389 if ((portman_read_status(pm) & RXAVAIL) == RXAVAIL) in portman_data_avail()
400 static void portman_flush_input(struct portman *pm, unsigned char port) in portman_flush_input() argument
421 portman_write_command(pm, command); in portman_flush_input()
424 portman_write_command(pm, command | STROBE); in portman_flush_input()
427 while ((portman_read_status(pm) & ESTB) == 0) in portman_flush_input()
431 portman_write_data(pm, 0); in portman_flush_input()
435 portman_write_data(pm, 1); in portman_flush_input()
436 portman_write_data(pm, 0); in portman_flush_input()
440 portman_write_command(pm, command | INT_EN); in portman_flush_input()
443 while ((portman_read_status(pm) & ESTB) == ESTB) in portman_flush_input()
501 static int portman_device_init(struct portman *pm) in portman_device_init() argument
503 portman_flush_input(pm, 0); in portman_device_init()
504 portman_flush_input(pm, 1); in portman_device_init()
525 struct portman *pm = substream->rmidi->private_data; in snd_portman_midi_input_trigger() local
528 spin_lock_irqsave(&pm->reg_lock, flags); in snd_portman_midi_input_trigger()
530 pm->mode[substream->number] |= PORTMAN2X4_MODE_INPUT_TRIGGERED; in snd_portman_midi_input_trigger()
532 pm->mode[substream->number] &= ~PORTMAN2X4_MODE_INPUT_TRIGGERED; in snd_portman_midi_input_trigger()
533 spin_unlock_irqrestore(&pm->reg_lock, flags); in snd_portman_midi_input_trigger()
539 struct portman *pm = substream->rmidi->private_data; in snd_portman_midi_output_trigger() local
543 spin_lock_irqsave(&pm->reg_lock, flags); in snd_portman_midi_output_trigger()
546 portman_write_midi(pm, substream->number, byte); in snd_portman_midi_output_trigger()
548 spin_unlock_irqrestore(&pm->reg_lock, flags); in snd_portman_midi_output_trigger()
566 struct portman *pm = card->private_data; in snd_portman_rawmidi_create() local
578 rmidi->private_data = pm; in snd_portman_rawmidi_create()
584 pm->rmidi = rmidi; in snd_portman_rawmidi_create()
604 pm->midi_input[substream->number] = substream; in snd_portman_rawmidi_create()
618 struct portman *pm = ((struct snd_card*)userdata)->private_data; in snd_portman_interrupt() local
620 spin_lock(&pm->reg_lock); in snd_portman_interrupt()
623 while ((portman_read_status(pm) & INT_REQ) == INT_REQ) { in snd_portman_interrupt()
626 if (portman_data_avail(pm, 0)) { in snd_portman_interrupt()
628 midivalue = portman_read_midi(pm, 0); in snd_portman_interrupt()
630 if (pm->mode[0] & PORTMAN2X4_MODE_INPUT_TRIGGERED) in snd_portman_interrupt()
631 snd_rawmidi_receive(pm->midi_input[0], in snd_portman_interrupt()
637 if (portman_data_avail(pm, 1)) { in snd_portman_interrupt()
639 midivalue = portman_read_midi(pm, 1); in snd_portman_interrupt()
641 if (pm->mode[1] & PORTMAN2X4_MODE_INPUT_TRIGGERED) in snd_portman_interrupt()
642 snd_rawmidi_receive(pm->midi_input[1], in snd_portman_interrupt()
648 spin_unlock(&pm->reg_lock); in snd_portman_interrupt()
719 struct portman *pm = card->private_data; in snd_portman_card_private_free() local
720 struct pardevice *pardev = pm->pardev; in snd_portman_card_private_free()
723 if (pm->pardev_claimed) in snd_portman_card_private_free()
728 portman_free(pm); in snd_portman_card_private_free()
737 struct portman *pm = NULL; in snd_portman_probe() local
775 if ((err = portman_create(card, pardev, &pm)) < 0) { in snd_portman_probe()
780 card->private_data = pm; in snd_portman_probe()
794 pm->pardev_claimed = 1; in snd_portman_probe()
797 if ((err = portman_device_init(pm)) < 0) in snd_portman_probe()