diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-08-20 21:23:27 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-08-20 21:23:27 +0000 |
commit | 9bf3483559c2d223f4833173d803225bf1ca24df (patch) | |
tree | 2abf33352d0704f656698162231b4c3bb555d451 /c/src/lib/libbsp/lm32/shared/milkymist_ac97 | |
parent | 2010-08-20 <yann.sionneau@telecom-sudparis.eu> (diff) | |
download | rtems-9bf3483559c2d223f4833173d803225bf1ca24df.tar.bz2 |
2010-08-20 <yann.sionneau@telecom-sudparis.eu>
* shared/milkymist_ac97/ac97.c, shared/milkymist_clock/ckinit.c,
shared/milkymist_clock/clock.h, shared/milkymist_console/console.c,
shared/milkymist_console/uart.c, shared/milkymist_console/uart.h,
shared/milkymist_framebuffer/framebuffer.c,
shared/milkymist_gpio/gpio.c, shared/milkymist_networking/mm_crc32.c,
shared/milkymist_networking/network.c,
shared/milkymist_networking/network.h,
shared/milkymist_timer/timer.c: New files.
Diffstat (limited to 'c/src/lib/libbsp/lm32/shared/milkymist_ac97')
-rw-r--r-- | c/src/lib/libbsp/lm32/shared/milkymist_ac97/ac97.c | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_ac97/ac97.c b/c/src/lib/libbsp/lm32/shared/milkymist_ac97/ac97.c new file mode 100644 index 0000000000..671d4f165b --- /dev/null +++ b/c/src/lib/libbsp/lm32/shared/milkymist_ac97/ac97.c @@ -0,0 +1,119 @@ +/* ac97.c + * + * This file is the sound driver for the Milkymist One board + * It does an OSS style character device in /dev/snd + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + * + * COPYRIGHT (c) Yann Sionneau <yann.sionneau@telecom-sudparis.eu> (GSoC 2010) + * Telecom SudParis + */ + +#include <stdlib.h> +#include <stdio.h> +#include <errno.h> +#include <sys/types.h> +#include <pthread.h> +#include <rtems.h> +#include <bsp.h> +#include "../include/system_conf.h" +#include <rtems/libio.h> + +#define GPIO_DRIVER_TABLE_ENTRY { ac97_initialize, \ +ac97_open, ac97_close, ac97_read, ac97_write, ac97_control} + +#define SND_DEVICE_NAME "/dev/snd" + +static struct milkymist_ac97 { + rtems_device_minor_number minor; + pthread_mutex_t mutex; +} ac97_driver; + +rtems_device_driver gpio_initialize( +rtems_device_major_number major, +rtems_device_minor_number minor, +void *arg) +{ + rtems_status_code status; + + printk( "ac97 driver initializing..\n" ); + + status = rtems_io_register_name(SND_DEVICE_NAME, major, 0); + if (status != RTEMS_SUCCESSFUL) + { + printk("Error registering /dev/snd ac97 device \n"); + rtems_fatal_error_occurred( status ); + } + gpio[0].minor = 0; + gpio[0].mutex = PTHREAD_MUTEX_INITIALIZER; + + return RTEMS_SUCCESSFUL; +} + +rtems_device_driver gpio_close( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +) +{ + if (pthread_mutex_unlock(&ac97_driver.mutex) == 0){ + return RTEMS_SUCCESSFUL; + } + return RTEMS_UNSATISFIED; +} + +rtems_device_driver gpio_open( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +) +{ + if (pthread_mutex_trylock(&ac97_driver.mutex) == 0){ + return RTEMS_SUCCESSFUL; + } + return RTEMS_UNSATISFIED; +} + + +rtems_device_driver gpio_read( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +) +{ + rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *)arg; + + return RTEMS_SUCCESSFUL; +} + +rtems_device_driver gpio_write( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +) +{ + rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *)arg; + + return RTEMS_SUCCESSFUL; +} + +rtems_device_driver gpio_control( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +) +{ + rtems_libio_ioctl_args_t *args = arg; + + switch( args->command ) { + default: + args->ioctl_return = 0; + break; + } + return RTEMS_SUCCESSFUL; +} + |