首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM/ in 8350音频电源管理系统在linux中的应用

ARM/ in 8350音频电源管理系统在linux中的应用
EN

Stack Overflow用户
提问于 2014-06-28 07:35:53
回答 1查看 503关注 0票数 0

我有一个有根的索尼prs900,运行Linux2.6.23 #2抢占内核,用于ARMv6。(Montavista linux内核)我在搞清楚电源管理是如何工作的,无论是系统的运行,还是音频端口的上下供电,我都有问题。我既不知道如何读取电池/电力线状态信息,也无法让音频芯片播放声音等。虽然我研究内核模块已经有一段时间了..。

这值得一小笔钱的帮助,例如100美元的贝宝捐款给一个电子邮件帐户(或者更多,如果这需要很长时间…)因为第一个人能够向我解释如何以一种有效的方式来做这些事情。读取电池状态,并改变一些电源模式,如让音频放大器上/下电源,这样音频播放到/dev/dsp (操作系统仿真)实际上是作为声音,而不是只是被芯片消耗和忽视.

实际的索尼内核,以及交叉编译器工具的二进制包都位于主页面上。实际内核源码也是可用的。

到目前为止,我学到的是:

索尼正在使用沃尔夫森微型WM8350音频驱动器和电池充电器/电源管理芯片,用于整个系统的所有电源;例如:它可以关闭/打开SD存储卡,向cpu发送更多的电源,打开音频放大器等。参见:WM8350数据表

差不多,整个问题都围绕着如何让WM8350内核驱动程序工作.尽管该公司吹嘘它在linux下的支持,但除了数据表之外,他们没有任何实际有用的应用程序说明或示例。我怀疑我拥有的内核驱动程序是beta代码,因为它们的行为似乎不太好(内核日志中有几条关于wm8350寄存器可读性的错误消息,即使只运行索尼的本地软件.)。

内核驱动程序最感兴趣的源代码是:Linux2.6.23_091126/ driver /mxc/pmic/{core,wm8350}注意到,wm8350是MC14783的竞争对手,但是linux内核驱动程序对两种芯片都使用相同的{core}驱动程序源代码;索尼只有wm8350在上面--没有MC14783存在。

我最想要理解的代码是在子目录{wm8350}中找到的,例如:eg 8350/wm8350pm/powerSupplysysfs.c。

我希望音频也能启动,但我不太确定相关的音频放大器代码在哪里.

很明显,wm8350pm代码是为导出/sys目录接口而设计的;现在/sys已挂载并在系统上运行;但我不太熟悉这些新样式接口的语义.它们不太像Linux笔记本的旧APM电源接口.

首先,我检查了显而易见的情况:如果我执行"cat /sys/power/state“,它会返回单词"mem”,而不返回其他任何内容。该文件具有-rw-r--r--权限,因此可能会被写入--但我不知道用什么写的。wm8350pm驱动程序的源代码中没有字符串"mem“,因此我甚至不知道/sys/power/state是否是源代码的一部分。

“/sys -iname”"wm8350“显示了一些模式目录:bl 8350-rtc,bl 8350-pmic,bl 8350-bl,bl 8350-power,bl 8350-led bl 8350-hifi-dai,bl 8350-codec bl 8350-imx32ads.0。

所以,我在每个目录上做一个ls-l,查找实际的文件,而不是符号链接或子目录,我发现的是库存无用的可写文件:绑定、取消绑定、uevent、

还有一些只读的文件: pmic_reg、dapm_widget、mod别名、codec_reg,它们都不是很有用。

毫不奇怪:

做:猫/sys/devices/platform/wm8350-ebx5016-audi/modalias提供“cat 8350-cat 5016-音频”

做: cat /sys/devices/platform/wm8350-imx32ads.0/modalias给出“cat 8350-imx32ad”

既然声音没了..。执行: cat /sys/devices/platform/wm8350-ebx5016-audi/dapm_widget显示音频状态:

代码语言:javascript
复制
Headphone Jack: Off
Line In Jack: On
Mic Bias: Off
Left DAC: Off
Right DAC: Off
... (all else off and omitted except )...
EBX5016-hifi: PM State: D3hot

最后两个文件,我想应该做wm8350芯片寄存器转储.其中一人做到了。执行: cat /sys/设备/ is 8350-pmic/pmic-reg会导致长时间的停顿,然后什么都不打印。但是: cat /sys/devices/wm8350/platform/wm8350-ebx5016-audi/wm8350-codec/codec_reg确实会打印到e8的寄存器列表,这比数据表中规定的芯片应该是(0x00到0xe6)大几个字节。

我尝试使用python程序来播放wav文件(在我的桌面计算机上工作),我注意到/dev/dsp确实是打开的,混频器确实设置了卷级别,但是没有结果。因此--音频驱动程序无法自动启用声音放大器。

在/dev中没有alsa声音文件,嵌入式机器上也没有任何alsa工具.因此,我认为索尼严格使用OSS /dev/dsp和/dev/混合器。

我只能找到ws8350的另一个访问点:有一个设备驱动程序/dev/ is 8350。

