This is the first version of the firmware
This firmware is only for dock2(with WM8960 chip at bottom)
Download at
http://vonger.cn/upload/firmware/vocore.dock2.bin
Compile by yourself:
1. clone openwrt 14.07 to your linux pc or vm.
git clone git://git.openwrt.org/14.07/openwrt.git
2. update VOCORE.dts, the following one is mine.
/dts-v1/;
/include/ "rt5350.dtsi"
/ {
compatible = "VoCore", "ralink,rt5350-soc";
model = "VoCore";
palmbus@10000000 {
gpio1: gpio@660 {
status = "okay";
};
spi@b00 {
status = "okay";
m25p80@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "s25fl064k";
reg = <0>;
linux,modalias = "m25p80", "s25fl064k";
spi-max-frequency = <10000000>;
partition@0 {
label = "uboot";
reg = <0x0 0x30000>;
read-only;
};
partition@30000 {
label = "uboot-env";
reg = <0x30000 0x10000>;
read-only;
};
factory: partition@40000 {
label = "factory";
reg = <0x40000 0x10000>;
read-only;
};
partition@50000 {
label = "firmware";
reg = <0x50000 0xfb0000>;
};
};
spidev@1 {
compatible = "linux,spidev";
spi-max-frequency = <10000000>;
reg = <1>;
};
};
gdma: gdma@2800 {
compatible = "ralink,rt2880-gdma";
reg = <0x2800 0x800>;
resets = <&rstctrl 14>;
reset-names = "dma";
interrupt-parent = <&intc>;
interrupts = <7>;
#dma-cells = <1>;
#dma-channels = <16>;
#dma-requests = <8>;
};
i2s: i2s@a00 {
compatible = "ralink,mt7620a-i2s";
reg = <0xa00 0x100>;
resets = <&rstctrl 17>;
reset-names = "i2s";
interrupt-parent = <&intc>;
interrupts = <10>;
dmas = <&gdma 2 &gdma 3>;
dma-names = "tx", "rx";
};
};
pinctrl {
state_default: pinctrl0 {
gpio {
ralink,group = "jtag", "led";
ralink,function = "gpio";
};
gpio_i2s {
ralink,group = "uartf";
ralink,function = "gpio i2s";
};
};
};
ethernet@10100000 {
mtd-mac-address = <&factory 0x4>;
};
esw@10110000 {
ralink,portmap = <0x17>;
};
wmac@10180000 {
ralink,mtd-eeprom = <&factory 0>;
};
ehci@101c0000 {
status = "okay";
};
ohci@101c1000 {
status = "okay";
};
i2c-gpio {
compatible = "i2c-gpio";
gpios = <&gpio0 11 0 &gpio0 14 0>;
i2c-gpio,delay-us = <2>; /* around 400KHz */
#address-cells = <1>;
#size-cells = <0>;
wm8960: wm8960@1a {
compatible = "wm8960";
reg = <0x1a>;
};
};
audio {
compatible = "ralink,wm8960-audio";
model = "wm8960-audio";
cpu-dai = <&i2s>;
codec-dai = <&wm8960>;
};
gpio-export {
compatible = "gpio-export";
#size-cells = <0>;
gpio0 {
gpio-export,name = "gpio0";
gpio-export,direction_may_change = <1>;
gpios = <&gpio0 0 0>;
};
gpio12 {
/* UARTF_DCD_N */
gpio-export,name = "gpio12";
gpio-export,direction_may_change = <1>;
gpios = <&gpio0 12 0>;
};
gpio13 {
/* UARTF_DSR_N */
gpio-export,name = "gpio13";
gpio-export,direction_may_change = <1>;
gpios = <&gpio0 13 0>;
};
/* JTAG */
gpio17 {
/* JTAG_TDO */
gpio-export,name = "gpio17";
gpio-export,direction_may_change = <1>;
gpios = <&gpio0 17 0>;
};
gpio18 {
/* JTAG_TDI */
gpio-export,name = "gpio18";
gpio-export,direction_may_change = <1>;
gpios = <&gpio0 18 0>;
};
gpio19 {
/* JTAG_TMS */
gpio-export,name = "gpio19";
gpio-export,direction_may_change = <1>;
gpios = <&gpio0 19 0>;
};
gpio20 {
/* JTAG_TCLK */
gpio-export,name = "gpio20";
gpio-export,direction_may_change = <1>;
gpios = <&gpio0 20 0>;
};
gpio21 {
/* JTAG_TRST_N */
gpio-export,name = "gpio21";
gpio-export,direction_may_change = <1>;
gpios = <&gpio0 21 0>;
};
/* ETH LEDs */
gpio23 {
/* ETH1_LED */
gpio-export,name = "gpio23";
gpio-export,direction_may_change = <1>;
gpios = <&gpio1 1 0>;
};
gpio24 {
/* ETH2_LED */
gpio-export,name = "gpio24";
gpio-export,direction_may_change = <1>;
gpios = <&gpio1 2 0>;
};
gpio25 {
/* ETH3_LED */
gpio-export,name = "gpio25";
gpio-export,direction_may_change = <1>;
gpios = <&gpio1 3 0>;
};
};
gpio-leds {
compatible = "gpio-leds";
status {
label = "vocore:green:status";
gpios = <&gpio1 0 0>;
};
eth {
label = "vocore:orange:eth";
gpios = <&gpio1 4 0>;
};
};
};
3. Setup dma driver, add dma.mk to [openwrt]/package/kernel/linux/modules/
DMA_MENU:=DMA support
define KernelPackage/ralink-gdma
TITLE:=Ralink GDMA driver
SUBMENU:=$(DMA_MENU)
KCONFIG:= \
CONFIG_DMADEVICES=y \
CONFIG_DMA_ENGINE=y \
CONFIG_DMA_VIRTUAL_CHANNELS \
CONFIG_DMA_RALINK
FILES:= \
$(LINUX_DIR)/drivers/dma/virt-dma.ko \
$(LINUX_DIR)/drivers/dma/ralink-gdma.ko
AUTOLOAD:=$(call AutoLoad,11,ralink-gdma)
endef
define KernelPackage/ralink-gdma/description
Kernel module for Ralink GDMA device support
endef
$(eval $(call KernelPackage,ralink-gdma))
4. Setup ALSA DMA
Whatever I do to the makefile/config, still two files can not be compiled, no idea what is wrong.
They are $LINUX/sound/soc/soc-dmaengine-pcm.c soc-generic-dmaengine-pcm.c
I have to force them to be compiled.
4.1. modify $LINUX/sound/Kconfig, comment that ifneq and endif.
#ifneq ($(CONFIG_SND_SOC_DMAENGINE_PCM),)
snd-soc-core-objs += soc-dmaengine-pcm.o
#endif
#ifneq ($(CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM),)
snd-soc-core-objs += soc-generic-dmaengine-pcm.o
#endif
4.2. modify $OPENWRT/target/linux/ramips/rt305x/config-3.10 to force it compiled.
add two line at end of it.
CONFIG_SND_SOC_DMAENGINE_PCM=y
CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
5. Setup ALSA WM8960/I2S driver.
modify $OPENWRT/target/linux/ramips/modules.mk
@TARGET_ramips_mt7620a to @TARGET_ramips, so it will show not only MT7620a kernel but also in RT5350.
define KernelPackage/sound-mt7620
TITLE:=MT7620 PCM/I2S Alsa Driver
DEPENDS:=@TARGET_ramips +kmod-sound-soc-core +kmod-regmap
KCONFIG:= \
CONFIG_SND_MT7620_SOC_I2S \
CONFIG_SND_MT7620_SOC_WM8960
FILES:= \
$(LINUX_DIR)/sound/soc/ralink/snd-soc-mt7620-i2s.ko \
$(LINUX_DIR)/sound/soc/ralink/snd-soc-mt7620-wm8960.ko \
$(LINUX_DIR)/sound/soc/codecs/snd-soc-wm8960.ko
AUTOLOAD:=$(call AutoLoad,90,snd-soc-wm8960 snd-soc-mt7620-i2s snd-soc-mt7620-wm8960)
$(call AddDepends/sound)
endef
define KernelPackage/sound-mt7620/description
Alsa modules for ralink i2s controller.
endef
$(eval $(call KernelPackage,sound-mt7620))
6. Now, everything is ready. make menuconfig
Select in Kernel modules:
add I2C support/kmod-i2c-gpio-custom;
del I2C support/kmod-i2c-ralink;
add DMA support/kmod-ralink-gdma
add Sound support/kmod-sound-mt7620
7. That’s all, make V=s, build the bin file.
Later I will do more test on this firmware, dma, i2c and i2s works well in this firmware.
Drivers works:
root@OpenWrt:/dev# ls
audio i2c-0 mtd0ro mtd3ro mtdblock1 network_throughput shm urandom
bus kmsg mtd1 mtd4 mtdblock2 null snd watchdog
console log mtd1ro mtd4ro mtdblock3 ppp spidev32766.1 watchdog0
cpu_dma_latency mem mtd2 mtd5 mtdblock4 ptmx tty zero
dsp mixer mtd2ro mtd5ro mtdblock5 pts ttyS0
full mtd0 mtd3 mtdblock0 network_latency random ttyS1
root@OpenWrt:/dev# cd snd
root@OpenWrt:/dev/snd# ls
controlC0 pcmC0D0c pcmC0D0p timer
root@OpenWrt:/dev/snd# lsmod
arc4 1312 2
cfg80211 197639 2 rt2x00lib
compat 2285 3 rt2800soc
crc_ccitt 1019 2 rt2800lib
crc_itu_t 1019 0
crypto_blkcipher 10375 1 arc4
eeprom_93cx6 1807 0
ehci_hcd 29964 1 ehci_platform
ehci_platform 2272 0
gpio_button_hotplug 5984 0
i2c_algo_bit 4538 1 i2c_gpio
i2c_core 15054 6 snd_soc_wm8960
i2c_dev 4064 0
i2c_gpio 2400 0
input_core 24281 1 snd
ip6_tables 8993 3 ip6table_raw
ip6t_REJECT 2336 2
ip6table_filter 608 1
ip6table_mangle 1024 1
ip6table_raw 576 1
ip_tables 9165 4 iptable_nat
ipt_MASQUERADE 1136 1
ipt_REJECT 1776 2
iptable_filter 672 1
iptable_mangle 928 1
iptable_nat 1680 1
iptable_raw 640 1
ipv6 238854 26 ip6t_REJECT
leds_gpio 2944 0
lzo_compress 2082 1 regmap_core
lzo_decompress 1351 1 regmap_core
mac80211 344225 3 rt2800lib
nf_conntrack 44715 13 iptable_nat
nf_conntrack_ftp 5136 1 nf_nat_ftp
nf_conntrack_ipv4 4676 8
nf_conntrack_ipv6 4976 3
nf_conntrack_irc 2784 1 nf_nat_irc
nf_defrag_ipv4 758 1 nf_conntrack_ipv4
nf_defrag_ipv6 8695 1 nf_conntrack_ipv6
nf_nat 9759 7 iptable_nat
nf_nat_ftp 1216 0
nf_nat_ipv4 2526 1 iptable_nat
nf_nat_irc 1008 0
nls_base 5006 1 usbcore
of_i2c 1344 1 i2c_gpio
ohci_hcd 13360 0
ppp_async 6176 0
ppp_generic 19650 3 pppoe
pppoe 7744 0
pppox 1338 1 pppoe
ralink_gdma 4032 2
regmap_core 25039 4 snd_soc_wm8960
regmap_i2c 966 2 snd_soc_wm8960
regmap_spi 1078 1 snd_soc_core
rt2800lib 91441 2 rt2800soc
rt2800mmio 6338 1 rt2800soc
rt2800soc 2464 0
rt2x00lib 34047 5 rt2800soc
rt2x00mmio 1952 2 rt2800soc
rt2x00soc 1218 1 rt2800soc
slhc 4347 1 ppp_generic
snd 39083 10 snd_soc_wm8960
snd_compress 6175 1 snd_soc_core
snd_hwdep 4302 0
snd_mixer_oss 12393 1 snd_pcm_oss
snd_page_alloc 3249 1 snd_pcm
snd_pcm 56509 2 snd_soc_core
snd_pcm_oss 33553 0
snd_rawmidi 14995 0
snd_seq_device 4301 1 snd_rawmidi
snd_soc_core 91031 3 snd_soc_mt7620_wm8960
snd_soc_mt7620_i2s 2896 2
snd_soc_mt7620_wm8960 2048 0
snd_soc_wm8960 16944 1
snd_timer 14382 1 snd_pcm
soundcore 3788 1 snd
usb_common 1160 1 usbcore
usbcore 106727 3 ohci_hcd
virt_dma 1333 1 ralink_gdma
x_tables 10997 26 ipt_MASQUERADE
xt_CT 2272 0
xt_LOG 9552 0
xt_REDIRECT 1056 0
xt_TCPMSS 2704 2
xt_comment 480 53
xt_conntrack 2144 10
xt_id 480 0
xt_limit 992 20
xt_mac 608 0
xt_mark 672 0
xt_multiport 1200 0
xt_nat 1072 0
xt_state 688 0
xt_tcpudp 1712 8
xt_time 1664 0
root@OpenWrt:/sys/class/dma# ls
dma0chan0 dma0chan1 dma0chan10 dma0chan11 dma0chan12 dma0chan13 dma0chan14 dma0chan15 dma0chan2 dma0chan3 dma0chan4 dma0chan5 dma0chan6 dma0chan7 dma0chan8 dma0chan9
root@OpenWrt:/proc# cat interrupts
CPU0
5: 203 MIPS 10100000.ethernet
6: 229856 MIPS rt2800_wmac
7: 353640 MIPS timer
9: 0 INTC 10000100.timer
15: 121 INTC 10002800.gdma
20: 30 INTC serial
25: 1 INTC esw
26: 1 INTC ehci_hcd:usb1, ohci_hcd:usb2
ERR: 0
ralink-gdma.c might have a bug, once I remove the log output, it will not trigger 10002800.gdma interrupts, very weird.