4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Hocheol Seo <hocheol.seo@samsung.com>
7 * Injun Yang <injun.yang@samsung.com>
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
26 #include <device/usb-gadget.h>
31 #include "dr-common.h"
35 #define ACM_WAIT_TIME 300000
37 extern dr_info_t dr_info;
38 volatile gboolean dsr_status = FALSE;
40 static gboolean acm_enabled(int mode)
42 return (mode & USB_GADGET_FUNC_ACM);
45 static void __usb_status_noti_handler(void *data)
51 if (_get_usb_state(&usb_state) < 0) {
52 ERR(" Unable to get usb status !\n");
56 ret = vconf_get_int(VCONFKEY_USB_CUR_MODE, &usb_mode);
58 DBG("Vconf get failed\n");
62 DBG("USB noti handler, USB state : %d, Mode : %d\n", usb_state, usb_mode);
63 DBG("usb_fd = 0x%x\n", dr_info.usb.usb_fd);
67 * If USB driver builted in the Kernel, VCONFKEY_SYSMAN_USB_CONNECTED is not used.
68 * If USB driver loaded in DR/MTP then need to check VCONFKEY_SYSMAN_USB_CONNECTED.
69 * After usb driver loaded, MTP will be set vconf value as VCONFKEY_SYSMAN_USB_CONNECTED
71 if (usb_state != VCONFKEY_SYSMAN_USB_DISCONNECTED &&
72 acm_enabled(usb_mode)) {
74 } else if (usb_state == VCONFKEY_SYSMAN_USB_DISCONNECTED) {
81 static void __usb_mode_noti_handler(void *data)
86 ret = vconf_get_int(VCONFKEY_USB_CUR_MODE, &usb_mode);
88 DBG("Vconf get failed\n");
92 DBG("USB Mode noti handler, USB Mode : %d\n", usb_mode);
93 DBG("usb_fd = 0x%x\n", dr_info.usb.usb_fd);
95 if (!acm_enabled(usb_mode)) {
104 gboolean _register_vconf_notification(void)
108 ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_USB_STATUS,
109 (vconf_callback_fn)__usb_status_noti_handler, NULL);
111 ERR("Error !!! VCONFKEY reg noti : %s\n", VCONFKEY_SYSMAN_USB_STATUS);
113 ret = vconf_notify_key_changed(VCONFKEY_USB_CUR_MODE,
114 (vconf_callback_fn) __usb_mode_noti_handler, NULL);
116 ERR("Error !!! VCONFKEY reg noti : %s\n", VCONFKEY_USB_CUR_MODE);
121 void _unregister_vconf_notification(void)
123 vconf_ignore_key_changed(VCONFKEY_SYSMAN_USB_STATUS,
124 (vconf_callback_fn) __usb_status_noti_handler);
125 vconf_ignore_key_changed(VCONFKEY_USB_CUR_MODE,
126 (vconf_callback_fn) __usb_mode_noti_handler);
130 gboolean _register_telephony_event(void)
135 void _unregister_telephony_event(void)