Re: [問題] 關於 I2C_BOARD_INFO 和 id_table 的關聯

看板LinuxDev作者 (eleghost)時間13年前 (2012/08/26 23:11), 編輯推噓0(006)
留言6則, 1人參與, 最新討論串2/2 (看更多)
據我所知一般都是用 i2c_board_info去指定platform data, 除非你另外指定了 .detect 來指定i2c addr. 此外通常i2c_table[]都是 {"dev-name", 0} 而 0 並不代表i2c address的意思, 可以查看此stuct的內容便可知道. 所以你文中的 {"alc5623", 0x23}, 0x23 不是i2c address. 可以請教0x23這資訊是要做什麼的嗎?thanks! ※ 引述《SweepingMonk ((((((((((()))))))))))》之銘言: : 請教各位大大 : kernel sourece 中 : 在 arch/arm/mach-omap2/board-xxxx.c 的 I2C_BOARD_INFO : 還有 sound/soc/codec/somecard.c 中的 id_table : 好像都有提到 i2c 的 chip address : 但是小弟一直搞不懂它們有什麼關係 : 例如: : /* sound/soc/codec/alc5632.c */ : static const struct i2c_device_id alc5623_i2c_table[] = { : {"alc5621", 0x21}, : {"alc5622", 0x22}, : {"alc5623", 0x23}, : {} : }; : /* arch/arm/mach-tegra/board-harmony.c */ : static struct i2c_board_info __initdata harmony_i2c_bus1_board_info[] = { : { : I2C_BOARD_INFO("alc5623", 0x1a), : .platform_data = &adam_alc5623_pdata, : }, : }; : 我以為 chip id 既然是固定的,但是這兩個位置 : 的值好像都不會一樣 : 請問這兩個地方的值分別是什麼意義呢? : 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.35.209.216

09/02 19:37, , 1F
0x23就是i2c slave address...
09/02 19:37, 1F

09/02 19:38, , 2F
某些ic, 可以由硬體去選擇位置 (目的是為了避免位置衝突)
09/02 19:38, 2F

09/02 19:41, , 3F
一般會用I2C_BOARD_INFO這個marco來做
09/02 19:41, 3F

09/02 19:41, , 4F
不然建議用明式來指定 .addr = 0x23, .type ="alc5623"
09/02 19:41, 4F

09/02 19:43, , 5F
如果只寫 "alc5623",0x23, 就要看當初struct是怎麼宣告的
09/02 19:43, 5F

09/02 19:43, , 6F
會有混淆的可能, 不是好的程式寫作風格
09/02 19:43, 6F
文章代碼(AID): #1GEZoyc2 (LinuxDev)
文章代碼(AID): #1GEZoyc2 (LinuxDev)