导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    A133芯片u-boot无法调用gpio_request接口

    其它全志芯片讨论区
    2
    7
    2561
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • C
      ceoifung LV 4 最后由 编辑

      我在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
      
      

      这到底是是什么原因导致的,求各位大大遇到过的帮忙解答以下

      1 条回复 最后回复 回复 引用 分享 0
      • WhycanService
        WhycanService LV 8 最后由 编辑

        sunxi平台对io申请进行了封装,可以参考下其他屏幕驱动,传入sel即可

        C 1 条回复 最后回复 回复 引用 分享 0
        • C
          ceoifung LV 4 @WhycanService 最后由 编辑

          @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>;
          
          WhycanService 1 条回复 最后回复 回复 引用 分享 0
          • WhycanService
            WhycanService LV 8 @ceoifung 最后由 WhycanService 编辑

            @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

            C 2 条回复 最后回复 回复 引用 分享 0
            • C
              ceoifung LV 4 @WhycanService 最后由 编辑

              @whycanservice 好的,谢谢解惑,我这边试一下😊

              1 条回复 最后回复 回复 引用 分享 0
              • C
                ceoifung LV 4 @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);
                
                C 1 条回复 最后回复 回复 引用 分享 0
                • C
                  ceoifung LV 4 @ceoifung 最后由 编辑

                  @ceoifung @WhycanService 找到问题了,原来是改完之后,调试发现,程序进不去u-boot界面😵 所以也就没有办法进入LCD初始化那里,拉高相关的电平了

                  1 条回复 最后回复 回复 引用 分享 0
                  • 1 / 1
                  • First post
                    Last post

                  Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

                  行为准则 | 用户协议 | 隐私权政策