在多数字PA的应用中,常规应用是每个PA有独立的reset gpio,但有时候资源有限,需要多个PA共用一个gpio,例如,4个PA使用同一个reset gpio或者是4个PA每2个共用一个reset gpio等情况,针对这种应用,需要对驱动做些修改,修改点如下:
1、dts里节点中的reset配置全部加上;注:相同reset引脚号的设备树节点必须相邻
2、驱动代码按如下修改;
1)probe函数中的aw883xx_gpio_request以及aw883xx_hw_reset去掉返回值的判断,如下图红框中的修改;
2)修改aw883xx_gpio_request函数,增加黑色底纹的几行代码,修改如下;
int reset_gpio_request = -1;
static int aw883xx_gpio_request(struct aw883xx *aw883xx)
{
int ret = -1;
if (gpio_is_valid(aw883xx->reset_gpio)) {
if(aw883xx->reset_gpio != reset_gpio_request){
ret = devm_gpio_request_one(aw883xx->dev, aw883xx->reset_gpio,
GPIOF_OUT_INIT_LOW, "aw883xx_rst");
if (ret) {
aw_dev_err(aw883xx->dev, "rst request failed");
return ret;
}
reset_gpio_request = aw883xx->reset_gpio;
}else{
aw883xx->reset_gpio =-1;
aw_dev_info(aw883xx->dev,"rst gpio already requested.");
}
}
if (gpio_is_valid(aw883xx->irq_gpio)) {
ret = devm_gpio_request_one(aw883xx->dev, aw883xx->irq_gpio,
GPIOF_DIR_IN, "aw883xx_int");
if (ret) {
aw_dev_err(aw883xx->dev, "int request failed");
return ret;
}
}
return 0;
}