免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2063 | 回复: 1
打印 上一主题 下一主题

[驱动] linux3.1移植到s3c2416所出现声卡问题 [复制链接]

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-03-13 15:26:06CU大牛徽章
日期:2013-03-13 15:26:47
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-20 14:55 |只看该作者 |倒序浏览
问题六:声卡没有声音:
原因没有声卡驱动,WM9713声卡驱动移植(原来的内核有UDA1341声卡驱动,我们再次基础上直接修改)
首先查看内核/sound/soc/samsung/kconfig  配上WM9713
config SND_SOC_SAMSUNG_SMDK_WM9713
tristate "SoC AC97 Audio support for SMDK with WM9713"
## depends on SND_SOC_SAMSUNG && (MACH_SMDK6410 || MACH_SMDKC100 || MACH_SMDKV210 || ##MACH_SMDKC110 || MACH_SMDKV310 || MACH_SMDKC210) #屏蔽掉
        depends on SND_SOC_SAMSUNG && ARCH_S3C24XX  ##add by ljf
select SND_SOC_WM9713
select SND_SAMSUNG_AC97
help
Sat Y if you want to add support for SoC audio on the SMDK.
这样在内核中“make menuconfig”里面就可以看到"SoC AC97 Audio support for SMDK with WM9713",并选中他。
接下来我们要在内核中加入这个平台驱动设备:
在“arch/arm/mach-s3c2416/”的mach-tq2416.c中添加:
//add by ljf
/*
* AC97
*/
//at plat-s3c24xx/devs.c
static int s3c2416_ac97_cfg_gpio(struct platform_device *pdev)
{
return s3c_gpio_cfgpin_range(S3C2410_GPE(0), 5, S3C_GPIO_SFN(3));//S3C_GPIO_SFN(4)
}
static struct resource s3c_ac97_resource[] = {
[0] = {
.start = S3C2440_PA_AC97,
.end   = S3C2440_PA_AC97 + S3C2440_SZ_AC97 -1,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = IRQ_S3C244x_AC97,
.end   = IRQ_S3C244x_AC97,
.flags = IORESOURCE_IRQ,
},
[2] = {
.name  = "PCM out",
.start = DMACH_PCM_OUT,
.end   = DMACH_PCM_OUT,
.flags = IORESOURCE_DMA,
},
[3] = {
.name  = "PCM in",
.start = DMACH_PCM_IN,
.end   = DMACH_PCM_IN,
.flags = IORESOURCE_DMA,
},
[4] = {
.name  = "Mic in",
.start = DMACH_MIC_IN,
.end   = DMACH_MIC_IN,
.flags = IORESOURCE_DMA,
},
};
static struct s3c_audio_pdata s3c_ac97_pdata = {
.cfg_gpio = s3c2416_ac97_cfg_gpio,
};

static u64 s3c_device_audio_dmamask = DMA_BIT_MASK(32);//0xffffffffUL;//will change

struct platform_device s3c_device_ac97 = {
.name           = "samsung-ac97",//wm9713-codec
.id           = -1,
.num_resources          = ARRAY_SIZE(s3c_ac97_resource),
.resource          = s3c_ac97_resource,
.dev              = {
.platform_data = &s3c_ac97_pdata,
.dma_mask = &s3c_device_audio_dmamask,
.coherent_dma_mask = DMA_BIT_MASK(32)//;0xffffffffUL//will change
}
};
//add by ljf
然后在“struct platform_device *tq2416_devices[] __initdata”中加入
//add by ljf
#ifdef CONFIG_SND_SOC_SAMSUNG_SMDK_WM9713
&s3c_device_ac97,
&samsung_asoc_dma,
#endif
//add by ljf
然后编译、烧写。内核打印信息有
asoc: wm9713-hifi <-> samsung-ac97 mapping ok
ALSA device list:
  #0: SMDK WM9713
但是用qtpia自带的音乐播放器,播放出来没声音,时间进度条却有在移动,时间到了也会停止,就是没声音。
在串口终端输入指令“cat /udisk/Too.mp3 > /dev/dsp”也没听到任何声音
用madplay命令播放时会出错
[root@LILLIPUT /]# madplay /udisk/Too\ Close.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.
          Title: Too Close
         Artist: Alex Clare
          Album: The Lateness of the Hour (Deluxe Edition)
           Year: 2011
error: frame 0: lost synchronization
mapped channel 12 to 0

换一首:
[root@LILLIPUT /]# madplay /udisk/Tulisa\ -\ Young.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.
          Title: Young
         Artist: Tulisa
          Album: We Are Young
mapped channel 12 to 0
就是没声音,不知道怎么解决。

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-03-13 15:26:06CU大牛徽章
日期:2013-03-13 15:26:47
2 [报告]
发表于 2013-11-21 14:02 |只看该作者
解决了。
方法如下:
原因:
由于在ac97初始化的时候,没有设置wm9713相关为喇叭输出功能。
解决:
在\sound\soc\samsung\Ac97.c
static struct snd_soc_dai_ops s3c_ac97_dai_ops结构体添加:
.prepare  = earphone_out,(初始化函数)
实现该函数(写在s3c_ac97_dai_ops结构体上面就行了):
int earphone_out(struct snd_pcm_substream *substream,struct snd_soc_dai *dai)
{
struct snd_ac97 *ac97;
ac97 = 0;
s3c_ac97_write(ac97,0x26,0x0);
s3c_ac97_write(ac97, 0x0c, 0x080;
s3c_ac97_write(ac97,0x3c, 0xf803);
s3c_ac97_write(ac97,0x3e,0xb990);
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
//s3c6400_ac97_write(0,0x02, 0x8080);
s3c_ac97_write(ac97,0x02, 0x0404);
s3c_ac97_write(ac97, 0x04, 0x0606);
//s3c6400_ac97_write(0,0x1c, 0x00aa);
s3c_ac97_write(ac97,0x1c, 0x12aa);
}
else
{
s3c_ac97_write(ac97, 0x12, 0x0f0f);
#ifdef CONFIG_SOUND_WM9713_INPUT_STREAM_MIC
s3c_ac97_write(ac97,0x5c,0x2);
s3c_ac97_write(ac97,0x10,0x6;
s3c_ac97_write(ac97,0x14,0xfe00);
#else /* Input Stream is LINE-IN */
s3c_ac97_write(ac97, 0x14, 0xd612);
#endif
}
return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP