您尚未登录。

#1 全志 SOC » 全志soc移植fbtft驱动时遇到的一些问题 » 2025-08-13 14:14:58

Nopiskl
回复: 0

我在全志T113s3上移植ili9341的时候,遇到了Failed to request reset-gpios GPIO:-2驱动报错


然后通过分析发现是fbtft_request_one_gpio这个函数报错


5.x以上该函数原型

static int fbtft_request_one_gpio(struct fbtft_par *par,
				  const char *name, int index,
				  struct gpio_desc **gpiop)
{
	struct device *dev = par->info->device;

	*gpiop = devm_gpiod_get_index_optional(dev, name, index,
					       GPIOD_OUT_LOW);
	if (IS_ERR(*gpiop))
		return dev_err_probe(dev, PTR_ERR(*gpiop), "Failed to request %s GPIO\n", name);

	fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' GPIO\n",
		      __func__, name);

	return 0;
}

4.x及以下函数原型

static int fbtft_request_one_gpio(struct fbtft_par *par,
				  const char *name, int index,
				  struct gpio_desc **gpiop)
{
    struct device *dev = par->info->device;
    struct device_node *node = dev->of_node;
    int gpio, flags, ret = 0;
    enum of_gpio_flags of_flags;
	char gpio_names[32];

	sprintf(gpio_names, "%s-gpios", name);
    if (of_find_property(node, gpio_names, NULL)) {
        gpio = of_get_named_gpio_flags(node, gpio_names, index, &of_flags);
        if (gpio == -ENOENT)
            return 0;
        if (gpio == -EPROBE_DEFER)
            return gpio;
        if (gpio < 0) {
            dev_err(dev,
                "failed to get '%s' from DT\n", gpio_names);
            return gpio;
        }

         //active low translates to initially low 
        flags = (of_flags & OF_GPIO_ACTIVE_LOW) ? GPIOF_OUT_INIT_LOW :
                            GPIOF_OUT_INIT_HIGH;
        ret = devm_gpio_request_one(dev, gpio, flags,
                        dev->driver->name);
        if (ret) {
            dev_err(dev,
                "gpio_request_one('%s'=%d) failed with %d\n",
                gpio_names, gpio, ret);
            return ret;
        }

        *gpiop = gpio_to_desc(gpio);
        fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' = GPIO%d\n",
                            __func__, gpio_names, gpio);
    }
    return ret;
}

对比了一下发现是高版本的Linux使用了最新的 GPIO 消费者 API 规范中的devm_gpiod_get_index_optional,将其修改为老版本的函数就不会报错


但是我有一些问题,全志T113 BSP中的内核是5.4的,是全志BSP中没有对这些新的消费者 API 规范进行完善吗?如果使用新版主线的话,这些函数还能使用吗?


本人小白一个,希望大佬们能给一些见解

#2 Re: 全志 SOC » 自制T113-I 核心板一次成功开机 » 2025-05-06 23:55:08

大佬真的厉害,手焊bga真的容易挂,所以一直都没尝试过

#3 Re: RK3288/RK3399/RK1108 » 为什么瑞芯微公开资料这么少呢 » 2025-05-06 23:51:09

而且国内芯片厂的手册写的也是一言难尽,可以看看国外的,那个手册真的全面而且详细

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn