Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
5f9c510e
Commit
5f9c510e
authored
Apr 06, 2009
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'topic/atmel' into for-linus
parents
c707e950
fa075ed2
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
119 additions
and
27 deletions
+119
-27
sound/atmel/abdac.c
sound/atmel/abdac.c
+2
-2
sound/atmel/ac97c.c
sound/atmel/ac97c.c
+109
-19
sound/atmel/ac97c.h
sound/atmel/ac97c.h
+8
-6
No files found.
sound/atmel/abdac.c
View file @
5f9c510e
...
@@ -165,7 +165,7 @@ static struct snd_pcm_hardware atmel_abdac_hw = {
...
@@ -165,7 +165,7 @@ static struct snd_pcm_hardware atmel_abdac_hw = {
.
buffer_bytes_max
=
64
*
4096
,
.
buffer_bytes_max
=
64
*
4096
,
.
period_bytes_min
=
4096
,
.
period_bytes_min
=
4096
,
.
period_bytes_max
=
4096
,
.
period_bytes_max
=
4096
,
.
periods_min
=
4
,
.
periods_min
=
6
,
.
periods_max
=
64
,
.
periods_max
=
64
,
};
};
...
@@ -502,7 +502,7 @@ static int __devinit atmel_abdac_probe(struct platform_device *pdev)
...
@@ -502,7 +502,7 @@ static int __devinit atmel_abdac_probe(struct platform_device *pdev)
platform_set_drvdata
(
pdev
,
card
);
platform_set_drvdata
(
pdev
,
card
);
dev_info
(
&
pdev
->
dev
,
"Atmel ABDAC at 0x%p using %s
\n
"
,
dev_info
(
&
pdev
->
dev
,
"Atmel ABDAC at 0x%p using %s
\n
"
,
dac
->
regs
,
d
ac
->
dma
.
chan
->
dev
->
device
.
bus_id
);
dac
->
regs
,
d
ev_name
(
&
dac
->
dma
.
chan
->
dev
->
device
)
);
return
retval
;
return
retval
;
...
...
sound/atmel/ac97c.c
View file @
5f9c510e
/*
/*
* Driver for
the Atmel AC97C controller
* Driver for
Atmel AC97C
*
*
* Copyright (C) 2005-2009 Atmel Corporation
* Copyright (C) 2005-2009 Atmel Corporation
*
*
...
@@ -10,6 +10,7 @@
...
@@ -10,6 +10,7 @@
#include <linux/clk.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/bitmap.h>
#include <linux/bitmap.h>
#include <linux/device.h>
#include <linux/dmaengine.h>
#include <linux/dmaengine.h>
#include <linux/dma-mapping.h>
#include <linux/dma-mapping.h>
#include <linux/init.h>
#include <linux/init.h>
...
@@ -65,6 +66,7 @@ struct atmel_ac97c {
...
@@ -65,6 +66,7 @@ struct atmel_ac97c {
/* Serialize access to opened variable */
/* Serialize access to opened variable */
spinlock_t
lock
;
spinlock_t
lock
;
void
__iomem
*
regs
;
void
__iomem
*
regs
;
int
irq
;
int
opened
;
int
opened
;
int
reset_pin
;
int
reset_pin
;
};
};
...
@@ -150,10 +152,10 @@ static struct snd_pcm_hardware atmel_ac97c_hw = {
...
@@ -150,10 +152,10 @@ static struct snd_pcm_hardware atmel_ac97c_hw = {
.
rate_max
=
48000
,
.
rate_max
=
48000
,
.
channels_min
=
1
,
.
channels_min
=
1
,
.
channels_max
=
2
,
.
channels_max
=
2
,
.
buffer_bytes_max
=
64
*
4096
,
.
buffer_bytes_max
=
2
*
2
*
64
*
2048
,
.
period_bytes_min
=
4096
,
.
period_bytes_min
=
4096
,
.
period_bytes_max
=
4096
,
.
period_bytes_max
=
4096
,
.
periods_min
=
4
,
.
periods_min
=
6
,
.
periods_max
=
64
,
.
periods_max
=
64
,
};
};
...
@@ -297,9 +299,11 @@ static int atmel_ac97c_playback_prepare(struct snd_pcm_substream *substream)
...
@@ -297,9 +299,11 @@ static int atmel_ac97c_playback_prepare(struct snd_pcm_substream *substream)
{
{
struct
atmel_ac97c
*
chip
=
snd_pcm_substream_chip
(
substream
);
struct
atmel_ac97c
*
chip
=
snd_pcm_substream_chip
(
substream
);
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
unsigned
long
word
=
0
;
unsigned
long
word
=
ac97c_readl
(
chip
,
OCA
)
;
int
retval
;
int
retval
;
word
&=
~
(
AC97C_CH_MASK
(
PCM_LEFT
)
|
AC97C_CH_MASK
(
PCM_RIGHT
));
/* assign channels to AC97C channel A */
/* assign channels to AC97C channel A */
switch
(
runtime
->
channels
)
{
switch
(
runtime
->
channels
)
{
case
1
:
case
1
:
...
@@ -312,7 +316,6 @@ static int atmel_ac97c_playback_prepare(struct snd_pcm_substream *substream)
...
@@ -312,7 +316,6 @@ static int atmel_ac97c_playback_prepare(struct snd_pcm_substream *substream)
default:
default:
/* TODO: support more than two channels */
/* TODO: support more than two channels */
return
-
EINVAL
;
return
-
EINVAL
;
break
;
}
}
ac97c_writel
(
chip
,
OCA
,
word
);
ac97c_writel
(
chip
,
OCA
,
word
);
...
@@ -324,13 +327,25 @@ static int atmel_ac97c_playback_prepare(struct snd_pcm_substream *substream)
...
@@ -324,13 +327,25 @@ static int atmel_ac97c_playback_prepare(struct snd_pcm_substream *substream)
word
|=
AC97C_CMR_CEM_LITTLE
;
word
|=
AC97C_CMR_CEM_LITTLE
;
break
;
break
;
case
SNDRV_PCM_FORMAT_S16_BE
:
/* fall through */
case
SNDRV_PCM_FORMAT_S16_BE
:
/* fall through */
default:
word
&=
~
(
AC97C_CMR_CEM_LITTLE
);
word
&=
~
(
AC97C_CMR_CEM_LITTLE
);
break
;
break
;
default:
word
=
ac97c_readl
(
chip
,
OCA
);
word
&=
~
(
AC97C_CH_MASK
(
PCM_LEFT
)
|
AC97C_CH_MASK
(
PCM_RIGHT
));
ac97c_writel
(
chip
,
OCA
,
word
);
return
-
EINVAL
;
}
}
/* Enable underrun interrupt on channel A */
word
|=
AC97C_CSR_UNRUN
;
ac97c_writel
(
chip
,
CAMR
,
word
);
ac97c_writel
(
chip
,
CAMR
,
word
);
/* Enable channel A event interrupt */
word
=
ac97c_readl
(
chip
,
IMR
);
word
|=
AC97C_SR_CAEVT
;
ac97c_writel
(
chip
,
IER
,
word
);
/* set variable rate if needed */
/* set variable rate if needed */
if
(
runtime
->
rate
!=
48000
)
{
if
(
runtime
->
rate
!=
48000
)
{
word
=
ac97c_readl
(
chip
,
MR
);
word
=
ac97c_readl
(
chip
,
MR
);
...
@@ -359,9 +374,11 @@ static int atmel_ac97c_capture_prepare(struct snd_pcm_substream *substream)
...
@@ -359,9 +374,11 @@ static int atmel_ac97c_capture_prepare(struct snd_pcm_substream *substream)
{
{
struct
atmel_ac97c
*
chip
=
snd_pcm_substream_chip
(
substream
);
struct
atmel_ac97c
*
chip
=
snd_pcm_substream_chip
(
substream
);
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
unsigned
long
word
=
0
;
unsigned
long
word
=
ac97c_readl
(
chip
,
ICA
)
;
int
retval
;
int
retval
;
word
&=
~
(
AC97C_CH_MASK
(
PCM_LEFT
)
|
AC97C_CH_MASK
(
PCM_RIGHT
));
/* assign channels to AC97C channel A */
/* assign channels to AC97C channel A */
switch
(
runtime
->
channels
)
{
switch
(
runtime
->
channels
)
{
case
1
:
case
1
:
...
@@ -374,7 +391,6 @@ static int atmel_ac97c_capture_prepare(struct snd_pcm_substream *substream)
...
@@ -374,7 +391,6 @@ static int atmel_ac97c_capture_prepare(struct snd_pcm_substream *substream)
default:
default:
/* TODO: support more than two channels */
/* TODO: support more than two channels */
return
-
EINVAL
;
return
-
EINVAL
;
break
;
}
}
ac97c_writel
(
chip
,
ICA
,
word
);
ac97c_writel
(
chip
,
ICA
,
word
);
...
@@ -386,13 +402,25 @@ static int atmel_ac97c_capture_prepare(struct snd_pcm_substream *substream)
...
@@ -386,13 +402,25 @@ static int atmel_ac97c_capture_prepare(struct snd_pcm_substream *substream)
word
|=
AC97C_CMR_CEM_LITTLE
;
word
|=
AC97C_CMR_CEM_LITTLE
;
break
;
break
;
case
SNDRV_PCM_FORMAT_S16_BE
:
/* fall through */
case
SNDRV_PCM_FORMAT_S16_BE
:
/* fall through */
default:
word
&=
~
(
AC97C_CMR_CEM_LITTLE
);
word
&=
~
(
AC97C_CMR_CEM_LITTLE
);
break
;
break
;
default:
word
=
ac97c_readl
(
chip
,
ICA
);
word
&=
~
(
AC97C_CH_MASK
(
PCM_LEFT
)
|
AC97C_CH_MASK
(
PCM_RIGHT
));
ac97c_writel
(
chip
,
ICA
,
word
);
return
-
EINVAL
;
}
}
/* Enable overrun interrupt on channel A */
word
|=
AC97C_CSR_OVRUN
;
ac97c_writel
(
chip
,
CAMR
,
word
);
ac97c_writel
(
chip
,
CAMR
,
word
);
/* Enable channel A event interrupt */
word
=
ac97c_readl
(
chip
,
IMR
);
word
|=
AC97C_SR_CAEVT
;
ac97c_writel
(
chip
,
IER
,
word
);
/* set variable rate if needed */
/* set variable rate if needed */
if
(
runtime
->
rate
!=
48000
)
{
if
(
runtime
->
rate
!=
48000
)
{
word
=
ac97c_readl
(
chip
,
MR
);
word
=
ac97c_readl
(
chip
,
MR
);
...
@@ -543,6 +571,43 @@ static struct snd_pcm_ops atmel_ac97_capture_ops = {
...
@@ -543,6 +571,43 @@ static struct snd_pcm_ops atmel_ac97_capture_ops = {
.
pointer
=
atmel_ac97c_capture_pointer
,
.
pointer
=
atmel_ac97c_capture_pointer
,
};
};
static
irqreturn_t
atmel_ac97c_interrupt
(
int
irq
,
void
*
dev
)
{
struct
atmel_ac97c
*
chip
=
(
struct
atmel_ac97c
*
)
dev
;
irqreturn_t
retval
=
IRQ_NONE
;
u32
sr
=
ac97c_readl
(
chip
,
SR
);
u32
casr
=
ac97c_readl
(
chip
,
CASR
);
u32
cosr
=
ac97c_readl
(
chip
,
COSR
);
if
(
sr
&
AC97C_SR_CAEVT
)
{
dev_info
(
&
chip
->
pdev
->
dev
,
"channel A event%s%s%s%s%s%s
\n
"
,
casr
&
AC97C_CSR_OVRUN
?
" OVRUN"
:
""
,
casr
&
AC97C_CSR_RXRDY
?
" RXRDY"
:
""
,
casr
&
AC97C_CSR_UNRUN
?
" UNRUN"
:
""
,
casr
&
AC97C_CSR_TXEMPTY
?
" TXEMPTY"
:
""
,
casr
&
AC97C_CSR_TXRDY
?
" TXRDY"
:
""
,
!
casr
?
" NONE"
:
""
);
retval
=
IRQ_HANDLED
;
}
if
(
sr
&
AC97C_SR_COEVT
)
{
dev_info
(
&
chip
->
pdev
->
dev
,
"codec channel event%s%s%s%s%s
\n
"
,
cosr
&
AC97C_CSR_OVRUN
?
" OVRUN"
:
""
,
cosr
&
AC97C_CSR_RXRDY
?
" RXRDY"
:
""
,
cosr
&
AC97C_CSR_TXEMPTY
?
" TXEMPTY"
:
""
,
cosr
&
AC97C_CSR_TXRDY
?
" TXRDY"
:
""
,
!
cosr
?
" NONE"
:
""
);
retval
=
IRQ_HANDLED
;
}
if
(
retval
==
IRQ_NONE
)
{
dev_err
(
&
chip
->
pdev
->
dev
,
"spurious interrupt sr 0x%08x "
"casr 0x%08x cosr 0x%08x
\n
"
,
sr
,
casr
,
cosr
);
}
return
retval
;
}
static
int
__devinit
atmel_ac97c_pcm_new
(
struct
atmel_ac97c
*
chip
)
static
int
__devinit
atmel_ac97c_pcm_new
(
struct
atmel_ac97c
*
chip
)
{
{
struct
snd_pcm
*
pcm
;
struct
snd_pcm
*
pcm
;
...
@@ -665,17 +730,17 @@ static bool filter(struct dma_chan *chan, void *slave)
...
@@ -665,17 +730,17 @@ static bool filter(struct dma_chan *chan, void *slave)
static
void
atmel_ac97c_reset
(
struct
atmel_ac97c
*
chip
)
static
void
atmel_ac97c_reset
(
struct
atmel_ac97c
*
chip
)
{
{
ac97c_writel
(
chip
,
MR
,
AC97C_MR_WRST
);
ac97c_writel
(
chip
,
MR
,
0
);
ac97c_writel
(
chip
,
MR
,
AC97C_MR_ENA
);
ac97c_writel
(
chip
,
CAMR
,
0
);
ac97c_writel
(
chip
,
COMR
,
0
);
if
(
gpio_is_valid
(
chip
->
reset_pin
))
{
if
(
gpio_is_valid
(
chip
->
reset_pin
))
{
gpio_set_value
(
chip
->
reset_pin
,
0
);
gpio_set_value
(
chip
->
reset_pin
,
0
);
/* AC97 v2.2 specifications says minimum 1 us. */
/* AC97 v2.2 specifications says minimum 1 us. */
udelay
(
10
);
udelay
(
2
);
gpio_set_value
(
chip
->
reset_pin
,
1
);
gpio_set_value
(
chip
->
reset_pin
,
1
);
}
}
udelay
(
1
);
ac97c_writel
(
chip
,
MR
,
AC97C_MR_ENA
);
}
}
static
int
__devinit
atmel_ac97c_probe
(
struct
platform_device
*
pdev
)
static
int
__devinit
atmel_ac97c_probe
(
struct
platform_device
*
pdev
)
...
@@ -690,6 +755,7 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
...
@@ -690,6 +755,7 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
.
read
=
atmel_ac97c_read
,
.
read
=
atmel_ac97c_read
,
};
};
int
retval
;
int
retval
;
int
irq
;
regs
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
regs
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
if
(
!
regs
)
{
if
(
!
regs
)
{
...
@@ -703,6 +769,12 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
...
@@ -703,6 +769,12 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
return
-
ENXIO
;
return
-
ENXIO
;
}
}
irq
=
platform_get_irq
(
pdev
,
0
);
if
(
irq
<
0
)
{
dev_dbg
(
&
pdev
->
dev
,
"could not get irq
\n
"
);
return
-
ENXIO
;
}
pclk
=
clk_get
(
&
pdev
->
dev
,
"pclk"
);
pclk
=
clk_get
(
&
pdev
->
dev
,
"pclk"
);
if
(
IS_ERR
(
pclk
))
{
if
(
IS_ERR
(
pclk
))
{
dev_dbg
(
&
pdev
->
dev
,
"no peripheral clock
\n
"
);
dev_dbg
(
&
pdev
->
dev
,
"no peripheral clock
\n
"
);
...
@@ -719,6 +791,13 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
...
@@ -719,6 +791,13 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
chip
=
get_chip
(
card
);
chip
=
get_chip
(
card
);
retval
=
request_irq
(
irq
,
atmel_ac97c_interrupt
,
0
,
"AC97C"
,
chip
);
if
(
retval
)
{
dev_dbg
(
&
pdev
->
dev
,
"unable to request irq %d
\n
"
,
irq
);
goto
err_request_irq
;
}
chip
->
irq
=
irq
;
spin_lock_init
(
&
chip
->
lock
);
spin_lock_init
(
&
chip
->
lock
);
strcpy
(
card
->
driver
,
"Atmel AC97C"
);
strcpy
(
card
->
driver
,
"Atmel AC97C"
);
...
@@ -747,14 +826,18 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
...
@@ -747,14 +826,18 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
snd_card_set_dev
(
card
,
&
pdev
->
dev
);
snd_card_set_dev
(
card
,
&
pdev
->
dev
);
atmel_ac97c_reset
(
chip
);
/* Enable overrun interrupt from codec channel */
ac97c_writel
(
chip
,
COMR
,
AC97C_CSR_OVRUN
);
ac97c_writel
(
chip
,
IER
,
ac97c_readl
(
chip
,
IMR
)
|
AC97C_SR_COEVT
);
retval
=
snd_ac97_bus
(
card
,
0
,
&
ops
,
chip
,
&
chip
->
ac97_bus
);
retval
=
snd_ac97_bus
(
card
,
0
,
&
ops
,
chip
,
&
chip
->
ac97_bus
);
if
(
retval
)
{
if
(
retval
)
{
dev_dbg
(
&
pdev
->
dev
,
"could not register on ac97 bus
\n
"
);
dev_dbg
(
&
pdev
->
dev
,
"could not register on ac97 bus
\n
"
);
goto
err_ac97_bus
;
goto
err_ac97_bus
;
}
}
atmel_ac97c_reset
(
chip
);
retval
=
atmel_ac97c_mixer_new
(
chip
);
retval
=
atmel_ac97c_mixer_new
(
chip
);
if
(
retval
)
{
if
(
retval
)
{
dev_dbg
(
&
pdev
->
dev
,
"could not register ac97 mixer
\n
"
);
dev_dbg
(
&
pdev
->
dev
,
"could not register ac97 mixer
\n
"
);
...
@@ -773,7 +856,7 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
...
@@ -773,7 +856,7 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
chip
->
dma
.
rx_chan
=
dma_request_channel
(
mask
,
filter
,
dws
);
chip
->
dma
.
rx_chan
=
dma_request_channel
(
mask
,
filter
,
dws
);
dev_info
(
&
chip
->
pdev
->
dev
,
"using %s for DMA RX
\n
"
,
dev_info
(
&
chip
->
pdev
->
dev
,
"using %s for DMA RX
\n
"
,
chip
->
dma
.
rx_chan
->
dev
->
device
.
bus_id
);
dev_name
(
&
chip
->
dma
.
rx_chan
->
dev
->
device
)
);
set_bit
(
DMA_RX_CHAN_PRESENT
,
&
chip
->
flags
);
set_bit
(
DMA_RX_CHAN_PRESENT
,
&
chip
->
flags
);
}
}
...
@@ -789,7 +872,7 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
...
@@ -789,7 +872,7 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
chip
->
dma
.
tx_chan
=
dma_request_channel
(
mask
,
filter
,
dws
);
chip
->
dma
.
tx_chan
=
dma_request_channel
(
mask
,
filter
,
dws
);
dev_info
(
&
chip
->
pdev
->
dev
,
"using %s for DMA TX
\n
"
,
dev_info
(
&
chip
->
pdev
->
dev
,
"using %s for DMA TX
\n
"
,
chip
->
dma
.
tx_chan
->
dev
->
device
.
bus_id
);
dev_name
(
&
chip
->
dma
.
tx_chan
->
dev
->
device
)
);
set_bit
(
DMA_TX_CHAN_PRESENT
,
&
chip
->
flags
);
set_bit
(
DMA_TX_CHAN_PRESENT
,
&
chip
->
flags
);
}
}
...
@@ -809,7 +892,7 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
...
@@ -809,7 +892,7 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
retval
=
snd_card_register
(
card
);
retval
=
snd_card_register
(
card
);
if
(
retval
)
{
if
(
retval
)
{
dev_dbg
(
&
pdev
->
dev
,
"could not register sound card
\n
"
);
dev_dbg
(
&
pdev
->
dev
,
"could not register sound card
\n
"
);
goto
err_
ac97_bus
;
goto
err_
dma
;
}
}
platform_set_drvdata
(
pdev
,
card
);
platform_set_drvdata
(
pdev
,
card
);
...
@@ -836,6 +919,8 @@ err_ac97_bus:
...
@@ -836,6 +919,8 @@ err_ac97_bus:
iounmap
(
chip
->
regs
);
iounmap
(
chip
->
regs
);
err_ioremap:
err_ioremap:
free_irq
(
irq
,
chip
);
err_request_irq:
snd_card_free
(
card
);
snd_card_free
(
card
);
err_snd_card_new:
err_snd_card_new:
clk_disable
(
pclk
);
clk_disable
(
pclk
);
...
@@ -884,9 +969,14 @@ static int __devexit atmel_ac97c_remove(struct platform_device *pdev)
...
@@ -884,9 +969,14 @@ static int __devexit atmel_ac97c_remove(struct platform_device *pdev)
if
(
gpio_is_valid
(
chip
->
reset_pin
))
if
(
gpio_is_valid
(
chip
->
reset_pin
))
gpio_free
(
chip
->
reset_pin
);
gpio_free
(
chip
->
reset_pin
);
ac97c_writel
(
chip
,
CAMR
,
0
);
ac97c_writel
(
chip
,
COMR
,
0
);
ac97c_writel
(
chip
,
MR
,
0
);
clk_disable
(
chip
->
pclk
);
clk_disable
(
chip
->
pclk
);
clk_put
(
chip
->
pclk
);
clk_put
(
chip
->
pclk
);
iounmap
(
chip
->
regs
);
iounmap
(
chip
->
regs
);
free_irq
(
chip
->
irq
,
chip
);
if
(
test_bit
(
DMA_RX_CHAN_PRESENT
,
&
chip
->
flags
))
if
(
test_bit
(
DMA_RX_CHAN_PRESENT
,
&
chip
->
flags
))
dma_release_channel
(
chip
->
dma
.
rx_chan
);
dma_release_channel
(
chip
->
dma
.
rx_chan
);
...
...
sound/atmel/ac97c.h
View file @
5f9c510e
/*
/*
* Register definitions for
the Atmel AC97C controller
* Register definitions for
Atmel AC97C
*
*
* Copyright (C) 2005-2009 Atmel Corporation
* Copyright (C) 2005-2009 Atmel Corporation
*
*
...
@@ -17,10 +17,6 @@
...
@@ -17,10 +17,6 @@
#define AC97C_CATHR 0x24
#define AC97C_CATHR 0x24
#define AC97C_CASR 0x28
#define AC97C_CASR 0x28
#define AC97C_CAMR 0x2c
#define AC97C_CAMR 0x2c
#define AC97C_CBRHR 0x30
#define AC97C_CBTHR 0x34
#define AC97C_CBSR 0x38
#define AC97C_CBMR 0x3c
#define AC97C_CORHR 0x40
#define AC97C_CORHR 0x40
#define AC97C_COTHR 0x44
#define AC97C_COTHR 0x44
#define AC97C_COSR 0x48
#define AC97C_COSR 0x48
...
@@ -46,8 +42,10 @@
...
@@ -46,8 +42,10 @@
#define AC97C_MR_VRA (1 << 2)
#define AC97C_MR_VRA (1 << 2)
#define AC97C_CSR_TXRDY (1 << 0)
#define AC97C_CSR_TXRDY (1 << 0)
#define AC97C_CSR_TXEMPTY (1 << 1)
#define AC97C_CSR_UNRUN (1 << 2)
#define AC97C_CSR_UNRUN (1 << 2)
#define AC97C_CSR_RXRDY (1 << 4)
#define AC97C_CSR_RXRDY (1 << 4)
#define AC97C_CSR_OVRUN (1 << 5)
#define AC97C_CSR_ENDTX (1 << 10)
#define AC97C_CSR_ENDTX (1 << 10)
#define AC97C_CSR_ENDRX (1 << 14)
#define AC97C_CSR_ENDRX (1 << 14)
...
@@ -61,11 +59,15 @@
...
@@ -61,11 +59,15 @@
#define AC97C_CMR_DMAEN (1 << 22)
#define AC97C_CMR_DMAEN (1 << 22)
#define AC97C_SR_CAEVT (1 << 3)
#define AC97C_SR_CAEVT (1 << 3)
#define AC97C_SR_COEVT (1 << 2)
#define AC97C_SR_WKUP (1 << 1)
#define AC97C_SR_SOF (1 << 0)
#define AC97C_CH_MASK(slot) \
(0x7 << (3 * (AC97_SLOT_##slot - 3)))
#define AC97C_CH_ASSIGN(slot, channel) \
#define AC97C_CH_ASSIGN(slot, channel) \
(AC97C_CHANNEL_##channel << (3 * (AC97_SLOT_##slot - 3)))
(AC97C_CHANNEL_##channel << (3 * (AC97_SLOT_##slot - 3)))
#define AC97C_CHANNEL_NONE 0x0
#define AC97C_CHANNEL_NONE 0x0
#define AC97C_CHANNEL_A 0x1
#define AC97C_CHANNEL_A 0x1
#define AC97C_CHANNEL_B 0x2
#endif
/* __SOUND_ATMEL_AC97C_H */
#endif
/* __SOUND_ATMEL_AC97C_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment