int gpio_amlogic_direction_output(struct gpio_chip *chip,unsigned offset, int value) { unsigned int reg,bit; if(offset==GPIO_BSD_EN){ aml_clr_reg32_mask(P_PREG_PAD_GPIO0_O,1<<29); #ifndef CONFIG_MESON_TRUSTZONE aml_set_reg32_mask(P_AO_SECURE_REG0,1<<0); #else meson_secure_reg_write(P_AO_SECURE_REG0, meson_secure_reg_read(P_AO_SECURE_REG0) | (1<<0)); #endif if(value) aml_set_reg32_mask(P_PREG_PAD_GPIO0_O,1<<31);//out put high else aml_clr_reg32_mask(P_PREG_PAD_GPIO0_O,1<<31);//out put low aml_clr_reg32_mask(P_PREG_PAD_GPIO0_O,1<<30);//out put enable return 0; } if(offset==GPIO_TEST_N){ if(value) aml_set_reg32_mask(P_AO_GPIO_O_EN_N,1<<31);//out put high else aml_clr_reg32_mask(P_AO_GPIO_O_EN_N,1<<31);//out put low #ifndef CONFIG_MESON_TRUSTZONE aml_set_reg32_mask(P_AO_SECURE_REG0,1);// out put enable #else meson_secure_reg_write(P_AO_SECURE_REG0, meson_secure_reg_read(P_AO_SECURE_REG0) | (1<<0)); #endif return 0; } if(value){ reg=GPIO_REG(amlogic_pins[offset].out_value_reg_bit); bit=GPIO_BIT(amlogic_pins[offset].out_value_reg_bit); aml_set_reg32_mask(p_gpio_output_addr[reg],1<<bit); gpio_print("out reg=%x,value=%x\n",p_gpio_output_addr[reg],aml_read_reg32(p_gpio_output_addr[reg])); } else{ reg=GPIO_REG(amlogic_pins[offset].out_value_reg_bit); bit=GPIO_BIT(amlogic_pins[offset].out_value_reg_bit); aml_clr_reg32_mask(p_gpio_output_addr[reg],1<<bit); gpio_print("out reg=%x,value=%x\n",p_gpio_output_addr[reg],aml_read_reg32(p_gpio_output_addr[reg])); } reg=GPIO_REG(amlogic_pins[offset].out_en_reg_bit); bit=GPIO_BIT(amlogic_pins[offset].out_en_reg_bit); aml_clr_reg32_mask(p_gpio_oen_addr[reg],1<<bit); gpio_print("==%s==%d\n",__FUNCTION__,__LINE__); gpio_print("oen reg=%x,value=%x\n",p_gpio_oen_addr[reg],aml_read_reg32(p_gpio_oen_addr[reg])); gpio_print("value=%d\n",value); return 0; }
static void aml_m8_pinmux_init(struct snd_soc_card *card) { struct aml_audio_private_data *p_aml_audio; const char *str=NULL; int ret; p_aml_audio = snd_soc_card_get_drvdata(card); p_aml_audio->pin_ctl = devm_pinctrl_get_select(card->dev, "aml_snd_m8"); #if USE_EXTERNAL_DAC #ifndef CONFIG_MESON_TRUSTZONE //aml_write_reg32(P_AO_SECURE_REG1,0x00000000); aml_clr_reg32_mask(P_AO_SECURE_REG1, ((1<<8) | (1<<1))); #else /* Secure reg can only be accessed in Secure World if TrustZone enabled. */ //meson_secure_reg_write(P_AO_SECURE_REG1, 0x00000000); meson_secure_reg_write(P_AO_SECURE_REG1, meson_secure_reg_read(P_AO_SECURE_REG1) & (~((1<<8) | (1<<1)))); #endif /* CONFIG_MESON_TRUSTZONE */ #endif ret = of_property_read_string(card->dev->of_node, "mute_gpio", &str); if (ret < 0) { printk("aml_snd_m8: faild to get mute_gpio!\n"); }else{ p_aml_audio->gpio_mute = amlogic_gpio_name_map_num(str); p_aml_audio->mute_inv = of_property_read_bool(card->dev->of_node,"mute_inv"); amlogic_gpio_request_one(p_aml_audio->gpio_mute,GPIOF_OUT_INIT_HIGH,"mute_spk"); amlogic_set_value(p_aml_audio->gpio_mute, 0, "mute_spk"); spk_gpio_mute = p_aml_audio->gpio_mute; printk(KERN_INFO"pinmux set : spk_gpio_mute=%d\n",spk_gpio_mute); } printk("=%s==,aml_m8_pinmux_init done,---%d\n",__func__,p_aml_audio->det_pol_inv); }