各位大佬 急需帮助,最近在写一个rgb led驱动,设备树是这样的:
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_led_gpio_default>;
status = "okay"; /* conflict with pwm0 */
red {
label = "red";
r-gpios = <&pioA 38 GPIO_ACTIVE_LOW>;
};
green {
label = "green";
g-gpios = <&pioA 37 GPIO_ACTIVE_LOW>;
};
blue {
label = "blue";
b-gpios = <&pioA 32 GPIO_ACTIVE_LOW>;
linux,default-trigger = "heartbeat";
};
};
引脚是gpio的操作,其实就是对gpio操作的驱动,匹配成功后,我用
if(G)
gpio = of_get_named_gpio_flags(np, "g-gpios", 0, &g_flag);
gpio_direction_output(gpio, 0);
if(R)
gpio = of_get_named_gpio_flags(np, "r-gpios", 0, &r_flag);
gpio_direction_output(gpio, 0);
if(B)
gpio = of_get_named_gpio_flags(np, "b-gpios", 0, &b_flag);
gpio_direction_output(gpio, 0);
这两个函数首先读出三个子节点的gpio属性,然后再将gpio操作为低电平点亮灯,if简写了别计较语法了知道就行了,
可是有个奇怪的现象,让if判定是红(R),无论红灯在第几个if都可以使红灯亮,但是如果判定为G 或者B时都不能成功而且gpio是错误的返回值。
这种感觉就想of_get_named_gpio_flags函数只提取了第一个子节点的gpio的属性,但是呢函数的作用就是按照第二个参数"r-gpios" "r-gpios" "b-gpios"的标签提取的啊?
请问大神这是为什么啊。。
这是我第一次写驱动,所以相关的函数什么的都不太清楚求大神指点
|