1.dtsi:
gpio_headset = <&msm_gpio 72 0>;
gpio_key = <&msm_gpio 90 0>;
qcom,pinctrl-names =
"all_off",
"pri_i2s_act",
"ehsd_pin_default";
pinctrl-names =
"all_off",
"pri_i2s_act",
"ehsd_pin_default";
pinctrl-0 = <&cdc_pdm_lines_sus &cross_conn_det_sus
&vdd_spkdrv_sus>;
pinctrl-1 = <&cdc_pdm_lines_act &cross_conn_det_sus
&vdd_spkdrv_act>;
pinctrl-2 = <&ehsd_pin_act>;
+ehsd_int_pin {
+ ehsd_pin_act: ehsd_pin_act {
+ mux {
+ pins = "gpio72","gpio90";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio72", "gpio90";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+ };
+ ehsd_pin_sus: ehsd_pin_sus {
+ mux {
+ pins = "gpio72", "gpio90";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio72", "gpio90";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+ };
+ };
2.wcd-mbhc-v2.c
定义一个队列
+static int mbhc_headset_inserted =0;
+static struct workqueue_struct *local_headset_workqueue;
+static struct wake_lock headset_wake_lock;
+static int get_gpio_states(struct pinctrl *pinctrl)
+{
+ int ret =0;
+ pinctrl_infor.ehd_default = pinctrl_lookup_state(pinctrl,
+ "ehsd_pin_default");
+ if (IS_ERR(pinctrl_infor.ehd_default)) {
+ pr_err("%s: Unable to get pinctrl