打印
[ARM入门]

关于天嵌E9卡片电脑与TQIMX6Q开发平台声卡驱动移植

[复制链接]
903|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Margaple|  楼主 | 2018-12-17 14:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Margaple 于 2018-12-17 14:18 编辑

  经过前面的移植,tqimx6q已经可以正常驱动触摸屏了,本文我们来移植声卡驱动。

  DTS编写

  由于tqimx6q搭载的声卡是sgtl5000芯片,因此,参考dts目录下其它开发板的相应信息,我们可以在DTS中添加如下内容:
/ {  
  
    ...  
      
    regulators {  
      
        ...  
  
        reg_3p3v: 3p3v {  
            compatible = "regulator-fixed";  
            regulator-name = "3P3V";  
            regulator-min-microvolt = <3300000>;  
            regulator-max-microvolt = <3300000>;  
            regulator-always-on;  
        };  
    };  
      
    ...  
  
    sound {  
        compatible = "fsl,imx-audio-sgtl5000";  
        model = "imx6q-sgtl5000";  
        ssi-controller = <&ssi1>;  
        audio-codec = <&codec>;  
        audio-routing =  
            "MIC_IN", "Mic Jack",  
            "Mic Jack", "Mic Bias",  
            "Headphone Jack", "HP_OUT";  
        mux-int-port = <1>;  
        mux-ext-port = <3>;  
    };  
};  
  
...  
  
&i2c2 {  
    clock-frequency = <100000>;  
    pinctrl-names = "default";  
    pinctrl-0 = <&pinctrl_i2c2_2>;  
    status = "okay";  
  
    codec: sgtl5000@0a {  
        compatible = "fsl,sgtl5000";  
        reg = <0x0a>;  
        clocks = <&clks 201>;  
        VDDA-supply = <®_3p3v>;  
        VDDIO-supply = <®_3p3v>;  
        VDDD-supply = <®_1p2v>;  
    };  
};  
  
&ssi1 {  
    fsl,mode = "i2s-slave";  
    status = "okay";  
};  
  
&audmux {  
    pinctrl-names = "default";  
    pinctrl-0 = <&pinctrl_audmux_2>;  
    status = "okay";  
};  
  
&iomuxc {  
    pinctrl-names = "default";  
    pinctrl-0 = <&pinctrl_hog>;  
  
    ...  
  
    hog {  
        pinctrl_hog: hoggrp-1 {  
            fsl,pins = <  
                MX6QDL_PAD_GPIO_0__CCM_CLKO1    0x80000000  
            >;  
        };  
    };  
};  

  添加以上内容后重新编译并烧写DTB即可。

  测试方法
  测试方法当然还是使用alsa-lib和alsa-utils。相关工具的移植方法如下:

  Step1. 获取并交叉编译alsa-lib:
wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.29.tar.bz2  
tar jxf alsa-lib-1.0.29.tar.bz2  
cd alsa-lib-1.0.29  
/configure --host=arm-linux-gnueabi --prefix=/mnt/usr/lib/alsa-lib  
make  
sudo make install  

  Step2. 获取并交叉编译alsa-utils:
wget ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.29.tar.bz2  
tar jxf alsa-utils-1.0.29.tar.bz2  
cd alsa-utils-1.0.29  
./configure --host=arm-linux-gnueabi --prefix=/usr/share/arm-alsa --with-alsa-inc-prefix=/usr/share/arm-alsa/include --with-alsa-prefix=/usr/share/arm-alsa/lib --disable-alsamixer --disable-xmlto  
make   
sudo make install

  Step3. 检测交叉编译是否成功:
file aplay

  如果显示内容大致如下:

  • aplay: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=280644397dc85eaf1f1dc26b03be754ac4777cff, not stripped  

  则表示交叉编译成功,关键词是ARM。

  Step4. 将交叉编译好的alsa拷贝到根文件系统:
