diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2013-05-03 21:08:42 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2013-05-03 21:08:42 +0400 |
commit | 1058def8e7827e56ce4a70afb4aeacb5dc44148f (patch) | |
tree | 4495d23e7b54ab5700e3839081e797c1eafe0db9 /kernel/framework/include/spdif.h | |
download | oss4-upstream.tar.gz |
Imported Upstream version 4.2-build2006upstream/4.2-build2006upstream
Diffstat (limited to 'kernel/framework/include/spdif.h')
-rw-r--r-- | kernel/framework/include/spdif.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/kernel/framework/include/spdif.h b/kernel/framework/include/spdif.h new file mode 100644 index 0000000..a2d1938 --- /dev/null +++ b/kernel/framework/include/spdif.h @@ -0,0 +1,97 @@ +#ifndef SPDIF_H +#define SPDIF_H +/* + * Purpose: Definitions for S/PDIF (IEC958) control bit and mixer extension manager + */ + +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ +typedef struct oss_spdif_driver spdif_driver_t; + +#define set_cbit(array, byte, bit, v) {array[byte] &= ~(1 << bit);array[byte] |= ((v&1)<<bit);} +#define get_cbit(array, byte, bit) ((array[byte] >> bit)&1) + + +typedef struct +{ + int is_ok; + oss_mutex_t mutex; + oss_device_t *osdev; + + void *host_devc; + void *host_portc; + int flags; + unsigned int caps; +#define SPDF_IN 0x00000001 +#define SPDF_OUT 0x00000002 +#define SPDF_ENABLE 0x00000004 +#define SPDF_RATECTL 0x00000008 + spdif_driver_t *d; + oss_digital_control *ctl, hot_ctl, cold_ctl; + int open_mode; + int mixer_dev; + + int group; + int mixer_blocked; +} spdif_devc; + + +/* + * reprogram 'mask' bits + */ + +#define REPGM_ALL 0xffffffff +#define REPGM_NOTHING 0x00000000 +#define REPGM_RATE 0x00000001 +#define REPGM_VBIT 0x00000002 +#define REPGM_DENABLE 0x00000004 +#define REPGM_AENABLE 0x00000008 +#define REPGM_CBIT0 0x00000010 +#define REPGM_CBIT1 0x00000020 +#define REPGM_CBIT2 0x00000040 +#define REPGM_CBIT3 0x00000080 +#define REPGM_CBIT4_23 0x00000100 +#define REPGM_CBITALL 0x000001f0 +#define REPGM_UBITALL 0x00000200 +#define REPGM_OUTSEL 0x00000400 + +#define SPDIF_NOIOCTL 0x12344321 /* Bits of magic */ + +struct oss_spdif_driver +{ + int (*reprogram_device) (void *_devc, void *_portc, + oss_digital_control * ctl, unsigned int mask); + int (*get_status) (void *_devc, void *_portc, oss_digital_control * ctl, + int rqbits); + int (*exec_request) (void *_devc, void *_portc, int rq, int param); +}; + +extern int oss_spdif_install (spdif_devc * devc, oss_device_t * osdev, + spdif_driver_t * d, int driver_size, + void *host_devc, void *host_portc, + int mixer_dev, int flags, unsigned int caps); +extern void oss_spdif_uninstall (spdif_devc * devc); +extern int oss_spdif_open (spdif_devc * devc, int open_mode); +extern void oss_spdif_close (spdif_devc * devc, int open_mode); +extern void oss_spdif_setrate (spdif_devc * devc, int rate); +extern int oss_spdif_mix_init (spdif_devc * devc); +extern int oss_spdif_ioctl (spdif_devc * devc, int open_mode, unsigned int cmd, + ioctl_arg arg); + +/* + * oss_digital_control->filler usage + */ +#define pro_mode filler[0] +#define rate_bits filler[1] +#define emphasis_type filler[2] + +#endif |