首页 > 常见问题 | 艾为电子 > [FAQ0101374]如何解决多数字PA共用reset-gpio引脚方案中PA初始化IIC不通问题?

[FAQ0101374]如何解决多数字PA共用reset-gpio引脚方案中PA初始化IIC不通问题?

Audio 2024-07-10 阅读量: 82 点赞量: 2

A:

针对多数字PA共用reset-gpio引脚场景,常用方案是DTS设备树中仅保留第一个PA节点的reset-gpio配置项,删除其他PA节点reset-gpio配置项。

如果系统每次都先加载第一个PA节点对应的驱动,方案无问题。但部分系统可能存在概率先加载非第一个PA节点场景,此时该节点PA驱动加载时没有reset-gpio引脚配置,导致PA无法使能,IIC通信失败,最终驱动加载失败。

针对上述问题场景,可参考如下修改方案解决:

1、DTS中每个PA节点均添加reset-gpio配置项,且gpio引脚号一样;

2、PA驱动代码中增加reset_status变量及相关判断逻辑,参考修改如下:

1. #define RESET_GPIO_SHARED

2. #ifdef RESET_GPIO_SHARED

3. bool reset_status = 0;

4. static int aw883xx_gpio_request(struct aw883xx *aw883xx)

5. {

6. int ret = -1;

7.

8. if (gpio_is_valid(aw883xx->reset_gpio)) {

9. if (reset_status == 0) {

10. ret = devm_gpio_request_one(aw883xx->dev, aw883xx->reset_gpio,

11. GPIOF_OUT_INIT_LOW, "aw883xx_rst");

12. if (ret) {

13. aw_dev_err(aw883xx->dev, "rst request failed");

14. return ret;

15. }

16. reset_status = 1;

17. } else {

18. aw883xx->reset_gpio =-1;

19. aw_dev_info(aw883xx->dev,"rst gpio already requested.");

20. }

21. }

22.

23. if (gpio_is_valid(aw883xx->irq_gpio)) {

24. ret = devm_gpio_request_one(aw883xx->dev, aw883xx->irq_gpio,

25. GPIOF_DIR_IN, "aw883xx_int");

26. if (ret) {

27. aw_dev_err(aw883xx->dev, "int request failed");

28. return ret;

29. }

30. }

31.

32. return 0;

33. }

34. #endif

返回FAQ列表