platform_get_resource

platform_get_resource

 

        这个函数跟设备树没什么关系,但是设备树中的节点被转换为platform_device后,设备树中的reg属性、interrupts属性也会被转换为“resource”。这时,你可以使用这个函数取出这些资源。一 个 节 点 能 被 转 换 为 platform_device , 如 果 它 的 设 备 树 里 指 定 了 中 断 属 性 , 那 么 可 以 从platform_device 中获得“中断资源”,函数如下,可以使用下列函数获得 IORESOURCE_IRQ 资源,即中断号:

函数原型为:

/**
 * platform_get_resource - get a resource for a device
 * @dev: platform device
 * @type: resource type   // 取哪类资源?IORESOURCE_MEM、IORESOURCE_REG
*                      // IORESOURCE_IRQ等
 * @num: resource index  // 这类资源中的哪一个?
 */
struct resource *platform_get_resource(struct platform_device *dev,
				       unsigned int type, unsigned int num);

对于设备树节点中的reg属性,它对应IORESOURCE_MEM类型的资源;

对于设备树节点中的interrupts属性,它对应IORESOURCE_IRQ类型的资源。

例如:

static int gpio_key_probe(struct platform_device *pdev)
{
	struct resource *res;
	int err;

	if (!pdev->dev.of_node)	
	{
		res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
		if (res == NULL)
		{
			printk("gpio_key_probe platform_get_resource err\n");
			return -EINVAL;
		}

		irq = res->start;
	}
	else
	{
		irq = of_irq_get(pdev->dev.of_node, 0);
	}

	printk("get irq = %d\n", irq);
	
	err = request_irq(irq, gpio_key_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "100ask_gpio_key", NULL);
        
    return err;
    
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值