2 * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <systemd/sd-daemon.h>
19 #include "mtp_usb_driver.h"
21 static const mtp_usb_driver_t *usb_driver;
27 mtp_bool _transport_select_driver(void)
29 if (access(MTP_DRIVER_PATH, F_OK) == 0) {
30 usb_driver = &mtp_usb_driver_slp;
31 DBG("SLP driver selected");
35 if (access(MTP_EP0_PATH, F_OK) == 0 || sd_listen_fds(0) >= 4) {
36 usb_driver = &mtp_usb_driver_ffs;
37 DBG("FFS driver selected");
41 ERR("No suport for USB gadgets in kernel");
45 mtp_bool _transport_init_usb_device(void)
47 return usb_driver->transport_init_usb_device();
50 void _transport_deinit_usb_device(void)
52 usb_driver->transport_deinit_usb_device();
55 mtp_uint32 _get_tx_pkt_size(void)
57 return usb_driver->get_rx_pkt_size();
60 mtp_uint32 _get_rx_pkt_size(void)
62 return usb_driver->get_rx_pkt_size();
66 * static mtp_int32 _transport_mq_init()
67 * This function create a message queue for MTP,
68 * A created message queue will be used to help data transfer between
69 * MTP module and usb buffer.
70 * @return This function returns TRUE on success or
71 * returns FALSE on failure.
73 mtp_int32 _transport_mq_init(msgq_id_t *rx_mqid, msgq_id_t *tx_mqid)
75 return usb_driver->transport_mq_init(rx_mqid, tx_mqid);
78 void *_transport_thread_usb_write(void *arg)
80 return usb_driver->transport_thread_usb_write(arg);
83 void *_transport_thread_usb_read(void *arg)
85 return usb_driver->transport_thread_usb_read(arg);
88 void *_transport_thread_usb_control(void *arg)
90 return usb_driver->transport_thread_usb_control(arg);
94 * mtp_bool __transport_mq_deinit()
95 * This function destroy a message queue for MTP,
96 * @return This function returns TRUE on success or
97 * returns FALSE on failure.
99 mtp_bool _transport_mq_deinit(msgq_id_t *rx_mqid, msgq_id_t *tx_mqid)
101 return usb_driver->transport_mq_deinit(rx_mqid, tx_mqid);
104 mtp_uint32 _transport_get_usb_packet_len(void)
106 return usb_driver->transport_get_usb_packet_len();
109 mtp_transport_type_t _transport_get_type(void)
111 if (usb_driver == &mtp_usb_driver_slp)
112 return MTP_TRANSPORT_SLP;
114 if (usb_driver == &mtp_usb_driver_ffs)
115 return MTP_TRANSPORT_FFS;
117 return MTP_TRANSPORT_UNKNOWN;