Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
42bef686
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
161
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
42bef686
编写于
8月 12, 2011
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-3.1' into for-3.2
上级
4c54c6de
7ec41ee5
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
492 addition
and
11 deletion
+492
-11
MAINTAINERS
MAINTAINERS
+1
-1
include/sound/tlv320aic3x.h
include/sound/tlv320aic3x.h
+1
-1
sound/soc/omap/n810.c
sound/soc/omap/n810.c
+2
-2
sound/soc/omap/omap-mcbsp.c
sound/soc/omap/omap-mcbsp.c
+2
-2
sound/soc/omap/omap-mcbsp.h
sound/soc/omap/omap-mcbsp.h
+1
-1
sound/soc/omap/omap-pcm.c
sound/soc/omap/omap-pcm.c
+2
-2
sound/soc/omap/omap-pcm.h
sound/soc/omap/omap-pcm.h
+1
-1
sound/soc/omap/rx51.c
sound/soc/omap/rx51.c
+1
-1
sound/soc/samsung/Makefile
sound/soc/samsung/Makefile
+2
-0
sound/soc/samsung/idma.c
sound/soc/samsung/idma.c
+453
-0
sound/soc/samsung/idma.h
sound/soc/samsung/idma.h
+26
-0
未找到文件。
MAINTAINERS
浏览文件 @
42bef686
...
...
@@ -4604,7 +4604,7 @@ F: arch/arm/mach-omap2/clockdomain2xxx_3xxx.c
F: arch/arm/mach-omap2/clockdomain44xx.c
OMAP AUDIO SUPPORT
M: Jarkko Nikula <j
hnikula@gmail
.com>
M: Jarkko Nikula <j
arkko.nikula@bitmer
.com>
L: alsa-devel@alsa-project.org (subscribers-only)
L: linux-omap@vger.kernel.org
S: Maintained
...
...
include/sound/tlv320aic3x.h
浏览文件 @
42bef686
/*
* Platform data for Texas Instruments TLV320AIC3x codec
*
* Author: Jarkko Nikula <j
hnikula@gmail
.com>
* Author: Jarkko Nikula <j
arkko.nikula@bitmer
.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
...
...
sound/soc/omap/n810.c
浏览文件 @
42bef686
...
...
@@ -3,7 +3,7 @@
*
* Copyright (C) 2008 Nokia Corporation
*
* Contact: Jarkko Nikula <j
hnikula@gmail
.com>
* Contact: Jarkko Nikula <j
arkko.nikula@bitmer
.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
...
...
@@ -402,6 +402,6 @@ static void __exit n810_soc_exit(void)
module_init
(
n810_soc_init
);
module_exit
(
n810_soc_exit
);
MODULE_AUTHOR
(
"Jarkko Nikula <j
hnikula@gmail
.com>"
);
MODULE_AUTHOR
(
"Jarkko Nikula <j
arkko.nikula@bitmer
.com>"
);
MODULE_DESCRIPTION
(
"ALSA SoC Nokia N810"
);
MODULE_LICENSE
(
"GPL"
);
sound/soc/omap/omap-mcbsp.c
浏览文件 @
42bef686
...
...
@@ -3,7 +3,7 @@
*
* Copyright (C) 2008 Nokia Corporation
*
* Contact: Jarkko Nikula <j
hnikula@gmail
.com>
* Contact: Jarkko Nikula <j
arkko.nikula@bitmer
.com>
* Peter Ujfalusi <peter.ujfalusi@ti.com>
*
* This program is free software; you can redistribute it and/or
...
...
@@ -780,6 +780,6 @@ static void __exit snd_omap_mcbsp_exit(void)
}
module_exit
(
snd_omap_mcbsp_exit
);
MODULE_AUTHOR
(
"Jarkko Nikula <j
hnikula@gmail
.com>"
);
MODULE_AUTHOR
(
"Jarkko Nikula <j
arkko.nikula@bitmer
.com>"
);
MODULE_DESCRIPTION
(
"OMAP I2S SoC Interface"
);
MODULE_LICENSE
(
"GPL"
);
sound/soc/omap/omap-mcbsp.h
浏览文件 @
42bef686
...
...
@@ -3,7 +3,7 @@
*
* Copyright (C) 2008 Nokia Corporation
*
* Contact: Jarkko Nikula <j
hnikula@gmail
.com>
* Contact: Jarkko Nikula <j
arkko.nikula@bitmer
.com>
* Peter Ujfalusi <peter.ujfalusi@ti.com>
*
* This program is free software; you can redistribute it and/or
...
...
sound/soc/omap/omap-pcm.c
浏览文件 @
42bef686
...
...
@@ -3,7 +3,7 @@
*
* Copyright (C) 2008 Nokia Corporation
*
* Contact: Jarkko Nikula <j
hnikula@gmail
.com>
* Contact: Jarkko Nikula <j
arkko.nikula@bitmer
.com>
* Peter Ujfalusi <peter.ujfalusi@ti.com>
*
* This program is free software; you can redistribute it and/or
...
...
@@ -436,6 +436,6 @@ static void __exit snd_omap_pcm_exit(void)
}
module_exit
(
snd_omap_pcm_exit
);
MODULE_AUTHOR
(
"Jarkko Nikula <j
hnikula@gmail
.com>"
);
MODULE_AUTHOR
(
"Jarkko Nikula <j
arkko.nikula@bitmer
.com>"
);
MODULE_DESCRIPTION
(
"OMAP PCM DMA module"
);
MODULE_LICENSE
(
"GPL"
);
sound/soc/omap/omap-pcm.h
浏览文件 @
42bef686
...
...
@@ -3,7 +3,7 @@
*
* Copyright (C) 2008 Nokia Corporation
*
* Contact: Jarkko Nikula <j
hnikula@gmail
.com>
* Contact: Jarkko Nikula <j
arkko.nikula@bitmer
.com>
* Peter Ujfalusi <peter.ujfalusi@ti.com>
*
* This program is free software; you can redistribute it and/or
...
...
sound/soc/omap/rx51.c
浏览文件 @
42bef686
...
...
@@ -5,7 +5,7 @@
*
* Contact: Peter Ujfalusi <peter.ujfalusi@ti.com>
* Eduardo Valentin <eduardo.valentin@nokia.com>
* Jarkko Nikula <j
hnikula@gmail
.com>
* Jarkko Nikula <j
arkko.nikula@bitmer
.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
...
...
sound/soc/samsung/Makefile
浏览文件 @
42bef686
# S3c24XX Platform Support
snd-soc-s3c24xx-objs
:=
dma.o
snd-soc-idma-objs
:=
idma.o
snd-soc-s3c24xx-i2s-objs
:=
s3c24xx-i2s.o
snd-soc-s3c2412-i2s-objs
:=
s3c2412-i2s.o
snd-soc-ac97-objs
:=
ac97.o
...
...
@@ -16,6 +17,7 @@ obj-$(CONFIG_SND_S3C_I2SV2_SOC) += snd-soc-s3c-i2s-v2.o
obj-$(CONFIG_SND_SAMSUNG_SPDIF)
+=
snd-soc-samsung-spdif.o
obj-$(CONFIG_SND_SAMSUNG_PCM)
+=
snd-soc-pcm.o
obj-$(CONFIG_SND_SAMSUNG_I2S)
+=
snd-soc-i2s.o
obj-$(CONFIG_SND_SAMSUNG_I2S)
+=
snd-soc-idma.o
# S3C24XX Machine Support
snd-soc-jive-wm8750-objs
:=
jive_wm8750.o
...
...
sound/soc/samsung/idma.c
0 → 100644
浏览文件 @
42bef686
/*
* sound/soc/samsung/idma.c
*
* Copyright (c) 2011 Samsung Electronics Co., Ltd.
* http://www.samsung.com
*
* I2S0's Internal DMA driver
*
* 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.
*/
#include <linux/interrupt.h>
#include <linux/platform_device.h>
#include <linux/dma-mapping.h>
#include <linux/slab.h>
#include <sound/pcm.h>
#include <sound/pcm_params.h>
#include <sound/soc.h>
#include "i2s.h"
#include "idma.h"
#include "dma.h"
#include "i2s-regs.h"
#define ST_RUNNING (1<<0)
#define ST_OPENED (1<<1)
static
const
struct
snd_pcm_hardware
idma_hardware
=
{
.
info
=
SNDRV_PCM_INFO_INTERLEAVED
|
SNDRV_PCM_INFO_BLOCK_TRANSFER
|
SNDRV_PCM_INFO_MMAP
|
SNDRV_PCM_INFO_MMAP_VALID
|
SNDRV_PCM_INFO_PAUSE
|
SNDRV_PCM_INFO_RESUME
,
.
formats
=
SNDRV_PCM_FMTBIT_S16_LE
|
SNDRV_PCM_FMTBIT_U16_LE
|
SNDRV_PCM_FMTBIT_S24_LE
|
SNDRV_PCM_FMTBIT_U24_LE
|
SNDRV_PCM_FMTBIT_U8
|
SNDRV_PCM_FMTBIT_S8
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
buffer_bytes_max
=
MAX_IDMA_BUFFER
,
.
period_bytes_min
=
128
,
.
period_bytes_max
=
MAX_IDMA_PERIOD
,
.
periods_min
=
1
,
.
periods_max
=
2
,
};
struct
idma_ctrl
{
spinlock_t
lock
;
int
state
;
dma_addr_t
start
;
dma_addr_t
pos
;
dma_addr_t
end
;
dma_addr_t
period
;
dma_addr_t
periodsz
;
void
*
token
;
void
(
*
cb
)(
void
*
dt
,
int
bytes_xfer
);
};
static
struct
idma_info
{
spinlock_t
lock
;
void
__iomem
*
regs
;
dma_addr_t
lp_tx_addr
;
}
idma
;
static
void
idma_getpos
(
dma_addr_t
*
src
)
{
*
src
=
idma
.
lp_tx_addr
+
(
readl
(
idma
.
regs
+
I2STRNCNT
)
&
0xffffff
)
*
4
;
}
static
int
idma_enqueue
(
struct
snd_pcm_substream
*
substream
)
{
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
idma_ctrl
*
prtd
=
substream
->
runtime
->
private_data
;
u32
val
;
spin_lock
(
&
prtd
->
lock
);
prtd
->
token
=
(
void
*
)
substream
;
spin_unlock
(
&
prtd
->
lock
);
/* Internal DMA Level0 Interrupt Address */
val
=
idma
.
lp_tx_addr
+
prtd
->
periodsz
;
writel
(
val
,
idma
.
regs
+
I2SLVL0ADDR
);
/* Start address0 of I2S internal DMA operation. */
val
=
idma
.
lp_tx_addr
;
writel
(
val
,
idma
.
regs
+
I2SSTR0
);
/*
* Transfer block size for I2S internal DMA.
* Should decide transfer size before start dma operation
*/
val
=
readl
(
idma
.
regs
+
I2SSIZE
);
val
&=
~
(
I2SSIZE_TRNMSK
<<
I2SSIZE_SHIFT
);
val
|=
(((
runtime
->
dma_bytes
>>
2
)
&
I2SSIZE_TRNMSK
)
<<
I2SSIZE_SHIFT
);
writel
(
val
,
idma
.
regs
+
I2SSIZE
);
val
=
readl
(
idma
.
regs
+
I2SAHB
);
val
|=
AHB_INTENLVL0
;
writel
(
val
,
idma
.
regs
+
I2SAHB
);
return
0
;
}
static
void
idma_setcallbk
(
struct
snd_pcm_substream
*
substream
,
void
(
*
cb
)(
void
*
,
int
))
{
struct
idma_ctrl
*
prtd
=
substream
->
runtime
->
private_data
;
spin_lock
(
&
prtd
->
lock
);
prtd
->
cb
=
cb
;
spin_unlock
(
&
prtd
->
lock
);
}
static
void
idma_control
(
int
op
)
{
u32
val
=
readl
(
idma
.
regs
+
I2SAHB
);
spin_lock
(
&
idma
.
lock
);
switch
(
op
)
{
case
LPAM_DMA_START
:
val
|=
(
AHB_INTENLVL0
|
AHB_DMAEN
);
break
;
case
LPAM_DMA_STOP
:
val
&=
~
(
AHB_INTENLVL0
|
AHB_DMAEN
);
break
;
default:
spin_unlock
(
&
idma
.
lock
);
return
;
}
writel
(
val
,
idma
.
regs
+
I2SAHB
);
spin_unlock
(
&
idma
.
lock
);
}
static
void
idma_done
(
void
*
id
,
int
bytes_xfer
)
{
struct
snd_pcm_substream
*
substream
=
id
;
struct
idma_ctrl
*
prtd
=
substream
->
runtime
->
private_data
;
if
(
prtd
&&
(
prtd
->
state
&
ST_RUNNING
))
snd_pcm_period_elapsed
(
substream
);
}
static
int
idma_hw_params
(
struct
snd_pcm_substream
*
substream
,
struct
snd_pcm_hw_params
*
params
)
{
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
idma_ctrl
*
prtd
=
substream
->
runtime
->
private_data
;
u32
mod
=
readl
(
idma
.
regs
+
I2SMOD
);
u32
ahb
=
readl
(
idma
.
regs
+
I2SAHB
);
ahb
|=
(
AHB_DMARLD
|
AHB_INTMASK
);
mod
|=
MOD_TXS_IDMA
;
writel
(
ahb
,
idma
.
regs
+
I2SAHB
);
writel
(
mod
,
idma
.
regs
+
I2SMOD
);
snd_pcm_set_runtime_buffer
(
substream
,
&
substream
->
dma_buffer
);
runtime
->
dma_bytes
=
params_buffer_bytes
(
params
);
prtd
->
start
=
prtd
->
pos
=
runtime
->
dma_addr
;
prtd
->
period
=
params_periods
(
params
);
prtd
->
periodsz
=
params_period_bytes
(
params
);
prtd
->
end
=
runtime
->
dma_addr
+
runtime
->
dma_bytes
;
idma_setcallbk
(
substream
,
idma_done
);
return
0
;
}
static
int
idma_hw_free
(
struct
snd_pcm_substream
*
substream
)
{
snd_pcm_set_runtime_buffer
(
substream
,
NULL
);
return
0
;
}
static
int
idma_prepare
(
struct
snd_pcm_substream
*
substream
)
{
struct
idma_ctrl
*
prtd
=
substream
->
runtime
->
private_data
;
prtd
->
pos
=
prtd
->
start
;
/* flush the DMA channel */
idma_control
(
LPAM_DMA_STOP
);
idma_enqueue
(
substream
);
return
0
;
}
static
int
idma_trigger
(
struct
snd_pcm_substream
*
substream
,
int
cmd
)
{
struct
idma_ctrl
*
prtd
=
substream
->
runtime
->
private_data
;
int
ret
=
0
;
spin_lock
(
&
prtd
->
lock
);
switch
(
cmd
)
{
case
SNDRV_PCM_TRIGGER_RESUME
:
case
SNDRV_PCM_TRIGGER_START
:
case
SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
prtd
->
state
|=
ST_RUNNING
;
idma_control
(
LPAM_DMA_START
);
break
;
case
SNDRV_PCM_TRIGGER_SUSPEND
:
case
SNDRV_PCM_TRIGGER_STOP
:
case
SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
prtd
->
state
&=
~
ST_RUNNING
;
idma_control
(
LPAM_DMA_STOP
);
break
;
default:
ret
=
-
EINVAL
;
break
;
}
spin_unlock
(
&
prtd
->
lock
);
return
ret
;
}
static
snd_pcm_uframes_t
idma_pointer
(
struct
snd_pcm_substream
*
substream
)
{
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
idma_ctrl
*
prtd
=
runtime
->
private_data
;
dma_addr_t
src
;
unsigned
long
res
;
spin_lock
(
&
prtd
->
lock
);
idma_getpos
(
&
src
);
res
=
src
-
prtd
->
start
;
spin_unlock
(
&
prtd
->
lock
);
return
bytes_to_frames
(
substream
->
runtime
,
res
);
}
static
int
idma_mmap
(
struct
snd_pcm_substream
*
substream
,
struct
vm_area_struct
*
vma
)
{
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
unsigned
long
size
,
offset
;
int
ret
;
/* From snd_pcm_lib_mmap_iomem */
vma
->
vm_page_prot
=
pgprot_noncached
(
vma
->
vm_page_prot
);
vma
->
vm_flags
|=
VM_IO
;
size
=
vma
->
vm_end
-
vma
->
vm_start
;
offset
=
vma
->
vm_pgoff
<<
PAGE_SHIFT
;
ret
=
io_remap_pfn_range
(
vma
,
vma
->
vm_start
,
(
runtime
->
dma_addr
+
offset
)
>>
PAGE_SHIFT
,
size
,
vma
->
vm_page_prot
);
return
ret
;
}
static
irqreturn_t
iis_irq
(
int
irqno
,
void
*
dev_id
)
{
struct
idma_ctrl
*
prtd
=
(
struct
idma_ctrl
*
)
dev_id
;
u32
iiscon
,
iisahb
,
val
,
addr
;
iisahb
=
readl
(
idma
.
regs
+
I2SAHB
);
iiscon
=
readl
(
idma
.
regs
+
I2SCON
);
val
=
(
iisahb
&
AHB_LVL0INT
)
?
AHB_CLRLVL0INT
:
0
;
if
(
val
)
{
iisahb
|=
val
;
writel
(
iisahb
,
idma
.
regs
+
I2SAHB
);
addr
=
readl
(
idma
.
regs
+
I2SLVL0ADDR
)
-
idma
.
lp_tx_addr
;
addr
+=
prtd
->
periodsz
;
addr
%=
(
prtd
->
end
-
prtd
->
start
);
addr
+=
idma
.
lp_tx_addr
;
writel
(
addr
,
idma
.
regs
+
I2SLVL0ADDR
);
if
(
prtd
->
cb
)
prtd
->
cb
(
prtd
->
token
,
prtd
->
period
);
}
return
IRQ_HANDLED
;
}
static
int
idma_open
(
struct
snd_pcm_substream
*
substream
)
{
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
idma_ctrl
*
prtd
;
int
ret
;
snd_soc_set_runtime_hwparams
(
substream
,
&
idma_hardware
);
prtd
=
kzalloc
(
sizeof
(
struct
idma_ctrl
),
GFP_KERNEL
);
if
(
prtd
==
NULL
)
return
-
ENOMEM
;
ret
=
request_irq
(
IRQ_I2S0
,
iis_irq
,
0
,
"i2s"
,
prtd
);
if
(
ret
<
0
)
{
pr_err
(
"fail to claim i2s irq , ret = %d
\n
"
,
ret
);
kfree
(
prtd
);
return
ret
;
}
spin_lock_init
(
&
prtd
->
lock
);
runtime
->
private_data
=
prtd
;
return
0
;
}
static
int
idma_close
(
struct
snd_pcm_substream
*
substream
)
{
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
idma_ctrl
*
prtd
=
runtime
->
private_data
;
free_irq
(
IRQ_I2S0
,
prtd
);
if
(
!
prtd
)
pr_err
(
"idma_close called with prtd == NULL
\n
"
);
kfree
(
prtd
);
return
0
;
}
static
struct
snd_pcm_ops
idma_ops
=
{
.
open
=
idma_open
,
.
close
=
idma_close
,
.
ioctl
=
snd_pcm_lib_ioctl
,
.
trigger
=
idma_trigger
,
.
pointer
=
idma_pointer
,
.
mmap
=
idma_mmap
,
.
hw_params
=
idma_hw_params
,
.
hw_free
=
idma_hw_free
,
.
prepare
=
idma_prepare
,
};
static
void
idma_free
(
struct
snd_pcm
*
pcm
)
{
struct
snd_pcm_substream
*
substream
;
struct
snd_dma_buffer
*
buf
;
substream
=
pcm
->
streams
[
SNDRV_PCM_STREAM_PLAYBACK
].
substream
;
if
(
!
substream
)
return
;
buf
=
&
substream
->
dma_buffer
;
if
(
!
buf
->
area
)
return
;
iounmap
(
buf
->
area
);
buf
->
area
=
NULL
;
buf
->
addr
=
0
;
}
static
int
preallocate_idma_buffer
(
struct
snd_pcm
*
pcm
,
int
stream
)
{
struct
snd_pcm_substream
*
substream
=
pcm
->
streams
[
stream
].
substream
;
struct
snd_dma_buffer
*
buf
=
&
substream
->
dma_buffer
;
buf
->
dev
.
dev
=
pcm
->
card
->
dev
;
buf
->
private_data
=
NULL
;
/* Assign PCM buffer pointers */
buf
->
dev
.
type
=
SNDRV_DMA_TYPE_CONTINUOUS
;
buf
->
addr
=
idma
.
lp_tx_addr
;
buf
->
bytes
=
idma_hardware
.
buffer_bytes_max
;
buf
->
area
=
(
unsigned
char
*
)
ioremap
(
buf
->
addr
,
buf
->
bytes
);
return
0
;
}
static
u64
idma_mask
=
DMA_BIT_MASK
(
32
);
static
int
idma_new
(
struct
snd_soc_pcm_runtime
*
rtd
)
{
struct
snd_card
*
card
=
rtd
->
card
->
snd_card
;
struct
snd_soc_dai
*
dai
=
rtd
->
cpu_dai
;
struct
snd_pcm
*
pcm
=
rtd
->
pcm
;
int
ret
=
0
;
if
(
!
card
->
dev
->
dma_mask
)
card
->
dev
->
dma_mask
=
&
idma_mask
;
if
(
!
card
->
dev
->
coherent_dma_mask
)
card
->
dev
->
coherent_dma_mask
=
DMA_BIT_MASK
(
32
);
if
(
dai
->
driver
->
playback
.
channels_min
)
ret
=
preallocate_idma_buffer
(
pcm
,
SNDRV_PCM_STREAM_PLAYBACK
);
return
ret
;
}
void
idma_reg_addr_init
(
void
*
regs
,
dma_addr_t
addr
)
{
spin_lock_init
(
&
idma
.
lock
);
idma
.
regs
=
regs
;
idma
.
lp_tx_addr
=
addr
;
}
struct
snd_soc_platform_driver
asoc_idma_platform
=
{
.
ops
=
&
idma_ops
,
.
pcm_new
=
idma_new
,
.
pcm_free
=
idma_free
,
};
static
int
__devinit
asoc_idma_platform_probe
(
struct
platform_device
*
pdev
)
{
return
snd_soc_register_platform
(
&
pdev
->
dev
,
&
asoc_idma_platform
);
}
static
int
__devexit
asoc_idma_platform_remove
(
struct
platform_device
*
pdev
)
{
snd_soc_unregister_platform
(
&
pdev
->
dev
);
return
0
;
}
static
struct
platform_driver
asoc_idma_driver
=
{
.
driver
=
{
.
name
=
"samsung-idma"
,
.
owner
=
THIS_MODULE
,
},
.
probe
=
asoc_idma_platform_probe
,
.
remove
=
__devexit_p
(
asoc_idma_platform_remove
),
};
static
int
__init
asoc_idma_init
(
void
)
{
return
platform_driver_register
(
&
asoc_idma_driver
);
}
module_init
(
asoc_idma_init
);
static
void
__exit
asoc_idma_exit
(
void
)
{
platform_driver_unregister
(
&
asoc_idma_driver
);
}
module_exit
(
asoc_idma_exit
);
MODULE_AUTHOR
(
"Jaswinder Singh, <jassisinghbrar@gmail.com>"
);
MODULE_DESCRIPTION
(
"Samsung ASoC IDMA Driver"
);
MODULE_LICENSE
(
"GPL"
);
sound/soc/samsung/idma.h
0 → 100644
浏览文件 @
42bef686
/*
* sound/soc/samsung/idma.h
*
* Copyright (c) 2011 Samsung Electronics Co., Ltd
* http://www.samsung.com
*
* 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.
*
*/
#ifndef __SND_SOC_SAMSUNG_IDMA_H_
#define __SND_SOC_SAMSUNG_IDMA_H_
extern
void
idma_reg_addr_init
(
void
*
regs
,
dma_addr_t
addr
);
/* dma_state */
#define LPAM_DMA_STOP 0
#define LPAM_DMA_START 1
#define MAX_IDMA_PERIOD (128 * 1024)
#define MAX_IDMA_BUFFER (160 * 1024)
#endif
/* __SND_SOC_SAMSUNG_IDMA_H_ */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录