1 /* Copyright Statement:
3 * This software/firmware and related documentation ("MediaTek Software") are
4 * protected under relevant copyright laws. The information contained herein
5 * is confidential and proprietary to MediaTek Inc. and/or its licensors.
6 * Without the prior written permission of MediaTek inc. and/or its licensors,
7 * any reproduction, modification, use or disclosure of MediaTek Software,
8 * and information contained herein, in whole or in part, shall be strictly prohibited.
10 * MediaTek Inc. (C) 2010. All rights reserved.
12 * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
13 * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
14 * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
15 * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
18 * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
19 * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
20 * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
21 * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
22 * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
23 * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
24 * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
25 * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
26 * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
27 * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
28 * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
29 * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
31 * The following software/firmware and/or related documentation ("MediaTek Software")
32 * have been modified by MediaTek Inc. All revisions are subject to any receiver's
33 * applicable license agreements with MediaTek Inc.
38 \brief Declaration of library functions
40 Any definitions in this file will be shared among GLUE Layer and internal Driver Stack.
43 /*******************************************************************************
44 * Copyright (c) 2009 MediaTek Inc.
46 * All rights reserved. Copying, compilation, modification, distribution
47 * or any other use whatsoever of this material is strictly prohibited
48 * except in accordance with a Software License Agreement with
50 ********************************************************************************
53 /*******************************************************************************
56 * BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND
57 * AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK
58 * SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE
59 * PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY
60 * DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
61 * LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
62 * PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE
63 * ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY
64 * WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK
65 * SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY
66 * WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE
67 * FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO
68 * CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
70 * BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
71 * LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL
72 * BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT
73 * ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY
74 * BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
76 * THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
77 * WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT
78 * OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING
79 * THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN
80 * FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE
82 ********************************************************************************
86 /*******************************************************************************
87 * C O M P I L E R F L A G S
88 ********************************************************************************
91 /*******************************************************************************
93 ********************************************************************************
95 #include <asm/mach-types.h>
96 #include <linux/delay.h>
97 #include <mach/gpio.h>
99 #include <linux/platform_device.h>
101 #if CONFIG_HAS_WAKELOCK
102 #include <linux/wakelock.h>
103 #define CFG_WMT_WAKELOCK_SUPPORT 1
110 #define DFT_TAG "[WMT-PLAT]"
113 /*******************************************************************************
114 * E X T E R N A L R E F E R E N C E S
115 ********************************************************************************
119 #include <linux/interrupt.h>
120 #include <linux/irq.h>
121 #include <linux/spinlock.h>
123 /* MTK_WCN_COMBO header files */
124 #include "wmt_plat.h"
126 #include "mtk_wcn_cmb_hw.h"
128 /*******************************************************************************
130 ********************************************************************************
134 #define GPIO_MT6620_PMUEN XXX
135 #define GPIO_MT6620_SYSRST XXX
136 #define GPIO_MT6620_LDO_EN XXX
139 /*******************************************************************************
141 ********************************************************************************
144 /*******************************************************************************
145 * F U N C T I O N D E C L A R A T I O N S
146 ********************************************************************************
149 static VOID wmt_plat_func_ctrl (UINT32 type, UINT32 on);
150 static VOID wmt_plat_bgf_eirq_cb (VOID);
152 static INT32 wmt_plat_ldo_ctrl (ENUM_PIN_STATE state);
153 static INT32 wmt_plat_pmu_ctrl (ENUM_PIN_STATE state);
154 static INT32 wmt_plat_rtc_ctrl (ENUM_PIN_STATE state);
155 static INT32 wmt_plat_rst_ctrl (ENUM_PIN_STATE state);
156 static INT32 wmt_plat_bgf_eint_ctrl (ENUM_PIN_STATE state);
157 static INT32 wmt_plat_wifi_eint_ctrl (ENUM_PIN_STATE state);
158 static INT32 wmt_plat_all_eint_ctrl (ENUM_PIN_STATE state);
159 static INT32 wmt_plat_uart_ctrl (ENUM_PIN_STATE state);
160 static INT32 wmt_plat_pcm_ctrl (ENUM_PIN_STATE state);
161 static INT32 wmt_plat_i2s_ctrl (ENUM_PIN_STATE state);
162 static INT32 wmt_plat_sdio_pin_ctrl (ENUM_PIN_STATE state);
163 static INT32 wmt_plat_gps_sync_ctrl (ENUM_PIN_STATE state);
164 static INT32 wmt_plat_gps_lna_ctrl (ENUM_PIN_STATE state);
166 static INT32 wmt_plat_dump_pin_conf (VOID);
170 /*******************************************************************************
171 * P U B L I C D A T A
172 ********************************************************************************
174 UINT32 gWmtDbgLvl = WMT_LOG_INFO;
176 unsigned int g_balance_flag;
177 spinlock_t g_balance_lock;
178 unsigned int g_bgf_irq = 69;//INT_6620;//bgf eint number
179 /*******************************************************************************
180 * P R I V A T E D A T A
181 ********************************************************************************
187 #if CFG_WMT_WAKELOCK_SUPPORT
188 static OSAL_SLEEPABLE_LOCK gOsSLock;
189 static struct wake_lock wmtWakeLock;
192 irq_cb wmt_plat_bgf_irq_cb = NULL;
193 device_audio_if_cb wmt_plat_audio_if_cb = NULL;
194 const static fp_set_pin gfp_set_pin_table[] =
196 [PIN_LDO] = wmt_plat_ldo_ctrl,
197 [PIN_PMU] = wmt_plat_pmu_ctrl,
198 [PIN_RTC] = wmt_plat_rtc_ctrl,
199 [PIN_RST] = wmt_plat_rst_ctrl,
200 [PIN_BGF_EINT] = wmt_plat_bgf_eint_ctrl,
201 [PIN_WIFI_EINT] = wmt_plat_wifi_eint_ctrl,
202 [PIN_ALL_EINT] = wmt_plat_all_eint_ctrl,
203 [PIN_UART_GRP] = wmt_plat_uart_ctrl,
204 [PIN_PCM_GRP] = wmt_plat_pcm_ctrl,
205 [PIN_I2S_GRP] = wmt_plat_i2s_ctrl,
206 [PIN_SDIO_GRP] = wmt_plat_sdio_pin_ctrl,
207 [PIN_GPS_SYNC] = wmt_plat_gps_sync_ctrl,
208 [PIN_GPS_LNA] = wmt_plat_gps_lna_ctrl,
212 /*******************************************************************************
214 ********************************************************************************
218 * \brief audio control callback function for CMB_STUB on ALPS
220 * A platform function required for dynamic binding with CMB_STUB on ALPS.
222 * \param state desired audio interface state to use
223 * \param flag audio interface control options
225 * \retval 0 operation success
226 * \retval -1 invalid parameters
227 * \retval < 0 error for operation fail
229 INT32 wmt_plat_audio_ctrl (CMB_STUB_AIF_X state, CMB_STUB_AIF_CTRL ctrl)
234 /* input sanity check */
235 if ( (CMB_STUB_AIF_MAX <= state)
236 || (CMB_STUB_AIF_CTRL_MAX <= ctrl) ) {
238 WMT_ERR_FUNC("WMT-PLAT: invalid para, state(%d), ctrl(%d),iRet(%d) \n", state, ctrl, iRet);
241 if (0/*I2S/PCM share pin*/) {
242 // TODO: [FixMe][GeorgeKuo] how about MT6575? The following is applied to MT6573E1 only!!
244 WMT_INFO_FUNC( "PCM/I2S pin share\n");
248 WMT_INFO_FUNC( "PCM/I2S pin seperate\n");
253 /* set host side first */
256 /* BT_PCM_OFF & FM line in/out */
257 iRet += wmt_plat_gpio_ctrl(PIN_PCM_GRP, PIN_STA_DEINIT);
258 iRet += wmt_plat_gpio_ctrl(PIN_I2S_GRP, PIN_STA_DEINIT);
262 iRet += wmt_plat_gpio_ctrl(PIN_PCM_GRP, PIN_STA_INIT);
263 iRet += wmt_plat_gpio_ctrl(PIN_I2S_GRP, PIN_STA_DEINIT);
267 iRet += wmt_plat_gpio_ctrl(PIN_PCM_GRP, PIN_STA_DEINIT);
268 iRet += wmt_plat_gpio_ctrl(PIN_I2S_GRP, PIN_STA_INIT);
272 iRet += wmt_plat_gpio_ctrl(PIN_PCM_GRP, PIN_STA_INIT);
273 iRet += wmt_plat_gpio_ctrl(PIN_I2S_GRP, PIN_STA_INIT);
277 /* FIXME: move to cust folder? */
278 WMT_ERR_FUNC("invalid state [%d]\n", state);
283 if (CMB_STUB_AIF_CTRL_EN == ctrl) {
284 WMT_INFO_FUNC("call chip aif setting \n");
285 /* need to control chip side GPIO */
286 //iRet += wmt_lib_set_aif(state, (pinShare) ? MTK_WCN_BOOL_TRUE : MTK_WCN_BOOL_FALSE);
287 if (NULL != wmt_plat_audio_if_cb)
289 iRet += (*wmt_plat_audio_if_cb)(state, (pinShare) ? MTK_WCN_BOOL_TRUE : MTK_WCN_BOOL_FALSE);
293 WMT_WARN_FUNC("wmt_plat_audio_if_cb is not registered \n");
298 WMT_INFO_FUNC("skip chip aif setting \n");
304 #if CFG_WMT_PS_SUPPORT
305 irqreturn_t irq_handler(int i, void *arg)
307 wmt_plat_bgf_eirq_cb();
313 wmt_plat_bgf_eirq_cb (VOID)
316 #if CFG_WMT_PS_SUPPORT
317 //#error "need to disable EINT here"
318 //wmt_lib_ps_irq_cb();
319 if (NULL != wmt_plat_bgf_irq_cb)
321 (*(wmt_plat_bgf_irq_cb))();
325 WMT_WARN_FUNC("WMT-PLAT: wmt_plat_bgf_irq_cb not registered\n");
334 VOID wmt_lib_plat_irq_cb_reg (irq_cb bgf_irq_cb)
336 wmt_plat_bgf_irq_cb = bgf_irq_cb;
339 VOID wmt_lib_plat_aif_cb_reg (device_audio_if_cb aif_ctrl_cb)
341 wmt_plat_audio_if_cb = aif_ctrl_cb;
350 wmt_plat_init (P_PWR_SEQ_TIME pPwrSeqTime)
352 //CMB_STUB_CB stub_cb;
353 /*PWR_SEQ_TIME pwr_seq_time;*/
356 //stub_cb.aif_ctrl_cb = wmt_plat_audio_ctrl;
357 //stub_cb.func_ctrl_cb = wmt_plat_func_ctrl;
358 //stub_cb.size = sizeof(stub_cb);
360 /* register to cmb_stub */
361 //iret = mtk_wcn_cmb_stub_reg(&stub_cb);
364 iret += mtk_wcn_cmb_hw_init(pPwrSeqTime);
366 /*init wmt function ctrl wakelock if wake lock is supported by host platform*/
367 #ifdef CFG_WMT_WAKELOCK_SUPPORT
368 wake_lock_init(&wmtWakeLock, WAKE_LOCK_SUSPEND, "wmtFuncCtrl");
369 osal_sleepable_lock_init(&gOsSLock);
372 spin_lock_init(&g_balance_lock);
374 WMT_DBG_FUNC("WMT-PLAT: ALPS platform init (%d)\n", iret);
381 wmt_plat_deinit (VOID)
385 /* 1. de-init cmb_hw */
386 iret = mtk_wcn_cmb_hw_deinit();
387 /* 2. unreg to cmb_stub */
388 iret += mtk_wcn_cmb_stub_unreg();
389 /*3. wmt wakelock deinit*/
390 #ifdef CFG_WMT_WAKELOCK_SUPPORT
391 wake_lock_destroy(&wmtWakeLock);
392 osal_sleepable_lock_deinit(&gOsSLock);
393 WMT_DBG_FUNC("destroy wmtWakeLock\n");
395 WMT_DBG_FUNC("WMT-PLAT: ALPS platform init (%d)\n", iret);
400 INT32 wmt_plat_sdio_ctrl (WMT_SDIO_SLOT_NUM sdioPortType, ENUM_FUNC_STATE on)
402 if (FUNC_OFF == on) {
403 /* add control logic here to generate SDIO CARD REMOVAL event to mmc/sd
404 * controller. SDIO card removal operation and remove success messages
409 /* add control logic here to generate SDIO CARD INSERTION event to mmc/sd
410 * controller. SDIO card detection operation and detect success messages
420 ENUM_FUNC_STATE state
428 wmt_plat_dump_pin_conf (VOID)
430 WMT_INFO_FUNC( "[WMT-PLAT]=>dump wmt pin configuration start<=\n");
431 WMT_INFO_FUNC( "[WMT-PLAT]=>dump wmt pin configuration emds<=\n");
436 INT32 wmt_plat_pwr_ctrl (
437 ENUM_FUNC_STATE state
444 // TODO:[ChangeFeature][George] always output this or by request throuth /proc or sysfs?
445 wmt_plat_dump_pin_conf();
446 ret = mtk_wcn_cmb_hw_pwr_on();
450 ret = mtk_wcn_cmb_hw_pwr_off();
454 ret = mtk_wcn_cmb_hw_rst();
458 WMT_WARN_FUNC("WMT-PLAT:Warnning, invalid state(%d) in pwr_ctrl\n", state);
465 INT32 wmt_plat_ps_ctrl (ENUM_FUNC_STATE state)
478 // TODO: [ChangeFeature][GeorgeKuo]: use another function to handle this, as done in gpio_ctrls
480 if ( (PIN_STA_INIT != state )
481 && (PIN_STA_DEINIT != state )
482 && (PIN_STA_EINT_EN != state )
483 && (PIN_STA_EINT_DIS != state ) ) {
485 WMT_WARN_FUNC("WMT-PLAT:invalid PIN_STATE(%d) in eirq_ctrl for PIN(%d), ret(%d) \n", state, id, iRet);
492 if (PIN_STA_INIT == state) {
493 /*request irq,low level triggered*/
494 //iRet = request_irq(INT_6620, irq_handler, IRQF_TRIGGER_LOW | IRQF_DISABLED, "MTK6620_BT", NULL);
497 g_balance_flag = 1;//do not modify this value
498 WMT_INFO_FUNC("WMT-PLAT:BGFInt (init) \n");
500 else if (PIN_STA_EINT_EN == state) {
502 spin_lock_irqsave(&g_balance_lock,flags);
505 /*if enter this case, the bgf eint has been enabled,so skip it.*/
506 WMT_INFO_FUNC("BGF_EINT has been enabled,g_balance_flag(%d)!\n",g_balance_flag);
510 /*do real irq enable implement is this case*/
511 //enable_irq(INT_6620);
513 WMT_INFO_FUNC("WMT-PLAT:BGFInt (en),g_balance_flag(%d)\n",g_balance_flag);
515 spin_unlock_irqrestore(&g_balance_lock,flags);
517 else if (PIN_STA_EINT_DIS == state) {
519 spin_lock_irqsave(&g_balance_lock,flags);
522 /*if enter this case, the bgf eint has been disabled,so skip it.*/
523 WMT_INFO_FUNC("BGF_EINT has been disabled,g_balance_flag(%d)!\n",g_balance_flag);
527 /*do real irq disable implement is this case*/
528 //disable_irq_nosync(INT_6620);
530 WMT_INFO_FUNC("WMT-PLAT:BGFInt (dis) g_balance_flag(%d)\n",g_balance_flag);
532 spin_unlock_irqrestore(&g_balance_lock,flags);
535 /* de-init: free irq*/
536 //free_irq(INT_6620,NULL);
537 WMT_INFO_FUNC("WMT-PLAT:BGFInt (deinit) \n");
545 if (PIN_STA_INIT == state) {
547 WMT_DBG_FUNC("WMT-PLAT:ALLInt (INIT but not used yet) \n");
549 else if (PIN_STA_EINT_EN == state) {
550 WMT_DBG_FUNC("WMT-PLAT:ALLInt (EN but not used yet) \n");
552 else if (PIN_STA_EINT_DIS == state) {
553 WMT_DBG_FUNC("WMT-PLAT:ALLInt (DIS but not used yet) \n");
557 WMT_DBG_FUNC("WMT-PLAT:ALLInt (DEINIT but not used yet) \n");
558 /* de-init: nothing to do in ALPS, such as un-registration... */
561 WMT_DBG_FUNC("WMT-PLAT:ALLInt (not used yet) \n");
567 WMT_WARN_FUNC("WMT-PLAT:unsupported EIRQ(PIN_ID:%d) in eirq_ctrl, ret (%d)\n", id, iRet);
576 INT32 wmt_plat_gpio_ctrl (
581 if ( (PIN_ID_MAX > id)
582 && (PIN_STA_MAX > state) ) {
584 // TODO: [FixMe][GeorgeKuo] do sanity check to const function table when init and skip checking here
585 if (gfp_set_pin_table[id]) {
586 return (*(gfp_set_pin_table[id]))(state); /* .handler */
589 WMT_WARN_FUNC("WMT-PLAT: null fp for gpio_ctrl(%d)\n", id);
593 WMT_ERR_FUNC("WMT-PLAT:[out of range] id(%d), state (%d)\n", id, state);
605 /*set to gpio output low, disable pull*/
606 WMT_DBG_FUNC("WMT-PLAT:LDO init (out 0) \n");
610 WMT_DBG_FUNC("WMT-PLAT:LDO (out 1) \n");
614 WMT_DBG_FUNC("WMT-PLAT:LDO (out 0) \n");
619 /*set to gpio input low, pull down enable*/
620 WMT_DBG_FUNC("WMT-PLAT:LDO deinit (in pd) \n");
624 WMT_WARN_FUNC("WMT-PLAT:Warnning, invalid state(%d) on LDO\n", state);
638 /*set to gpio output low, disable pull*/
640 printk("WMT-PLAT:PMU init (out 0) \n");
645 printk("WMT-PLAT:PMU (out 1) \n");
650 printk("WMT-PLAT:PMU (out 0) \n");
655 /*set to gpio input low, pull down enable*/
657 printk("WMT-PLAT:PMU deinit (in pd) \n");
661 printk("WMT-PLAT:Warnning, invalid state(%d) on PMU\n", state);
676 WMT_DBG_FUNC("WMT-PLAT:RTC init \n");
680 WMT_WARN_FUNC("WMT-PLAT:Warnning, invalid state(%d) on RTC\n", state);
695 /*set to gpio output low, disable pull*/
697 printk("WMT-PLAT:RST init (out 0) \n");
702 printk("WMT-PLAT:RST (out 1) \n");
707 printk("WMT-PLAT:RST (out 0) \n");
712 /*set to gpio input low, pull down enable*/
714 printk("WMT-PLAT:RST deinit (in pd) \n");
718 printk("WMT-PLAT:Warnning, invalid state(%d) on RST\n", state);
726 wmt_plat_bgf_eint_ctrl (
734 /*set to gpio input low, pull down eanble*/
736 WMT_DBG_FUNC("WMT-PLAT:BGFInt init(in pd) \n");
740 /* first: set to EINT mode,interrupt input, pull up enable*/
742 WMT_DBG_FUNC("WMT-PLAT:BGFInt mux (eint) \n");
744 /* second: enable bgf irq wake up host function*/
747 //iret = enable_irq_wake(g_bgf_irq);//enable bgf irq wake up host function
748 //WMT_INFO_FUNC("enable_irq_wake(bgf:%d)++, ret(%d)\n", g_bgf_irq, iret);
754 /* first: disable bgf irq wake up host function*/
757 //iret = disable_irq_wake(g_bgf_irq);//disable bgf irq wake up host function
759 //WMT_WARN_FUNC("disable_irq_wake(bgf:%d) fail(%d)\n", g_bgf_irq, iret);
763 //WMT_INFO_FUNC("disable_irq_wake(bgf:%d)--, ret(%d)\n", g_bgf_irq, iret);
767 /* second: set to gpio input low, pull down enable*/
768 WMT_DBG_FUNC("WMT-PLAT:BGFInt deinit(in pd) \n");
772 WMT_WARN_FUNC("WMT-PLAT:Warnning, invalid state(%d) on BGF EINT\n", state);
780 INT32 wmt_plat_wifi_eint_ctrl(ENUM_PIN_STATE state)
790 case PIN_STA_EINT_EN:
792 case PIN_STA_EINT_DIS:
796 /*set to gpio input low, pull down enable*/
799 WMT_WARN_FUNC("WMT-PLAT:Warnning, invalid state(%d) on WIFI EINT\n", state);
803 WMT_INFO_FUNC("WMT-PLAT:WIFI EINT is controlled by MSDC driver \n");
810 wmt_plat_all_eint_ctrl (
817 /*set to gpio input low, pull down eanble*/
818 WMT_DBG_FUNC("WMT-PLAT:ALLInt init(in pd) \n");
822 /*set to gpio EINT mode, pull down enable*/
827 /*set to gpio input low, pull down enable*/
831 WMT_WARN_FUNC("WMT-PLAT:Warnning, invalid state(%d) on ALL EINT\n", state);
837 INT32 wmt_plat_uart_ctrl(ENUM_PIN_STATE state)
843 WMT_DBG_FUNC("WMT-PLAT:UART init (mode_01, uart) \n");
847 WMT_DBG_FUNC("WMT-PLAT:UART deinit (out 0) \n");
851 WMT_WARN_FUNC("WMT-PLAT:Warnning, invalid state(%d) on UART Group\n", state);
859 INT32 wmt_plat_pcm_ctrl(ENUM_PIN_STATE state)
865 /*set to PCM function*/
866 WMT_DBG_FUNC("WMT-PLAT:PCM init (pcm) \n");
871 WMT_DBG_FUNC("WMT-PLAT:PCM deinit (out 0) \n");
875 WMT_WARN_FUNC("WMT-PLAT:Warnning, invalid state(%d) on PCM Group\n", state);
882 INT32 wmt_plat_i2s_ctrl(ENUM_PIN_STATE state)
884 #ifndef FM_ANALOG_INPUT
889 /*set to I2S function*/
890 WMT_DBG_FUNC("WMT-PLAT:I2S init \n");
894 /*set to gpio input low, pull down enable*/
895 WMT_DBG_FUNC("WMT-PLAT:I2S deinit (out 0) \n");
898 WMT_WARN_FUNC("WMT-PLAT:Warnning, invalid state(%d) on I2S Group\n", state);
902 WMT_INFO_FUNC( "[MT6620]warnning:FM analog mode is set, no I2S GPIO settings should be modified by combo driver\n");
909 wmt_plat_sdio_pin_ctrl (
920 WMT_WARN_FUNC("WMT-PLAT:Warnning, invalid state(%d) on SDIO Group\n", state);
927 wmt_plat_gps_sync_ctrl (
934 /*set GPS_SYNC GPIO to GPIO mode, pull disable,output low*/
938 /*set GPS_SYNC GPIO to GPS_SYNC function*/
949 wmt_plat_gps_lna_ctrl (
956 /*set GPS_LNA GPIO to GPIO mode, pull disable,output low*/
959 /*set GPS_LNA GPIO to GPIO mode, pull disable,output high*/
962 /*set GPS_LNA GPIO to GPIO mode, pull disable,output low*/
966 WMT_WARN_FUNC("%d mode not defined for gps lna pin !!!\n", state);
975 INT32 wmt_plat_wake_lock_ctrl(ENUM_WL_OP opId)
977 #ifdef CFG_WMT_WAKELOCK_SUPPORT
978 static INT32 counter = 0;
981 osal_lock_sleepable_lock( &gOsSLock);
982 if (WL_OP_GET == opId)
985 }else if (WL_OP_PUT == opId)
989 osal_unlock_sleepable_lock( &gOsSLock);
990 if (WL_OP_GET == opId && counter == 1)
992 wake_lock(&wmtWakeLock);
993 WMT_DBG_FUNC("WMT-PLAT: after wake_lock(%d), counter(%d)\n", wake_lock_active(&wmtWakeLock), counter);
996 else if (WL_OP_PUT == opId && counter == 0)
998 wake_unlock(&wmtWakeLock);
999 WMT_DBG_FUNC("WMT-PLAT: after wake_unlock(%d), counter(%d)\n", wake_lock_active(&wmtWakeLock), counter);
1003 WMT_WARN_FUNC("WMT-PLAT: wakelock status(%d), counter(%d)\n", wake_lock_active(&wmtWakeLock), counter);
1007 WMT_WARN_FUNC("WMT-PLAT: host awake function is not supported.");