.. | .. |
---|
19 | 19 | rk_headset: rk-headset { |
---|
20 | 20 | compatible = "rockchip_headset"; |
---|
21 | 21 | headset_gpio = <&gpio0 RK_PD5 GPIO_ACTIVE_LOW>; |
---|
| 22 | + spk_ctl_gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>;//AMP_SD_GPIO4_C2_3V3 |
---|
22 | 23 | pinctrl-names = "default"; |
---|
23 | 24 | pinctrl-0 = <&hp_det>; |
---|
24 | 25 | }; |
---|
.. | .. |
---|
101 | 102 | air_mode_4g_gpio = <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>; //4G_AIR_MODE_GPIO01_B0_3V3 |
---|
102 | 103 | wake_4g_gpio = <&gpio1 RK_PB1 GPIO_ACTIVE_HIGH>; //4G_WAKEUP_GPIO01_B1_3V3 |
---|
103 | 104 | hp_en_gpio = <&gpio3 RK_PA6 GPIO_ACTIVE_HIGH>;//HP_EN_GPIO3_A6_3V3 |
---|
104 | | - spk_out_gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_HIGH>;//AMP_SD_GPIO4_C2_3V3 |
---|
| 105 | +// spk_out_gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_HIGH>;//AMP_SD_GPIO4_C2_3V3 |
---|
105 | 106 | wifi_power_en_gpio = <&gpio3 RK_PC6 GPIO_ACTIVE_HIGH>; //WIFI_PWREN_GPIO3_C6_1V8 |
---|
106 | 107 | // pcie_power_en_gpio = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;//PCIE_PWREN_H_GPIO0_D4 |
---|
107 | 108 | pinctrl-names = "default"; |
---|
.. | .. |
---|
543 | 544 | // }; |
---|
544 | 545 | headphone { |
---|
545 | 546 | hp_det: hp-det { |
---|
546 | | - rockchip,pins = <0 RK_PD5 RK_FUNC_GPIO &pcfg_pull_down>; |
---|
| 547 | + rockchip,pins = <0 RK_PD5 RK_FUNC_GPIO &pcfg_pull_down>, |
---|
| 548 | + <4 RK_PC2 RK_FUNC_GPIO &pcfg_pull_down>; |
---|
547 | 549 | }; |
---|
548 | 550 | }; |
---|
549 | 551 | |
---|
.. | .. |
---|
578 | 580 | <1 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>, |
---|
579 | 581 | <1 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>, |
---|
580 | 582 | <3 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>, |
---|
581 | | - <4 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>, |
---|
582 | 583 | <3 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>, |
---|
583 | 584 | <3 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>, |
---|
584 | 585 | <3 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>, |
---|
.. | .. |
---|
153 | 153 | { |
---|
154 | 154 | int level = 0; |
---|
155 | 155 | int level2 = 0; |
---|
| 156 | + int ret; |
---|
156 | 157 | struct rk_headset_pdata *pdata = headset_info->pdata; |
---|
157 | 158 | static unsigned int old_status = 0; |
---|
158 | 159 | |
---|
.. | .. |
---|
182 | 183 | headset_info->headset_status ? "in" : "out"); |
---|
183 | 184 | if (headset_info->headset_status == HEADSET_IN) { |
---|
184 | 185 | headset_info->cur_headset_status = BIT_HEADSET_NO_MIC; |
---|
| 186 | + ret = gpio_direction_output(pdata->spk_ctl_gpio,0); |
---|
| 187 | + if (ret < 0) { |
---|
| 188 | + printk("spk_ctl_gpio set direction fail\n"); |
---|
| 189 | + } |
---|
| 190 | + |
---|
185 | 191 | if (pdata->headset_insert_type == HEADSET_IN_HIGH) |
---|
186 | 192 | irq_set_irq_type(headset_info->irq[HEADSET], |
---|
187 | 193 | IRQF_TRIGGER_FALLING); |
---|
.. | .. |
---|
196 | 202 | goto out; |
---|
197 | 203 | } |
---|
198 | 204 | } else if (headset_info->headset_status == HEADSET_OUT) { |
---|
| 205 | + ret = gpio_direction_output(pdata->spk_ctl_gpio,1); |
---|
| 206 | + if (ret < 0) { |
---|
| 207 | + printk("spk_ctl_gpio set direction fail\n"); |
---|
| 208 | + } |
---|
199 | 209 | headset_info->hook_status = HOOK_UP; |
---|
200 | 210 | if (headset_info->isHook_irq == enable) { |
---|
201 | 211 | DBG("disable headset_hook irq\n"); |
---|
.. | .. |
---|
11 | 11 | struct rk_headset_pdata { |
---|
12 | 12 | /* heaset about */ |
---|
13 | 13 | unsigned int headset_gpio; |
---|
| 14 | + unsigned int spk_ctl_gpio; |
---|
14 | 15 | /* Headphones into the state level */ |
---|
15 | 16 | unsigned int headset_insert_type; |
---|
16 | 17 | /* hook about */ |
---|
.. | .. |
---|
73 | 73 | HEADSET_IN_LOW : |
---|
74 | 74 | HEADSET_IN_HIGH; |
---|
75 | 75 | } |
---|
| 76 | + |
---|
| 77 | + /* spk-ctl */ |
---|
| 78 | + ret = of_get_named_gpio_flags(node, "spk_ctl_gpio", 0, &flags); |
---|
| 79 | + if (ret < 0) { |
---|
| 80 | + dev_err(&pdev->dev, "Can not read property headset_gpio\n"); |
---|
| 81 | + goto err; |
---|
| 82 | + } else { |
---|
| 83 | + pdata->spk_ctl_gpio = ret; |
---|
| 84 | + ret = devm_gpio_request(&pdev->dev, pdata->spk_ctl_gpio, |
---|
| 85 | + "spk_ctl_gpio"); |
---|
| 86 | + if (ret < 0) { |
---|
| 87 | + dev_err(&pdev->dev, "spk_ctl_gpio request fail\n"); |
---|
| 88 | + goto err; |
---|
| 89 | + } |
---|
| 90 | + |
---|
| 91 | + ret = gpio_get_value(pdata->headset_gpio); |
---|
| 92 | + printk(" headset_gpio value : %d\n",ret); |
---|
| 93 | + if (ret == 0) |
---|
| 94 | + ret = gpio_direction_output(pdata->spk_ctl_gpio,0); |
---|
| 95 | + else |
---|
| 96 | + ret = gpio_direction_output(pdata->spk_ctl_gpio,1); |
---|
| 97 | + if (ret < 0) { |
---|
| 98 | + dev_err(&pdev->dev, |
---|
| 99 | + "spk_ctl_gpio set direction fail\n"); |
---|
| 100 | + goto err; |
---|
| 101 | + } |
---|
| 102 | + } |
---|
| 103 | + |
---|
| 104 | + |
---|
76 | 105 | /* hook */ |
---|
77 | 106 | ret = of_get_named_gpio_flags(node, "hook_gpio", 0, &pdata->hook_gpio); |
---|
78 | 107 | if (ret < 0) { |
---|
.. | .. |
---|
319 | 319 | }
|
---|
320 | 320 | }
|
---|
321 | 321 |
|
---|
322 | | -
|
---|
| 322 | +/*
|
---|
323 | 323 | //spk_out_gpio
|
---|
324 | 324 | ret = of_get_named_gpio_flags(node, "spk_out_gpio", 0, &flags);
|
---|
325 | 325 | if (ret < 0) {
|
---|
.. | .. |
---|
336 | 336 | printk("%s() gpio_direction_output spk_out_gpio set ERROR\n", __FUNCTION__);
|
---|
337 | 337 | }
|
---|
338 | 338 | }
|
---|
| 339 | +*/
|
---|
339 | 340 | //air_mode_4g_gpio
|
---|
340 | 341 | ret = of_get_named_gpio_flags(node, "air_mode_4g_gpio", 0, &flags);
|
---|
341 | 342 | if (ret < 0) {
|
---|