A133芯片u-boot无法调用gpio_request接口
-
我在A133的kernel的LCD驱动代码里面调用如下代码:
#define LCD_SWIRE_IO 116 gpio_request(LCD_SWIRE_IO, "distance"); gpio_direction_output(LCD_SWIRE_IO, 0); __gpio_set_value(LCD_SWIRE_IO, 1);
build的时候,是没有问题的。但是在u-boot-2018里面的驱动代码里面添加同样的内容,就报了如下错误:
drivers/video/sunxi/disp2/disp/lcd/bj_050_720x1280.c:386:5: error: implicit declaration of function ‘gpio_request’; did you mean ‘pwm_request’? [-Werror=implicit-function-declaration] gpio_request(LCD_SWIRE_IO, "distance"); ^~~~~~~~~~~~ pwm_request drivers/video/sunxi/disp2/disp/lcd/bj_050_720x1280.c:387:2: error: implicit declaration of function ‘gpio_direction_output’ [-Werror=implicit-function-declaration] gpio_direction_output(LCD_SWIRE_IO, 0); ^~~~~~~~~~~~~~~~~~~~~ drivers/video/sunxi/disp2/disp/lcd/bj_050_720x1280.c:388:2: error: implicit declaration of function ‘__gpio_set_value’; did you mean ‘disp_sys_gpio_set_value’? [-Werror=implicit-function-declaration] __gpio_set_value(LCD_SWIRE_IO, 1); ^~~~~~~~~~~~~~~~ disp_sys_gpio_set_value CC lib/display_options.o
这到底是是什么原因导致的,求各位大大遇到过的帮忙解答以下
-
sunxi平台对io申请进行了封装,可以参考下其他屏幕驱动,传入sel即可
-
@whycanservice 我知道他封装了,我想在代码中控制某个IO口的拉高或者拉低,但是LCD屏幕的封装的是固定的IO口,我想单独控制其他的IO口。我看到屏幕驱动里面,有个函数是:
#define panel_reset(val) sunxi_lcd_gpio_set_value(sel, 1, val) #define power_en(val) sunxi_lcd_gpio_set_value(sel, 0, val)
中间参数的1和0是代表boart.dts里面的lcd_gpio_x还是pinctrl呀?
lcd_gpio_0 = <&pio PB 6 1 0 3 1>; pinctrl-0 = <&dsi4lane_pins_a>; pinctrl-1 = <&dsi4lane_pins_b>;
-
@ceoifung 在 A133芯片u-boot无法调用gpio_request接口 中说:
lcd_gpio_0
是lcd_gpio_0
设备树里这样定义:
lcd_gpio_0 = <&pio PG 13 xxx> lcd_gpio_1 = <&pio PE 14 xxx> lcd_gpio_2 = <&pio PE 12 xxx> lcd_gpio_3 = <&pio PE 15 xxxx>
可以这样操作
// sunxi_lcd_gpio_set_value(u32 screen_id, u32 io_index, u32 value) // lcd_gpio_3: PE 15 sunxi_lcd_gpio_set_value(0, 3, 1) sunxi_lcd_gpio_set_value(0, 3, 0) // lcd_gpio_2: PE 12 sunxi_lcd_gpio_set_value(0, 2, 1) sunxi_lcd_gpio_set_value(0, 2, 0) // lcd_gpio_1: PE 14 sunxi_lcd_gpio_set_value(0, 1, 1) sunxi_lcd_gpio_set_value(0, 1, 0) // lcd_gpio_0: PG 13 sunxi_lcd_gpio_set_value(0, 0, 1) sunxi_lcd_gpio_set_value(0, 0, 0)
这个方法适用于Linux和Uboot
-
@whycanservice 好的,谢谢解惑,我这边试一下
-
@whycanservice 请问大佬,我这边按照你的方法设置了如下内容
lcd_gpio_0 = <&pio PB 6 1 1 1 0>; lcd_gpio_1 = <&pio PB 2 1 1 1 0>; lcd_gpio_2 = <&pio PD 20 1 1 1 0>;
当我在我在设备树里面设置最后以为为1的时候,能检测到IO口已经被拉高了,但是我在代码中使用设置电平的函数直接拉高,就监测不到电平变化,这是为什么呢?
sunxi_lcd_gpio_set_value(0, 1, 1);
-
@ceoifung @WhycanService 找到问题了,原来是改完之后,调试发现,程序进不去u-boot界面 所以也就没有办法进入LCD初始化那里,拉高相关的电平了
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号