Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
60c4e7c1
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
152
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
60c4e7c1
编写于
3月 24, 2009
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'topic/ice' into for-linus
上级
593aff6c
e2ea7cfc
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
54 addition
and
26 deletion
+54
-26
sound/pci/ice1712/ice1712.c
sound/pci/ice1712/ice1712.c
+1
-1
sound/pci/ice1712/ice1724.c
sound/pci/ice1712/ice1724.c
+41
-19
sound/pci/ice1712/juli.c
sound/pci/ice1712/juli.c
+3
-2
sound/pci/ice1712/prodigy192.c
sound/pci/ice1712/prodigy192.c
+9
-4
未找到文件。
sound/pci/ice1712/ice1712.c
浏览文件 @
60c4e7c1
...
@@ -458,7 +458,7 @@ static irqreturn_t snd_ice1712_interrupt(int irq, void *dev_id)
...
@@ -458,7 +458,7 @@ static irqreturn_t snd_ice1712_interrupt(int irq, void *dev_id)
u16
pbkstatus
;
u16
pbkstatus
;
struct
snd_pcm_substream
*
substream
;
struct
snd_pcm_substream
*
substream
;
pbkstatus
=
inw
(
ICEDS
(
ice
,
INTSTAT
));
pbkstatus
=
inw
(
ICEDS
(
ice
,
INTSTAT
));
/* printk("pbkstatus = 0x%x\n", pbkstatus); */
/* printk(
KERN_DEBUG
"pbkstatus = 0x%x\n", pbkstatus); */
for
(
idx
=
0
;
idx
<
6
;
idx
++
)
{
for
(
idx
=
0
;
idx
<
6
;
idx
++
)
{
if
((
pbkstatus
&
(
3
<<
(
idx
*
2
)))
==
0
)
if
((
pbkstatus
&
(
3
<<
(
idx
*
2
)))
==
0
)
continue
;
continue
;
...
...
sound/pci/ice1712/ice1724.c
浏览文件 @
60c4e7c1
...
@@ -241,6 +241,8 @@ get_rawmidi_substream(struct snd_ice1712 *ice, unsigned int stream)
...
@@ -241,6 +241,8 @@ get_rawmidi_substream(struct snd_ice1712 *ice, unsigned int stream)
struct
snd_rawmidi_substream
,
list
);
struct
snd_rawmidi_substream
,
list
);
}
}
static
void
enable_midi_irq
(
struct
snd_ice1712
*
ice
,
u8
flag
,
int
enable
);
static
void
vt1724_midi_write
(
struct
snd_ice1712
*
ice
)
static
void
vt1724_midi_write
(
struct
snd_ice1712
*
ice
)
{
{
struct
snd_rawmidi_substream
*
s
;
struct
snd_rawmidi_substream
*
s
;
...
@@ -254,6 +256,11 @@ static void vt1724_midi_write(struct snd_ice1712 *ice)
...
@@ -254,6 +256,11 @@ static void vt1724_midi_write(struct snd_ice1712 *ice)
for
(
i
=
0
;
i
<
count
;
++
i
)
for
(
i
=
0
;
i
<
count
;
++
i
)
outb
(
buffer
[
i
],
ICEREG1724
(
ice
,
MPU_DATA
));
outb
(
buffer
[
i
],
ICEREG1724
(
ice
,
MPU_DATA
));
}
}
/* mask irq when all bytes have been transmitted.
* enabled again in output_trigger when the new data comes in.
*/
enable_midi_irq
(
ice
,
VT1724_IRQ_MPU_TX
,
!
snd_rawmidi_transmit_empty
(
s
));
}
}
static
void
vt1724_midi_read
(
struct
snd_ice1712
*
ice
)
static
void
vt1724_midi_read
(
struct
snd_ice1712
*
ice
)
...
@@ -272,31 +279,34 @@ static void vt1724_midi_read(struct snd_ice1712 *ice)
...
@@ -272,31 +279,34 @@ static void vt1724_midi_read(struct snd_ice1712 *ice)
}
}
}
}
static
void
vt1724_enable_midi_irq
(
struct
snd_rawmidi_substream
*
substream
,
/* call with ice->reg_lock */
u8
flag
,
int
enable
)
static
void
enable_midi_irq
(
struct
snd_ice1712
*
ice
,
u8
flag
,
int
enable
)
{
{
struct
snd_ice1712
*
ice
=
substream
->
rmidi
->
private_data
;
u8
mask
=
inb
(
ICEREG1724
(
ice
,
IRQMASK
));
u8
mask
;
spin_lock_irq
(
&
ice
->
reg_lock
);
mask
=
inb
(
ICEREG1724
(
ice
,
IRQMASK
));
if
(
enable
)
if
(
enable
)
mask
&=
~
flag
;
mask
&=
~
flag
;
else
else
mask
|=
flag
;
mask
|=
flag
;
outb
(
mask
,
ICEREG1724
(
ice
,
IRQMASK
));
outb
(
mask
,
ICEREG1724
(
ice
,
IRQMASK
));
}
static
void
vt1724_enable_midi_irq
(
struct
snd_rawmidi_substream
*
substream
,
u8
flag
,
int
enable
)
{
struct
snd_ice1712
*
ice
=
substream
->
rmidi
->
private_data
;
spin_lock_irq
(
&
ice
->
reg_lock
);
enable_midi_irq
(
ice
,
flag
,
enable
);
spin_unlock_irq
(
&
ice
->
reg_lock
);
spin_unlock_irq
(
&
ice
->
reg_lock
);
}
}
static
int
vt1724_midi_output_open
(
struct
snd_rawmidi_substream
*
s
)
static
int
vt1724_midi_output_open
(
struct
snd_rawmidi_substream
*
s
)
{
{
vt1724_enable_midi_irq
(
s
,
VT1724_IRQ_MPU_TX
,
1
);
return
0
;
return
0
;
}
}
static
int
vt1724_midi_output_close
(
struct
snd_rawmidi_substream
*
s
)
static
int
vt1724_midi_output_close
(
struct
snd_rawmidi_substream
*
s
)
{
{
vt1724_enable_midi_irq
(
s
,
VT1724_IRQ_MPU_TX
,
0
);
return
0
;
return
0
;
}
}
...
@@ -311,6 +321,7 @@ static void vt1724_midi_output_trigger(struct snd_rawmidi_substream *s, int up)
...
@@ -311,6 +321,7 @@ static void vt1724_midi_output_trigger(struct snd_rawmidi_substream *s, int up)
vt1724_midi_write
(
ice
);
vt1724_midi_write
(
ice
);
}
else
{
}
else
{
ice
->
midi_output
=
0
;
ice
->
midi_output
=
0
;
enable_midi_irq
(
ice
,
VT1724_IRQ_MPU_TX
,
0
);
}
}
spin_unlock_irqrestore
(
&
ice
->
reg_lock
,
flags
);
spin_unlock_irqrestore
(
&
ice
->
reg_lock
,
flags
);
}
}
...
@@ -320,6 +331,7 @@ static void vt1724_midi_output_drain(struct snd_rawmidi_substream *s)
...
@@ -320,6 +331,7 @@ static void vt1724_midi_output_drain(struct snd_rawmidi_substream *s)
struct
snd_ice1712
*
ice
=
s
->
rmidi
->
private_data
;
struct
snd_ice1712
*
ice
=
s
->
rmidi
->
private_data
;
unsigned
long
timeout
;
unsigned
long
timeout
;
vt1724_enable_midi_irq
(
s
,
VT1724_IRQ_MPU_TX
,
0
);
/* 32 bytes should be transmitted in less than about 12 ms */
/* 32 bytes should be transmitted in less than about 12 ms */
timeout
=
jiffies
+
msecs_to_jiffies
(
15
);
timeout
=
jiffies
+
msecs_to_jiffies
(
15
);
do
{
do
{
...
@@ -389,24 +401,24 @@ static irqreturn_t snd_vt1724_interrupt(int irq, void *dev_id)
...
@@ -389,24 +401,24 @@ static irqreturn_t snd_vt1724_interrupt(int irq, void *dev_id)
status
&=
status_mask
;
status
&=
status_mask
;
if
(
status
==
0
)
if
(
status
==
0
)
break
;
break
;
spin_lock
(
&
ice
->
reg_lock
);
if
(
++
timeout
>
10
)
{
if
(
++
timeout
>
10
)
{
status
=
inb
(
ICEREG1724
(
ice
,
IRQSTAT
));
status
=
inb
(
ICEREG1724
(
ice
,
IRQSTAT
));
printk
(
KERN_ERR
"ice1724: Too long irq loop, "
printk
(
KERN_ERR
"ice1724: Too long irq loop, "
"status = 0x%x
\n
"
,
status
);
"status = 0x%x
\n
"
,
status
);
if
(
status
&
VT1724_IRQ_MPU_TX
)
{
if
(
status
&
VT1724_IRQ_MPU_TX
)
{
printk
(
KERN_ERR
"ice1724: Disabling MPU_TX
\n
"
);
printk
(
KERN_ERR
"ice1724: Disabling MPU_TX
\n
"
);
outb
(
inb
(
ICEREG1724
(
ice
,
IRQMASK
))
|
enable_midi_irq
(
ice
,
VT1724_IRQ_MPU_TX
,
0
);
VT1724_IRQ_MPU_TX
,
ICEREG1724
(
ice
,
IRQMASK
));
}
}
spin_unlock
(
&
ice
->
reg_lock
);
break
;
break
;
}
}
handled
=
1
;
handled
=
1
;
if
(
status
&
VT1724_IRQ_MPU_TX
)
{
if
(
status
&
VT1724_IRQ_MPU_TX
)
{
spin_lock
(
&
ice
->
reg_lock
);
if
(
ice
->
midi_output
)
if
(
ice
->
midi_output
)
vt1724_midi_write
(
ice
);
vt1724_midi_write
(
ice
);
spin_unlock
(
&
ice
->
reg_lock
);
else
enable_midi_irq
(
ice
,
VT1724_IRQ_MPU_TX
,
0
);
/* Due to mysterical reasons, MPU_TX is always
/* Due to mysterical reasons, MPU_TX is always
* generated (and can't be cleared) when a PCM
* generated (and can't be cleared) when a PCM
* playback is going. So let's ignore at the
* playback is going. So let's ignore at the
...
@@ -415,15 +427,14 @@ static irqreturn_t snd_vt1724_interrupt(int irq, void *dev_id)
...
@@ -415,15 +427,14 @@ static irqreturn_t snd_vt1724_interrupt(int irq, void *dev_id)
status_mask
&=
~
VT1724_IRQ_MPU_TX
;
status_mask
&=
~
VT1724_IRQ_MPU_TX
;
}
}
if
(
status
&
VT1724_IRQ_MPU_RX
)
{
if
(
status
&
VT1724_IRQ_MPU_RX
)
{
spin_lock
(
&
ice
->
reg_lock
);
if
(
ice
->
midi_input
)
if
(
ice
->
midi_input
)
vt1724_midi_read
(
ice
);
vt1724_midi_read
(
ice
);
else
else
vt1724_midi_clear_rx
(
ice
);
vt1724_midi_clear_rx
(
ice
);
spin_unlock
(
&
ice
->
reg_lock
);
}
}
/* ack MPU irq */
/* ack MPU irq */
outb
(
status
,
ICEREG1724
(
ice
,
IRQSTAT
));
outb
(
status
,
ICEREG1724
(
ice
,
IRQSTAT
));
spin_unlock
(
&
ice
->
reg_lock
);
if
(
status
&
VT1724_IRQ_MTPCM
)
{
if
(
status
&
VT1724_IRQ_MTPCM
)
{
/*
/*
* Multi-track PCM
* Multi-track PCM
...
@@ -745,7 +756,14 @@ static int snd_vt1724_playback_pro_prepare(struct snd_pcm_substream *substream)
...
@@ -745,7 +756,14 @@ static int snd_vt1724_playback_pro_prepare(struct snd_pcm_substream *substream)
spin_unlock_irq
(
&
ice
->
reg_lock
);
spin_unlock_irq
(
&
ice
->
reg_lock
);
/* printk("pro prepare: ch = %d, addr = 0x%x, buffer = 0x%x, period = 0x%x\n", substream->runtime->channels, (unsigned int)substream->runtime->dma_addr, snd_pcm_lib_buffer_bytes(substream), snd_pcm_lib_period_bytes(substream)); */
/*
printk(KERN_DEBUG "pro prepare: ch = %d, addr = 0x%x, "
"buffer = 0x%x, period = 0x%x\n",
substream->runtime->channels,
(unsigned int)substream->runtime->dma_addr,
snd_pcm_lib_buffer_bytes(substream),
snd_pcm_lib_period_bytes(substream));
*/
return
0
;
return
0
;
}
}
...
@@ -2122,7 +2140,9 @@ unsigned char snd_vt1724_read_i2c(struct snd_ice1712 *ice,
...
@@ -2122,7 +2140,9 @@ unsigned char snd_vt1724_read_i2c(struct snd_ice1712 *ice,
wait_i2c_busy
(
ice
);
wait_i2c_busy
(
ice
);
val
=
inb
(
ICEREG1724
(
ice
,
I2C_DATA
));
val
=
inb
(
ICEREG1724
(
ice
,
I2C_DATA
));
mutex_unlock
(
&
ice
->
i2c_mutex
);
mutex_unlock
(
&
ice
->
i2c_mutex
);
/* printk("i2c_read: [0x%x,0x%x] = 0x%x\n", dev, addr, val); */
/*
printk(KERN_DEBUG "i2c_read: [0x%x,0x%x] = 0x%x\n", dev, addr, val);
*/
return
val
;
return
val
;
}
}
...
@@ -2131,7 +2151,9 @@ void snd_vt1724_write_i2c(struct snd_ice1712 *ice,
...
@@ -2131,7 +2151,9 @@ void snd_vt1724_write_i2c(struct snd_ice1712 *ice,
{
{
mutex_lock
(
&
ice
->
i2c_mutex
);
mutex_lock
(
&
ice
->
i2c_mutex
);
wait_i2c_busy
(
ice
);
wait_i2c_busy
(
ice
);
/* printk("i2c_write: [0x%x,0x%x] = 0x%x\n", dev, addr, data); */
/*
printk(KERN_DEBUG "i2c_write: [0x%x,0x%x] = 0x%x\n", dev, addr, data);
*/
outb
(
addr
,
ICEREG1724
(
ice
,
I2C_BYTE_ADDR
));
outb
(
addr
,
ICEREG1724
(
ice
,
I2C_BYTE_ADDR
));
outb
(
data
,
ICEREG1724
(
ice
,
I2C_DATA
));
outb
(
data
,
ICEREG1724
(
ice
,
I2C_DATA
));
outb
(
dev
|
VT1724_I2C_WRITE
,
ICEREG1724
(
ice
,
I2C_DEV_ADDR
));
outb
(
dev
|
VT1724_I2C_WRITE
,
ICEREG1724
(
ice
,
I2C_DEV_ADDR
));
...
...
sound/pci/ice1712/juli.c
浏览文件 @
60c4e7c1
...
@@ -345,8 +345,9 @@ static int juli_mute_put(struct snd_kcontrol *kcontrol,
...
@@ -345,8 +345,9 @@ static int juli_mute_put(struct snd_kcontrol *kcontrol,
new_gpio
=
old_gpio
&
new_gpio
=
old_gpio
&
~
((
unsigned
int
)
kcontrol
->
private_value
);
~
((
unsigned
int
)
kcontrol
->
private_value
);
}
}
/* printk("JULI - mute/unmute: control_value: 0x%x, old_gpio: 0x%x, \
/* printk(KERN_DEBUG
new_gpio 0x%x\n",
"JULI - mute/unmute: control_value: 0x%x, old_gpio: 0x%x, "
"new_gpio 0x%x\n",
(unsigned int)ucontrol->value.integer.value[0], old_gpio,
(unsigned int)ucontrol->value.integer.value[0], old_gpio,
new_gpio); */
new_gpio); */
if
(
old_gpio
!=
new_gpio
)
{
if
(
old_gpio
!=
new_gpio
)
{
...
...
sound/pci/ice1712/prodigy192.c
浏览文件 @
60c4e7c1
...
@@ -133,8 +133,10 @@ static int stac9460_dac_mute_put(struct snd_kcontrol *kcontrol, struct snd_ctl_e
...
@@ -133,8 +133,10 @@ static int stac9460_dac_mute_put(struct snd_kcontrol *kcontrol, struct snd_ctl_e
idx
=
snd_ctl_get_ioffidx
(
kcontrol
,
&
ucontrol
->
id
)
+
STAC946X_LF_VOLUME
;
idx
=
snd_ctl_get_ioffidx
(
kcontrol
,
&
ucontrol
->
id
)
+
STAC946X_LF_VOLUME
;
/* due to possible conflicts with stac9460_set_rate_val, mutexing */
/* due to possible conflicts with stac9460_set_rate_val, mutexing */
mutex_lock
(
&
spec
->
mute_mutex
);
mutex_lock
(
&
spec
->
mute_mutex
);
/*printk("Mute put: reg 0x%02x, ctrl value: 0x%02x\n", idx,
/*
ucontrol->value.integer.value[0]);*/
printk(KERN_DEBUG "Mute put: reg 0x%02x, ctrl value: 0x%02x\n", idx,
ucontrol->value.integer.value[0]);
*/
change
=
stac9460_dac_mute
(
ice
,
idx
,
ucontrol
->
value
.
integer
.
value
[
0
]);
change
=
stac9460_dac_mute
(
ice
,
idx
,
ucontrol
->
value
.
integer
.
value
[
0
]);
mutex_unlock
(
&
spec
->
mute_mutex
);
mutex_unlock
(
&
spec
->
mute_mutex
);
return
change
;
return
change
;
...
@@ -185,7 +187,10 @@ static int stac9460_dac_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl_el
...
@@ -185,7 +187,10 @@ static int stac9460_dac_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl_el
change
=
(
ovol
!=
nvol
);
change
=
(
ovol
!=
nvol
);
if
(
change
)
{
if
(
change
)
{
ovol
=
(
0x7f
-
nvol
)
|
(
tmp
&
0x80
);
ovol
=
(
0x7f
-
nvol
)
|
(
tmp
&
0x80
);
/*printk("DAC Volume: reg 0x%02x: 0x%02x\n", idx, ovol);*/
/*
printk(KERN_DEBUG "DAC Volume: reg 0x%02x: 0x%02x\n",
idx, ovol);
*/
stac9460_put
(
ice
,
idx
,
(
0x7f
-
nvol
)
|
(
tmp
&
0x80
));
stac9460_put
(
ice
,
idx
,
(
0x7f
-
nvol
)
|
(
tmp
&
0x80
));
}
}
return
change
;
return
change
;
...
@@ -344,7 +349,7 @@ static void stac9460_set_rate_val(struct snd_ice1712 *ice, unsigned int rate)
...
@@ -344,7 +349,7 @@ static void stac9460_set_rate_val(struct snd_ice1712 *ice, unsigned int rate)
for
(
idx
=
0
;
idx
<
7
;
++
idx
)
for
(
idx
=
0
;
idx
<
7
;
++
idx
)
changed
[
idx
]
=
stac9460_dac_mute
(
ice
,
changed
[
idx
]
=
stac9460_dac_mute
(
ice
,
STAC946X_MASTER_VOLUME
+
idx
,
0
);
STAC946X_MASTER_VOLUME
+
idx
,
0
);
/*printk("Rate change: %d, new MC: 0x%02x\n", rate, new);*/
/*printk(
KERN_DEBUG
"Rate change: %d, new MC: 0x%02x\n", rate, new);*/
stac9460_put
(
ice
,
STAC946X_MASTER_CLOCKING
,
new
);
stac9460_put
(
ice
,
STAC946X_MASTER_CLOCKING
,
new
);
udelay
(
10
);
udelay
(
10
);
/* unmuting - only originally unmuted dacs -
/* unmuting - only originally unmuted dacs -
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录