RZ/G2L 外部端子割り込みの設定について

GPIO P3_1について、Pin functionをIRQ7に設定し、外部割り込みとして使いたいと考えております。
デバイスツリーにてIRQ7の設定をし、起動後 cat /proc/interrupt にて割り込み一覧に表示されており、割り込み登録はできています。
しかし、ポートの設定ができておらず、割り込み検出ができません。
割り込みの初期設定にてgpio_requestを実行しているのですが、エラーコード-517が返ってきております。

デバイスツリーの設定が抜けているのでしょうか?
初歩的な質問で申し訳ございませんが、アドバイスをお願いします。

<デバイスツリー>

/ {
model = "Renesas SMARC EVK based on r9a07g044l2";
compatible = "renesas,smarc-evk", "renesas,r9a07g044l2", "renesas,r9a07g044";

gpio3: gpio@11030000{
compatible = "renesas,r9a07g044-gpio";
reg = <0x11030000 0x10000>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <2>;
};

gpio_interrupt {
compatible = "gpio-keys";
gpio = <&gpio3 1 GPIO_ACTIVE_LOW>; // GPIO番号とアクティブ状態
interrupt-parent = <&gpio3>;
interrupts = <40>; // 割り込み番号
label = "gpio_interrupt";
};

};

&intc_ex {
/* pinctrl-0 = <&modint_pins>; */
interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 8 IRQ_TYPE_LEVEL_LOW>, // IRQ=7 割り込み番号40
<GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
};

<ドライバコード>

static int int_cnt = 0;
static char *devname = "IRQ_test";
static int irq7 = 40;

static irqreturn_t irqtest_handler(int irq, void *dev_id);
static int irqtest_setup(void);
static void irqtest_cleanup(void);

static irqreturn_t irqtest_handler(int irq, void *dev_id)
{
 printk(KERN_INFO "irqtest_handler called\n");
 int_cnt ++;
 printk(KERN_INFO "interrupt count = %d \n", int_cnt);

 return IRQ_HANDLED;
}

static int irqtest_setup(void){

 //レジスタへ直接書き込み
 printk(KERN_INFO "gpio setting\n");
 int ret_gpio = gpio_request(145, "P3_1 initialaize");
 ★エラーコード -517が返ってくる
 printk(KERN_INFO "ret_gpio = %d \n",ret_gpio);
 int ret_input = gpio_direction_input(145);
 ★戻り値は0
 printk(KERN_INFO "ret_input = %d \n",ret_input);
 printk(KERN_INFO "gpio setting finish\n");

 int ret7 = request_irq(irq7, irqtest_handler, IRQF_SHARED, devname, (void *)devname);
 printk(KERN_INFO "ret7 in settup = %d\n", ret7);

 return 0;

}

static void irqtest_cleanup(void) {
 free_irq(irq7, (void *)devname);
 printk(KERN_INFO "irqtest_cleanup called\n");
}

module_init(irqtest_setup);
module_exit(irqtest_cleanup);
Parents
  • その後いろいろ解析を進めると、デバイスツリーにてgpioの設定ができていないことが要因のようです。
    GPIO P3_1をIRQ7として使用するための、デバイスツリーの設定方法を教えて頂けないでしょうか?

Reply
  • その後いろいろ解析を進めると、デバイスツリーにてgpioの設定ができていないことが要因のようです。
    GPIO P3_1をIRQ7として使用するための、デバイスツリーの設定方法を教えて頂けないでしょうか?

Children
No Data