diff options
author | Clemens Ladisch <clemens@ladisch.de> | 2008-09-22 07:04:43 (GMT) |
---|---|---|
committer | Clemens Ladisch <clemens@ladisch.de> | 2008-09-22 07:04:43 (GMT) |
commit | 397b1dcc449082ce3f720c548da9c59db01cb739 (patch) | |
tree | a5295eabb214f913cd931c50b079c81b8086e577 /sound/pci/oxygen/oxygen_io.c | |
parent | dbbbd6744439d95d2b0dc23c5cdca2c477377f76 (diff) | |
download | linux-397b1dcc449082ce3f720c548da9c59db01cb739.tar.xz |
ALSA: oxygen: add UART I/O functions
Add functions to allow model drivers to communicate with external chips
by doing I/O with the not-used-for-MIDI UART.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Diffstat (limited to 'sound/pci/oxygen/oxygen_io.c')
-rw-r--r-- | sound/pci/oxygen/oxygen_io.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/sound/pci/oxygen/oxygen_io.c b/sound/pci/oxygen/oxygen_io.c index 83f135f..deba738 100644 --- a/sound/pci/oxygen/oxygen_io.c +++ b/sound/pci/oxygen/oxygen_io.c @@ -20,6 +20,7 @@ #include <linux/delay.h> #include <linux/sched.h> #include <sound/core.h> +#include <sound/mpu401.h> #include <asm/io.h> #include "oxygen.h" @@ -232,3 +233,23 @@ void oxygen_write_i2c(struct oxygen *chip, u8 device, u8 map, u8 data) device | OXYGEN_2WIRE_DIR_WRITE); } EXPORT_SYMBOL(oxygen_write_i2c); + +static void _write_uart(struct oxygen *chip, unsigned int port, u8 data) +{ + if (oxygen_read8(chip, OXYGEN_MPU401 + 1) & MPU401_TX_FULL) + msleep(1); + oxygen_write8(chip, OXYGEN_MPU401 + port, data); +} + +void oxygen_reset_uart(struct oxygen *chip) +{ + _write_uart(chip, 1, MPU401_RESET); + _write_uart(chip, 1, MPU401_ENTER_UART); +} +EXPORT_SYMBOL(oxygen_reset_uart); + +void oxygen_write_uart(struct oxygen *chip, u8 data) +{ + _write_uart(chip, 0, data); +} +EXPORT_SYMBOL(oxygen_write_uart); |