SPL 階段識別裝置

2022-07-09 17:00:18 字數 1646 閱讀 3281

1.需求在spl階段識別i2c和pmic的驅動,並對pmic進行配置.

1.1 i2c的識別

/*

1. 可以通過裝置樹檔案掃到i2 cdevice

*/int pmic_i2c_init(void

)

printk(

"%s find i2c\n

", __func__);

return

ret;

}

/*

2 this way could scan i2c master

*/if (uclass_get_device(uclass_i2c, 0, &i2c_dev))

printf(

"i2c master: not found!\n

");

1.2 pmic的識別

int power_init_board(struct udevice **dev_pmic)

printk(

"%s find pmic\n

", __func__);

dev_id =pmic_reg_read(pdev, pca9450_reg_dev_id);

printf(

"pmic: pca9450! dev_id=0x%x\n

", dev_id);

/*buckxout_dvs0/1 control buck123 output

*/pmic_reg_write(pdev, pca9450_buck123_dvs,

0x29

);

return0;

}

但是有個非常非常重要的引數需要在dts中配置:u-boot,dm-spl;

1.3 當然還有一些方法

尋找node--->node 有效尋找i2c外設的裝置位址---->依據子裝置找到父裝置---->dm_i2c_probe, 成功之後,dm_i2c_read/write 就可以對i2c連線的外設進行訪問。

int power_init_board(struct udevice **dev_pmic)

printf(

"%s:find the node.\n

", __func__);

/*when node valid, get reg

*/ret = ofnode_read_u32(node, "

reg", &chip_addr);

if(ret)

return -einval;

printf(

"reg check done 0x%x.\n

", chip_addr);

ret = uclass_get_device_by_ofnode(uclass_i2c, ofnode_get_parent(node), &bus);

if(ret)

ret = dm_i2c_probe(bus, chip_addr, 0, &pdev);

printf(

"%s ret 0x%x.\n

", __func__, ret);

if (!ret)

*dev_pmic =pdev;

return0;

}

RTTI 執行階段型別識別

rtti是執行階段型別識別 c 有3個支援rtti的元素 dynamic cast 如可能,使用乙個指向基類的指標生成派生類指標,否則返回空指標 typeid 返回乙個指出物件型別的值 type info 結構儲存了有關特定型別的資訊 只能將rtti用於包含虛函式的類層次結構 dynamic cas...

RTTI 執行階段型別識別

rtti是執行階段型別識別 c 有3個支援rtti的元素 dynamic cast 如可能,使用乙個指向基類的指標生成派生類指標,否則返回空指標 typeid 返回乙個指出物件型別的值 type info 結構儲存了有關特定型別的資訊 只能將rtti用於包含虛函式的類層次結構 dynamic cas...

Ubuntu識別android裝置

前段時間有同事讓替其裝了ubuntu系統,用來跑monkey。但是裝完ubuntu之後插上android裝置後執行adb devices命令時顯示沒有裝置。再一番折騰之後,終於解決了這個問題。其實這個問題很簡單,是可以在android官網找的。1 已開啟手機除錯模式 2 按官網說明增加 etc ud...