/ { sound: sound { compatible = "simple-audio-card"; simple-audio-card,name = "Odroid-XU4"; simple-audio-card,widgets = "Headphone", "Headphone Jack"; simple-audio-card,routing = "Headphone Jack", "HPL", "Headphone Jack", "HPR"; simple-audio-card,format = "i2s"; simple-audio-card,bitclock-master = <&link0_codec>; simple-audio-card,frame-master = <&link0_codec>; simple-audio-card,cpu { sound-dai = <&i2s0 0>; system-clock-frequency = <19200000>; }; link0_codec: simple-audio-card,codec { sound-dai = <&cs4344>; clocks = <&i2s0 CLK_I2S_CDCLK>; }; }; cs4344: cs4344@10 { compatible = "cirrus,cs4344"; clocks = <&i2s0 CLK_I2S_CDCLK>; clock-names = "mclk"; #sound-dai-cells = <0>; status = "okay"; }; }; ============================================== CODEC PART: #include #include #include #include #include #include #include #include #include #include #include "cs4344.h" static const struct snd_soc_dapm_widget cs4344_dapm_widgets[] = { SND_SOC_DAPM_OUTPUT("HPL"), SND_SOC_DAPM_OUTPUT("HPR"), }; static const struct snd_soc_dapm_route cs4344_dapm_routes[] = { { "HPL", NULL, "Playback" }, { "HPR", NULL, "Playback" }, }; static struct snd_soc_dai_driver cs4344_dai = { .name = "cs4344", .playback = { .stream_name = "Playback", .channels_min = 1, .channels_max = 2, .rates= SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | \ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | \ SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | \ SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000, .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE, }, }; static struct snd_soc_codec_driver soc_codec_dev_cs4344 = { .dapm_widgets = cs4344_dapm_widgets, .num_dapm_widgets = ARRAY_SIZE(cs4344_dapm_widgets), .dapm_routes = cs4344_dapm_routes, .num_dapm_routes = ARRAY_SIZE(cs4344_dapm_routes), }; static int cs4344_probe(struct platform_device *pdev){ printk ("****** probe cs4344 ******\n"); return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_cs4344, &cs4344_dai, 1); } static int cs4344_remove(struct platform_device *pdev){ printk ("****** remove cs4344 ******\n"); snd_soc_unregister_codec(&pdev->dev); return 0; } static const struct of_device_id cs4344_of_match[] = { { .compatible = "cirrus,cs4344", }, { } }; MODULE_DEVICE_TABLE(of, cs4344_of_match); static struct platform_driver cs4344_codec_driver = { .driver = { .name = "cs4344", .of_match_table = of_match_ptr(cs4344_of_match), }, .probe = cs4344_probe, .remove = cs4344_remove, }; module_platform_driver(cs4344_codec_driver); MODULE_DESCRIPTION("ASoC cs4344 driver"); MODULE_AUTHOR("xyz"); MODULE_LICENSE("GPL"); MODULE_ALIAS("platform:cs4344");