This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/AM4378: MCASP master audio out

Part Number: AM4378
Other Parts Discussed in Thread: PCM5122, PCM1862

Tool/software: Linux

I'm trying to output i2s audio to a tas5782 from an am4378. There isn't a Linux driver for the tas5782 but the pcm512x looks to be register compatible. Also, at this point I'm just trying to get the i2s bus to work with mcasp1 as master. So far I haven't been able to get the clocks running (LRCK or BCK).

Here are the relevant entries from the dts file:

 sound {
  compatible = "simple-audio-card";
  simple-audio-card,name = "TAS5782";
 
  simple-audio-card,format = "i2s";

  simple-audio-card,bitclock-master = <&cpu_dia>;
  simple-audio-card,frame-master = <&cpu_dia>;  

  cpu_dia: simple-audio-card,cpu {
   sound-dai = <&mcasp1>;
   //system-clock-frequency = <24000000>;
   //system-clock-id = <0>;
  };

  codec_dia: simple-audio-card,codec {
   sound-dai = <&tas5782>;
   system-clock-frequency = <12288000>;
  };
 };

mcasp1_tas5782_pins_default: mcasp1_tas5782_pins_default {
 pinctrl-single,pins = <
  0x10c ( PIN_INPUT | MUX_MODE4 ) /* (B14) mii1_crs.mcasp1_aclkx */
  0x110 ( PIN_INPUT | MUX_MODE4 ) /* (B13) mii1_rx_er.mcasp1_fsx */  
  0x108 ( PIN_OUTPUT | MUX_MODE4 ) /* (D16) mii1_col.mcasp1_axr2 */
 >;
};

i2c2_tas5782_pins_default: i2c2_tas5782_pins_default {
 pinctrl-single,pins = <
  0x17c ( PIN_INPUT | MUX_MODE3 ) /* (L22) uart1_rtsn.I2C2_SCL */
  0x178 ( PIN_INPUT | MUX_MODE3 ) /* (K22) uart1_ctsn.I2C2_SDA */
 >;
};

&i2c2 {
 pinctrl-names = "default";
 pinctrl-0 = <&i2c2_tas5782_pins_default>;

 status = "okay";
 clock-frequency = <100000>;
 
 tas5782: tas5782@48 {
  compatible = "ti,pcm5122";
  #sound-dai-cells = <0>;
  reg = <0x48>;
  status = "okay";
  
  AVDD-supply = <&dcdc4>;
  DVDD-supply = <&dcdc4>;
   CPVDD-supply = <&dcdc4>;
  
 };
};

&mcasp1 {
        #sound-dai-cells = <0>;
        pinctrl-names = "default";
        pinctrl-0 = <&mcasp1_tas5782_pins_default>;
  
        status = "okay";

        op-mode = <0>;                                /* TARG - I2S */
        tdm-slots = <2>;                              /* TARG - I2S setting */  
        serial-dir = <                                /* TARG ??? 0: INACTIVE, 1: TX, 2: RX */
           0 0 1 0
        >;
       
        tx-num-evt = <1>;
        rx-num-evt = <1>;
};

Here is the contents of the pinmux registers for mcasp1:

Here is the contents of some of the mcasp resgisters after mcasp_start_tx and mcasp_stop_tx after a call to aplay.

When I set the mcasp1 clock pins to output the driver winds up setting bit 15 of AHCLKXCTL = 0. This doesn't make sense to me if I understand things correctly. For master mode it seems to me that the mcasp clock pins should be outputs and AHCLKXCTL bit 15 should be 1 for internal clocks. I have tried forcing this but the system hangs when I call aplay. I must have something misconfigured.

Any help would be appreciated.

PS:

When I change the pin mux entries to this:

mcasp1_tas5782_pins_default: mcasp1_tas5782_pins_default {
 pinctrl-single,pins = <
  0x10c ( PIN_INPUT_PULLUP | MUX_MODE4 ) /* (B14) mii1_crs.mcasp1_aclkx */
  0x110 ( PIN_INPUT_PULLUP | MUX_MODE4 ) /* (B13) mii1_rx_er.mcasp1_fsx */  
  0x108 ( PIN_OUTPUT | MUX_MODE4 ) /* (D16) mii1_col.mcasp1_axr2 */
 >;
};

