经过前面的移植,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
- >;
- };
- };
- };
测试方法
测试方法当然还是使用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
- 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
- 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
Step4. 将交叉编译好的alsa拷贝到根文件系统:
- sudo cp /usr/share/arm-alsa/ /mnt/usr/share/ -rfa
- sudo cp /usr/share/arm-alsa/* /mnt/ -rfa
- sync
Step5. 测试录音:
- arecord -f dat test.wav
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 #