diff --git a/arch/arm/configs/nanopi3_core-qt_hdmi_defconfig b/arch/arm/configs/nanopi3_core-qt_hdmi_defconfig index 9e8731072a1..8055290818e 100644 --- a/arch/arm/configs/nanopi3_core-qt_hdmi_defconfig +++ b/arch/arm/configs/nanopi3_core-qt_hdmi_defconfig @@ -2262,22 +2262,28 @@ CONFIG_FONT_8x8=y CONFIG_FONT_8x16=y # CONFIG_LOGO is not set CONFIG_SOUND=y -# CONFIG_SOUND_OSS_CORE is not set +CONFIG_SOUND_OSS_CORE=y +CONFIG_SOUND_OSS_CORE_PRECLAIM=y CONFIG_SND=y CONFIG_SND_TIMER=y CONFIG_SND_PCM=y +CONFIG_SND_HWDEP=y CONFIG_SND_RAWMIDI=y CONFIG_SND_JACK=y -# CONFIG_SND_SEQUENCER is not set -# CONFIG_SND_MIXER_OSS is not set -# CONFIG_SND_PCM_OSS is not set +CONFIG_SND_SEQUENCER=y +CONFIG_SND_SEQ_DUMMY=y +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +CONFIG_SND_SEQUENCER_OSS=y # CONFIG_SND_HRTIMER is not set # CONFIG_SND_DYNAMIC_MINORS is not set # CONFIG_SND_SUPPORT_OLD_API is not set # CONFIG_SND_VERBOSE_PROCFS is not set # CONFIG_SND_VERBOSE_PRINTK is not set # CONFIG_SND_DEBUG is not set -# CONFIG_SND_RAWMIDI_SEQ is not set +CONFIG_SND_RAWMIDI_SEQ=y # CONFIG_SND_OPL3_LIB_SEQ is not set # CONFIG_SND_OPL4_LIB_SEQ is not set # CONFIG_SND_SBAWE_SEQ is not set @@ -2286,22 +2292,25 @@ CONFIG_SND_JACK=y # CONFIG_SND_ARM is not set # CONFIG_SND_SPI is not set CONFIG_SND_USB=y -# CONFIG_SND_USB_AUDIO is not set +CONFIG_SND_USB_AUDIO=y # CONFIG_SND_USB_UA101 is not set # CONFIG_SND_USB_CAIAQ is not set # CONFIG_SND_USB_6FIRE is not set CONFIG_SND_SOC=y CONFIG_SND_NXP_SOC=y -# CONFIG_SND_NXP_DFS is not set +CONFIG_SND_NXP_DFS=y +CONFIG_SND_NXP_PLL_2=y +# CONFIG_SND_NXP_PLL_3 is not set +CONFIG_SND_NXP_PLLDEV=2 CONFIG_SND_NXP_I2S=y CONFIG_SND_NXP_I2S_CH0=y -# CONFIG_SND_NXP_I2S_CH1 is not set +CONFIG_SND_NXP_I2S_CH1=y # CONFIG_SND_NXP_I2S_CH2 is not set CONFIG_SND_NXP_SPDIF_TX=y CONFIG_SND_SPDIF_TRANSCIEVER=y # CONFIG_SND_SPDIF_RECEIVER is not set # CONFIG_SND_PDM_REC is not set -# CONFIG_SND_CODEC_NULL is not set +CONFIG_SND_CODEC_NULL=y # CONFIG_SND_CODEC_RT5631 is not set CONFIG_SND_CODEC_ES8316=y # CONFIG_SND_CODEC_ALC5623 is not set diff --git a/arch/arm/mach-s5p6818/devices.c b/arch/arm/mach-s5p6818/devices.c index b7b88558ac2..d9c30c49406 100644 --- a/arch/arm/mach-s5p6818/devices.c +++ b/arch/arm/mach-s5p6818/devices.c @@ -549,6 +549,8 @@ static unsigned long i2s_ext_mclk_set_clock(unsigned long clk, int ch) nxp_soc_gpio_set_io_dir(PAD_GPIO_D + 13, 0); break; case 1: + nxp_soc_gpio_set_io_func(PAD_GPIO_A + 28, NX_GPIO_PADFUNC_0); + nxp_soc_gpio_set_io_dir(PAD_GPIO_A + 28, 0); case 2: nxp_soc_gpio_set_io_func(PAD_GPIO_A + 28, NX_GPIO_PADFUNC_0); nxp_soc_gpio_set_io_dir(PAD_GPIO_A + 28, 0); diff --git a/arch/arm/plat-s5p6818/nanopi3/device.c b/arch/arm/plat-s5p6818/nanopi3/device.c index 45aeeee9597..558d1ed2fa8 100644 --- a/arch/arm/plat-s5p6818/nanopi3/device.c +++ b/arch/arm/plat-s5p6818/nanopi3/device.c @@ -683,6 +683,80 @@ static struct platform_device spdif_trans_dai = { }; #endif +#if defined(CONFIG_SND_CODEC_NULL) +static struct platform_device snd_null = { + .name = "snd-null", + .id = -1, +}; + +struct nxp_snd_dai_plat_data snd_null_dai_data = { + .i2s_ch = 0, +#if defined(CONFIG_SND_NXP_DFS) + .sample_rate = SNDRV_PCM_RATE_8000_192000, + .pcm_format = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE, +#else + .sample_rate = 48000, + .pcm_format = SNDRV_PCM_FMTBIT_S16_LE, +#endif +}; + +static struct platform_device snd_null_dai = { + .name = "snd-null-card", + .id = -1, + .dev = { + .platform_data = &snd_null_dai_data, + } +}; +//------------------------------------- +static struct platform_device snd_null_1 = { + .name = "snd-null", + .id = 1, +}; + +struct nxp_snd_dai_plat_data snd_null_dai_data_1 = { + .i2s_ch = 1, +#if defined(CONFIG_SND_NXP_DFS) + .sample_rate = SNDRV_PCM_RATE_8000_192000, + .pcm_format = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE, +#else + .sample_rate = 48000, + .pcm_format = SNDRV_PCM_FMTBIT_S16_LE, +#endif +}; + +static struct platform_device snd_null_dai_1 = { + .name = "snd-null-card", + .id = 1, + .dev = { + .platform_data = &snd_null_dai_data_1 , + } +}; +//------------------------------------- +static struct platform_device snd_null_2 = { + .name = "snd-null", + .id = 2, +}; + +struct nxp_snd_dai_plat_data snd_null_dai_data_2 = { + .i2s_ch = 2, +#if defined(CONFIG_SND_NXP_DFS) + .sample_rate = SNDRV_PCM_RATE_8000_192000, + .pcm_format = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE, +#else + .sample_rate = 48000, + .pcm_format = SNDRV_PCM_FMTBIT_S16_LE, +#endif +}; + +static struct platform_device snd_null_dai_2 = { + .name = "snd-null-card", + .id = 2, + .dev = { + .platform_data = &snd_null_dai_data_2 , + } +}; +#endif + #if defined(CONFIG_SND_CODEC_ES8316) || defined(CONFIG_SND_CODEC_ES8316_MODULE) #define ES8316_I2C_BUS (0) @@ -695,8 +769,13 @@ static struct i2c_board_info __initdata es8316_i2c_bdi = { /* DAI */ struct nxp_snd_dai_plat_data i2s_dai_data = { .i2s_ch = 0, +#if defined(CONFIG_SND_NXP_DFS) + .sample_rate = SNDRV_PCM_RATE_8000_192000, + .pcm_format = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE, +#else .sample_rate = 48000, .pcm_format = SNDRV_PCM_FMTBIT_S16_LE, +#endif #if 1 .hp_jack = { .support = 0, @@ -1877,6 +1956,15 @@ void __init nxp_board_devs_register(void) } #endif +#if defined(CONFIG_SND_CODEC_NULL) + platform_device_register(&snd_null); + platform_device_register(&snd_null_dai); + platform_device_register(&snd_null_1); + platform_device_register(&snd_null_dai_1); + platform_device_register(&snd_null_2); + platform_device_register(&snd_null_dai_2); +#endif + #if defined(CONFIG_V4L2_NXP) || defined(CONFIG_V4L2_NXP_MODULE) printk("plat: add device nxp-v4l2\n"); back_camera_power_enable(1); diff --git a/arch/arm/plat-s5p6818/nanopi3/include/cfg_gpio.h b/arch/arm/plat-s5p6818/nanopi3/include/cfg_gpio.h index 108e6b22eb1..04eb9b580d5 100644 --- a/arch/arm/plat-s5p6818/nanopi3/include/cfg_gpio.h +++ b/arch/arm/plat-s5p6818/nanopi3/include/cfg_gpio.h @@ -54,9 +54,9 @@ #define PAD_GPIOA25 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_0) // 0: GPIO ,1: PDVSYNC ,2:_ ,3:_ = #define PAD_GPIOA26 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_0) // 0: GPIO ,1: PDHSYNC ,2:_ ,3:_ = #define PAD_GPIOA27 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_0) // 0: GPIO ,1: PDDE ,2:_ ,3:_ = -#define PAD_GPIOA28 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_0) // 0: GPIO ,1: VP0_EXTCLK ,2: I2S2_CLK ,3: I2S1_CLK = +#define PAD_GPIOA28 (PAD_MODE_ALT | PAD_FUNC_ALT3 | PAD_LEVEL_LOW | PAD_PULL_DN | PAD_STRENGTH_0) // 0: GPIO ,1: VP0_EXTCLK ,2: I2S2_CLK ,3: I2S1_CLK = #define PAD_GPIOA29 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_1) // 0: GPIO ,1: SDMMC0_CCLK ,2:_ ,3:_ = -#define PAD_GPIOA30 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_0) // 0: GPIO ,1: VIP0_VD[0] ,2: SDEX[0] ,3: I2S1_BCLK = +#define PAD_GPIOA30 (PAD_MODE_ALT | PAD_FUNC_ALT3 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_0) // 0: GPIO ,1: VIP0_VD[0] ,2: SDEX[0] ,3: I2S1_BCLK = #define PAD_GPIOA31 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_1) // 0: GPIO ,1: SDMMC0_CMD ,2:_ ,3:_ = /*------------------------------------------------------------------------------ @@ -66,16 +66,16 @@ * | PAD_MODE_XXX | PAD_FUNC_ALT(0,1,2,3) | PAD_LEVEL_XXX | PAD_PULL_UP,OFF | PAD_STRENGTH_0,1,2,3 * -----------------------------------------------------------------------------*/ -#define PAD_GPIOB0 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_DN | PAD_STRENGTH_0) // 0: GPIO ,1: VIP0_VD[1] ,2: SDEX[1] ,3: I2S1_LRCLK = +#define PAD_GPIOB0 (PAD_MODE_ALT | PAD_FUNC_ALT3 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_0) // 0: GPIO ,1: VIP0_VD[1] ,2: SDEX[1] ,3: I2S1_LRCLK = #define PAD_GPIOB1 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_1) // 0: GPIO ,1: SDMMC0_CDATA[0] ,2:_ ,3:_ = #define PAD_GPIOB2 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_DN | PAD_STRENGTH_0) // 0: GPIO ,1: VIP0_VD[2] ,2: SDEX[2] ,3: I2S2_BCLK = #define PAD_GPIOB3 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_1) // 0: GPIO ,1: SDMMC0_CDATA[1] ,2:_ ,3:_ = #define PAD_GPIOB4 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_DN | PAD_STRENGTH_0) // 0: GPIO ,1: VIP0_VD[3] ,2: SDEX[3] ,3: I2S2_LRCLK = #define PAD_GPIOB5 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_1) // 0: GPIO ,1: SDMMC0_CDATA[2] ,2:_ ,3:_ = -#define PAD_GPIOB6 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_DN | PAD_STRENGTH_0) // 0: GPIO ,1: VIP0_VD[4] ,2: SDEX[4] ,3: I2S1SDO = +#define PAD_GPIOB6 (PAD_MODE_ALT | PAD_FUNC_ALT3 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_0) // 0: GPIO ,1: VIP0_VD[4] ,2: SDEX[4] ,3: I2S1SDO = #define PAD_GPIOB7 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_1) // 0: GPIO ,1: SDMMC0_CDATA[3] ,2:_ ,3:_ = #define PAD_GPIOB8 (PAD_MODE_IN | PAD_FUNC_ALT0 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_0) // 0: GPIO ,1: VIP0_VD[5] ,2: SDEX[5] ,3: I2S2SDO = -#define PAD_GPIOB9 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_DN | PAD_STRENGTH_0) // 0: GPIO ,1: VIP0_VD[6] ,2: SDEX[6] ,3: I2S1SDI = +#define PAD_GPIOB9 (PAD_MODE_ALT | PAD_FUNC_ALT3 | PAD_LEVEL_LOW | PAD_PULL_DN | PAD_STRENGTH_0) // 0: GPIO ,1: VIP0_VD[6] ,2: SDEX[6] ,3: I2S1SDI = #define PAD_GPIOB10 (PAD_MODE_ALT | PAD_FUNC_ALT1 | PAD_LEVEL_LOW | PAD_PULL_DN | PAD_STRENGTH_0) // 0: GPIO ,1: VIP0_VD[7] ,2: SDEX[7] ,3: I2S2SDI = #define PAD_GPIOB11 (PAD_MODE_ALT | PAD_FUNC_ALT0 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_0) // 0: CLE ,1: CLE1 ,2: GPIO ,3:_ = #define PAD_GPIOB12 (PAD_MODE_OUT | PAD_FUNC_ALT2 | PAD_LEVEL_LOW | PAD_PULL_OFF | PAD_STRENGTH_0) // 0: ALE ,1: ALE1 ,2: GPIO ,3:_ = diff --git a/arch/arm/plat-s5p6818/nanopi3/include/cfg_main.h b/arch/arm/plat-s5p6818/nanopi3/include/cfg_main.h index 03ab4263067..00cdd3b3680 100644 --- a/arch/arm/plat-s5p6818/nanopi3/include/cfg_main.h +++ b/arch/arm/plat-s5p6818/nanopi3/include/cfg_main.h @@ -171,7 +171,7 @@ #define CFG_AUDIO_I2S1_TRANS_MODE 0 // 0:I2S, 1:Left 2:Right justified */ #define CFG_AUDIO_I2S1_FRAME_BIT 48 // 32, 48 #define CFG_AUDIO_I2S1_SAMPLE_RATE 48000 -#define CFG_AUDIO_I2S1_PRE_SUPPLY_MCLK 0 +#define CFG_AUDIO_I2S1_PRE_SUPPLY_MCLK 1 #define CFG_AUDIO_I2S2_MASTER_MODE CTRUE // CTRUE #define CFG_AUDIO_I2S2_TRANS_MODE 0 // 0:I2S, 1:Left 2:Right justified */ diff --git a/sound/soc/nexell/nxp-i2s.c b/sound/soc/nexell/nxp-i2s.c index b924bd3f682..9fcc139715b 100644 --- a/sound/soc/nexell/nxp-i2s.c +++ b/sound/soc/nexell/nxp-i2s.c @@ -38,9 +38,9 @@ #include "nxp-i2s.h" -/* + #define pr_debug printk -*/ + #if defined(CONFIG_SND_NXP_DFS) #define SND_NXP_DFS_PLLNO 5 // virtual no diff --git a/sound/soc/nexell/nxp-null.c b/sound/soc/nexell/nxp-null.c index 24c64f4e31f..31c36dead11 100644 --- a/sound/soc/nexell/nxp-null.c +++ b/sound/soc/nexell/nxp-null.c @@ -104,7 +104,7 @@ static int snd_null_hw_params(struct snd_pcm_substream *substream, pr_debug("%s\n", __func__); - ret = snd_soc_dai_set_sysclk(cpu_dai, 0, sample_rate, SND_SOC_CLOCK_IN); + ret = snd_soc_dai_set_sysclk(cpu_dai, 0, sample_rate, SND_SOC_CLOCK_OUT); if (0 > ret) return ret; /*