设为首页 加入收藏

TOP

十七、S3C2440 音频解码芯片WM8976声卡驱动移植、madplay测试(四)
2019-09-01 23:08:19 】 浏览:119
Tags:十七 S3C2440 音频 解码 芯片 WM8976 声卡驱动 移植 madplay 测试
6f
); 14 15 wm8976_write_reg(0x1, 0x1f);//biasen,BUFIOEN.VMIDSEL=11b 16 wm8976_write_reg(0x2, 0x185);//ROUT1EN LOUT1EN, inpu PGA enable ,ADC enable 17 18 wm8976_write_reg(0x6, 0x0);//SYSCLK=MCLK 19 wm8976_write_reg(0x4, 0x10);//16bit 20 wm8976_write_reg(0x2B,0x10);//BTL OUTPUT 21 wm8976_write_reg(0x9, 0x50);//Jack detect enable 22 wm8976_write_reg(0xD, 0x21);//Jack detect 23 wm8976_write_reg(0x7, 0x01);//Jack detect 24 }

 3)由于wm8976的控制接口和时序图与uda1341不一样,所以需要根据芯片手册修改mixer的file_operations->ioctl函数

 1 static int smdk2410_mixer_ioctl(struct inode *inode, struct file *file,
 2                 unsigned int cmd, unsigned long arg)
 3 {
 4     int ret;
 5     long val = 0;
 6 
 7     switch (cmd) {
 8         case SOUND_MIXER_INFO:
 9         {
10             mixer_info info;
11             strncpy(info.id, "UDA1341", sizeof(info.id));
12             strncpy(info.name,"Philips UDA1341", sizeof(info.name));
13             info.modify_counter = audio_mix_modcnt;
14             return copy_to_user((void *)arg, &info, sizeof(info));
15         }
16 
17         case SOUND_OLD_MIXER_INFO:
18         {
19             _old_mixer_info info;
20             strncpy(info.id, "UDA1341", sizeof(info.id));
21             strncpy(info.name,"Philips UDA1341", sizeof(info.name));
22             return copy_to_user((void *)arg, &info, sizeof(info));
23         }
24 
25         case SOUND_MIXER_READ_STEREODEVS:
26             return put_user(0, (long *) arg);
27 
28         case SOUND_MIXER_READ_CAPS:
29             val = SOUND_CAP_EXCL_INPUT;
30             return put_user(val, (long *) arg);
31 
32         case SOUND_MIXER_WRITE_VOLUME:
33             ret = get_user(val, (long *) arg);
34             if (ret)
35                 return ret;
36 
37             /* ioctl: val越大表示音量越大, 0-最小, 100-最大
38              * UDA1341: 寄存器的值越小音量越大
39              * WM8976: 52,53号寄存器bit[5:0]表示音量, 值越大音量越大, 0-63
40              */
41             
42             uda1341_volume = (((val & 0xff) + 1) * 63) / 100;
43             wm8976_write_reg(52, (1<<8)|uda1341_volume);
44             wm8976_write_reg(53, (1<<8)|uda1341_volume);
45             //uda1341_l3_address(UDA1341_REG_DATA0);
46             //uda1341_l3_data(uda1341_volume);
47             break;
48 
49         case SOUND_MIXER_READ_VOLUME:
50             val = (uda1341_volume * 100) / 63;
51             return put_user(val, (long *) arg);
52 
53         case SOUND_MIXER_READ_IGAIN:
54             val = ((31- mixer_igain) * 100) / 31;
55             return put_user(val, (int *) arg);
56 
57         case SOUND_MIXER_WRITE_IGAIN:
58             ret = get_user(val, (int *) arg);
59             if (ret)
60                 return ret;
61             mixer_igain = 31 - (val * 31 / 100);
62             /* use mixer gain channel 1*/
63             //uda1341_l3_address(UDA1341_REG_DATA0);
64             //uda1341_l3_data(EXTADDR(EXT0));
65             //uda1341_l3_data(EXTDATA(EXT0_CH1_GAIN(mixer_igain)));
66             break;
67 
68         default:
69             DPRINTK("mixer ioctl %u unknown\n", cmd);
70             return -ENOSYS;
71     }
72 
73     audio_mix_modcnt++;
74     return 0;
75 }

2.3 配置和编译内核

1) 确定内核里已经配置了sound\soc\s3c24xx\s3c2410-uda1341.c

  -> Device Drivers

   -> Sound

     -> Advanced Linux Sound Architecture

       -> Advanced Linux Sound Architecture  // 兼容OSS

         -> System on Chip audio support

         <*> I2S of the Samsung S3C24XX chips

 2) 将修改好的s3c-wm8976.c放入linux-2.6.22.6/sound/soc/s3c24xx目录下;

 3) 修改目录linux-2.6.22.6/sound/soc/s3c24xx下的makefile:

     &nb

首页 上一页 1 2 3 4 5 6 下一页 尾页 4/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇linux中服务环境的搭建 下一篇浅谈TCP IP协议栈(二)IP地址

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目