luckfox pico plus开发板 驱动pwdn-gpio疑问
您好, 写成RK_PC7或23(C(2 * 8) + 7=23 )都可以
gpio1-c7 写成
或
都可以,在kernel 的 include/dt-bindings/gpio/gpio.h 和 include/dt-bindings/pinctrl/rockchip.h 下有注释
Code: Select all
pwdn-gpios = <&gpio1 RK_PC7 GPIO_ACTIVE_HIGH>
Code: Select all
pwdn-gpios = <&gpio1 23 0>;
好的,谢谢,我试试Crocodile wrote: ↑2024-09-09 2:10 gpio1-c7 写成或Code: Select all
pwdn-gpios = <&gpio1 RK_PC7 GPIO_ACTIVE_HIGH>
都可以,在kernel 的 include/dt-bindings/gpio/gpio.h 和 include/dt-bindings/pinctrl/rockchip.h 下有注释Code: Select all
pwdn-gpios = <&gpio1 23 0>;
我在设备树中改为了pwdn-gpios = <&gpio1 23 1>;,但是驱动这里 sc3336->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS);Crocodile wrote: ↑2024-09-09 2:10 gpio1-c7 写成或Code: Select all
pwdn-gpios = <&gpio1 RK_PC7 GPIO_ACTIVE_HIGH>
都可以,在kernel 的 include/dt-bindings/gpio/gpio.h 和 include/dt-bindings/pinctrl/rockchip.h 下有注释Code: Select all
pwdn-gpios = <&gpio1 23 0>;
if (IS_ERR(sc3336->reset_gpio))
dev_warn(dev, "Failed to get reset-gpios\n");
sc3336->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_ASIS);
if (IS_ERR(sc3336->pwdn_gpio))
dev_warn(dev, "Failed to get pwdn-gpios\n");
会打印Failed to get pwdn-gpios,是怎么回事呢,pwdn-gpios = <&gpio3 21 0>就不会打印,是还有什么步骤我没有做吗
调整驱动源码 添加
查看错误返回码判断获取 pwdn-gpios 失败的原因
Code: Select all
//原本
//if (IS_ERR(sc3336->pwdn_gpio))
//dev_warn(dev, "Failed to get pwdn-gpios\n");
if(IS_ERR(gpiod))
dev_warn(dev, "Failed to get pwdn-gpios ,ret = %d\n", PTR_ERR(sc3336->pwdn_gpio));
可以了,但是我设置gpio1_C7_d0为1,但是使用万用表测量电压为低电平,拉高不了?gpiod_set_value_cansleep(sc3336->pwdn_gpio, 1);Crocodile wrote: ↑2024-09-09 6:36 调整驱动源码 添加查看错误返回码判断获取 pwdn-gpios 失败的原因Code: Select all
//原本 //if (IS_ERR(sc3336->pwdn_gpio)) //dev_warn(dev, "Failed to get pwdn-gpios\n"); if(IS_ERR(gpiod)) dev_warn(dev, "Failed to get pwdn-gpios ,ret = %d\n", PTR_ERR(sc3336->pwdn_gpio));
这块得结合源码执行分析了,条件允许的话请用逻辑分析仪或者示波器测,可能在pwdn-gpio引脚一开始拉高电平后又被驱动拉低了,比如您的摄像头损坏了或者排线没接好,i2c通讯时没有获取到sensor的id直接调用__sc3336_power_off把pwdn-gpios 给重新拉低。