音量键无功能 (edit)

分析,图是采用矩阵按键,我们为了方便,直接改成GPIO中断方式。

修改方案:将KEYOUT0在设置为GPIO功能,并在初始化时设置为低电平。

KEYIN和KEYIN1,初始化时,设置为高电平。电平触发,在按下时,会产生低电平。

注意:在pinmap中KEYIN和KEYIN1需要配置为外部中断,上拉。KEYOUT0配置为GPIO模式。

 
 
 
 
1、Uboot中的设置
/u-boot15/board/spreadtrum/sp7731e_1h10/sprd_kp.c
3static struct key_info KEYS[] = {
24    {
25        .tag = "Volume Up",
26        .offset = SPRD_DDIE_EIC_EXTINT3,
27        .type = TYPE_EIC,
28        .keycode = KEY_VOLUMEUP,
29        .active = 0,            //低电平按下
30    },
31    {
32        .tag = "Volume Down",
33        .offset = SPRD_DDIE_EIC_EXTINT2,
34        .type = TYPE_EIC,
35        .keycode = KEY_VOLUMEDOWN,
36        .active = 0,           //低电平按下
37    },
38};

2、 Kernel 中的设置
kernel/arch/arm/boot/dts/sp7731e-1h10-native.dts
        key-volumedown {
            label = "Volume Down Key";
            linux,code = <114>;
            gpios = <&ap_eic 2 1>;    //1 正常状态为高电平
            debounce-interval = <2>;
            gpio-key,wakeup;
            gpio-key,level-trigger;
        };

        key-volumeup {
            label = "Volume Up Key";
            linux,code = <115>;
            gpios = <& ap_eic 3  1>; //正常状态为高电平
            debounce-interval = <2>;
            gpio-key,wakeup;
            gpio-key,level-trigger;
        };

        key-power {
            label = "Power Key";
            linux,code = <116>;
            gpios = <&pmic_eic 1 1>;
            debounce-interval = <2>;
            gpio-key,wakeup;
            gpio-key,level-trigger;
        };
    }; 

3 u-boot15/board/spreadtrum/sp7731e_1h10/sp7731e_1h10.c 

在board_init()函数中添加代码代码
sprd_gpio_request(NULL, 55);     
sprd_gpio_direction_output(NULL, 55, 0);
----------------------------------------------------------------------
int board_init()
56{
57      //gd->bd->bi_arch_number = MACH_TYPE_OPENPHONE;
58      /*get env transfer from chipram*/
59      setup_chipram_env();
60#ifndef CONFIG_FPGA
61      gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
62      ADI_init();
63      pmic_misc_init();
64      board_regulator_init();
65      pmic_adc_Init();
66      pin_init();
67      sprd_eic_init();
68      sprd_intc_enable();
69      sprd_gpio_init();
70      init_ldo_sleep_gr();
71//    TDPllRefConfig(1);
72      sprd_pmu_init();
73#endif
74      return 0;
75}

猜你喜欢

转载自blog.csdn.net/m0_37870649/article/details/81005093