- 积分
- 55
贡献315
飞刀99 FD
注册时间2022-7-21
在线时间9 小时
扫一扫,手机访问本帖
|
本帖最后由 gavin_guo 于 2023-1-17 18:13 编辑
使用的是开发板上定义为LCD_nPWREN(NAND_CS1)的PIN,配置用做GPIO,用来控制LVDS背光电路的使能控制,现象是在kernel中可以有效操作该IO,但是在uboot中操作该IO,不起作用。目前的现象,看起来是setup_pad没有成功,因为reboot和上电启动,都是uboot无法操作成功,但是启动后kernel是操作成功的,此时使用看门狗直接复位系统,uboot里就可以成功操作该IO了。
特意使用kernel中一模一样的pad参数,依旧无法在uboot里成功操作。
kernel中使用如下:
在mx6_sabresd_board_init函数中PAD_CTL初始化为MX6Q_PAD_NANDF_CS1__GPIO_6_14,参数配置为最大上拉和中间性质的驱动能力:
#define MX6Q_HIGHEST_DRV (PAD_CTL_PUS_22K_UP | PAD_CTL_DSE_60ohm)
#define SABRESD_DISP_PWR_EN IMX_GPIO_NR(6, 14)
gpio_request(SABRESD_DISP_PWR_EN, "BL_PW_EN");
gpio_direction_output(SABRESD_DISP_PWR_EN, 0);
在uboot中的board_init函数中的setup_uart();初始化后面,执行如上的类似的代码,无法成功操作该IO:
mxc_iomux_v3_setup_pad(MX6Q_PAD_SD1_DAT1__GPIO_1_17); //lvds pwm
mxc_iomux_v3_setup_pad(MX6Q_PAD_SD1_CMD__GPIO_1_18); //hot
mxc_iomux_v3_setup_pad(MX6Q_PAD_SD1_DAT3__GPIO_1_21); //buzzer
mxc_iomux_v3_setup_pad(MX6Q_PAD_NANDF_CS1__GPIO_6_14); //backlight
//gpio_direction_input(GPIO_VOL_DN_KEY);
gpio_direction_output(GPIO_LVDS_PWM, 0);
gpio_direction_output(GPIO_HOT_PWR, 0);
gpio_direction_output(GPIO_BUZZER_PWR, 0);
gpio_request(SABRESD_DISP_PWR_EN, "BL_PW_EN");
gpio_direction_output(SABRESD_DISP_PWR_EN, 0); // 高电平关闭 2023.1.16
gpio_set_value(SABRESD_DISP_PWR_EN, 0);
用直接操作寄存器的方法,也是同样的结果:
mxc_iomux_v3_setup_pad(MX6Q_PAD_NANDF_CS1__GPIO_6_14);
reg = readl(GPIO6_BASE_ADDR + GPIO_GDIR);
reg |= (1 << 14);
writel(reg, GPIO6_BASE_ADDR + GPIO_GDIR);
reg = readl(GPIO6_BASE_ADDR + GPIO_DR);
reg &= ~(1 << 14);
//reg |= (1 << 14);
writel(reg, GPIO6_BASE_ADDR + GPIO_DR);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define MX6Q_KERNEL_PAD_CTRL (PAD_CTL_PUS_22K_UP | PAD_CTL_DSE_60ohm)
#define MX6Q_PAD_NANDF_CS1__RAWNAND_CE1N (_MX6Q_PAD_NANDF_CS1__RAWNAND_CE1N | MUX_PAD_CTRL(NO_PAD_CTRL))
#define MX6Q_PAD_NANDF_CS1__USDHC4_VSELECT (_MX6Q_PAD_NANDF_CS1__USDHC4_VSELECT | MUX_PAD_CTRL(MX6Q_USDHC_PAD_CTRL))
#define MX6Q_PAD_NANDF_CS1__USDHC3_VSELECT (_MX6Q_PAD_NANDF_CS1__USDHC3_VSELECT | MUX_PAD_CTRL(MX6Q_USDHC_PAD_CTRL))
#define MX6Q_PAD_NANDF_CS1__PCIE_CTRL_DIAG_STATUS_BUS_MUX_3 (_MX6Q_PAD_NANDF_CS1__PCIE_CTRL_DIAG_STATUS_BUS_MUX_3 | MUX_PAD_CTRL(NO_PAD_CTRL))
#define MX6Q_PAD_NANDF_CS1__GPIO_6_14 (_MX6Q_PAD_NANDF_CS1__GPIO_6_14 | MUX_PAD_CTRL(MX6Q_KERNEL_PAD_CTRL))
#define MX6Q_PAD_NANDF_CS1__PL301_MX6QPER1_HREADYOUT (_MX6Q_PAD_NANDF_CS1__PL301_MX6QPER1_HREADYOUT | MUX_PAD_CTRL(NO_PAD_CTRL))
|
|