Firefly开源社区

打印 上一主题 下一主题

rk3288 PWM 申请失败

22

积分

0

威望

0

贡献

游客

积分
22

rk3288 PWM 申请失败

发表于 2017-2-16 11:34:42      浏览:10181 | 回复:6        打印      只看该作者   [复制链接] 楼主
照着这个帖子http://developer.t-firefly.com/thread-10801-1-1.html
修改firefly-rk3288.dts
&pwm0 {
        interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
        status = "okay";
};

rk3288.dts 中 0-3都打开 设置okay

        pwm0: pwm@ff680000 {
                compatible = "rockchip,rk-pwm0";
                led-power = <&gpio8 GPIO_A1 GPIO_ACTIVE_LOW>;
                reg = <0xff680000 0x10>;
                #pwm-cells = <2>;
                pinctrl-names = "default";
                pinctrl-0 = <&pwm0_pin>;
                clocks = <&clk_gates11 11>;
                clock-names = "pclk_pwm";
                status = "okay";
        };
&pwm1 {
    status = "okay";
};

pwm0: pwm@ff680000 {
                compatible = "rockchip,rk-pwm0";
                led-power = <&gpio8 GPIO_A1 GPIO_ACTIVE_LOW>;
                reg = <0xff680000 0x10>;
                #pwm-cells = <2>;
                pinctrl-names = "default";
                pinctrl-0 = <&pwm0_pin>;
                clocks = <&clk_gates11 11>;
                clock-names = "pclk_pwm";
                status = "okay";
        };

        pwm1: pwm@ff680010 {
                compatible = "rockchip,rk-pwm";
                reg = <0xff680010 0x10>;
                #pwm-cells = <2>;
                pinctrl-names = "default";
                pinctrl-0 = <&pwm1_pin>;
                clocks = <&clk_gates11 11>;
                clock-names = "pclk_pwm";
                status = "okay";
        };

        pwm2: pwm@ff680020 {
                compatible = "rockchip,rk-pwm";
                reg = <0xff680020 0x10>;
                #pwm-cells = <2>;
                pinctrl-names = "default";
                pinctrl-0 = <&pwm2_pin>;
                clocks = <&clk_gates11 11>;
                clock-names = "pclk_pwm";
                status = "okay";
        };

        pwm3: pwm@ff680030 {
                compatible = "rockchip,rk-pwm";
                reg = <0xff680030 0x10>;
                #pwm-cells = <2>;
                pinctrl-names = "default";
                pinctrl-0 = <&pwm3_pin>;
                clocks = <&clk_gates11 11>;
                clock-names = "pclk_pwm";
                status = "okay";
        };

关闭rockchip_pwm_regulator

测试
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/pwm.h>

static int __init base_init(void)
{
    printk("base_init\n");
    struct pwm_device * pwm0 = NULL;
    struct pwm_device * pwm1 = NULL;
    struct pwm_device * pwm2 = NULL;
    struct pwm_device * pwm3 = NULL;
    pwm0 = pwm_request(0, "pwm0");
    pwm1 = pwm_request(1, "pwm1");
    pwm2 = pwm_request(2, "pwm2");
    pwm3 = pwm_request(3, "pwm3");
    if(IS_ERR(pwm0))
        printk("pwm0 err %ld\n", PTR_ERR(pwm0));
    else
        printk("pwm0 success\n");

    if(IS_ERR(pwm1))
        printk("pwm1 err %ld\n", PTR_ERR(pwm1));
    else
        printk("pwm1 success\n");

    if(IS_ERR(pwm2))
        printk("pwm2 err %ld\n", PTR_ERR(pwm2));
    else
        printk("pwm2 success\n");

    if(IS_ERR(pwm3))
        printk("pwm3 err %ld\n", PTR_ERR(pwm3));
    else
        printk("pwm3 success\n");

    if(IS_ERR(pwm0))
    {      
        return -1;
    }
    pwm_free(pwm0);

    if(IS_ERR(pwm1))
    {      
        return -1;
    }

    pwm_free(pwm1);

    if(IS_ERR(pwm2))
    {      
        return -1;
    }

    pwm_free(pwm2);

    if(IS_ERR(pwm3))
    {      
        return -1;
    }

    pwm_free(pwm3);

    return 0;
}

static void __exit base_exit(void)
{
    printk("Exit ros base\n");
}

subsys_initcall(base_init);
module_exit(base_exit);

MODULE_AUTHOR("david");
MODULE_DESCRIPTION("ros robot base driver");
MODULE_LICENSE("GPL");

测试返回
[ 3402.495385] base_init
[ 3402.495514] pwm0 err -517
[ 3402.495566] pwm1 err -517
[ 3402.495616] pwm2 err -517
[ 3402.495662] pwm3 err -517


回复

使用道具 举报

22

积分

0

威望

0

贡献

游客

积分
22
发表于 2017-2-16 15:34:22        只看该作者  沙发
没人{:4_172:}
回复

使用道具 举报

发表于 2017-2-17 09:27:12        只看该作者  板凳
可以试试跳进函数里面看看err的报错是什么原因
暴走的创客!
回复

使用道具 举报

216

积分

0

威望

0

贡献

技术达人

Rank: 2

积分
216
发表于 2017-10-16 22:53:33        只看该作者  地板
我也遇到这个问题了,你解决了么
回复

使用道具 举报

216

积分

0

威望

0

贡献

技术达人

Rank: 2

积分
216
发表于 2017-10-23 14:46:23        只看该作者  5#
暴走的阿Sai 发表于 2017-2-17 09:27
可以试试跳进函数里面看看err的报错是什么原因

-517 是Driver requests probe retry的意思,驱动程序请求探测重试,这是什么原因啊
回复

使用道具 举报

15

积分

0

威望

0

贡献

技术小白

积分
15
发表于 2019-9-6 10:25:11        只看该作者  6#
pinctrl-names = "default";改为pinctrl-names = "active";就可以了
回复

使用道具 举报

15

积分

0

威望

0

贡献

技术小白

积分
15
发表于 2019-9-6 10:27:54        只看该作者  7#
问题报错在kernel\drivers\regulator\pwm- regulator.c\ pwm_regulator_probe函数中,-- \kernel\drivers\pwm \core.c\devm_pwm_get--- pwm_get --- of_pwm_get --- of_node_to_pwmchip 中,经过测试知道,是在list的链表中没有符合的节点
设备树链表,只会把pinctrl-names 为active的加入到匹配链表中,而为 default不会被加入
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表