snd_soc_register_card流程


snd_soc_register_card

	-->遍歷dai link,創建 struct snd_soc_pcm_runtime 實例
	-->snd_soc_instantiate_card
		-->soc_bind_dai_link  			// 為每個dai link查找 相應的DAI實例(component_list)、codec DAI實例(component_list)、platform 實例(platform_list)、codec實例
		-->snd_card_new					// 向ALSA注冊sound card
		-->snd_soc_dapm_new_controls	// 注冊machine級別的 widgets
		-->struct snd_soc_card->probe()函數
		-->soc_probe_link_components	// 遍歷每個pcm runtime實例
			-->soc_probe_component		// cpu dai和codec dai都是以component實例注冊。probe cpu dai component
				-->snd_soc_dapm_new_controls	// 注冊component widgets。
					-->snd_soc_dapm_new_dai_widgets	// 遍歷component上的每個dai實例,創建 dai widget實例
				-->調用component的probe函數
				-->snd_soc_add_component_controls	// 注冊component 普通控件
				-->snd_soc_dapm_add_routes			// 注冊component 路由表
			-->soc_probe_component    // probe codec dai component
			-->soc_probe_component	// platform驅動注冊時,把驅動信息例如widget,controls,routes等賦值給了platform實例包含的 component 實例
					
		-->soc_probe_link_dais	// 遍歷每個dai link
			-->cpu dai實例調用 probe()
			-->codec dai實例調用 probe()
			-->dai link實例調用 init()
			-->soc_post_component_init // 為pcm runtime實例創建device對象
			-->soc_new_pcm			// 創建PCM  邏輯設備,分FE和BE
		
		-->snd_soc_dapm_link_dai_widgets			// dai widget 和 stream widget 建立連接 
		-->snd_soc_dapm_connect_dai_link_widgets	 // BE dai widget和 codec dai widget建立連接,codec dai widget和codec stream widget自動建立連接
		-->snd_soc_add_card_controls		// 注冊machine級別的 controls
		-->snd_soc_dapm_add_routes			// 注冊 machine級別的 routes
		
		-->snd_soc_dai_set_fmt				// 遍歷每個dai link,調用 codec dai->driver->ops->set_fmt(dai_link->dai_fmt)
		-->snd_soc_dai_set_fmt				// 遍歷每個dai link,調用 cpu dai->driver->ops->set_fmt(dai_link->dai_fmt)
		
		-->struct snd_soc_card->late_probe()函數
		-->snd_soc_dapm_new_widgets 	// 注冊 DAPM kcontrols
		-->snd_card_register			// 向ALSA 注冊 snd card


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM