123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- /*
- * This file is part of FH8620 BSP for RT-Thread distribution.
- *
- * Copyright (c) 2016 Shanghai Fullhan Microelectronics Co., Ltd.
- * All rights reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Visit http://www.fullhan.com to get contact with Fullhan.
- *
- * Change Logs:
- * Date Author Notes
- */
-
- #ifndef ACW_H_
- #define ACW_H_
- #include <rtthread.h>
- #include <rtdevice.h>
- #ifdef RT_USING_DFS
- #include <dfs_fs.h>
- #endif
- #include <rthw.h>
- #define ACW_CAP_DMA_CHAN 2
- #define ACW_PLY_DMA_CHAN 3
- typedef unsigned long long dma_addr_t;
- struct scatterlist {
- #ifdef CONFIG_DEBUG_SG
- unsigned long sg_magic;
- #endif
- unsigned long page_link;
- unsigned int offset;
- unsigned int length;
- dma_addr_t dma_address;
- #ifdef CONFIG_NEED_SG_DMA_LENGTH
- unsigned int dma_length;
- #endif
- };
- #define readl(a) (*(volatile rt_uint32_t *)(a))
- #define rkqueue_struct rt_workqueue
- #define work_struct rt_work
- #define INIT_WORK(work,func) rt_work_init(work,func,RT_NULL);
- #define queue_work rt_workqueue_dowork
- //timer
- #define timer_list rt_timer
- #define wait_queue_head_t struct rt_event
- #define init_waitqueue_head(event_t) rt_event_init(event_t, "audio_event", RT_IPC_FLAG_FIFO)
- typedef enum{
- AC_SR_8K = 8000,
- AC_SR_16K = 16000,
- AC_SR_32K = 32000,
- AC_SR_441K = 44100,
- AC_SR_48K = 48000,
- } FH_AC_SAMPLE_RATE_E;
- typedef enum{
- AC_BW_8 = 8,
- AC_BW_16 = 16,
- AC_BW_24 = 24,
- } FH_AC_BIT_WIDTH_E;
- enum io_select{
- mic_in = 0,
- line_in = 1,
- speaker_out = 2,
- line_out = 3,
- };
- struct fh_audio_cfg_arg{
- enum io_select io_type;
- int volume;
- int rate;
- int frame_bit;
- int channels;
- int buffer_size;
- int period_size;
- };
- typedef struct{
- unsigned int len;
- unsigned char *data;
- }FH_AC_FRAME_S;
- typedef enum{
- FH_AC_MIC_IN = 0,
- FH_AC_LINE_IN = 1,
- FH_AC_SPK_OUT = 2,
- FH_AC_LINE_OUT = 3
- }FH_AC_IO_TYPE_E;
- typedef struct {
- FH_AC_IO_TYPE_E io_type;
- FH_AC_SAMPLE_RATE_E sample_rate;
- FH_AC_BIT_WIDTH_E bit_width;
- unsigned int channels;
- unsigned int period_size;
- unsigned int volume;
- } FH_AC_CONFIG;
- struct device_dma_parameters {
- /*
- * a low level driver may set these to teach IOMMU code about
- * sg limitations.
- */
- unsigned int max_segment_size;
- unsigned long segment_boundary_mask;
- };
- struct list_head {
- struct list_head *next;
- struct list_head *prev;
- };
- struct dma_coherent_mem {
- void *virt_base;
- dma_addr_t device_base;
- int size;
- int flags;
- unsigned long *bitmap;
- };
- struct device_acw{
- unsigned long long *dma_mask; /* dma mask (if dma'able device) */
- unsigned long long coherent_dma_mask;/* Like dma_mask, but for
- alloc_coherent mappings as
- not all hardware supports
- 64 bit addresses for consistent
- allocations such descriptors. */
- struct device_dma_parameters *dma_parms;
- struct list_head dma_pools;
- struct dma_coherent_mem *dma_mem;
- };
- #define false 0
- #define true 1
- #define AC_INIT_CAPTURE_MEM 0x10
- #define AC_INIT_PLAYBACK_MEM 0x11
- #define AC_SET_VOL 0x12
- #define AC_SET_INPUT_MODE 0x13
- #define AC_SET_OUTPUT_MODE 0x14
- #define AC_AI_EN 0x15
- #define AC_AO_EN 0x16
- #define AC_AI_DISABLE 0x17
- #define AC_AO_DISABLE 0x18
- #define AC_AI_PAUSE 0x19
- #define AC_AI_RESUME 0x1a
- #define AC_AO_PAUSE 0x1b
- #define AC_AO_RESUME 0x1c
- #define AC_MIC_BOOST 0x1d
- #define POLLIN 0x001 /* There is data to read. */
- #define POLLPRI 0x002 /* There is urgent data to read. */
- #define POLLOUT 0x004 /* Writing now will not block. */
- /* These values are defined in XPG4.2. */
- # define POLLRDNORM 0x040 /* Normal data may be read. */
- # define POLLRDBAND 0x080 /* Priority data may be read. */
- # define POLLWRNORM 0x100 /* Writing now will not block. */
- # define POLLWRBAND 0x200 /* Priority data may be written. */
- /* These are extensions for Linux. */
- # define POLLMSG 0x400
- # define POLLREMOVE 0x1000
- # define POLLRDHUP 0x2000
- /* Event types always implicitly polled for. These bits need not be set in
- `events', but they will appear in `revents' to indicate the status of
- the file descriptor. */
- #define POLLERR 0x008 /* Error condition. */
- #define POLLHUP 0x010 /* Hung up. */
- #define POLLNVAL 0x020 /* Invalid polling request. */
- #define EPERM 1 /* Operation not permitted */
- #define ENOENT 2 /* No such file or directory */
- #define ESRCH 3 /* No such process */
- #define EINTR 4 /* Interrupted system call */
- #define EIO 5 /* I/O error */
- #define ENXIO 6 /* No such device or address */
- #define E2BIG 7 /* Argument list too long */
- #define ENOEXEC 8 /* Exec format error */
- #define EBADF 9 /* Bad file number */
- #define ECHILD 10 /* No child processes */
- #define EAGAIN 11 /* Try again */
- #define ENOMEM 12 /* Out of memory */
- #define EACCES 13 /* Permission denied */
- #define EFAULT 14 /* Bad address */
- #define ENOTBLK 15 /* Block device required */
- #define EBUSY 16 /* Device or resource busy */
- #define EEXIST 17 /* File exists */
- #define EXDEV 18 /* Cross-device link */
- #define ENODEV 19 /* No such device */
- #define ENOTDIR 20 /* Not a directory */
- #define EISDIR 21 /* Is a directory */
- #define EINVAL 22 /* Invalid argument */
- #define ENFILE 23 /* File table overflow */
- #define EMFILE 24 /* Too many open files */
- #define ENOTTY 25 /* Not a typewriter */
- #define ETXTBSY 26 /* Text file busy */
- #define EFBIG 27 /* File too large */
- #define ENOSPC 28 /* No space left on device */
- #define ESPIPE 29 /* Illegal seek */
- #define EROFS 30 /* Read-only file system */
- #define EMLINK 31 /* Too many links */
- #define EPIPE 32 /* Broken pipe */
- #define EDOM 33 /* Math argument out of domain of func */
- #define ERANGE 34 /* Math result not representable */
- extern void fh_audio_init(void);
- extern void fh_acw_test();
- #endif
|