在early_initcall函数中操作GPIO

我有个在early_initcall启动一个定时器,去操作GPIO喂外部看门狗的需求,但我用下面的代码,不能操作GPIO.请问应该如何改来操作GPIO

#if 1
#include <linux/timer.h>
//P0_0
#define GPIO_BASE_ADDR   0x11030000  // 假设的 GPIO 基地址,根据实际情况调整
#define GPIO_DIRECTION_OFFSET  0x120  // 假设 GPIO 方向寄存器偏移
#define GPIO_DATA_OFFSET       0x10  // 假设 GPIO 数据寄存器偏移
#define GPIO_PIN       0x00  // 假设 GPIO 数据寄存器偏移

static struct timer_list my_timer;
static unsigned char s_ucGpioVal = 0;

#define PM_OUTPUT            0x2 /* Output Mode (disable Input) */
#define PM_MASK                0x03

static int rzg2l_gpio_set_value(
                int value)
{
    void __iomem *vpReg;
    unsigned char ucVal;

    vpReg = GPIO_BASE_ADDR + GPIO_DATA_OFFSET;
    ucVal = ioread8(vpReg);    
    if (value){
        ucVal |= 1;
    }
    else{
        ucVal &= 0xFE;
    }
    iowrite8(ucVal,vpReg);
    return 0;
}

static int rzg2l_gpio_set_out(void)
{
    void __iomem *vpReg;
    unsigned short usVal;
    
    vpReg = GPIO_BASE_ADDR + GPIO_DIRECTION_OFFSET;
    usVal = ioread16(vpReg);
    usVal = usVal & ~(PM_MASK << (GPIO_PIN * 2));
    usVal = usVal | (PM_OUTPUT << (GPIO_PIN * 2));    
    iowrite32(usVal,vpReg);
    return 0;
}
static void my_timer_callback(struct timer_list *t) {

    // 定时器回调函数
    printk("my_timer_callback\n");    
#if 1
    // 1. 设置 GPIO 为输出
    rzg2l_gpio_set_out();
#if 1
    // 2. 设置 GPIO 输出高电平
    if(s_ucGpioVal==0){
        s_ucGpioVal = 1;
        rzg2l_gpio_set_value(s_ucGpioVal);
    }else{
        s_ucGpioVal = 0;
        rzg2l_gpio_set_value(s_ucGpioVal);        
    }
#endif
#endif
    // 如果需要重复定时,可以在这里重新启动定时器
    mod_timer(&my_timer, jiffies + msecs_to_jiffies(1000));
}
 
static void __init liyang_init(void) {
    printk("liyang_init\n");                    
    timer_setup(&my_timer, my_timer_callback, 0);
    mod_timer(&my_timer, jiffies + msecs_to_jiffies(1000));
}


early_initcall(liyang_init);
#endif