该驱动程序由子目录in 8350/ in 8350_reg.c中的源代码创建;理论上,它应该能够使用用户空间中的ioctls()调用读写所有寄存器。然而,它似乎有一些严重的错误,因为我编写了一个测试程序来读取wm8350寄存器.并且大多数寄存器返回错误消息,而不是允许读取,包括最普通的ID寄存器(0x00,0x01)等等。

所以我被困住了。指针,想法,暗示,都是非常渴望的。

EN

回答 1

Stack Overflow用户

发布于 2014-07-01 17:13:14

我想稍微改变一下你的问题。

Linux ASOC (alsa system on chip)电源管理是如何工作的?

我将回答这个问题,然后给出一些关于使用这个特定芯片的提示。

。。如果我做了一个cat /sys/power/state,它会返回单词"mem“,而不返回其他任何内容。该文件具有权限-rw-r -- r-,所以它可能会被写入--但是我不知道用什么。wm8350pm驱动程序的源代码中没有字符串"mem“,因此我甚至不知道/sys/power/state是否是源代码的一部分。

您需要了解Linux驱动模型。Linux中的硬件结构就像一棵树。理性的是,事物必须在特定的序列中被激活/下降。例如,在关闭PCI外围设备之前,不应该关闭PCI总线控制器。Linux构建了一个硬件树,每个驱动程序(代码)和设备(数据/实际硬件)都有特定的回调/函数指针来处理一些特定的任务。

  1. probe -你在吗?确定实际的硬件/设备是否存在。
  2. remove -关闭设备.模块移除、电源关闭等。
  3. suspend -去睡觉.
  4. resume -醒醒。

三四对你来说可能很有趣。现在,阅读有关什么是关于。文本mem,意味着系统支持https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/Documentation/power/s2ram.txt?id=refs/tags/v2.6.32.63。在这种模式下,Linux执行以下步骤,

  1. 找到第一个最低的主动总线。
  2. 公共汽车上的suspend设备。
  3. suspend总线和停用.
  4. 如果总线处于活动状态,请转到步骤1。
  5. 将CPU设置为低功耗状态(挂起至RAM)

这并不是全部的故事。一些设备可能支持唤醒。他们将有额外的回叫,以使唤醒系统从睡眠模式。阅读相关文档,了解这方面的情况。

这是通用的电源管理和驱动/设备结构。现在,ASOC (alsa系统片上系统)是如何构造的?

通常有三个驱动器/设备被缝合在一起。

  1. Codec --在您的案例中是wm8350。这包括音频放大器驱动电路,可以包括声音混合和源控制。支持从数字到模拟,模拟到数字,通常通过一个i2s接口。i2s并不是唯一的接口。通常,寄存器库是通过二级接口控制的;i2c (在wm8350情况下)。
  2. --指iMx31参考手册第1.2.18.1章;Freescale称硬件为SSI。关于AUDMUX的下一章对于理解iMx31 31/32上的音频支持也很有用。
  3. 机器文件 -这是董事会特定的路由。它将DAI连接到编解码器,并且是两者的父级。它提供板卡时钟信息和其他特定的配置。例如,它可以使用AUDMUX将物理引脚路由到SSI块。
  4. 来自编解码器驱动程序的i2c (或SPI)接口,用于向编码芯片发送控制命令。一些芯片可能使用古怪的i2s接口或其他控制(但在您的情况下)。

现在,如果您理解了这一点,您将看到wm8350的一些特性似乎破坏了Linux模型。DAI接口可以停止(数字音频),但是i2c接口必须保持活着才能编程编解码器/电源管理IC中与功率功能相关的寄存器。

最新的WM8350称IC为https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/linux/mfd/wm83502.6.35中引入了支持。最初的支持可能没有包括WM8350特性。不幸的是,如果没有关于索尼prs900板布局的一些细节,就很难知道如何使用WM8350 PMIC功能。代码将涉及iMx31 CPU、WM8350、i2c连接以及可能的一些电源电路。

可以肯定的是,您只需尝试echo mem > /sys/power/state并查看发生了什么。如果成功的话,你是幸运的。睡眠中的电源/电流消耗可能不是最优的,但使用2.6.23内核可能很难修复。您需要查看/sys目录中的唤醒源,并可能在发出挂起到内存命令之前注册这些源。

我既不知道如何读取电池/电力线状态信息,也无法让音频芯片播放声音等。虽然我研究内核模块已经有一段时间了..。

从上述讨论中,电池和电力线状态可能会通过另一个设备找到。但是,如果事情在板上正确地连接,pmic_reg文件实际上可能会给出状态。

音频芯片将使用ALSA。您需要使用alsamixer或命令行amixer通过编解码器设置音频路由,因此DAI信道(来自iMx32)被路由并发送到扬声器。为了将耗电量降到最低,通常会在默认情况下关闭电源。/dev/dsp文件只是OSS兼容性。此配置将在本地支持ALSA。如果可能的话,最好使用ALSA。

如果这足够有帮助的话,捐给OSF并得到一张税单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24464700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档