如何在一个声卡添加pa codec设备

android\kernel\msm-3.18\arch\arm\boot\dts\qcom\msm8909-pm8916-mtp.dtsi

&audio_codec_mtp {

qcom,model = "msm8909-pm8916-snd-card";

qcom,msm-gpios =

"pri_i2s",

"quat_i2s",

"amp_gpios";

qcom,pinctrl-names =

"all_off",

"pri_i2s_act",

"quat_i2s_act",

"pri_i2s_quat_i2s_act",

"amp_gpios_act",

"pri_i2s_amp_gpios_act",

"quat_i2s_amp_gpios_act",

"pri_i2s_quat_i2s_amp_act";

pinctrl-names =

"all_off",

"pri_i2s_act",

"quat_i2s_act",

"pri_i2s_quat_i2s_act",

"amp_gpios_act",

"pri_i2s_amp_gpios_act",

"quat_i2s_amp_gpios_act",

"pri_i2s_quat_i2s_amp_act";

pinctrl-0 = ;

pinctrl-1 = ;

pinctrl-2 = ;

pinctrl-3 = ;

pinctrl-4 = ;

pinctrl-5 = ;

pinctrl-6 = ;

pinctrl-7 = ;

asoc-codec = , ,,; //添加tas5782,tas5782是一个DAC的codec设备,pm8916_tombak_dig是耳机孔,它是一个ADC codec设备,两个都是codec

asoc-codec-names = "msm-stub-codec.1", "cajon_codec","tas5751.4-002b","tas5782.4-0048"; //从下面命令中获取

};

//tas5782设备定义

tas5782: tas5782@48 {

compatible = "ti,tas5782";

reg = <0x48>;

amp-rst-gpio = ;/*rest*/

amp-pwr9v-gpio = ;/*9v en*/

amp-pwr3v3-gpio = ;/*3v3 en*/

amp-pdn-gpio = ;/*power down (mute)*/

};

查看/sys/kernel/debug/asoc $ cat codecs

msm8x16_wcd_codec-13

tas5782.4-0048 //上面节点中的asoc-codec-names的来源

soc:qcom,msm-stub-codec

snd-soc-dummy

//从下面命令中获取codec_dai_name

msm8909:/sys/kernel/debug/asoc $ cat dais

cajon_vifeedback

msm8x16_wcd_i2s_tx1

msm8x16_wcd_i2s_rx1

tas5782-i2s

android\kernel\msm-3.18\sound\soc\msm\msm8952.c

添加dailink用于cpu dai找到codec dai,用名字匹配设备资源dts

static struct snd_soc_dai_link msm8952_dai[] = {

******

{

.name = LPASS_BE_QUAT_MI2S_RX,

.stream_name = "Quaternary MI2S Playback",

.cpu_dai_name = "msm-dai-q6-mi2s.3",

.platform_name = "msm-pcm-routing",

.codec_dai_name = "snd-soc-dummy-dai",

.codec_name = "snd-soc-dummy",

.no_pcm = 1,

.dpcm_playback = 1,

.be_id = MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,

.be_hw_params_fixup = msm_mi2s_rx_be_hw_params_fixup,

.ops = &msm8952_quat_mi2s_be_ops,

.ignore_pmdown_time = 1, /* dai link has playback support */

.ignore_suspend = 1,

},

原来codec dai codec_dai_name 名字是snd-soc-dummy-dai snd-soc-dummy代表没有设备,在此位置上添加pa的codec名字

如下:

{

.name = LPASS_BE_QUAT_MI2S_RX,

.stream_name = "Quaternary MI2S Playback",

.cpu_dai_name = "msm-dai-q6-mi2s.3",

.platform_name = "msm-pcm-routing",

.codec_dai_name = "tas5782-i2s",

.codec_name = "tas5782.4-0048",

.no_pcm = 1,

.dpcm_playback = 1,

.be_id = MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,

.be_hw_params_fixup = quat_msm_mi2s_rx_be_hw_params_fixup,

.ops = &msm8952_quat_mi2s_be_ops,

.ignore_pmdown_time = 1, /* dai link has playback support */

.ignore_suspend = 1,

},

codec dai name 是从下面文件中得到

android\kernel\msm-3.18\sound\soc\codecs\tas5782.c

ret = snd_soc_register_codec(&client->dev, &priv->codec_driver, &tas5782_dai, 1);

//tas5782_dai

static struct snd_soc_dai_driver tas5782_dai = {

.name = “tas5782-i2s”,

.id = 0,

.playback = {

.stream_name = “Playback”,

.channels_min = 1,

.channels_max = 2,

.rates = SNDRV_PCM_RATE_8000_48000|SNDRV_PCM_RATE_96000,

.formats = SNDRV_PCM_FMTBIT_S32_LE |

SNDRV_PCM_FMTBIT_S24_LE |

SNDRV_PCM_FMTBIT_S16_LE,

},

.ops = &tas5782_dai_ops,

};

codec name 从dts中得到tas5782

tas5782: tas5782@48 {

compatible = “ti,tas5782”;

reg = <0x48>;

amp-rst-gpio = ;/rest/

amp-pwr9v-gpio = ;/9v en/

amp-pwr3v3-gpio = ;/3v3 en/

amp-pdn-gpio = ;/power down (mute)/

};

此外注意修改其他部件的i2s格式支持范围

alsa打开pcm设备时,执行顺序

soc_pcm_open****函数调用

/操作cpu dai的startup接口

cpu_dai->driver->ops->startup---->

msm-dai-q6-v2.c->msm_dai_q6_mi2s_startup

cpu_dai_name所在文件在msm-dai-fe.c(multimedia 无主机HOSTLESS相关的dai) msm-dai-q6-v2.c(具体i2s的soc dai)中的struct snd_soc_dai_driver注册

由于pa是96k的因此需要在cpu dai(soc dai) msm-dai-q6-v2.c中添加96K的支持

格式有些需要修改成支持96k

操作platform的open接口

platform->driver->ops->open

NULL

操作codec dai的startup接口

codec_dai->driver->ops->startup

tas5782.c

tas5782_startup

操作 dai link的startup接口

rtd->dai_link->ops->startup

sound/soc/msm/msm8952.c

msm_quat_mi2s_snd_startup

pcm部分也需要做相应的snd_pcm_hardware的playback /capture属性修改

msm-pcm-afe-v2.c中

playback :

capture:

支持的采样率

msm-pcm-q6-v2.c中平台驱动的snd_pcm_hardware属性:

linux 声卡 添加GPIO PA开关,如何在一个声卡添加pa codec设备相关推荐