sudo cp /usr/share/arm-alsa/ /mnt/usr/share/ -rfa  
sudo cp /usr/share/arm-alsa/* /mnt/ -rfa  
sync  

  接下来就可以用新的跟文件系统启动开发板了。

  Step5. 测试录音:
aplay test.wav  

  如果按照以上步骤正确的进行了移植,就可以听到录音时自己说的话了。

  启动Log

  完整的启动Log如下:

U-Boot 2013.04-04987-g98fdbdc-dirty (May 03 2015 - 11:46:24)  
  
CPU:   Freescale i.MX6Q rev1.2 at 792 MHz  
CPU:   Temperature 26 C, calibration data: 0x54e4bb69  
Reset cause: POR  
Board: MX6Q/SDL-SabreSD  
I2C:   ready  
DRAM:  1 GiB  
MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2  
No panel detected: default to Hannstar-XGA  
Display: Hannstar-XGA (1024x768)  
In:    serial  
Out:   serial  
Err:   serial  
mmc0 is current device  
Net:   Phy not found  
PHY reset timed out  
FEC [PRIME]  
Warning: failed to set MAC address  
  
Normal Boot  
Hit any key to stop autoboot:  0   
mmc0 is current device  
  
MMC read: dev # 0, block # 2048, count 12288 ... 12288 blocks read: OK  
  
MMC read: dev # 0, block # 20480, count 2048 ... 2048 blocks read: OK  
## Booting kernel from Legacy Image at 11ffffc0 ...  
   Image Name:   Linux-3.10.17-80739-g33597e3-dir  
   Image Type:   ARM Linux Kernel Image (uncompressed)  
   Data Size:    5289360 Bytes = 5 MiB  
   Load Address: 12000000  
   Entry Point:  12000000  
   Verifying Checksum ... OK  
## Flattened Device Tree blob at 18000000  
   Booting using the fdt blob at 0x18000000  
   XIP Kernel Image ... OK  
OK  
   Using Device Tree in place at 18000000, end 1800d14d  
  
Starting kernel ...  
  
Booting Linux on physical CPU 0x0  
Linux version 3.10.17-80739-g33597e3-dirty (lilianrong@lenovo) (gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-12ubuntu1) ) #3 SMP PREEMPT Wed May 13 00:16:49 CST 2015  
CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7), cr=10c53c7d  
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache  
Machine: Freescale i.MX6 Quad/DualLite (Device Tree), model: Freescale i.MX6 Quad TQIMX6Q Smart Device Board  
cma: CMA: reserved 320 MiB at 3c000000  
Memory policy: ECC disabled, Data cache writealloc  
PERCPU: Embedded 8 pages/cpu @814fa000 s8896 r8192 d15680 u32768  
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 260096  
Kernel command line: noinitrd console=ttymxc0,115200 root=/dev/mmcblk0p1 rw rootfstype=ext4 init=/linuxrc  
PID hash table entries: 4096 (order: 2, 16384 bytes)  
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)  
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)  
Memory: 1024MB = 1024MB total  
Memory: 697784k/697784k available, 350792k reserved, 0K highmem  
Virtual kernel memory layout:  
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)  
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)  
    vmalloc : 0xc0800000 - 0xff000000   (1000 MB)  
    lowmem  : 0x80000000 - 0xc0000000   (1024 MB)  
    pkmap   : 0x7fe00000 - 0x80000000   (   2 MB)  
    modules : 0x7f000000 - 0x7fe00000   (  14 MB)  
      .text : 0x80008000 - 0x80be704c   (12157 kB)  
      .init : 0x80be8000 - 0x80c2a2c0   ( 265 kB)  
      .data : 0x80c2c000 - 0x80c7c260   ( 321 kB)  
       .bss : 0x80c7c260 - 0x80ce5434   ( 421 kB)  
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1  
Preemptible hierarchical RCU implementation.  
NR_IRQS:16 nr_irqs:16 16  
L310 cache controller enabled  
l2x0: 16 ways, CACHE_ID 0x410000c7, AUX_CTRL 0x32070000, Cache size: 1048576 B  
sched_clock: 32 bits at 3000kHz, resolution 333ns, wraps every 1431655ms  
CPU identified as i.MX6Q, silicon rev 1.2  
Console: colour dummy device 80x30  
Calibrating delay loop... 1581.05 BogoMIPS (lpj=7905280)  
pid_max: default: 32768 minimum: 301  
Mount-cache hash table entries: 512  
CPU: Testing write buffer coherency: ok  
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000  
Setting up static identity map for 0x806106a8 - 0x80610700  
CPU1: Booted secondary processor  
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001  
CPU2: Booted secondary processor  
CPU2: thread -1, cpu 2, socket 0, mpidr 80000002  
CPU3: Booted secondary processor  
CPU3: thread -1, cpu 3, socket 0, mpidr 80000003  
Brought up 4 CPUs  
SMP: Total of 4 processors activated (6324.22 BogoMIPS).  
CPU: All CPU(s) started in SVC mode.  
devtmpfs: initialized  
pinctrl core: initialized pinctrl subsystem  
regulator-dummy: no parameters  
NET: Registered protocol family 16  
DMA: preallocated 256 KiB pool for atomic coherent allocations  
Use WDOG1 as reset source  
syscon 20c8000.anatop: regmap [mem 0x020c8000-0x020c8fff] registered  
vdd1p1: 800 <--> 1375 mV at 1125 mV   
vdd3p0: 2800 <--> 3150 mV at 3000 mV   
vdd2p5: 2000 <--> 2750 mV at 2425 mV   
cpu: 725 <--> 1450 mV at 1150 mV   
vddpu: 725 <--> 1450 mV   
vddsoc: 725 <--> 1450 mV at 1200 mV   
syscon 20e0000.iomuxc-gpr: regmap [mem 0x020e0000-0x020e0037] registered  
syscon 21bc000.ocotp-ctrl: regmap [mem 0x021bc000-0x021bffff] registered  
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.  
hw-breakpoint: maximum watchpoint size is 4 bytes.  
imx6q-pinctrl 20e0000.iomuxc: initialized IMX pinctrl driver  
bio: create slab <bio-0> at 0  
mxs-dma 110000.dma-apbh: initialized  
usb_otg_vbus: 5000 mV   
mipi_dsi_pwr_on: no parameters  
3P3V: 3300 mV   
1P2V: 1200 mV   
i2c-core: driver [max17135] using legacy suspend method  
i2c-core: driver [max17135] using legacy resume method  
SCSI subsystem initialized  
usbcore: registered new interface driver usbfs  
usbcore: registered new interface driver hub  
usbcore: registered new device driver usb  
i2c i2c-0: IMX I2C adapter registered  
i2c i2c-1: IMX I2C adapter registered  
Linux video capture interface: v2.00  
pps_core: LinuxPPS API ver. 1 registered  
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>  
PTP clock support registered  
imx-ipuv3 2400000.ipu: IPU DMFC NORMAL mode: 1(0~1), 5B(4,5), 5F(6,7)  
imx-ipuv3 2800000.ipu: IPU DMFC NORMAL mode: 1(0~1), 5B(4,5), 5F(6,7)  
MIPI CSI2 driver module loaded  
Advanced Linux Sound Architecture Driver Initialized.  
cfg80211: Calling CRDA to update world regulatory domain  
Switching to clocksource mxc_timer1  
NET: Registered protocol family 2  
TCP established hash table entries: 8192 (order: 4, 65536 bytes)  
TCP bind hash table entries: 8192 (order: 4, 65536 bytes)  
TCP: Hash tables configured (established 8192 bind 8192)  
TCP: reno registered  
UDP hash table entries: 512 (order: 2, 16384 bytes)  
UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)  
NET: Registered protocol family 1  
RPC: Registered named UNIX socket transport module.  
RPC: Registered udp transport module.  
RPC: Registered tcp transport module.  
RPC: Registered tcp NFSv4.1 backchannel transport module.  
hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available  
pureg-dummy: no parameters  
imx6_busfreq busfreq.15: DDR medium rate not supported.  
Bus freq driver module loaded  
VFS: Disk quotas dquot_6.5.2  
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)  
NFS: Registering the id_resolver key type  
Key type id_resolver registered  
Key type id_legacy registered  
jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.  
fuse init (API version 7.22)  
msgmni has been set to 2002  
io scheduler noop registered  
io scheduler deadline registered  
io scheduler cfq registered (default)  
imx-weim 21b8000.weim: WEIM driver registered.  
mxc_mipi_dsi 21e0000.mipi: i.MX MIPI DSI driver probed  
MIPI DSI driver module loaded  
mxc_sdc_fb fb.26: register mxc display driver lcd  
Console: switching to colour frame buffer device 100x30  
imx-sdma 20ec000.sdma: no iram assigned, using external mem  
imx-sdma 20ec000.sdma: loaded firmware 1.1  
imx-sdma 20ec000.sdma: initialized  
Serial: IMX driver  
2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 58) is a IMX  
console [ttymxc0] enabled  
21e8000.serial: ttymxc1 at MMIO 0x21e8000 (irq = 59) is a IMX  
21ec000.serial: ttymxc2 at MMIO 0x21ec000 (irq = 60) is a IMX  
21f0000.serial: ttymxc3 at MMIO 0x21f0000 (irq = 61) is a IMX  
21f4000.serial: ttymxc4 at MMIO 0x21f4000 (irq = 62) is a IMX  
serial: Freescale lpuart driver  
[drm] Initialized drm 1.1.0 20060810  
[drm] Initialized vivante 1.0.0 20120216 on minor 0  
brd: module loaded  
loop: module loaded  
CAN device driver interface  
flexcan 2090000.can: device registered (reg_base=c0a38000, irq=142)  
fec 2188000.ethernet (unregistered net_device): Invalid MAC address: 00:00:00:00:00:00  
fec 2188000.ethernet (unregistered net_device): Using random MAC address: c2:9c:30:14:aa:25  
libphy: fec_enet_mii_bus: probed  
fec 2188000.ethernet eth0: registered PHC device 0  
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver  
usbcore: registered new interface driver usb-storage  
ci_hdrc ci_hdrc.1: doesn't support gadget  
ci_hdrc ci_hdrc.1: EHCI Host Controller  
ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus number 1  
ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00  
hub 1-0:1.0: USB hub found  
hub 1-0:1.0: 1 port detected  
mousedev: PS/2 mouse device common for all mice  
i2c-core: driver [isl29023] using legacy suspend method  
i2c-core: driver [isl29023] using legacy resume method  
snvs_rtc 20cc034.snvs-rtc-lp: rtc core: registered 20cc034.snvs-rtc-lp as rtc0  
i2c /dev entries driver  
i2c-core: driver [mag3110] using legacy suspend method  
i2c-core: driver [mag3110] using legacy resume method  
imx2-wdt 20bc000.wdog: IMX2+ Watchdog Timer enabled. timeout=60s (nowayout=0)  
cpuidle: using governor ladder  
cpuidle: using governor menu  
sdhci: Secure Digital Host Controller Interface driver  
sdhci: Copyright(c) Pierre Ossman  
sdhci-pltfm: SDHCI platform and OF driver helper  
mmc0: no vqmmc regulator found  
mmc0: no vmmc regulator found  
mmc0: SDHCI controller on 2194000.usdhc [2194000.usdhc] using ADMA  
mmc1: no vqmmc regulator found  
mmc1: no vmmc regulator found  
mmc1: SDHCI controller on 219c000.usdhc [219c000.usdhc] using ADMA  
mmc0: new high speed SDHC card at address e624  
mmcblk0: mmc0:e624 SS08G 7.40 GiB   
mmcblk0: p1  
mmc1: BKOPS_EN bit is not set  
usb 1-1: new high-speed USB device number 2 using ci_hdrc  
mmc1: new high speed DDR MMC card at address 0001  
mmcblk1: mmc1:0001 008G92 7.28 GiB   
mmcblk1boot0: mmc1:0001 008G92 partition 1 4.00 MiB  
mmcblk1boot1: mmc1:0001 008G92 partition 2 4.00 MiB  
mmcblk1rpmb: mmc1:0001 008G92 partition 3 512 KiB  
mmcblk1: p1  
mmcblk1boot1: unknown partition table  
mmcblk1boot0: unknown partition table  
hub 1-1:1.0: USB hub found  
hub 1-1:1.0: 4 ports detected  
Galcore version 4.6.9.9754  
mxc_vdoa 21e4000.vdoa: i.MX Video Data Order Adapter(VDOA) driver probed  
mxc_asrc 2034000.asrc: mxc_asrc registered  
mxc_vpu 2040000.vpu: VPU initialized  
leds-gpio gpio-leds.22: pins are not configured from the driver  
caam 2100000.caam: device ID = 0x0a16010000000000 (Era -524)  
caam 2100000.caam: job rings = 2, qi = 0  
caam 2100000.caam: authenc-hmac-md5-cbc-aes-caam  
caam 2100000.caam: authencesn-hmac-md5-cbc-aes-caam  
caam 2100000.caam: authenc-hmac-sha1-cbc-aes-caam  
caam 2100000.caam: authencesn-hmac-sha1-cbc-aes-caam  
caam 2100000.caam: authenc-hmac-sha224-cbc-aes-caam  
caam 2100000.caam: authencesn-hmac-sha224-cbc-aes-caam  
caam 2100000.caam: authenc-hmac-sha256-cbc-aes-caam  
caam 2100000.caam: authencesn-hmac-sha256-cbc-aes-caam  
caam 2100000.caam: authenc-hmac-md5-cbc-des3_ede-caam  
caam 2100000.caam: authencesn-hmac-md5-cbc-des3_ede-caam  
caam 2100000.caam: authenc-hmac-sha1-cbc-des3_ede-caam  
caam 2100000.caam: authencesn-hmac-sha1-cbc-des3_ede-caam  
caam 2100000.caam: authenc-hmac-sha224-cbc-des3_ede-caam  
caam 2100000.caam: authencesn-hmac-sha224-cbc-des3_ede-caam  
caam 2100000.caam: authenc-hmac-sha256-cbc-des3_ede-caam  
caam 2100000.caam: authencesn-hmac-sha256-cbc-des3_ede-caam  
caam 2100000.caam: authenc-hmac-md5-cbc-des-caam  
caam 2100000.caam: authencesn-hmac-md5-cbc-des-caam  
caam 2100000.caam: authenc-hmac-sha1-cbc-des-caam  
caam 2100000.caam: authencesn-hmac-sha1-cbc-des-caam  
caam 2100000.caam: authenc-hmac-sha224-cbc-des-caam  
caam 2100000.caam: authencesn-hmac-sha224-cbc-des-caam  
caam 2100000.caam: authenc-hmac-sha256-cbc-des-caam  
caam 2100000.caam: authencesn-hmac-sha256-cbc-des-caam  
caam 2100000.caam: ecb-des-caam  
caam 2100000.caam: ecb-arc4-caam  
caam 2100000.caam: ecb-aes-caam  
caam 2100000.caam: ctr-aes-caam  
caam 2100000.caam: cbc-aes-caam  
caam 2100000.caam: ecb-des3-caam  
caam 2100000.caam: cbc-3des-caam  
caam 2100000.caam: cbc-des-caam  
caam 2100000.caam: fsl,sec-v4.0 algorithms registered in /proc/crypto  
platform 2101000.jr0: registering rng-caam  
platform caam_sm: caam_sm_test: 8-byte key test match OK  
platform caam_sm: caam_sm_test: 16-byte key test match OK  
platform caam_sm: caam_sm_test: 32-byte key test match OK  
platform caam_secvio.28: security violation service handlers armed  
usbcore: registered new interface driver usbhid  
usbhid: USB HID core driver  
i2c-core: driver [cs42888] using legacy suspend method  
i2c-core: driver [cs42888] using legacy resume method  
sgtl5000 1-000a: sgtl5000 revision 0x11  
1-000a: 1200 mV normal   
sgtl5000 1-000a: Using internal LDO instead of VDDD  
imx-sgtl5000 sound.27:  sgtl5000 <-> 2028000.ssi mapping ok  
TCP: cubic registered  
NET: Registered protocol family 10  
sit: IPv6 over IPv4 tunneling driver  
NET: Registered protocol family 17  
can: controller area network core (rev 20120528 abi 9)  
NET: Registered protocol family 29  
can: raw protocol (rev 20120528)  
can: broadcast manager protocol (rev 20120528 t)  
can: netlink gateway (rev 20130117) max_hops=1  
8021q: 802.1Q VLAN Support v1.8  
Key type dns_resolver registered  
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4  
input: gpio-keys.21 as /devices/soc0/gpio-keys.21/input/input0  
snvs_rtc 20cc034.snvs-rtc-lp: setting system clock to 1970-01-01 00:00:00 UTC (0)  
ALSA device list:  
  #0: imx6q-sgtl5000  
EXT4-fs (mmcblk0p1): recovery complete  
EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null)  
VFS: Mounted root (ext4 filesystem) on device 179:1.  
devtmpfs: mounted  
Freeing unused kernel memory: 264K (80be8000 - 80c2a000)  
----------mount all..........  
----------Starting mdev......  
  
Please press Enter to activate this console.   
@tqimx6q #

  至此,就完成了tqimx6q的声卡驱动移植,有任何疑问欢迎留言讨论。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

105

帖子

1

粉丝