There are some hoops to jump through to get access to the necessary compilers etc. for the DSP, although again Joao who I CCed on your other email would be a good place to start the process of getting access to that.
Thank you, this part may come later this year.
Yeah please avoid doing this, the driver should support all the features you require from the sound of things. There should be no need to hard code register writes.
What sort of things are you setting up with these register writes? Lets see if I can point you in the direction of the correct place to put some of those.
Thanks!
The clocking:
regmap_write(arizona->regmap, ARIZONA_CLOCK_32K_1, 0x00042); // Use Sysclk, Default = 0x0041 regmap_write(arizona->regmap, ARIZONA_SYSTEM_CLOCK_1, 0x0200); // Use MCLK1, and 24.576MHz from BBB McASP, Default = 0x0304
These would seem to be the relevant device tree entries from Documentation/devicetree/bindings/mfd/arizona.txt:
- clocks: Should reference the clocks supplied on MCLK1 and MCLK2 - clock-names: Should contains two strings: "mclk1" for the clock supplied on MCLK1, recommended to be a high quality audio reference clock "mclk2" for the clock supplied on MCLK2, recommended to be an always on 32k clock
Still trying to figure out how to specify these. I have pasted our device tree to the end of this email. (Oh, gpio for BBB McASP clock is deliberately routed away from gpio1_27, because somehow we are not convincing the driver to enable it, and so we have a gpio_set_value(MY_CLOCK_GPIO_ENABLE,1); in arizona-core probe until we figure out how.
We had to simply disinvite extcon-arizona from the party though. On both the WM5102-6271-CS137-M-SCH-REV2.03 and our protoboard, JACKDET is an IRQ gone wild. On the Wolfson board, inserting my headphones into the jack shut it up. But on our protoboard, where we left that pin unconnected, we found that the probe of extcon-arizona hard enables JACKDET.
I am surprised you are seeing issues on one of our boards, they are all fairly well tested here. I would quite like to see a kernel log on that one if I can?
Okay, I’ll hook up the dev board, likely Thurs-Fri after we complete board bring up.
Apart from that, this all seems reasonable, the extcon driver exists to control the jack detection. If that is not wired up on your system then not building in this part of the system seems the correct response.
Thanks, Charles
Thank you, Clark.
Device Tree _______________________________________
/* * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ /dts-v1/;
#include "am33xx.dtsi" #include "am335x-bone-common.dtsi" #include "dt-bindings/mfd/arizona.h"
/ { model = "TI AM335x BeagleBone Black"; compatible = "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
leds { pinctrl-names = "default"; pinctrl-0 = <&led_pins_default>; compatible = "gpio-leds";
led@1 { label= "led_ir"; gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>; default-state = "off"; };
led@2 { label= "led_red"; gpios = <&gpio1 14 GPIO_ACTIVE_HIGH>; default-state = "off"; }; };
ldo18: ldo18 { compatible = "regulator-fixed"; regulator-name = "DC_1V8"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; enable-active-high; regulator-always-on; };
ldo50: ldo50 { /* BBB VCC_5V */ compatible = "regulator-fixed"; regulator-name = "DC_5V0"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; enable-active-high; regulator-always-on; };
clk_audio_fixed: clk_audio_fixed { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <24576000>; };
clk_audio: clk_audio { #clock-cells = <0>; compatible = "gpio-gate-clock"; clocks = <&clk_audio_fixed>; enable-gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>; /* BeagleBone Black Clk enable on GPIO1_27 */ };
sound: sound@0 { status = "okay"; compatible = "simple-audio-card"; simple-audio-card,name = "WM5102"; simple-audio-card,widgets = "Line", "Line In"; simple-audio-card,routing = "IN1L", "Line In", "IN1R", "Line In", "IN2L", "Line In", "IN2R", "Line In", "IN3L", "Line In", "IN3R", "Line In"; /* simple-audio-card,hp-det-gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>; /*TP38*/ /*simple-audio-card,dai-link {*/ simple-audio-card,format = "dsp_b"; simple-audio-card,bitclock-master = <&sound_master>; simple-audio-card,frame-master = <&sound_master>; simple-audio-card,cpu { sound-dai = <&mcasp0>; clocks = <&clk_audio>; /* dai-tdm-slot-num = <6>; dai-tdm-slot-width = <32>; */ }; sound_master: simple-audio-card,codec { sound-dai = <&wm5102>; clocks = <&clk_audio>; system-clock-id = <1>; /* ARIZONA_CLK_SYSCLK */ /* dai-tdm-slot-num = <6>; dai-tdm-slot-width = <32>; */ }; /* };*/
};
};
&ldo3_reg { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-always-on; };
&mmc1 { vmmc-supply = <&vmmcsd_fixed>; };
&mmc2 { vmmc-supply = <&vmmcsd_fixed>; pinctrl-names = "default"; pinctrl-0 = <&emmc_pins>; bus-width = <8>; status = "okay"; };
&am33xx_pinmux {
nxp_hdmi_bonelt_pins: nxp_hdmi_bonelt_pins { pinctrl-single,pins = < 0x1b0 0x03 /* xdma_event_intr0, OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT */ 0x18c ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (C16) I2C0_SCL.I2C0_SCL */ 0x188 ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (C17) I2C0_SDA.I2C0_SDA */ >; }; nxp_hdmi_bonelt_off_pins: nxp_hdmi_bonelt_off_pins { pinctrl-single,pins = < 0x1b0 0x03 /* xdma_event_intr0, OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT */ 0x18c ( PIN_INPUT | MUX_MODE0 ) /* (C16) I2C0_SCL.I2C0_SCL */ 0x188 ( PIN_INPUT | MUX_MODE0 ) /* (C17) I2C0_SDA.I2C0_SDA */ >; };
led_pins_default: led_pins_default { pinctrl-single,pins = < 0x178 ( PIN_OUTPUT | MUX_MODE7 ) /* (D18) uart1_ctsn.gpio0[12] TP38 */ 0x17c ( PIN_OUTPUT | MUX_MODE7 ) /* (D17) uart1_rtsn.gpio0[13] TP39 */ 0x28 ( PIN_OUTPUT_PULLDOWN | MUX_MODE7 ) /* (T11) gpmc_ad10.gpio0[26] IR LED */ 0x38 ( PIN_OUTPUT_PULLDOWN | MUX_MODE7 ) /* (V13) gpmc_ad14.gpio1[14] RED LED */ >; };
accel_pins_default: accel_pins_default { pinctrl-single,pins = < 0xe8 ( PIN_OUTPUT_PULLDOWN | MUX_MODE7 ) /* (V5) lcd_pclk.gpio2[24] ACCEL_ST */ 0xec ( PIN_OUTPUT_PULLUP | MUX_MODE7 ) /* (R6) lcd_ac_bias_en.gpio2[25] ACCEL_FS */ >; };
mcasp0_slave_pins_default: mcasp0_slave_pins_default { pinctrl-single,pins = < 0x1a0 ( PIN_INPUT | MUX_MODE0 ) /* (B12) mcasp0_aclkr.mcasp0_aclkr */ 0x1a4 ( PIN_INPUT | MUX_MODE0 ) /* (C13) mcasp0_fsr.mcasp0_fsr */ 0x198 ( PIN_INPUT | MUX_MODE0 ) /* (D12) mcasp0_axr0.mcasp0_axr0 */ 0x19c ( PIN_OUTPUT | MUX_MODE2 ) /* (C12) mcasp0_ahclkr.mcasp0_axr2 */ >; };
wm5102_pins_default: wm5102_pins_default { pinctrl-single,pins = < 0x6c ( PIN_OUTPUT_PULLUP | MUX_MODE7 ) /* (V17) gpmc_a11.gpio1[27] 24.576 MHZ CE */ 0x78 ( PIN_OUTPUT_PULLDOWN | MUX_MODE7 ) /* (U18) gpmc_be1n.gpio1[28] /RESET */ 0x7c ( PIN_OUTPUT_PULLUP | MUX_MODE7 ) /* (V6) gpmc_csn0.gpio1[29] LDOENA */ 0xe4 ( PIN_INPUT | MUX_MODE7 ) /* (R5) lcd_hsync.gpio2[23] /IRQ */ 0x1ac ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (A14) mcasp0_ahclkx.gpio3[21] AUDIO_MCLK */ 0x15c ( PIN_INPUT_PULLUP | MUX_MODE2 ) /* (A16) spi0_cs0.I2C1_SCL */ 0x158 ( PIN_INPUT_PULLUP | MUX_MODE2 ) /* (B16) spi0_d1.I2C1_SDA */ 0x164 ( PIN_INPUT | MUX_MODE7 ) /* (C18) eCAP0_in_PWM0_out.gpio0[7] (AUDIO BCLK) HIGHZ*/ >; };
};
&lcdc { status = "disabled"; port { lcdc_0: endpoint@0 { remote-endpoint = <&hdmi_0>; }; }; };
&i2c0 { tda19988 { compatible = "nxp,tda998x"; reg = <0x70>; pinctrl-names = "default", "off"; pinctrl-0 = <&nxp_hdmi_bonelt_pins>; pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>;
port { hdmi_0: endpoint@0 { remote-endpoint = <&lcdc_0>; }; }; }; };
&i2c1 { pinctrl-names = "default"; pintctrl-0 = <&wm5102_pins_default>; status = "okay"; clock-frequency = <400000>;
wm5102: wm5102@1b { compatible = "wlf,wm5102"; reg = <0x1b>; status = "okay"; /* /IRQ is connected to GPIO2_23. Mask from HiassofT DT for cirrus audio board was 8 */ interrupts = <23 8>; interrupt-controller; #interrupt-cells = <2>; interrupt-parent = <&gpio2>; /*clock-names = "mclk1", "mclk2";*/ gpio-controller; #gpio-cells = <2>; wlf,gpio-defaults = < ARIZONA_GP_FN_TXLRCLK ARIZONA_GP_DEFAULT ARIZONA_GP_DEFAULT ARIZONA_GP_DEFAULT ARIZONA_GP_DEFAULT >; wlf,reset = <&gpio1 28 GPIO_ACTIVE_HIGH>; /* allow /RESET wm5102 by driver (via inverter)*/ wlf,ldoena = <&gpio1 29 GPIO_ACTIVE_HIGH>; /* allow LDOENA wm5102 by driver */ LDOVDD-supply = <&ldo18>; /* fixed 1V8 regulator */ AVDD-supply = <&ldo18>; DBVDD1-supply = <&ldo18>; DBVDD2-supply = <&ldo18>; DBVDD3-supply = <&ldo18>; CPVDD-supply = <&ldo18>; /*DCVDD-supply = <&ldo18>; /* supplied by LDO1 */ MICVDD-supply = <&ldo50>; SPKVDDL-supply = <&ldo50>; /* fixed VDD_5V from BBB */ SPKVDDR-supply = <&ldo50>; #sound-dai-cells = <0>; /* we haven't figured out how reference the internal LDO, pin is pulled up */ #if 0 ldo1: ldo1 { wlf,ldoena = <&gpio1 29 GPIO_ACTIVE_HIGH>; /* allow LDOENA wm5102 by driver */ }; #endif };
};
&mcasp0 { pinctrl-names = "default"; pinctrl-0 = <&mcasp0_slave_pins_default>;
status = "okay"; op-mode = <0>; /* MCASP_IIS_MODE */ tdm-slots = <6>; /* 4 serializers */ serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX - 0 2 0 0 */ 2 0 0 0 >; tx-num-evt = <32>; rx-num-evt = <32>; #sound-dai-cells = <0>; };
&rtc { system-power-controller; };