  1. 如何在一个声卡添加pa codec设备

    如何在一个声卡添加pa codec设备 android\kernel\msm-3.18\arch\arm\boot\dts\qcom\msm8909-pm8916-mtp.dtsi &audi ...

  2. linux驱动:TI+DM8127+GPIO(三)之omap_hwmod中添加GPIO资源

    三.[GPIO驱动框架>向omap_hwmod中添加GPIO资源] ***将GPIO硬件信息添加到注册到omap_hwmod_list列表中 Arch/arm/plat-omap/include ...

  3. pwm gpio android,关于占空比与PWM_以及GPIO背光开关

    描述 什么是PWM? PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点.由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想 ...

  4. Linux ALSA声卡驱动之五:Machine 以及ALSA声卡的注册

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

  5. mt6762添加gpio按键方法与问题调试

    mt6762添加gpio按键方法与问题调试 1 配置dts文件.定义gpio87为拍照键,对于keycode = 212. gpio_keys:gpio_keys {         compatib ...

  6. 【linux驱动】gpio外设驱动

      本篇文章为gpio外设驱动,使用内核的gpio驱动框架来操作soc的gpio外设,首先介绍所有外设引脚配置都需要的pinctrl,再介绍本篇的重点-gpio外设驱动,最后给出三个标准的gpio外设 ...

  7. Linux内核驱动GPIO的使用

    一 概述 Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0-MAX_INT之间的整数 ...

  8. 【GPS】GPS的C_GNSS_RF_ELNA_GPIO_NUM_DEFAULT配置,Linux系统中GPIO的设置

    GPS的GPIO配置文件 客户需要更改此变量C_GNSS_RF_ELNA_GPIO_NUM_DEFAULT才能覆盖NAVRF驱动程序ELNA设置. modem_proc/gps/gnss/mgp/me ...

  9. Linux 内核编译 LOCALVERSION 配置(分析内核版本号自动添加的“+“号)

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大 ...

最新文章

  1. 提交代码,SVN被锁定,提示:svn is already locked解决方案
  2. Android自定义Adapter的ListView的思路及代码
  3. vue 生成发布包_年轻人如何从0到1封装发布一个vue组件__Vue.js
  4. 为什么设计师创造的编程语言更受欢迎?
  5. IP协议(RFC791)-IP包格式
  6. 由于 web 服务器上此资源的访问控制列表(acl)配置或加密设置,您无权查看此目录或页面。...
  7. java项目.gitignore文件过滤规则
  8. [转载] Java中为什么要有重载现象
  9. Vue学习笔记(六)
  10. [AtCoder Beginner Contest 133]F - Colorful Tree
  11. 两个平面的位置关系和判定方程组解_2018年高考数学总复习第九章平面解析几何第2讲两直线的位置关系学案!...
  12. 【模拟电路】PID简介
  13. 反欺诈概念库-物联卡/物联网卡/流量卡
  14. 系统调用recvfrom和recv区别
  15. Basler相机外部触发设置(Halcon)
  16. XSS漏洞原理及攻击
  17. 正则表达式总结(待续)
  18. 经典的shell十三问
  19. 【JavaWeb】jsp页面中表单重复提交的三种情况
  20. ubuntu下LaTeX的中文输入法与中文配置

热门文章

  1. MATLAB中split函数使用
  2. 用QXDM抓取小米6短信包,手机收到短信,但QXDM找不到lte nas emm plain ota incoming message。求问大神指点
  3. python小作业6代码(字符串的实际应用)
  4. java类的不变约束_设计中的变与不变
  5. c语言接水果游戏喜庆丰收,【教学设计】我爱游戏_掌控板12_接水果
  6. 随机变量和的分布—卷积公式distribution convolution的应用
  7. 超市无线覆盖的需求分析
  8. java a[i].setx(-1);_阅读以下说明和 Java 程序,填充程序 - 希赛网
  9. Arduino双控开关
  10. PHP 随机生成中文字符