I see a clock on LRCK (fsk) of 751.9kHz and activity axr2. I don't have easy access to aclkx.

  • Hi Nick,

    If McASP is the master, you would like to configure your aclkx and fsx as PIN_OUTPUT. Also, you need to add the following line of code "system-clock-direction-out" in "cpu_dia: simple-audio-card,cpu { ". This will configure McASP to use internal 24MHz instead of external AHCLKX.

    Regards,

    Krunal

  • With these changes when I run aplay I locks up my serial terminal connection. When I log back in the pcm512x and simple-card kernel modules are unloaded.
  • Hi Nick,

    Could you please share your dts file? Also, I was wondering which PSDK you are using.

    Regards,
    Krunal
  • /*
     * Copyright (C) 2014 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.
     */
    
    /* AM437x SK EVM */
    
    /dts-v1/;
    
    #include "am4372.dtsi"
    #include <dt-bindings/pinctrl/am43xx.h>
    #include <dt-bindings/pwm/pwm.h>
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/input/input.h>
    
    / {
    	model = "TI AM437x SK EVM";
    	compatible = "ti,am437x-sk-evm","ti,am4372","ti,am43";
    
    	aliases {
    		display0 = &lcd0;
    	};
    
    	chosen {
    		stdout-path = &uart0;
    	};
    
    	/* fixed 32k external oscillator clock */
    	clk_32k_rtc: clk_32k_rtc {
    		#clock-cells = <0>;
    		compatible = "fixed-clock";
    		clock-frequency = <32768>;
    	};
    
    	lcd_bl: backlight {
    		compatible = "pwm-backlight";
    		pwms = <&ecap0 0 50000 PWM_POLARITY_INVERTED>;
    		brightness-levels = <0 51 53 56 62 75 101 152 255>;
    		default-brightness-level = <8>;
    	};
    
    	/*TARG*/
    	sound {
    		compatible = "simple-audio-card";
    		simple-audio-card,name = "TAS5782";
    	
    		simple-audio-card,format = "i2s";
    
    		simple-audio-card,bitclock-master = <&cpu_dia>;
    		simple-audio-card,frame-master = <&cpu_dia>;		
    
    		cpu_dia: simple-audio-card,cpu {
    			sound-dai = <&mcasp1>;
    			system-clock-frequency = <24000000>;
    			system-clock-direction-out;
    			//system-clock-id = <0>;
    		};
    
    		codec_dia: simple-audio-card,codec {
    			sound-dai = <&tas5782>;
    			system-clock-frequency = <12288000>;
    		};
    	};
    	
    	matrix_keypad: matrix_keypad0 {
    		compatible = "gpio-matrix-keypad";
    
    		pinctrl-names = "default";
    		pinctrl-0 = <&matrix_keypad_pins>;
    
    		debounce-delay-ms = <5>;
    		col-scan-delay-us = <5>;
    
    		row-gpios = <&gpio5 5 GPIO_ACTIVE_HIGH		/* Bank5, pin5 */
    				&gpio5 6 GPIO_ACTIVE_HIGH>;	/* Bank5, pin6 */
    
    		col-gpios = <&gpio5 13 GPIO_ACTIVE_HIGH		/* Bank5, pin13 */
    				&gpio5 4 GPIO_ACTIVE_HIGH>;	/* Bank5, pin4 */
    
    		linux,keymap = <
    				MATRIX_KEY(0, 0, KEY_DOWN)
    				MATRIX_KEY(0, 1, KEY_RIGHT)
    				MATRIX_KEY(1, 0, KEY_LEFT)
    				MATRIX_KEY(1, 1, KEY_UP)
    			>;
    	};
    
    	leds {
    		compatible = "gpio-leds";
    
    		pinctrl-names = "default";
    		pinctrl-0 = <&leds_pins>;
    
    		led0 {
    			label = "am437x-sk:red:heartbeat";
    			gpios = <&gpio5 0 GPIO_ACTIVE_HIGH>;	/* Bank 5, pin 0 */
    			linux,default-trigger = "heartbeat";
    			default-state = "off";
    		};
    
    		led1 {
    			label = "am437x-sk:green:mmc1";
    			gpios = <&gpio5 1 GPIO_ACTIVE_HIGH>;	/* Bank 5, pin 1 */
    			linux,default-trigger = "mmc0";
    			default-state = "off";
    		};
    
    		led2 {
    			label = "am437x-sk:blue:cpu0";
    			gpios = <&gpio5 2 GPIO_ACTIVE_HIGH>;	/* Bank 5, pin 2 */
    			linux,default-trigger = "cpu0";
    			default-state = "off";
    		};
    
    		led3 {
    			label = "am437x-sk:blue:usr3";
    			gpios = <&gpio5 3 GPIO_ACTIVE_HIGH>;	/* Bank 5, pin 3 */
    			default-state = "off";
    		};
    	};
    
    	lcd0: display {
    		compatible = "newhaven,nhd-4.3-480272ef-atxl", "panel-dpi";
    		label = "lcd";
    
    		pinctrl-names = "default";
    		pinctrl-0 = <&lcd_pins>;
    
    		backlight = <&lcd_bl>;
    
    		enable-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
    
    		panel-timing {
    			clock-frequency = <9000000>;
    			hactive = <480>;
    			vactive = <272>;
    			hfront-porch = <2>;
    			hback-porch = <2>;
    			hsync-len = <41>;
    			vfront-porch = <2>;
    			vback-porch = <2>;
    			vsync-len = <10>;
    			hsync-active = <0>;
    			vsync-active = <0>;
    			de-active = <1>;
    			pixelclk-active = <1>;
    		};
    
    		port {
    			lcd_in: endpoint {
    				remote-endpoint = <&dpi_out>;
    			};
    		};
    	};
    };
    
    &am43xx_pinmux {
    
    /* TARG */
    spi2_cc1310_pins_default: spi2_cc1310_pins_default {
    	pinctrl-single,pins = <
    		0x260 ( PIN_INPUT | MUX_MODE0 ) /* (N20) spi2_sclk.spi2_sclk */
    		0x264 ( PIN_INPUT | MUX_MODE0 ) /* (P22) spi2_d0.spi2_d0 */
    		0x268 ( PIN_OUTPUT | MUX_MODE0 ) /* (P20) spi2_d1.spi2_d1 */
    		0x26c ( PIN_OUTPUT | MUX_MODE0 ) /* (T23) spi2_cs0.spi2_cs0 */
    	>;
    };
    
    mcasp1_tas5782_pins_default: mcasp1_tas5782_pins_default {
    	pinctrl-single,pins = <
    		//0x10c ( PIN_INPUT_PULLUP | MUX_MODE4 ) /* (B14) mii1_crs.mcasp1_aclkx */
    		//0x110 ( PIN_INPUT_PULLUP | MUX_MODE4 ) /* (B13) mii1_rx_er.mcasp1_fsx */
    		0x10c ( PIN_OUTPUT | MUX_MODE4 ) /* (B14) mii1_crs.mcasp1_aclkx */
    		0x110 ( PIN_OUTPUT | MUX_MODE4 ) /* (B13) mii1_rx_er.mcasp1_fsx */				
    		0x108 ( PIN_OUTPUT | MUX_MODE4 ) /* (D16) mii1_col.mcasp1_axr2 */
    	>;
    };
    
    gpio5_pins: gpio5_pins {
        pinctrl-single,pins = <
            0x23c ( PIN_OUTPUT | MUX_MODE7 ) /* (F24) gpio5_9.gpio5_9 */
    		0x238 ( PIN_OUTPUT | MUX_MODE7 ) /* (D25) gpio5_8.gpio5_8 */
        >;
    };
    	
    i2c2_tas5782_pins_default: i2c2_tas5782_pins_default {
    	pinctrl-single,pins = <
    		0x17c ( PIN_INPUT | MUX_MODE3 ) /* (L22) uart1_rtsn.I2C2_SCL */
    		0x178 ( PIN_INPUT | MUX_MODE3 ) /* (K22) uart1_ctsn.I2C2_SDA */
    	>;
    };
    
    
    mcasp0_pcm1862_pins_default: mcasp0_pcm1862_pins_default {
    	pinctrl-single,pins = <
    		0x19c ( PIN_INPUT | MUX_MODE0 ) /* (M24) mcasp0_ahclkr.mcasp0_ahclkr */
    		0x1a0 ( PIN_INPUT | MUX_MODE0 ) /* (L23) mcasp0_aclkr.mcasp0_aclkr */
    		0x1a4 ( PIN_INPUT | MUX_MODE0 ) /* (K23) mcasp0_fsr.mcasp0_fsr */
    		0x1ac ( PIN_INPUT | MUX_MODE2 ) /* (L24) mcasp0_ahclkx.mcasp0_axr3 */
    	>;
    };
    
    /*mcasp0_pcm1862_pins_sleep: mcasp0_pcm1862_pins_sleep {
    	pinctrl-single,pins = <
    		0x19c ( ) 
    		0x1a0 ( ) 
    		0x1a4 ( ) 
    		0x1ac ( )
    	>;
    };*/
    
    gpio_3_pins_default: gpio_3_pins_default {
    	pinctrl-single,pins = <
    		0x190 ( PIN_INPUT | MUX_MODE7 ) /* (N24) mcasp0_aclkx.gpio3[14] */
    		0x194 ( PIN_INPUT | MUX_MODE7 ) /* (N22) mcasp0_fsx.gpio3[15] */
    		0x198 ( PIN_INPUT | MUX_MODE7 ) /* (H23) mcasp0_axr0.gpio3[16] */
    	>;
    };
    
    i2c1_pcm1862_pins_default: i2c1_pcm1862_pins_default {
    	pinctrl-single,pins = <
    		0x15c ( PIN_INPUT | MUX_MODE2 ) /* (T20) spi0_cs0.I2C1_SCL */
    		0x158 ( PIN_INPUT | MUX_MODE2 ) /* (T21) spi0_d1.I2C1_SDA */
    	>;
    };
    
    gpio0_2_pcm1862_pins_default: gpio0_2_pcm1862_pins_default {
    	pinctrl-single,pins = <
    		AM4372_IOPAD(0x150, PIN_INPUT | MUX_MODE7) /* spi0_sclk.gpio0_2 */
    	>;
    };
    
    	matrix_keypad_pins: matrix_keypad_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0xa4c, PIN_OUTPUT | MUX_MODE7)	/* gpio5_13.gpio5_13 */
    			AM4372_IOPAD(0xa50, PIN_OUTPUT | MUX_MODE7)	/* spi4_sclk.gpio5_4 */
    			AM4372_IOPAD(0xa54, PIN_INPUT | MUX_MODE7)	/* spi4_d0.gpio5_5 */
    			AM4372_IOPAD(0xa58, PIN_INPUT | MUX_MODE7)	/* spi4_d1.gpio5_5 */
    		>;
    	};
    
    
    	leds_pins: leds_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0xa28, PIN_OUTPUT | MUX_MODE7)	/* uart3_rxd.gpio5_2 */
    			AM4372_IOPAD(0xa2c, PIN_OUTPUT | MUX_MODE7)	/* uart3_txd.gpio5_3 */
    			AM4372_IOPAD(0xa30, PIN_OUTPUT | MUX_MODE7)	/* uart3_ctsn.gpio5_0 */
    			AM4372_IOPAD(0xa34, PIN_OUTPUT | MUX_MODE7)	/* uart3_rtsn.gpio5_1 */
    		>;
    	};
    
    	i2c0_pins: i2c0_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x988, PIN_INPUT | SLEWCTRL_FAST | MUX_MODE0)  /* i2c0_sda.i2c0_sda */
    			AM4372_IOPAD(0x98c, PIN_INPUT | SLEWCTRL_FAST | MUX_MODE0)  /* i2c0_scl.i2c0_scl */
    		>;
    	};
    
    	mmc1_pins: pinmux_mmc1_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x8f0, PIN_INPUT | MUX_MODE0) /* mmc0_dat3.mmc0_dat3 */
    			AM4372_IOPAD(0x8f4, PIN_INPUT | MUX_MODE0) /* mmc0_dat2.mmc0_dat2 */
    			AM4372_IOPAD(0x8f8, PIN_INPUT | MUX_MODE0) /* mmc0_dat1.mmc0_dat1 */
    			AM4372_IOPAD(0x8fc, PIN_INPUT | MUX_MODE0) /* mmc0_dat0.mmc0_dat0 */
    			AM4372_IOPAD(0x900, PIN_INPUT | MUX_MODE0) /* mmc0_clk.mmc0_clk */
    			AM4372_IOPAD(0x904, PIN_INPUT | MUX_MODE0) /* mmc0_cmd.mmc0_cmd */
    			AM4372_IOPAD(0x960, PIN_INPUT | MUX_MODE7) /* spi0_cs1.gpio0_6 */
    		>;
    	};
    
    	ecap0_pins: backlight_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x964, PIN_OUTPUT | MUX_MODE0) /* eCAP0_in_PWM0_out.eCAP0_in_PWM0_out */
    		>;
    	};
    
    	edt_ft5306_ts_pins: edt_ft5306_ts_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x874, PIN_INPUT | MUX_MODE7)	/* gpmc_wpn.gpio0_31 */
    			AM4372_IOPAD(0x878, PIN_OUTPUT | MUX_MODE7)	/* gpmc_be1n.gpio1_28 */
    		>;
    	};
    
    	vpfe0_pins_default: vpfe0_pins_default {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x9b0, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_hd mode 0*/
    			AM4372_IOPAD(0x9b4, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_vd mode 0*/
    			AM4372_IOPAD(0x9b8, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_field mode 0*/
    			AM4372_IOPAD(0x9bc, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_wen mode 0*/
    			AM4372_IOPAD(0x9c0, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_pclk mode 0*/
    			AM4372_IOPAD(0x9c4, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_data8 mode 0*/
    			AM4372_IOPAD(0x9c8, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_data9 mode 0*/
    			AM4372_IOPAD(0xa08, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_data0 mode 0*/
    			AM4372_IOPAD(0xa0c, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_data1 mode 0*/
    			AM4372_IOPAD(0xa10, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_data2 mode 0*/
    			AM4372_IOPAD(0xa14, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_data3 mode 0*/
    			AM4372_IOPAD(0xa18, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_data4 mode 0*/
    			AM4372_IOPAD(0xa1c, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_data5 mode 0*/
    			AM4372_IOPAD(0xa20, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_data6 mode 0*/
    			AM4372_IOPAD(0xa24, PIN_INPUT_PULLUP | MUX_MODE0)  /* cam0_data7 mode 0*/
    		>;
    	};
    
    	vpfe0_pins_sleep: vpfe0_pins_sleep {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x9b0, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0x9b4, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0x9b8, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0x9bc, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0x9c0, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0x9c4, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0x9c8, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0xa08, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0xa0c, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0xa10, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0xa14, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0xa18, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0xa1c, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0xa20, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    			AM4372_IOPAD(0xa24, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
    		>;
    	};
    
    	clkout1_pin: pinmux_clkout1_pin {
    		pinctrl-single,pins = <
    			0x270 (PIN_OUTPUT_PULLDOWN | MUX_MODE3)	/* XDMA_EVENT_INTR0/CLKOUT1 */
    		>;
    	};
    
    	cpsw_default: cpsw_default {
    		pinctrl-single,pins = <
    			/* Slave 1 */
    			AM4372_IOPAD(0x92c, PIN_OUTPUT | MUX_MODE2)	/* mii1_txclk.rmii1_tclk */
    			AM4372_IOPAD(0x914, PIN_OUTPUT | MUX_MODE2)	/* mii1_txen.rgmii1_tctl */
    			AM4372_IOPAD(0x928, PIN_OUTPUT | MUX_MODE2)	/* mii1_txd0.rgmii1_td0 */
    			AM4372_IOPAD(0x924, PIN_OUTPUT | MUX_MODE2)	/* mii1_txd1.rgmii1_td1 */
    			AM4372_IOPAD(0x920, PIN_OUTPUT | MUX_MODE2)	/* mii1_txd0.rgmii1_td2 */
    			AM4372_IOPAD(0x91c, PIN_OUTPUT | MUX_MODE2)	/* mii1_txd1.rgmii1_td3 */
    			AM4372_IOPAD(0x930, PIN_INPUT | MUX_MODE2)	/* mii1_rxclk.rmii1_rclk */
    			AM4372_IOPAD(0x918, PIN_INPUT | MUX_MODE2)	/* mii1_rxdv.rgmii1_rctl */
    			AM4372_IOPAD(0x940, PIN_INPUT | MUX_MODE2)	/* mii1_rxd0.rgmii1_rd0 */
    			AM4372_IOPAD(0x93c, PIN_INPUT | MUX_MODE2)	/* mii1_rxd1.rgmii1_rd1 */
    			AM4372_IOPAD(0x938, PIN_INPUT | MUX_MODE2)	/* mii1_rxd0.rgmii1_rd2 */
    			AM4372_IOPAD(0x934, PIN_INPUT | MUX_MODE2)	/* mii1_rxd1.rgmii1_rd3 */
    
    			/* Slave 2 */
    			AM4372_IOPAD(0x858, PIN_OUTPUT | MUX_MODE2)	/* gpmc_a6.rgmii2_tclk */
    			AM4372_IOPAD(0x840, PIN_OUTPUT | MUX_MODE2)	/* gpmc_a0.rgmii2_tctl */
    			AM4372_IOPAD(0x854, PIN_OUTPUT | MUX_MODE2)	/* gpmc_a5.rgmii2_td0 */
    			AM4372_IOPAD(0x850, PIN_OUTPUT | MUX_MODE2)	/* gpmc_a4.rgmii2_td1 */
    			AM4372_IOPAD(0x84c, PIN_OUTPUT | MUX_MODE2)	/* gpmc_a3.rgmii2_td2 */
    			AM4372_IOPAD(0x848, PIN_OUTPUT | MUX_MODE2)	/* gpmc_a2.rgmii2_td3 */
    			AM4372_IOPAD(0x85c, PIN_INPUT | MUX_MODE2)	/* gpmc_a7.rgmii2_rclk */
    			AM4372_IOPAD(0x844, PIN_INPUT | MUX_MODE2)	/* gpmc_a1.rgmii2_rtcl */
    			AM4372_IOPAD(0x86c, PIN_INPUT | MUX_MODE2)	/* gpmc_a11.rgmii2_rd0 */
    			AM4372_IOPAD(0x868, PIN_INPUT | MUX_MODE2)	/* gpmc_a10.rgmii2_rd1 */
    			AM4372_IOPAD(0x864, PIN_INPUT | MUX_MODE2)	/* gpmc_a9.rgmii2_rd2 */
    			AM4372_IOPAD(0x860, PIN_INPUT | MUX_MODE2)	/* gpmc_a8.rgmii2_rd3 */
    		>;
    	};
    
    	cpsw_sleep: cpsw_sleep {
    		pinctrl-single,pins = <
    			/* Slave 1 reset value */
    			AM4372_IOPAD(0x92c, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x914, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x928, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x924, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x920, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x91c, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x930, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x918, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x940, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x93c, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x938, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x934, PIN_INPUT_PULLDOWN | MUX_MODE7)
    
    			/* Slave 2 reset value */
    			AM4372_IOPAD(0x858, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x840, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x854, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x850, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x84c, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x848, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x85c, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x844, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x86c, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x868, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x864, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x860, PIN_INPUT_PULLDOWN | MUX_MODE7)
    		>;
    	};
    
    	davinci_mdio_default: davinci_mdio_default {
    		pinctrl-single,pins = <
    			/* MDIO */
    			AM4372_IOPAD(0x948, PIN_INPUT | SLEWCTRL_FAST | MUX_MODE0)	/* mdio_data.mdio_data */
    			AM4372_IOPAD(0x94c, PIN_OUTPUT | MUX_MODE0)			/* mdio_clk.mdio_clk */
    		>;
    	};
    
    	davinci_mdio_sleep: davinci_mdio_sleep {
    		pinctrl-single,pins = <
    			/* MDIO reset value */
    			AM4372_IOPAD(0x948, PIN_INPUT_PULLDOWN | MUX_MODE7)
    			AM4372_IOPAD(0x94c, PIN_INPUT_PULLDOWN | MUX_MODE7)
    		>;
    	};
    
    	dss_pins: dss_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x820, PIN_OUTPUT | MUX_MODE1)	/* gpmc ad 8 -> DSS DATA 23 */
    			AM4372_IOPAD(0x824, PIN_OUTPUT | MUX_MODE1)
    			AM4372_IOPAD(0x828, PIN_OUTPUT | MUX_MODE1)
    			AM4372_IOPAD(0x82c, PIN_OUTPUT | MUX_MODE1)
    			AM4372_IOPAD(0x830, PIN_OUTPUT | MUX_MODE1)
    			AM4372_IOPAD(0x834, PIN_OUTPUT | MUX_MODE1)
    			AM4372_IOPAD(0x838, PIN_OUTPUT | MUX_MODE1)
    			AM4372_IOPAD(0x83c, PIN_OUTPUT | MUX_MODE1)	/* gpmc ad 15 -> DSS DATA 16 */
    			AM4372_IOPAD(0x8a0, PIN_OUTPUT | MUX_MODE0)	/* DSS DATA 0 */
    			AM4372_IOPAD(0x8a4, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8a8, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8ac, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8b0, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8b4, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8b8, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8bc, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8c0, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8c4, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8c8, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8cc, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8d0, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8d4, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8d8, PIN_OUTPUT | MUX_MODE0)
    			AM4372_IOPAD(0x8dc, PIN_OUTPUT | MUX_MODE0)	/* DSS DATA 15 */
    			AM4372_IOPAD(0x8e0, PIN_OUTPUT | MUX_MODE0)	/* DSS VSYNC */
    			AM4372_IOPAD(0x8e4, PIN_OUTPUT | MUX_MODE0)	/* DSS HSYNC */
    			AM4372_IOPAD(0x8e8, PIN_OUTPUT | MUX_MODE0)	/* DSS PCLK */
    			AM4372_IOPAD(0x8ec, PIN_OUTPUT | MUX_MODE0)	/* DSS AC BIAS EN */
    
    		>;
    	};
    
    	qspi_pins: qspi_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x87c, PIN_OUTPUT | MUX_MODE3)	/* gpmc_csn0.qspi_csn */
    			AM4372_IOPAD(0x888, PIN_OUTPUT | MUX_MODE2)	/* gpmc_csn3.qspi_clk */
    			AM4372_IOPAD(0x890, PIN_INPUT | MUX_MODE3)	/* gpmc_advn_ale.qspi_d0 */
    			AM4372_IOPAD(0x894, PIN_INPUT | MUX_MODE3)	/* gpmc_oen_ren.qspi_d1 */
    			AM4372_IOPAD(0x898, PIN_INPUT | MUX_MODE3)	/* gpmc_wen.qspi_d2 */
    			AM4372_IOPAD(0x89c, PIN_INPUT | MUX_MODE3)	/* gpmc_be0n_cle.qspi_d3 */
    		>;
    	};
    
    	lcd_pins: lcd_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0x81c, PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpcm_ad7.gpio1_7 */
    		>;
    	};
    
    	usb1_pins: usb1_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0xac0, PIN_OUTPUT | MUX_MODE0) /* usb0_drvvbus.usb0_drvvbus */
    		>;
    	};
    
    	usb2_pins: usb2_pins {
    		pinctrl-single,pins = <
    			AM4372_IOPAD(0xac4, PIN_OUTPUT | MUX_MODE0) /* usb0_drvvbus.usb0_drvvbus */
    		>;
    	};
    };
    
    /* TARG */
    &spi2 {
        pinctrl-names = "default";
        pinctrl-0 = <&spi2_cc1310_pins_default>;
        status = "okay";
    
        spidev@0 {
            compatible = "rohm,dh2228fv";
            spi-max-frequency = <5000000>;
            reg = <0x0>;
            spi-cpha;
        };
    };
    
    &i2c0 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&i2c0_pins>;
    	clock-frequency = <100000>;
    
    	tps@24 {
    		compatible = "ti,tps65218";
    		reg = <0x24>;
    		interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
    		interrupt-controller;
    		#interrupt-cells = <2>;
    
    		dcdc1: regulator-dcdc1 {
    			/* VDD_CORE limits min of OPP50 and max of OPP100 */
    			regulator-name = "vdd_core";
    			regulator-min-microvolt = <912000>;
    			regulator-max-microvolt = <1144000>;
    			regulator-boot-on;
    			regulator-always-on;
    		};
    
    		dcdc2: regulator-dcdc2 {
    			/* VDD_MPU limits min of OPP50 and max of OPP_NITRO */
    			regulator-name = "vdd_mpu";
    			regulator-min-microvolt = <912000>;
    			regulator-max-microvolt = <1378000>;
    			regulator-boot-on;
    			regulator-always-on;
    		};
    
    		dcdc3: regulator-dcdc3 {
    			regulator-name = "vdds_ddr";
    			regulator-boot-on;
    			regulator-always-on;
    			regulator-state-mem {
    				regulator-on-in-suspend;
    			};
    			regulator-state-disk {
    				regulator-off-in-suspend;
    			};
    		};
    
    		dcdc4: regulator-dcdc4 {
    			regulator-name = "v3_3d";
    			regulator-min-microvolt = <3300000>;
    			regulator-max-microvolt = <3300000>;
    			regulator-boot-on;
    			regulator-always-on;
    		};
    
    		dcdc5: regulator-dcdc5 {
    			compatible = "ti,tps65218-dcdc5";
    			regulator-name = "v1_0bat";
    			regulator-min-microvolt = <1000000>;
    			regulator-max-microvolt = <1000000>;
    			regulator-boot-on;
    			regulator-always-on;
    			regulator-state-mem {
    				regulator-on-in-suspend;
    			};
    		};
    
    		dcdc6: regulator-dcdc6 {
    			compatible = "ti,tps65218-dcdc6";
    			regulator-name = "v1_8bat";
    			regulator-min-microvolt = <1800000>;
    			regulator-max-microvolt = <1800000>;
    			regulator-boot-on;
    			regulator-always-on;
    			regulator-state-mem {
    				regulator-on-in-suspend;
    			};
    		};
    
    		ldo1: regulator-ldo1 {
    			regulator-name = "v1_8d";
    			regulator-min-microvolt = <1800000>;
    			regulator-max-microvolt = <1800000>;
    			regulator-boot-on;
    			regulator-always-on;
    		};
    
    		power-button {
    			compatible = "ti,tps65218-pwrbutton";
    			status = "okay";
    			interrupts = <3 IRQ_TYPE_EDGE_BOTH>;
    		};
    	};
    
    	at24@50 {
    		compatible = "at24,24c256";
    		pagesize = <64>;
    		reg = <0x50>;
    	};
    };
    
    /*TARG*/
    &i2c1 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&i2c1_pcm1862_pins_default>;
    
    	status = "okay";
    	clock-frequency = <100000>;
    
    	pcm1862: pcm1862@4b {
    		compatible = "ti,pcm1862";
    		#sound-dai-cells = <0>;
    		reg = <0x4b>;
    		status = "okay";
    
    		/*AVDD-supply = <&dcdc4>;
    		IOVDD-supply = <&dcdc4>;
    		DVDD-supply = <&dcdc4>;*/
    		avdd = <&dcdc4>;
    		iovdd = <&dcdc4>;
    		dvdd = <&dcdc4>;
    	};
    };
    
    &i2c2 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&i2c2_tas5782_pins_default>;
    
    	status = "okay";
    	clock-frequency = <100000>;
    	
    	tas5782: tas5782@48 {
    		compatible = "ti,pcm5122";
    		#sound-dai-cells = <0>;
    		reg = <0x48>;
    		status = "okay";
    		
    		AVDD-supply = <&dcdc4>; 
    		DVDD-supply = <&dcdc4>; 
     		CPVDD-supply = <&dcdc4>; 
    		
    	};
    };
    
    &gpio5 {
    	pinctrl-names = "default";
        pinctrl-0 = <&gpio5_pins>;
        status = "okay";
    	
        p9 {
            gpio-hog;
            gpios = <9 GPIO_ACTIVE_HIGH>;
            output-high;
            line-name = "TAS5782_nRESET";
        };
    	
        p8 {
            gpio-hog;
            gpios = <8 GPIO_ACTIVE_HIGH>;
            output-high;
            line-name = "TAS5782_nMUTE";
        };	
    };
    
    &epwmss0 {
    	status = "okay";
    };
    
    &ecap0 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&ecap0_pins>;
    };
    
    &gpio0 {
    	status = "okay";
    };
    
    &gpio1 {
    	status = "okay";
    };
    
    &mmc1 {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&mmc1_pins>;
    
    	vmmc-supply = <&dcdc4>;
    	bus-width = <4>;
    	cd-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
    };
    
    &usb2_phy1 {
    	status = "okay";
    };
    
    &usb1 {
    	dr_mode = "otg";
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&usb1_pins>;
    };
    
    &usb2_phy2 {
    	status = "okay";
    };
    
    &usb2 {
    	dr_mode = "host";
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&usb2_pins>;
    };
    
    &qspi {
    	status = "okay";
    	pinctrl-names = "default";
    	pinctrl-0 = <&qspi_pins>;
    
    	spi-max-frequency = <48000000>;
    	m25p80@0 {
    		compatible = "mx66l51235l";
    		spi-max-frequency = <48000000>;
    		reg = <0>;
    		spi-cpol;
    		spi-cpha;
    		spi-tx-bus-width = <1>;
    		spi-rx-bus-width = <4>;
    		#address-cells = <1>;
    		#size-cells = <1>;
    
    		/* MTD partition table.
    		 * The ROM checks the first 512KiB
    		 * for a valid file to boot(XIP).
    		 */
    		partition@0 {
    			label = "QSPI.U_BOOT";
    			reg = <0x00000000 0x000080000>;
    		};
    		partition@1 {
    			label = "QSPI.U_BOOT.backup";
    			reg = <0x00080000 0x00080000>;
    		};
    		partition@2 {
    			label = "QSPI.U-BOOT-SPL_OS";
    			reg = <0x00100000 0x00010000>;
    		};
    		partition@3 {
    			label = "QSPI.U_BOOT_ENV";
    			reg = <0x00110000 0x00010000>;
    		};
    		partition@4 {
    			label = "QSPI.U-BOOT-ENV.backup";
    			reg = <0x00120000 0x00010000>;
    		};
    		partition@5 {
    			label = "QSPI.KERNEL";
    			reg = <0x00130000 0x0800000>;
    		};
    		partition@6 {
    			label = "QSPI.FILESYSTEM";
    			reg = <0x00930000 0x36D0000>;
    		};
    	};
    };
    
    &mac {
    	pinctrl-names = "default", "sleep";
    	pinctrl-0 = <&cpsw_default>;
    	pinctrl-1 = <&cpsw_sleep>;
    	dual_emac = <1>;
    	status = "okay";
    };
    
    &davinci_mdio {
    	pinctrl-names = "default", "sleep";
    	pinctrl-0 = <&davinci_mdio_default>;
    	pinctrl-1 = <&davinci_mdio_sleep>;
    	status = "okay";
    };
    
    &cpsw_emac0 {
    	phy_id = <&davinci_mdio>, <4>;
    	phy-mode = "rgmii";
    	dual_emac_res_vlan = <1>;
    };
    
    &cpsw_emac1 {
    	phy_id = <&davinci_mdio>, <5>;
    	phy-mode = "rgmii";
    	dual_emac_res_vlan = <2>;
    };
    
    &elm {
    	status = "okay";
    };
    
    /*TARG*/
    &mcasp0 {
    	#sound-dai-cells = <0>;
    	pinctrl-names = "default";
    	pinctrl-0 = <&mcasp0_pcm1862_pins_default>;
    
    	status = "okay";
    
    	op-mode = <0>;
    	tdm-slots = <2>;
    	serial-dir = <
    		0 0 0 2
    	>;
    
    	tx-num-evt = <1>;
    	rx-num-evt = <1>;
    };
    
    &mcasp1 {
            #sound-dai-cells = <0>;
            pinctrl-names = "default";
            pinctrl-0 = <&mcasp1_tas5782_pins_default>;
    		
            status = "okay";
    
            op-mode = <0>;                                /* TARG - I2S */
            tdm-slots = <2>;                              /* TARG - I2S setting */   
            serial-dir = <                                /* TARG ??? 0: INACTIVE, 1: TX, 2: RX */
               0 0 1 0
            >;
            
            tx-num-evt = <1>;
            rx-num-evt = <1>;
    };
    
    &dss {
    	status = "okay";
    
    	pinctrl-names = "default";
    	pinctrl-0 = <&dss_pins>;
    
    	port {
    		dpi_out: endpoint@0 {
    			remote-endpoint = <&lcd_in>;
    			data-lines = <24>;
    		};
    	};
    };
    
    &rtc {
    	clocks = <&clk_32k_rtc>, <&clk_32768_ck>;
    	clock-names = "ext-clk", "int-clk";
    	status = "okay";
    };
    
    &wdt {
    	status = "okay";
    };
    
    &cpu {
    	cpu0-supply = <&dcdc2>;
    };
    
    /*&vpfe0 {
    	status = "okay";
    	pinctrl-names = "default", "sleep";
    	pinctrl-0 = <&vpfe0_pins_default>;
    	pinctrl-1 = <&vpfe0_pins_sleep>;
    
    	port {
    		vpfe0_ep: endpoint {
    			remote-endpoint = <&ov2659_1>;
    			ti,am437x-vpfe-interface = <0>;
    			bus-width = <8>;
    			hsync-active = <0>;
    			vsync-active = <0>;
    		};
    	};
    };*/
    
    &wkup_m3_ipc {
    	ti,scale-data-fw = "am43x-evm-scale-data.bin";
    };
    
    &pruss_soc_bus {
    	status = "okay";
    
    	pruss1: pruss@54400000 {
    		status = "okay";
    
    		pru1_0: pru@54434000 {
    			status = "okay";
    		};
    
    		pru1_1: pru@54438000 {
    			status = "okay";
    		};
    	};
    
    	pruss0: pruss@54440000 {
    		status = "okay";
    
    		pru0_0: pru@54474000 {
    			status = "okay";
    		};
    
    		pru0_1: pru@54478000 {
    			status = "okay";
    		};
    	};
    };
    
    &sgx {
    	status = "okay";
    };
    
    We are using buildroot-2018.5 because we have a pcm1862 in the system and there is no driver for it in the PSDK. My dts file is attached with your suggested changes.

     

  • Hi Nick,

    After my suggested changes, is bit 15 of AHCLKXCTL equal to 0 or 1? Also, could you please let me know which kernel version you are using?

    Regards,
    Krunal
  • The kernel is linux-4.16.7. I'm using printks for my debug instead dev_dbg. The terminal session crashes before it gets to the point where the mcasp registers are printed out.
  • Hi Nick,

    Unfortunately, we only support PSDK and our latest release uses Kernel 4.14. Here is a suggestion for your error:

    We could revert back to your original code (before terminal crash) and just add "system-clock-direction-out" in the dts file. In the file davinci-mcasp.c, there is a function called davinci_mcasp_set_sysclk and "system-clock-direction-out" lets the driver select AUXCLK as HCLK. This will ensure that bit 15 of AHCLKXCTL is equal to 1 and I have verified this on Beagle Bone Black running PSDK 5.0.

    Regards,

    Krunal

  • Hi Nick,

    I will be closing the ticket and if you are still experiencing issues, feel free to open the ticket in the future.

    Regards,
    Krunal
  • Sorry for the delay. Thanks for your help. I am going to try reverting to the PSDK. I just haven't had time.