87 lines
2.4 KiB
C
Executable File
87 lines
2.4 KiB
C
Executable File
#include <sound/samsung/abox.h>
|
|
|
|
/* for KM */
|
|
|
|
#define USB_AUDIO_MEM_BASE 0xC0000000
|
|
|
|
#define USB_AUDIO_SAVE_RESTORE (USB_AUDIO_MEM_BASE)
|
|
#define USB_AUDIO_DEV_CTX (USB_AUDIO_SAVE_RESTORE+PAGE_SIZE)
|
|
#define USB_AUDIO_INPUT_CTX (USB_AUDIO_DEV_CTX+PAGE_SIZE)
|
|
#define USB_AUDIO_OUT_DEQ (USB_AUDIO_INPUT_CTX+PAGE_SIZE)
|
|
#define USB_AUDIO_IN_DEQ (USB_AUDIO_OUT_DEQ+PAGE_SIZE)
|
|
#define USB_AUDIO_FBOUT_DEQ (USB_AUDIO_IN_DEQ+PAGE_SIZE)
|
|
#define USB_AUDIO_FBIN_DEQ (USB_AUDIO_FBOUT_DEQ+PAGE_SIZE)
|
|
#define USB_AUDIO_ERST (USB_AUDIO_FBIN_DEQ+PAGE_SIZE)
|
|
#define USB_AUDIO_DESC (USB_AUDIO_ERST+PAGE_SIZE)
|
|
#define USB_AUDIO_PCM_OUTBUF (USB_AUDIO_MEM_BASE+0x100000)
|
|
#define USB_AUDIO_PCM_INBUF (USB_AUDIO_MEM_BASE+0x800000)
|
|
|
|
#if defined(CONFIG_SOC_EXYNOS9820)
|
|
#define USB_AUDIO_XHCI_BASE 0x10C00000
|
|
#elif defined(CONFIG_SOC_EXYNOS9610)
|
|
#define USB_AUDIO_XHCI_BASE 0x13200000
|
|
#else
|
|
#error
|
|
#endif
|
|
|
|
struct host_data {
|
|
dma_addr_t out_data_dma;
|
|
dma_addr_t in_data_dma;
|
|
void *out_data_addr;
|
|
void *in_data_addr;
|
|
};
|
|
|
|
extern struct host_data xhci_data;
|
|
|
|
struct exynos_usb_audio {
|
|
struct usb_device *udev;
|
|
struct platform_device *abox;
|
|
struct platform_device *hcd_pdev;
|
|
struct mutex lock;
|
|
struct completion in_task_done;
|
|
struct completion out_task_done;
|
|
struct completion in_conn_stop;
|
|
struct completion out_conn_stop;
|
|
|
|
u64 out_buf_addr;
|
|
u64 in_buf_addr;
|
|
u64 pcm_offset;
|
|
u64 desc_addr;
|
|
u64 offset;
|
|
|
|
/* for hw_info */
|
|
u64 dcbaa_dma;
|
|
u64 in_ctx;
|
|
u64 out_ctx;
|
|
u64 erst_addr;
|
|
|
|
int speed;
|
|
/* 1: in, 0: out */
|
|
int set_ep;
|
|
int is_audio;
|
|
u8 indeq_map_done;
|
|
u8 outdeq_map_done;
|
|
u8 fb_indeq_map_done;
|
|
u8 fb_outdeq_map_done;
|
|
u32 pcm_open_done;
|
|
|
|
void *pcm_buf;
|
|
u64 save_dma;
|
|
};
|
|
|
|
extern struct exynos_usb_audio *usb_audio;
|
|
extern int otg_connection;
|
|
|
|
int exynos_usb_audio_map_buf(struct usb_device *udev);
|
|
int exynos_usb_audio_pcmbuf(struct usb_device *udev);
|
|
int exynos_usb_audio_setrate(int intf, int rate, int alt);
|
|
int exynos_usb_audio_setintf(struct usb_device *udev, int iface, int alt, int direction);
|
|
int exynos_usb_audio_conn(int is_conn);
|
|
int exynos_usb_audio_pcm(int is_open, int direction);
|
|
int exynos_usb_audio_l2(int is_l2);
|
|
int exynos_usb_audio_desc(struct usb_device *udev);
|
|
int exynos_usb_audio_hcd(struct usb_device *udev);
|
|
int exynos_usb_audio_init(struct device *dev, struct platform_device *pdev);
|
|
int exynos_usb_audio_exit(void);
|
|
void exynos_usb_audio_set_device(struct usb_device *udev);
|