我有一个有根的索尼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显示音频状态:
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)等等。
所以我被困住了。指针,想法,暗示,都是非常渴望的。
发布于 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构建了一个硬件树,每个驱动程序(代码)和设备(数据/实际硬件)都有特定的回调/函数指针来处理一些特定的任务。
probe -你在吗?确定实际的硬件/设备是否存在。remove -关闭设备.模块移除、电源关闭等。suspend -去睡觉.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执行以下步骤,
suspend设备。suspend总线和停用.这并不是全部的故事。一些设备可能支持唤醒。他们将有额外的回叫,以使唤醒系统从睡眠模式。阅读相关文档,了解这方面的情况。
这是通用的电源管理和驱动/设备结构。现在,ASOC (alsa系统片上系统)是如何构造的?
通常有三个驱动器/设备被缝合在一起。
现在,如果您理解了这一点,您将看到wm8350的一些特性似乎破坏了Linux模型。DAI接口可以停止(数字音频),但是i2c接口必须保持活着才能编程编解码器/电源管理IC中与功率功能相关的寄存器。
最新的WM8350称IC为https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/linux/mfd/wm8350和2.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并得到一张税单。
https://stackoverflow.com/questions/24464700
复制相似问题