时钟和复位是两个不同的驱动,但通常都是由负责clock驱动的人,把reset驱动完成。同样,reset驱动也是由芯片厂商去完成的。
基本步骤:
1、调用devm_reset_control_get()
获取reset句柄
2、调用reset_control_assert()
进行复位操作
3、调用reset_control_deassert()
进行解复位操作
static int xx_probe(struct platform_device *pdev)
{
struct device_node* np = pdev- >dev.of_node;
......
/* 1、获取reset句柄 */
host- >rstc = devm_reset_control_get(&pdev- >dev, np- >name);
if (IS_ERR(host- >rstc)) {
dev_err(&pdev- >dev, "No reset controller specifiedn");
return PTR_ERR(host- >rstc);
}
if (host- >rstc) {
/* 2、复位 */
ret = reset_control_assert(host- >rstc);
if (ret) {
dev_err(&pdev- >dev, "unable to reset_control_assertn");
return ret;
}
udelay(1);
/* 3、解复位 */
ret = reset_control_deassert(host- >rstc);
if (ret) {
dev_err(&pdev- >dev, "unable to reset_control_deassertn");
return ret;
}
}
......
}
全部0条评论
快来发表一下你的评论吧 !