Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92726167
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-05-23 11:39:50

作者:sdecat  出自:
之前搞了块BlackGold II Cannon的声卡,感觉音质不错。后来由于岛谷的倒闭,声卡的驱动就没有人继续维护了。岛谷之前曾发布过一个linux下的驱动,可就是基于2.4内核的,在2.6上没法编译通过。自从升级到2.6内核后,cannon就一直没有发过声。今天装上ubuntu8.04,启动是无意中看到发现启动信息中检测到了CS46xx的芯片并加载了相关的驱动程序,心里一阵狂喜,这回应该有戏了吧!

可现实总是那么残酷,系统启动后折腾半天,音箱吱都没吱一声,faint~!白高兴了一场。奇怪,一样的芯片怎么cannon就这么难伺候呢?静来分析一下:cannon的不可完全抛开CS4630芯片的公版来设计的,系统能顺利检测到CS46xx芯片并成功加载驱动程序就证明了这一点。那到底是什么原因导致声音发不出来呢。瞑思之中,突然想起声卡之前在windows启动过程中的一个细节,驱动加载后,机箱里会发出嗒的一声,系统关闭的时候同样也有这个声音,那个是声卡上继电器吸合的声音,而ubuntu加载完驱动后,不曾有过这个声音。如果估计没错的话,现在的情况是万事俱备,就欠东风了,ubuntu的驱动程序已经正确把cannon驱动起来了,就是由于继电器没有闭合,声音没法送出来,现在只要想办法让继电器闭合就万事大吉了!如何让继电器闭合呢?岛谷之前曾发布过一个linux下驱动代码中应该能找到些线索。果然,在cs46xx_lib.c中发现下面这段代码:cannon应该就是使用CS4630的GPIO管脚来控制继电器的吸合的,把这段代码添加到系统内核代码树的sound/pci/cs46xx/cs46xx_lib.c中,并把cs46xx_t改成struct snd_cs46xx
CODE:
/*
* BlackGold II 5.1 Cannon card - EGPIO is used to enable the external amp.
*/
static void amp_cannon(cs46xx_t *chip, int change)
{
int old = chip->amplifier;
int val1 = snd_cs46xx_peekBA0(chip, BA0_EGPIOSR);

int mask = 0x0;

chip->amplifier += change;
if (chip->amplifier && !old)
{
snd_printdd ("BlackGold II 5.1 Cannon amplifier ON\n");

snd_cs46xx_pokeBA0(chip, BA0_EGPIODR, 0x1ff); /* enable all EGPIO output */
snd_cs46xx_pokeBA0(chip, BA0_EGPIOPTR,0x0 ); /* open-drain on output */
snd_cs46xx_pokeBA0(chip, BA0_EGPIOSR, (val1 & mask) | 0x1fb ); /* status on output */

} else if (old && !chip->amplifier) {
snd_printdd ("BlackGold II 5.1 Cannon amplifier OFF\n");
snd_cs46xx_pokeBA0(chip, BA0_EGPIOSR, (val1 & mask) | 0x0 ); /* disable */
}
}

再把岛谷驱动中的这个部分加到系统内核树的cs46xx_lib.c的结构static struct cs_card_type __devinitdata cards[]的末尾
CODE:
{
.vendor = 0x0425,
.id = 0x0634,
.name = "BlackGold II 5.1 Cannon",
.amp = amp_cannon,
//.mixer_init = BlackGold_mixer_init,
},

重新编译和安装内核和模块,使用新的内核启动,呵呵,这回终于听到了久违的cannon的声音了。
阅读(359) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~