summaryrefslogtreecommitdiff
path: root/drivers/usb (follow)
Commit message (Collapse)AuthorAge
...
* | | usb: gadget: Add support for rndis flow control callbackHemant Kumar2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | Allow registration for data flow control call back from rndis functions supporting different transport i.e. BAM2BAM_IPA, GSI_IPA. Change-Id: I09df5f7f81e9d9ed0cfd5e54d481db87727bbc75 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
* | | usb: gadget: f_diag: Add support for configFSHemant Kumar2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change adds APIs to allocate and instanciate multi instance diag function driver using configFS. Add an entry in kconfig to select diag driver for configFS. Change-Id: I428631dc63643eddb075a09d0e46e1a6b1117f0e Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
* | | usb: gadget: Move diag dload handling to f_diag driverJack Pham2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Upon Diag function bind, the DLOAD memory region should be updated with the USB PID and serial number in order to support a persistent connection with the PC if the device reboots into download mode. This functionality need not be handled in the android.c driver. The only reason it is there is to be able to locate the IO address which is specified in device tree. Since this can be done from the Diag function driver directly, move the handling there. The address itself can be specified under the "qcom,msm-imem" parent with its own "qcom,msm-imem-diag-dload" compatible string. For now, allow falling back to retrieving the address from the "android_usb" for backwards compatibility until the device tree files are updated. Change-Id: I0d6d1dac0f12b7890220d857227ae45c9258c1f2 Signed-off-by: Jack Pham <jackp@codeaurora.org>
* | | usb: gadget: Add snapshot of DIAG function driverHemant Kumar2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add function driver to support Qualcomm diagnostics port over USB. This snapshot is taken as of msm-3.18 commit: commit e70ad0cd5e (Promotion of kernel.lnx.3.18-151201) Change-Id: I51aaa8f6a2e05fc252ea810244ddfc99ca2741cc Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
* | | usb: gadget: Disable L1 LPM capabilityAzhar Shaikh2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Disable USB L1 LPM functionality on MSM platforms by setting the USB version as 0x200 for all High Speed Devices. Add a module param, which when enabled will set the USB version as 0x210. Module param can be enabled as echo Y > /sys/module/libcomposite/parameters/enable_l1_for_hs Change-Id: I781a237b44e542c6089af36b7ce0a0665d3cd440 Signed-off-by: Azhar Shaikh <azhars@codeaurora.org>
* | | usb: gadget: Add link power management supportShimrit Malichi2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Link Power Management (a.k.a. L1) is similar to the existing usb bus suspend/resume/remote-wakeup, but has transitional latencies of tens of microseconds between power states (instead of three to greater than 20 millisecond latencies of the USB 2.0 suspend/resume). Change-Id: I8ae493534702e658c24f384a6b705b08e9ea9d05 Signed-off-by: Shimrit Malichi <smalichi@codeaurora.org> Signed-off-by: Tarun Gupta <tarung@codeaurora.org>
* | | usb: gadget: Draw 900mA current when enumerating in super speed modeMayank Rana2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently 500mA is used as max allowable current to draw with USB SDP case in both super speed and high speed mode. In super speed mode it is allowed to draw 900mA current. Hence update allowable current to draw based on USB connection speed. This change doesn't consider any configuration based allowable max current. Change-Id: Iae9ecf586135b0a2064e7d5e6e8fa3d8e7e4fb70 Signed-off-by: Mayank Rana <mrana@codeaurora.org>
* | | usb: gadget: composite: Protect cdev in composite_suspend()Mayank Rana2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With USB cable disconnect case, there is race happening when composite_suspend() is being pre-empted just after getting reference to cdev structure (suspend flow) and cdev->config set to NULL as part of reset_config() (disconnect flow). This results into composite_suspend() using bad value with cdev->config which is resulting in some cases multiple time calling f->suspend(). Fix this issue by protecting cdev in composite_suspend() API. CRs-Fixed: 916718 Change-Id: Id0b2a254f64621fcbc19c0556265e9b7b32f1382 Signed-off-by: Mayank Rana <mrana@codeaurora.org>
* | | usb: gadget: Fix bug is queuing req upon Function SuspendHemant Kumar2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In case of Super speed function suspend without bus suspend, if function driver queues a request, usb_gadget_func_wakeup() directly issues Function Wakeup command to controller and returns success. As a result request is queued to endpoint before receiving function resume from host. This causes ep queue to fail when it is done upon function resume as request is already queued. If function driver tries to queue any request further this results into request packet drop as ep queue returns error -EBUSY. Hence do not queue request in function wake up context, instead wait for function resume to queue the request. CRs-Fixed: 848622 Change-Id: I00aea59fb2cbe59190dadb4c838534cc9e4ffcf3 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
* | | gadget: composite: Fix crash seen when SS descriptor is not availableMayank Rana2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In some cases, composite device may have multiple interfaces and one of interface may not support USB super speed functionality. When host is trying to enumerate this composite device into super speed mode by sending SET_CONFIG(1), it results into crash due to ss descriptors are not available for particular interface. Hence add check against ss descriptors and fail SET_CONFIG(1). This results into some of host try to re-enumerate USB composite device with only interface which support super speed mode. Change-Id: Ib909f3d451e247c0415863689711e66b15fa2fa5 Signed-off-by: Mayank Rana <mrana@codeaurora.org>
* | | USB: f_mass_storage: Send GADGET_DELAYED_STATUS for MSC RESET commandVijayavardhan Vennapusa2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When Host sends MSC RESET command to the device, device is expected to clear HALT condition on the bulk IN endpoint as part of handling it, before sending status phase to the Host. Since handling of MSC RESET is done by sending signal to fsg_thread, it could take time for handling it. It could lead to sending bulk IN endpoint as halted, when host asks for endpoint status as status phase is sent for MSC RESET command immediately after it is received. Due to this, MSC compliance tests fail. Hence send delayed status in case of MSC RESET and send status phase after it is handled and cleared halt condition. CRs-Fixed: 547929 Change-Id: If80d0ffb2d012724b899772b1b45dff8092bd8d5 Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org> Signed-off-by: Mayank Rana <mrana@codeaurora.org>
* | | Revert "usb: gadget: composite: enable BESL support"Mayank Rana2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit a6615937bcd9 ("usb: gadget: composite: enable BESL support") enables LPM L1 support and advertises this capability to host. It has been observed that when host is supporting LPM L1 functionality and triggering it, device controller goes into L1 state but software is not able to get controller out of L1 state using Link Recovery functionality which results into USB enumeration issue with host. Hence to fix this issue disable LPM L1 support from device side. CRs-Fixed: 856808 Change-Id: I119423363a19be469782d016ae13155697d39afe Signed-off-by: Hemant Kumar <hemantk@codeaurora.org> Signed-off-by: Mayank Rana <mrana@codeaurora.org>
* | | usb: gadget: Invalidate interface id upon adding function to configHemant Kumar2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit e9df68ade ("usb: gadget: f_mbim: Queue notification request upon function resume") added variable to store interface id in usb_interface_id(). This interface id is used to send function wake device notification. Functions having control interface and data interface calls usb_interface_id() twice causing invalid interface index stored in the variable. This is causing remote wakeup failure. Fix this issue by initializing variable to -EINVAL and set it to interface index only when it is invalidated. CRs-Fixed: 810737 Change-Id: I41bce0a71ce0b8e92f3736d4e292132ce16de021 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org> Signed-off-by: Azhar Shaikh <azhars@codeaurora.org>
* | | usb: gadget: Ignore the second set_config from the hostChandanaKishori Chiluveru2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some USB hosts may send SET_CONFIGURATION with same value twice. The current code implementation of android_work() issues disconnect event to userspace if SetConfiguration with non-zero value is sent twice. The Userspace application may disconnect USB and it causes fail to connect to the USB host. Fix this by ignoring the second time SET_CONFIGURATION request from the host only for the same configuration value twice. CRs-Fixed: 661220 Change-Id: Iec8dd7824fa9f371ea147784cf9137aa88a7128e Signed-off-by: ChandanaKishori Chiluveru <cchilu@codeaurora.org>
* | | USB: composite: Hold spinlock before calling usb_func_wakeup_int() APIVijayavardhan Vennapusa2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is a chance that composite_resume might race with android_disable if composition switch happens and at the same time, reset interrupt is triggered. In this case, it could lead to accessing invalid address as composite_resume() not calling usb_func_wakeup_int() without holding spinlock. Hence modfiy usb_func_wakeup_int() such that caller of this function should call it with spinlock holding to fix the issue. CRs-Fixed: 799332 Change-Id: I97ef374923504977ac8fc32954dd7de834a01041 Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org> Signed-off-by: Azhar Shaikh <azhars@codeaurora.org>
* | | usb: gadget: f_mbim: Queue notification request upon function resumeHemant Kumar2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In super speed mode if userspace issues a write after usb bus suspend usb_func_ep_queue() schedules wakeup to resume the function. After that it queues the request which fails with -ENOTSUPP. As a result no notification request queued to hw and write request gets delayed to be sent until another write request comes and queues notification request after function resume. This causes mismatch to the mbim request response. Fix this by queuing the notification request upon function resume if notify count is greater than zero. Also, drop control packet after bus suspend if remote wakeup is not supported or if ep enqueue returns error other than -EAGAIN. CRs-Fixed: 789467 Change-Id: I446de1eb169b4ccb8f4db5f003b622d7b9c0b22b Signed-off-by: Hemant Kumar <hemantk@codeaurora.org> Signed-off-by: Azhar Shaikh <azhars@codeaurora.org>
* | | dwc3: gadget: Replace polling mechnism to go into U0 stateMayank Rana2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Moving into U0 state is being confirmed by polling for 100ms after performing remote wakeup from device. In some of cases where host is taking more time to respond, remote wakeup is failing. Also USB specification does not define any limit for the host response time. Hence this change replaces polling mechnism by using LINK status change event notification with core and increase host response time from 100ms to 3 seconds. It also makes sure that composite_resume() is being called after remote wakeup is completed succesfully. It removes some of flag used to avoid race between bus suspend/resume and fuction suspend/resume as those are serialize and not required anymore. CRs-Fixed: 712681 Change-Id: I71285daf117282c738e139e9a05ead6ef16dd202 Signed-off-by: Mayank Rana <mrana@codeaurora.org>
* | | usb: composite: don't print the invalid function wakeup failure messagesPavankumar Kondeti2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The function level suspend/resume/wakeup are supported in super speed mode only. The usb_func_wakeup() is called for every function during resume irrespective of the operating speed. This function returns -ENOTSUPP when the gadget is not operating in super speed. Don't print the error message in this case. Otherwise an error message is printed for each function during high/full speed device resume. CRs-Fixed: 750230 Change-Id: I6f600fe7fa9a037b83909265229acdc668329d6a Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
* | | usb: gadget: Resolve recursive spinlock during remote wakeupDanny Segal2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a USB function wishes to send new data during USB suspend state, it needs to issue USB remote wakeup and send a function wakeup notification after then. This scenario leads to recursive spin locking inside the _usb_func_wakeup() function, because this function gets called recursively. This function issues remote wakeup, which internally calls the resume interrupt callback, which calls the _usb_func_wakeup() function again. This issue is resolved by performing the remote wakeup in a deferred work context, and this splits the recursion loop. CRs-fixed: 700667 Change-Id: I59c8efde098781587d29f08cd60e4aa3521949d8 Signed-off-by: Danny Segal <dsegal@codeaurora.org>
* | | usb: gadget: Fix race condition between function wakeup and bus resumeDanny Segal2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a SS-USB function wishes to wake up the USB bus, it needs to send a SS-USB function wakeup notification to the USB host after the bus is resumed. For this purpose a function wake up pending flag is used to notify the resume callback that a function wake up notification needs to be sent. However, sometimes there is a race condition in which the resume interrupt is fired before the function wakeup function is complete, and this leads to an incorrect state of the function wakeup pending flag. This patch resolves this issue by adding locks in the critical sections. CRs-fixed: 695399 Change-Id: I8f15ac0c433301d6364a49cb31577e30259aa0b9 Signed-off-by: Danny Segal <dsegal@codeaurora.org>
* | | usb: gadget: Fix Missing Function Wakeup notification sending on BAM wakeupDanny Segal2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In Super-Speed mode, when the USB core wishes to issue remote wakeup due to new data arriving on the BAM to BAM path, it needs to send Function Wakeup notification to the USB host after the USB bus is resumed. However, the sending of this notification fails when the USB core needs to wake up from low-power mode, because the low-power mode exit is done asynchronously and the sending of the Function Wakeup notification can not be done until the USB bus is resumed. This patch fixes this issue by checking whether the USB bus is suspended, and if so, the sending Function Wakeup notification is delayed until the USB bus is resumed. Change-Id: I293476aaaf920b67fdbdf72a63524edc7a35750b Signed-off-by: Danny Segal <dsegal@codeaurora.org>
* | | usb: gadget: add infrastructure support for super-speed function suspendHemant Kumar2016-03-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The USB 3.0 specification defines a new 'Function Suspend' feature. This feature enables the USB host to put inactive composite device functions in a suspended state even when the device itself is not suspended. This patch extends the existing framework of USB gadget to properly support the 'Function Resume' and 'Function Remote Wakeup' related features. Change-Id: I51713eac557eabc7b465d161377c09d4b6afa152 Signed-off-by: Danny Segal <dsegal@codeaurora.org>
* | | usb: gadget: composite: Fix a bug in delayed status handlingPavankumar Kondeti2016-03-22
| |/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The SET_CONFIGURATION control request's status phase is delayed till the new config change is handled by the file-storage thread. If the cable is disconnected or the bus is reset before the previous config is handled, then composite driver is not notified about the delayed status. As a result of which, the delayed_status field of composite device structure remains non-zero. The status phase of next SET_CONFIGURATION control request is not sent. This makes the gadget unusable. Calling usb_composite_setup_continue() after the disconnect or reset does not make any sense. If the host sends another control request before the status phase of the previous control request is sent, the delayed_status must be reset to zero. This is not straight forward as the UDC handles some control requests without delegating them to the composite driver. A simple fix would be resetting the delayed status value after the disconnect/reset. CRs-Fixed: 501527 Change-Id: I67c832afc88c9e7d025247e539b7223fd83644d7 Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
* | fix false disconnect due to a signal sent to the reading processkeunyoung2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | - In the current implementation, when a signal is sent to the reading process, read is cancelled by calling usb_ep_dequeue, which lead into calling acc_complete_out with ECONNRESET, but the current logic treats it as disconnection, which makes the device inaccessible until cable is actually disconnected. - The fix calls disconnect only when ESHUTDOWN error is passed. - If data has already arrived while trying cancelling, the data is marked as available, and it will be read out on the next read. This is necessary as USB bulk is assumed to guarantee no data loss. Signed-off-by: keunyoung <keunyoung@google.com>
* | usb: gadget: u_ether: use %z format specifier for size_tAmit Pundir2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | Use '%zd' format specifier for size_t type instead of '%d' to fix build warnings like: drivers/usb/gadget/function/u_ether.c: In function ‘rx_submit’: drivers/usb/gadget/function/u_ether.c:244:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘size_t’ [-Wformat=] DBG(dev, "%s: size: %d\n", __func__, size); ^ Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
* | usb: gadget: rndis: fix broken build for 4.4Amit Pundir2016-02-16
| | | | | | | | | | | | | | | | Use rndis_params instead of configNr to align with changes from mainline commit 83210e59ee15 "usb: gadget: rndis: use rndis_params instead of configNr". Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
* | usb: gadget: rndis: fix broken data aggregation buildAmit Pundir2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Declare "cdev" to fix broken AOSP commit "RNDIS: Add Data aggregation (multi packet) support", otherwise we run into following build failure: CC drivers/usb/gadget/function/f_rndis.o drivers/usb/gadget/function/f_rndis.c: In function ‘rndis_command_complete’: drivers/usb/gadget/function/f_rndis.c:479:3: error: ‘cdev’ undeclared (first use in this function) drivers/usb/gadget/function/f_rndis.c:479:3: note: each undeclared identifier is reported only once for each function it appears in make[4]: *** [drivers/usb/gadget/function/f_rndis.o] Error 1 Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
* | usb: gadget: rndis: use %z format specifier for size_tAmit Pundir2016-02-16
| | | | | | | | | | | | | | | | | | Use '%z' format specifier for sizeof operator instead of '%u' to fix build warnings like: warning: format '%u' expects type 'unsigned int', but argument 3 has type 'long unsigned int' Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
* | usb: gadget: cleanup: fix unused variable and function warningsAmit Pundir2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove unused variables and functions to fix following build warnings: CC drivers/usb/gadget/configfs.o drivers/usb/gadget/configfs.c: In function ‘gadgets_make’: drivers/usb/gadget/configfs.c:1710:6: warning: unused variable ‘err’ [-Wunused-variable] int err; ^ drivers/usb/gadget/configfs.c:1709:27: warning: unused variable ‘attr’ [-Wunused-variable] struct device_attribute *attr; ^ drivers/usb/gadget/configfs.c:1708:28: warning: unused variable ‘attrs’ [-Wunused-variable] struct device_attribute **attrs; ^ drivers/usb/gadget/configfs.c: In function ‘gadgets_drop’: drivers/usb/gadget/configfs.c:1774:27: warning: unused variable ‘attr’ [-Wunused-variable] struct device_attribute *attr; ^ drivers/usb/gadget/configfs.c:1773:28: warning: unused variable ‘attrs’ [-Wunused-variable] struct device_attribute **attrs; ^ <snip>... CC drivers/usb/gadget/function/f_mtp.o drivers/usb/gadget/function/f_mtp.c:1219:12: warning: ‘mtp_bind_config’ defined but not used [-Wunused-function] static int mtp_bind_config(struct usb_configuration *c, bool ptp_config) ^ drivers/usb/gadget/function/f_mtp.c:1300:12: warning: ‘mtp_setup’ defined but not used [-Wunused-function] static int mtp_setup(void) ^ <snip>... CC drivers/usb/gadget/function/f_accessory.o drivers/usb/gadget/function/f_accessory.c:969:1: warning: ‘acc_function_bind’ defined but not used [-Wunused-function] acc_function_bind(struct usb_configuration *c, struct usb_function *f) { ^ drivers/usb/gadget/function/f_accessory.c:1172:12: warning: ‘acc_bind_config’ defined but not used [-Wunused-function] static int acc_bind_config(struct usb_configuration *c) ^ Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
* | usb: gadget: build audio_source function only if SND is enabledAmit Pundir2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also select SND_PCM while building f_audio_source otherwise we run into following build error: LD init/built-in.o drivers/built-in.o: In function `audio_data_complete': /linaro/android/kernel/linaro-android/drivers/usb/gadget/function/f_audio_source.c:458: undefined reference to `snd_pcm_period_elapsed' drivers/built-in.o: In function `audio_pcm_hw_free': /linaro/android/kernel/linaro-android/drivers/usb/gadget/function/f_audio_source.c:770: undefined reference to `snd_pcm_lib_free_vmalloc_buffer' drivers/built-in.o: In function `snd_pcm_lib_alloc_vmalloc_buffer': /linaro/android/kernel/linaro-android/include/sound/pcm.h:1179: undefined reference to `_snd_pcm_lib_alloc_vmalloc_buffer' drivers/built-in.o: In function `audio_pcm_open': /linaro/android/kernel/linaro-android/drivers/usb/gadget/function/f_audio_source.c:734: undefined reference to `snd_pcm_limit_hw_rates' drivers/built-in.o: In function `snd_card_setup': /linaro/android/kernel/linaro-android/drivers/usb/gadget/function/f_audio_source.c:888: undefined reference to `snd_pcm_new' /linaro/android/kernel/linaro-android/drivers/usb/gadget/function/f_audio_source.c:898: undefined reference to `snd_pcm_set_ops' /linaro/android/kernel/linaro-android/drivers/usb/gadget/function/f_audio_source.c:899: undefined reference to `snd_pcm_lib_preallocate_pages_for_all' drivers/built-in.o:(.data+0x1fd28): undefined reference to `snd_pcm_lib_ioctl' make: *** [vmlinux] Error 1 Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
* | usb: gadget: configfs: handle gadget reset request for androidAmit Pundir2016-02-16
| | | | | | | | | | | | | | | | | | | | | | There is this new mandatory UDC->reset API in v3.18+ kernels, commit ef979a26 "usb: gadget: add reset API at usb_gadget_driver". Let android_disconnect handle that for Android, similar to how composite_disconnect is handling the generic ConfigFS gadget reset request. Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
* | ANDROID: usb: gadget: create F_midi deviceBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | Android frameworks relies on the alsa config reported by the f_midi device. Signed-off-by: Badhri Jagan Sridharan <Badhri@google.com> Change-Id: I0695e00b166fd953f50acea93802245b0d5a5240
* | usb: gadget: Add device attribute to determine gadget stateBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | | | Android frameworks (UsbDeviceManager) relies on gadget state exported through device attributes. This CL adds the device attribute to export USB gadget state. Change-Id: Id0391810d75b58c579610fbec6e37ab22f28886d Signed-off-by: Badhri Jagan Sridharan <Badhri@google.com>
* | usb: phy: fix dual role sysfs build if kernel modules are supportedAmit Pundir2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a missing ";" after EXPORT_SYMBOL() otherwise we run into following build error if Kernel Modules are supported: ---------- CC drivers/usb/phy/class-dual-role.o drivers/usb/phy/class-dual-role.c:91:1: error: expected ',' or ';' before 'int' int dual_role_get_property(struct dual_role_phy_instance *dual_role, ^ make[3]: *** [drivers/usb/phy/class-dual-role.o] Error 1 ---------- Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
* | usb: phy: Dual role sysfs class definitionBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This CL adds a new class to monitor and change dual role usb ports from userspace. The usb phy drivers can register to the dual_role_usb class and expose the capabilities of the ports. The phy drivers can decide on whether a specific attribute can be changed from userspace by choosing to implement the appropriate callback. Cherry-picked from https://android-review.googlesource.com/#/c/167310/ Signed-off-by: Badhri Jagan Sridharan <badhri@google.com> Bug: 21615151 Change-Id: Id1c4aaa97e898264d7006381a7badd029b5d9789
* | usb: gadget: fix NULL ptr derefer while symlinking PTP funcAmit Pundir2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix NULL pointer dereference while trying to link PTP function to a gadget configuration without creating MTP function. PTP piggyback on MTP function so make sure we have MTP function created beforehand. Otherwise we run into following kernel panic: ----------------------- [ 70.329957] Unable to handle kernel NULL pointer dereference at virtual address 00000000 [ 70.330738] pgd = dd8ec000 [ 70.330916] [00000000] *pgd=00000000 [ 70.331663] Internal error: Oops: 805 [#1] SMP THUMB2 [ 70.332155] CPU: 0 PID: 2067 Comm: ln Not tainted 3.18.0-00587-gdfa582e #1 [ 70.332511] task: dd9c92c0 ti: dd822000 task.ti: dd822000 [ 70.333094] PC is at function_alloc_mtp_ptp+0xe/0x68 [ 70.333311] LR is at usb_get_function+0x11/0x1c [ 70.333489] pc : [<c034ec12>] lr : [<c033cce9>] psr: 60070033 <..snip..> [ 70.384111] 3fc0: bec14ae4 00000004 bec14c0a 00000053 00000004 b6f0422d 00000000 bec14adc [ 70.384369] 3fe0: bec14af8 bec14a98 b6f071f3 b6e8977c 20070010 bec14c0d 00000000 00000000 [ 70.384832] [<c034ec12>] (function_alloc_mtp_ptp) from [<c033cce9>] (usb_get_function+0x11/0x1c) [ 70.385146] [<c033cce9>] (usb_get_function) from [<c033da9b>] (config_usb_cfg_link+0x87/0xa8) [ 70.385421] [<c033da9b>] (config_usb_cfg_link) from [<c011f417>] (configfs_symlink+0xb7/0x1c8) [ 70.385696] [<c011f417>] (configfs_symlink) from [<c00dcd8d>] (vfs_symlink+0x85/0xc0) [ 70.386010] [<c00dcd8d>] (vfs_symlink) from [<c00dce0b>] (SyS_symlinkat+0x43/0x70) [ 70.386261] [<c00dce0b>] (SyS_symlinkat) from [<c000ce41>] (ret_fast_syscall+0x1/0x5c) [ 70.386610] Code: eb04 4a0f 6e03 480f (e883) 0005 [ 70.387346] ---[ end trace 8dba7c552e02f8fa ]--- [ 70.387647] Kernel panic - not syncing: Fatal exception [ 70.387980] ---[ end Kernel panic - not syncing: Fatal exception ----------------------- Steps to reproduce the kernel panic: mount -t configfs none /config mkdir /config/usb_gadget/g1 cd /config/usb_gadget/g1 echo 0x18d1 > idVendor echo 0x4e26 > idProduct mkdir strings/0x409 echo 0123459876 > strings/0x409/serialnumber echo Asus > strings/0x409/manufacturer echo Nexus7 > strings/0x409/product mkdir configs/c.1 mkdir configs/c.1/strings/0x409 echo "Conf 1" > configs/c.1/strings/0x409/configuration echo 120 > configs/c.1/MaxPower mkdir functions/ptp.ptp ln -s functions/ptp.ptp configs/c.1/ptp.ptp Also MTP and PTP are mutually exclusive functions so make sure we have only one of it linked to a configuration at a time. Otherwise it opens up another set of bug(s?). Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
* | usb:gadget:Add "state" attribute to android_deviceBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | Added a device attribute to android_device to determine USB_GADGET's state Signed-off-by: Badhri Jagan Sridharan <Badhri@google.com> Change-Id: I17f8903120df96bf2f4bf441940b53a87b818230
* | usb: gadget: Do not disconnect unregistered devBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | | | | | | | configfs_composite_unbind sets the gadget data to null. Therefore, add check in disconnect function to make sure that cdev is not NULL. Prints a WARN message if the driver tries to redundantly disconnect a gadget. Signed-off-by: Badhri Jagan Sridharan <badhri@google.com> Change-Id: I248cb7175d0dd9a51c18053dd39475d8b3284f6d
* | usb: gadget: Relocate f_accessoryBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | | | 3.18 kernel has reorganized drivers/usb/gadget directory. Moving accessory gadget driver from drivers/usb/gadget to drivers/usb/gadget/function Signed-off-by: Badhri Jagan Sridharan <Badhri@google.com> Change-Id: If73c6df0537c4b1f51338ed3b0db817e51f06b4a
* | usb: gadget: Accessory:Migrate to USB_FUNCTION APIBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | | | This patch adds support to use Android accessory gadget function through the DECLARE_USB_FUNCTION_INIT interface. Signed-off-by: Badhri Jagan Sridharan <badhri@google.com> Change-Id: Ib352752d5bc905fa1df9049b53eabf1294930db7
* | usb: gadget: Move gadget functions codeBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | | | 3.18 kernel has reorganized drivers/usb/gadget directory. Moving gadget functions drivers from drivers/usb/gadget to drivers/usb/gadget/function Signed-off-by: Badhri Jagan Sridharan <Badhri@google.com> Change-Id: I1eab0190f8d42e3be1b4e91ad3bc3a2dc853b0ef
* | usb:gadget:audio_source: Move to USB_FUNCTION APIBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | | | This patch adds support to use audio_source gadget function through DECLARE_USB_FUNCTION_INIT interface. Signed-off-by: Badhri Jagan Sridharan <badhri@google.com> Change-Id: I1fc6c9ea07105ae4eb785eebd3bb925bfdd8bc6b
* | usb: gadget: Add function devices to the parentBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | | | | | | | Added create_function_device to create child function devices for USB gadget functions. Android UsbDeviceManager relies on communicating to the devices created by the gadget functions to implement functions such as audio_source. Signed-off-by: Badhri Jagan Sridharan <Badhri@google.com> Change-Id: I0df9ad86ac32d8cdacdea164e9fed49891b45fc2
* | usb: gadget: f_audio_source:replace deprecated APIBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | Replace snd_card_create with snd_card_new. snd_card_create depcrecated starting form v3.15 Signed-off-by: Badhri Jagan Sridharan <Badhri@google.com> Change-Id: I76f7d753812963d595055bce7d3e6518163482f5
* | usb: gadget: check for accessory device before disconnecting HIDsAmit Pundir2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | While disabling ConfigFS Android gadget, android_disconnect() calls kill_all_hid_devices(), if CONFIG_USB_CONFIGFS_F_ACC is enabled, to free the registered HIDs without checking whether the USB accessory device really exist or not. If USB accessory device doesn't exist then we run into following kernel panic: ----8<---- [  136.724761] Unable to handle kernel NULL pointer dereference at virtual address 00000064 [  136.724809] pgd = c0204000 [  136.731924] [00000064] *pgd=00000000 [  136.737830] Internal error: Oops: 5 [#1] SMP ARM [  136.738108] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.18.0-rc4-00400-gf75300e-dirty #76 [  136.742788] task: c0fb19d8 ti: c0fa4000 task.ti: c0fa4000 [  136.750890] PC is at _raw_spin_lock_irqsave+0x24/0x60 [  136.756246] LR is at kill_all_hid_devices+0x24/0x114 ---->8---- This patch adds a test to check if USB Accessory device exists before freeing HIDs. Change-Id: Ie229feaf0de3f4f7a151fcaa9a994e34e15ff73b Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
* | usb: u_ether: Fix compile errorsPraneeth Bajjuri2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | commit f1a1823ff24fa4e3412b5078f20021cf40834946 usb: gadget: u_ether: convert into module changes qlen function definition. and this has to be fixed accordingly in current u_ether driver. This patch fixes following compile error in u_ether caused by commit. drivers/usb/gadget/u_ether.c: In function 'rx_fill': drivers/usb/gadget/u_ether.c:416:3: error: too few arguments to function 'qlen' if (++req_cnt > qlen(dev->gadget)) ^ drivers/usb/gadget/u_ether.c: In function 'eth_start_xmit': drivers/usb/gadget/u_ether.c:738:24: error: 'qmult' undeclared (first use in this function) if (dev->tx_qlen == (qmult/2)) { which was caused by commits commit 79467317949e1621240f632acfb7453783bec2e7 USB: gadget: u_ether: Fix data stall issue in RNDIS tethering mode commit 68b91e8c54f5c091986c5719631893b10eab760a usb: u_ether: Add workqueue as bottom half handler for rx data path Change-Id: Ic4e5a1e08cb688e5a606c7c1895f869d8f887b9f Signed-off-by: Praneeth Bajjuri <praneeth@ti.com>
* | usb: gadget: Add Uevent to notify userspaceBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Android userspace UsbDeviceManager relies on the uevents generated by the composition driver to generate user notifications. This CL adds uevents to be generated whenever USB changes its state i.e. connected, disconnected, configured. This CL also intercepts the setup requests from the usb_core anb routes it to the specific usb function if required. Signed-off-by: Badhri Jagan Sridharan <Badhri@google.com> Change-Id: Ib3d3a78255a532f7449dac286f776c2966caf8c1
* | usb: gadget: mtp/ptp: Migrate functions to the USB_FUNCTION interfaceBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds support to use mtp/ptp gadget functions through the DECLARE_USB_FUNCTION_INIT interface. enabling USB_CONFIGFS_F_MTP config compiles f_mtp.c thereby providing support for MTP gadget enabling USB_CONFIGFS_F_PTP config compiles f_ptp.c thereby providing support for PTP gadget Signed-off-by: Badhri Jagan Sridharan <badhri@google.com> Change-Id: I38d7b570e8886d155ef10cd2c839b2232dcb3158
* | USB: gadget: rndis: Add module parameter for DL max packets per xferxerox_lin2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently DL aggregation is supported in RNDIS driver and is set to 3 by default. And there is no support to change downlink maximum packets per transfer at runtime through module parameter. Hence add module parameter for DL maximum packets per transfer to change it at runtime. echo 6 > /sys/module/g_android/parameters/rndis_dl_max_pkt_per_xfer To disable DL aggregation during runtime, echo 1 > /sys/module/g_android/parameters/rndis_dl_max_pkt_per_xfer Change-Id: I3a1d0bc97358e2b6f233df7ae8725fb507de50db Signed-off-by: Xerox Lin <xerox_lin@htc.com> Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
* | ndis: Add debug support to disable RNDIS Multipacket FeatureBadhri Jagan Sridharan2016-02-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change adds module param which allows to disable RNDIS Multi-packet Feature (Aggregation support in Downlink path) as this feature is enabled by default. To disable use this param before moving to RNDIS Composition: echo 1 > /sys/module/g_android/parameters/rndis_multipacket_dl_disable Also counts errors as Rx errors if received RNDIS packets are not following RNDIS message format as those packets are being discarded. Change-Id: I764430da78f2204af92e14bb279c11b24c7e4c67 Signed-off-by: Mayank Rana <mrana@codeaurora.org>