According to the spec "USB Interface Association Descriptor Device
Class Code and Use Model"[1], the Interface Association Descriptor
(IAD) is needed for composite device which has multiple interfaces
controlled independently of each other. Without the IAD, the device
may not work as expected because the USB system software will not
properly bind the interfaces with drivers (e.g UAC1 && UVC composite
device not recognized in Win10).
[1] https://www.usb.org/sites/default/files/iadclasscode_r10.pdf
Change-Id: If88c43d20d6133c05a2d2c90507ff03fae21ecdf
Signed-off-by: William Wu <william.wu@rock-chips.com>
Allow setting configfs params p_hs_bint/c_hs_bint to 0. If they are set
to 0, determine the largest bInterval (4 to 1) for which the required
bandwidth of the max samplerate fits the max allowed packet size. If the
required bandwidth exceeds max bandwidth for single-packet mode
(ep->mc=1), keep bInterval at 1.
The FS speed is left at fixed bInterval=1.
If for any speed the required bandwidth exceeds the max bandwidth
corresponding to the selected/determined bInterval, print a warning.
Change-Id: I9fcc9326e6b314604b521e7b07dfd11223b070d7
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20220127114331.41367-4-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 355a05dc83https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next)
Allow configuring the HS/SS bInterval through configfs, via
parameters p_hs_bint/c_hs_bint separately for playback/capture.
The default param values are left at the original 4.
Change-Id: Ic155dc714b67b29eb1e360be720f9314bf79e0a4
Suggested-by: John Keeping <john@metanate.com>
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20220127114331.41367-2-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 4ed941a999https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next)
Several users have reported that their Win10 does not enumerate UAC2
gadget with the existing wTerminalType set to
UAC_INPUT_TERMINAL_UNDEFINED/UAC_INPUT_TERMINAL_UNDEFINED, e.g.
https://github.com/raspberrypi/linux/issues/4587#issuecomment-926567213.
While the constant is officially defined by the USB terminal types
document, e.g. XMOS firmware for UAC2 (commonly used for Win10) defines
no undefined output terminal type in its usbaudio20.h header.
Therefore wTerminalType of EP-IN is set to
UAC_INPUT_TERMINAL_MICROPHONE and wTerminalType of EP-OUT to
UAC_OUTPUT_TERMINAL_SPEAKER for the UAC2 gadget.
Change-Id: I1b0cf3096c4fe49c2f5a6cb73560cb999fca1e57
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Cc: stable <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20220131071813.7433-1-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 5432184107https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next)
This adds "function_name" configfs entry to change string value
of the iInterface field. This field will be shown in Windows' audio
settings panel, so being able to change it is useful. It will default
to "Source/Sink" just as before.
Change-Id: I87c889452f23ace3f68f53f368f31691dade73d7
Signed-off-by: Yunhao Tian <t123yh.xyz@gmail.com>
Link: https://lore.kernel.org/r/20220122112446.1415547-2-t123yh.xyz@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 993a44fa85https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next)
This adds "function_name" configfs entry to change string value
of the iInterface field. This field will be shown in Windows' audio
settings panel, so being able to change it is useful. It will default
to "AC Interface" just as before if unchanged.
Change-Id: I374c651d5ede2160ca7fe7062401c7c405079062
Signed-off-by: Yunhao Tian <t123yh.xyz@gmail.com>
Link: https://lore.kernel.org/r/20220122112446.1415547-1-t123yh.xyz@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit dfb05b5dc3https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next)
Add suspend callback to f_uac1 function, calling corresponding method
of u_audio in order to stop the respective PCM streams and to notify
subscribed clients about the stop.
Change-Id: Id25cc522885c8e5d18a7735eafd7fbd7acd12c50
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20220121155308.48794-11-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit d1d11dd130https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next)
When USB cable gets disconnected, the undergoing playback/capture
stalls, without any notification to u_audio about the change.
Experiments with a dwc2 gadget revealed that Suspend interrupt is
thrown at cable disconnection, which the gadget framework translates to
calling suspend callback of a function, if it is defined.
Add the suspend callback to f_uac2 function, calling
corresponding method of u_audio in order to stop the respective PCM
streams and to notify subscribed clients at cable disconnection.
Change-Id: I51b836f3d55d1d8f80bc1e2a9bb95ee07d643be5
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20220121155308.48794-10-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 7ff4a3b548https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next)
The Playback/Capture ctl currently reports rate value set by USB
control selector UAC2_CS_CONTROL_SAM_FREQ (fixed for UAC1). When the
stops playback/capture, the reported value does not change. The gadget
side has no information whether the host has started/stopped
capture/playback.
This patch sets the value reported by the respective rate ctl to zero
when the host side has stopped playback/capture. Also, it calls
snd_ctl_notify when start/stop occurs, so that a subscribed client can
act appropriately.
Tests have confirmed that USB hosts change UAC2_CS_CONTROL_SAM_FREQ
before switching altsetting to activate playback/capture, resulting in
correct order (params->c/p_srate is set to requested rate before
u_audio_start_capture/playback is called).
The gadget rate notifications are used by user-space audio gadget
controller gaudio_ctl https://github.com/pavhofman/gaudio_ctl.
Change-Id: I813226a3bcbdedb33b2d9aa25c7e5d2682d58674
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20220121155308.48794-8-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 8fe9a03f43https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next)
A list of sampling rates can be specified via configfs. All enabled
sampling rates are sent to the USB host on request. When the host
selects a sampling rate the internal active rate is updated.
Config strings with single value stay compatible with the previous version.
Multiple samplerates passed as configuration arrays to g_audio module
when built for f_uac1.
Change-Id: I11f388fe94f099a0ee61ead27ce5ad3e7f0f1c5f
Signed-off-by: Julian Scheel <julian@jusst.de>
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20220121155308.48794-7-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 695d39ffc2https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next)
A list of sampling rates can be specified via configfs. All enabled
sampling rates are sent to the USB host on request. When the host
selects a sampling rate, the internal active rate (stored in
struct f_uac2) is updated.
The gadget no longer supports only one frequency. Therefore USB strings
corresponding to the clock sources are renamed from specific Hz value to
general names Input clock/Output clock.
Config strings with single value stay compatible with the previous
version.
Multiple samplerates passed as configuration arrays to g_audio module
when built for f_uac2.
Change-Id: I8b9e8c3417a6fae5767b8f5dd8a6804236579877
Signed-off-by: Julian Scheel <julian@jusst.de>
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20220121155308.48794-6-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit a7339e4f57https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next)
Parameters uac_params.p_srate/c_srate are dynamic now and are not part
of parametric configuration anymore. Move them to the
runtime struct uac_rtd_params for each stream.
Change-Id: I4ce2dcf8b342d86f5b82167194a438af267837bc
Suggested-by: John Keeping <john@metanate.com>
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20220121155308.48794-4-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 8722a949e6https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next)
Implement support for multiple sampling rates in u_audio part of the
audio gadget. The currently configured rates are exposed through
read-only amixer controls 'Capture Rate' and 'Playback Rate'.
Change-Id: Idcdcddf34a165553753b2a9af17a688b0e8ab4f0
Signed-off-by: Julian Scheel <julian@jusst.de>
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20220121155308.48794-3-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit c565ad07efhttps://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next)
Both capture and playback alsa devices use subdevice 0. Yet capture-side
ctls are defined for subdevice 1. The patch sets subdevice 0 for them.
Change-Id: I18ebe7c5f59c108fb48b205af4a3f84839b5f71d
Fixes: 02de698ca8 ("usb: gadget: u_audio: add bi-directional volume and mute support")
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20220105104643.90125-1-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 601a5bc1ae)
If bInterval is 1, then p_interval is 8000 and p_interval_mil is 8E9,
which is too big for a 32-bit value. While the storage is indeed
64-bit, this value is used as the divisor in do_div() which will
truncate it into a uint32_t leading to incorrect calculated values.
Switch back to keeping the base value in struct snd_uac_chip which fits
easily into an int, meaning that the division can be done in two steps
with the divisor fitting safely into a uint32_t on both steps.
Change-Id: I602559a8977803545ef2b83021cc9cbac2db24b5
Fixes: 6fec018a7e ("usb: gadget: u_audio.c: Adding Playback Pitch ctl for sync playback")
Tested-by: Pavel Hofman <pavel.hofman@ivitera.com>
Signed-off-by: John Keeping <john@metanate.com>
Link: https://lore.kernel.org/r/20220104183243.718258-1-john@metanate.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit f2f69bf65d)
The u_audio param fb_max was not set to its default value in f_uac1.c.
As a result the maximum value of Playback Pitch ctl was kept at 1000000,
not allowing to set faster playback pitch for UAC1.
The setting required moving the default constant UAC2_DEF_FB_MAX from
u_uac2.h to FBACK_FAST_MAX in u_audio.h as that header is common for
f_uac1.c and f_uac2.c.
Change-Id: Ie85199656e096dc931dffa465e706a8526b5856d
Fixes: 6fec018a7e ("usb: gadget: u_audio.c: Adding Playback Pitch ctl for sync playback")
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20211022140339.248669-1-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit d9f2734843)
EP IN is hard-coded as ASYNC both in f_uac1 and f_uac2 but u_audio sends
steady number of audio frames in each USB packet, without any control.
This patch adds 'Playback Pitch 1000000' ctl analogous to the existing
'Capture Pitch 1000000' ctl. The calculation of playback req->length in
u_audio_iso_complete respects the Playback Pitch ctl value to 1ppm now.
Max. value for Playback Pitch is configured by the existing parameter
uac2_opts->fb_max, used also for the Capture Pitch.
Since the EP IN packet size can be increased by uac2_opts->fb_max now,
maxPacketSize for the playback direction is calculated by the same
algorithm as for the async capture direction in
f_uac2.c:set_ep_max_packet_size.
Change-Id: Id19a55560a23497c75fc62debcb7dd6de98a53fe
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20211013073934.36476-1-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 6fec018a7e)
There are bunch of statements where the indentation is not correct,
clean these up.
Change-Id: I6540cf83e40dd7f825b315f035273e37f4ea7287
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Link: https://lore.kernel.org/r/20210902224758.57600-1-colin.king@canonical.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 18d6b39ee8)
Pointer i_feature is being initialized with a value and then immediately
re-assigned a new value in the next statement. Fix this by replacing the
the redundant initialization with the following assigned value.
Change-Id: I1cf2dd348b049a0dcb902ea674386daec68ee07e
Acked-by: Felipe Balbi <balbi@kernel.org>
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Addresses-Coverity: ("Unused value")
Link: https://lore.kernel.org/r/20210804125907.111654-1-colin.king@canonical.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 59e477af7b)
This adds bi-directional (host->device, device->host)
volume/mute support to the f_uac1 driver by adding
Feature Units and interrupt endpoint.
Currently only master channel is supported.
Volume and mute are configurable through configfs,
by default volume has -100..0 dB range with 1 dB step.
Similar to existing flexible endpoints configuration,
Feature Unit won't be added to the topology if both
mute and volume are not enabled, also interrupt endpoint
isn't added to the device if no feature unit is present
Change-Id: I9454a92291d5055286db4ef73a0038e30420fd24
Signed-off-by: Ruslan Bilovol <ruslan.bilovol@gmail.com>
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20210712125529.76070-5-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 0356e6283c)
This adds bi-directional (host->device, device->host)
volume/mute support to the f_uac2 driver by adding
Feature Units and interrupt endpoint.
Currently only master channel is supported.
Volume and mute are configurable through configfs,
by default volume has -100..0 dB range with 1 dB step.
Similar to existing flexible endpoints configuration,
Feature Unit won't be added to the topology if both
mute and volume are not enabled, also interrupt endpoint
isn't added to the device if no feature unit is present
Change-Id: I6666075ac963745c450fb5eeb81ff058572fad66
Signed-off-by: Ruslan Bilovol <ruslan.bilovol@gmail.com>
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20210712125529.76070-4-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit eaf6cbe099)
USB Audio Class 1/2 have ability to change device's
volume and mute by USB Host through class-specific control
requests. Device also can notify Host about volume/mute
change on its side through optional interrupt endpoint.
This patch adds Volume and Mute ALSA controls which can be
used by user to send and receive notifications to/from
the USB Host about Volume and Mute change.
These params come from f_uac* so volume and mute controls
will be created only if the function support and enable
each explicitly
Change-Id: I5ac616d8b37b31a6be7c3114e407c17cd4b87369
Signed-off-by: Ruslan Bilovol <ruslan.bilovol@gmail.com>
Signed-off-by: Pavel Hofman <pavel.hofman@ivitera.com>
Link: https://lore.kernel.org/r/20210712125529.76070-3-pavel.hofman@ivitera.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 02de698ca8)
User can configure f_uac1 function via p_chmask/c_chmask
whether uac1 shall support playback and/or capture,
but it has only effect on the created ALSA device,
but not on the USB descriptor.
This patch adds playback/capture descriptors
dependent on that parameter. It is similar to
the same conversion done earlier for f_uac2
Change-Id: Ie25ef738a2dbc4a781a874bd7f1f015afda33b1b
Signed-off-by: Ruslan Bilovol <ruslan.bilovol@gmail.com>
Link: https://lore.kernel.org/r/1614599375-8803-6-git-send-email-ruslan.bilovol@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit 254cb1e0d7)
LPM on the device appears to cause xHCI host controllers
to reset the usb device when run at USB 2.0 high speed,
then the device will enter suspend and unable to exit.
Change-Id: I185cfe2c01f6de20463b041bdf4dac54978f1ada
Signed-off-by: William Wu <william.wu@rock-chips.com>
This adds optional vbus control for et7303 Type-C controller.
Signed-off-by: Wang Jie <dave.wang@rock-chips.com>
Change-Id: I7cd324f994962f212ff01dbd2b6073753151bfa9
When build with rv1106_defconfig, and enable at least the
following configs manually:
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_PLATFORM=y
size drivers/usb/host/xhci-plat.o
before:
text data bss dec hex filename
5570 376 4 5950 173e drivers/usb/host/xhci-plat.o
after:
text data bss dec hex filename
2898 376 4 3278 cce drivers/usb/host/xhci-plat.o
Signed-off-by: William Wu <william.wu@rock-chips.com>
Change-Id: Ica505b973d1f4ebdc18d814a3992ab51999be980
Quickly plug and unplug the Type-C device with DP function test, there
is a low probability of unplugging the Type-C dongle, DP work cannot
acquire the mutex(port->lock), and it will always be stuck in the
tcpm_unregister_altmodes() function during the rest port process, causing
the Type-C device to be inserted again to fail to be detected or the reboot
system to be stuck. The exception process is as follows:
(1) Thread#1: unplug the Type-C device to trigger cc status changes interrupt, in the
tcpm_pd_event_handler() function, first acquire the mutex(port->lock),
then start state_machine work, and finally release the mutex(port->lock);
tcpm_cc_change()
-->tcpm_pd_event_handler()
-->mutex_lock(&port->lock) /* step 1 */
-->_tcpm_cc_change(port, cc1, cc2) /* step 2 */
-->tcpm_set_state(port, SRC_UNATTACHED, 0)
-->kthread_queue_work(port->wq, &port->state_machine) /* step 3 */
--> mutex_unlock(&port->lock) /* step 4 */
(2) Thread#2: before the execution of "step 2" is completed, DP work calls
the callback function registered by the tcpm framework to initiate a VDM
Message, such as Enter Mode Message, in the tcpm_queue_vdm_unlocked()
acquires the mutex(port->lock) fails and goes to sleep;
dp_altmode_work()
--> typec_altmode_enter(dp->alt)
--> tcpm_altmode_enter()
--> tcpm_queue_vdm_unlocked()
--> mutex_lock(&port->lock) /* dp work enter sleep */
(3) After step 4, tcpm_queue_vdm_unlocked() did not acquire for the mutex
(port->lock), but was preempted by the state_machine work to enter the reset
port process. In the reset port process, call the tcpm_unregister_altmodes()
function to release altmode and cancel dp work. Because tcpm_queue_vdm_unlocked()
did not acquire the mutex(port->lock), causing it to be stuck in cancel dp work.
tcpm_state_machine_work()
-->mutex_lock(&port->lock)
-->tcpm_reset_port(port)
-->tcpm_unregister_altmodes(port)
......
--> dp_altmode_remove()
--> cancel_work_sync(&dp->work) /* always stuck in cancel dp work */
......
Therefore, after adding a new mutex to wait for the tcpm_pd_event_handler() function
to complete the processing, if the port is in the disconnect state, there is no need
to acquire the mutex(port->lock) in the tcpm_queue_vdm_unlocked() function.
Change-Id: I364a035568ddc35ef7242b42f6d6d0ee3f5586fd
Signed-off-by: Wang Jie <dave.wang@rock-chips.com>
The current runtime suspend/resume do nothing when the
current_dr_role is not set. It may fail to do core init
in some scenes.
Test on RK3588 EVB2 or NVR Demo which have Type-A OTG
port, without this patch, the USB ADB enumeration failed
occasionally. When this error happens, we can find that
the register GUSB2PHYCFG(0) isn't initialized correctly.
It's because that during dwc3 probe, if the drd_work which
called from dwc3_drd_init() is scheduled behind the runtime
suspend process, the current_dr_role will be uninitialized,
this cause the runtime resume process doing nothing and put
the dwc3 phy in uninitialized status.
This patch add dwc3_core_init and dwc3_core_exit operation
for runtime suspend/resume when the current_dr_role is not
initialized.
Signed-off-by: William Wu <william.wu@rock-chips.com>
Change-Id: I294bcf2ad68136e9eb24a9e4a1ad389e73c974d2
The DWC3 controller may have different RAM configurations.
For 2-RAM configuration and 3-RAM configuration, the RAM1
depth is used for the TxFIFOs. And for 1-RAM configuration
(e.g. RV1109/RV1106), RAM0 depth contains the descriptor
cache depth, RxFIFOs depth, and TxFIFOs depth.
This patch checks the number of RAM configuration from
the hwparams1 and get the TxFIFOs depth correctly.
Signed-off-by: William Wu <william.wu@rock-chips.com>
Change-Id: Iff0c4d0540d920ca9277496e27d2b9f90e956341
According to the description of the I2C_RESET(0x9E) register in
the husb311 datasheet, the main configuration is enable/disable
i2c timeout reset function(bit[7]) and i2c timeout time(bit[3:0]).
If the i2c timeout reset function is enabled, the husb311 will perform
a soft reset in some cases, such as system hibernation, and close the
i2c bus (SCL and SDA are low at the same time). So we disable the i2c
timeout reset function.
Change-Id: Id9169f3ecf65725a959aadda9d2f8f60f20c87a3
Signed-off-by: Wang Jie <dave.wang@rock-chips.com>
The "skip_phy_initialization" property in usb_hcd structure means
that do not manage the PHY state in the HCD core and handle it by
the controller's driver. This commit adds "quirk-skip-phy-init"
quirk which can configure the property in DT to support it.
For Rockchip DWC3 dual role scheme, we enabled the device wakeup
capability in dwc3 runtime resume that would cause the PHY exit
failed in "usb_phy_roothub_exit()" at PM suspend stage. So this
commit is also a workaround to fix it.
Fixes: f1636eb0fd ("usb: dwc3: fix failed to enter suspend")
Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
Change-Id: Ibc9885669f25d2aeea18a9d22d49a204eb346ea1
For power consumption saving, disable 12M oscillator in HUSB311 and it
will be enabled automatically when INT occur after system resume. In
addition, if the power of HUSB311 was off in PM suspend, we must reset
the HUSB311 and tcpm port first in PM resume process to ensure the devices
can attach again.
Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
Change-Id: Ib845318c5ee2014bd436f21c78e87e17b9433195
For power consumption saving, the power of fusb302 may be off in PM
suspend, so we must reset the tcpm port first in PM resume process
to ensure the devices can attach again.
Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
Change-Id: Id2cde954663c2f8e01cf19f90066dd1b942a216e
On some Rockchip platforms (e.g RK3588 EVB2), the USB
interface is Type-A USB 3.0 with vbus always on. In
this case, the USB PHY may fail to send extcon notifier
to dwc3, and the desired_role_sw_mode is uninitialized.
So we need to initialize the desired_role_sw_mode which
depends on the id status during dwc3 probe.
Signed-off-by: William Wu <william.wu@rock-chips.com>
Change-Id: I79074d11773486250cd9ab286eb450826649bfcb
https://source.android.com/security/bulletin/2021-12-01
CVE-2021-33909
CVE-2021-38204
CVE-2021-0961
* tag 'ASB-2021-12-05_12-5.10': (3010 commits)
ANDROID: workqueue: export symbol of the function wq_worker_comm()
ANDROID: GKI: Update symbols to symbol list
ANDROID: vendor_hooks: Add hooks for binder proc transaction
ANDROID: GKI: Add symbols abi for USB IP kernel modules.
ANDROID: GKI: Fix file mode on mtk abi file
UPSTREAM: erofs: fix deadlock when shrink erofs slab
ANDROID: init_task: Init android vendor and oem data
UPSTREAM: sched/core: Mitigate race cpus_share_cache()/update_top_cache_domain()
ANDROID: Update symbol list for mtk
UPSTREAM: erofs: fix unsafe pagevec reuse of hooked pclusters
UPSTREAM: erofs: remove the occupied parameter from z_erofs_pagevec_enqueue()
UPSTREAM: usb: dwc3: gadget: Fix null pointer exception
ANDROID: fips140: support "evaluation testing" builds via build.sh
FROMGIT: sched/scs: Reset task stack state in bringup_cpu()
ANDROID: dma-buf: heaps: fix dma-buf heap pool pages stat
ANDROID: ABI: Add several spi_mem related symbols
UPSTREAM: spi: spi-mem: add spi_mem_dtr_supports_op()
ANDROID: gki_defconfig: enable CONFIG_SPI_MEM
ANDROID: ABI: Add several iio related symbols
ANDROID: ABI: Update symbol list for IMX
...
Change-Id: I09cddc92fa34553b944e62cc5cbbba94a84e5437
Conflicts:
arch/arm/boot/dts/rk322x.dtsi
arch/arm64/boot/dts/rockchip/rk3399.dtsi
drivers/dma-buf/heaps/system_heap.c
drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
drivers/gpu/drm/rockchip/rockchip_drm_vop.c
drivers/gpu/drm/rockchip/rockchip_lvds.c
drivers/gpu/drm/rockchip/rockchip_vop_reg.c
drivers/mtd/nand/spi/core.c
drivers/pci/controller/pcie-rockchip-host.c
drivers/soc/rockchip/Kconfig
drivers/usb/dwc3/core.c
drivers/usb/dwc3/core.h
Insert the self-powered Type-C device(support specification Revision 3.0),
after the Type-C PD chip cc detection is completed, the power role and
data role on the port side are sink and device(ufp)respectively.
After the power supply negotiation is completed, before the self-powered
Type-C device initiates the DR_swap request, the port side initiates VDM
Message communication. The process is as follows:
(1) The port side sends Discover Identity, Discover SVIDs, Discover Modes
Command in turn, and receives the ACK corresponding to the command on
the device side. The tcpm framework calls tcpm_register_partner_altmodes()
to register the partner altmode;
(2) After registering partner altmode, dp driver will start dp->work, and
call the tcpm framework callback function in this work to initiate Enter
Modes Command;
(3) After the port side receives the DR_swap request initiated by the Type-C
device and processes it, the port side data role switches to host (dfp),
then the tcpm framework initiates vdm message communication again, that is,
the restart process (1) Repeat registration of partner altmode, Then print
stack information:
[ 31.786238][ T193] Call trace:
[ 31.786251][ T193] dump_backtrace+0x0/0x1d0
[ 31.786257][ T193] show_stack+0x14/0x20
[ 31.786266][ T193] dump_stack_lvl+0xcc/0xf0
[ 31.786272][ T193] dump_stack+0x14/0x50
[ 31.786280][ T193] sysfs_warn_dup+0x60/0x78
[ 31.786286][ T193] sysfs_do_create_link_sd.isra.2+0xe0/0xe8
[ 31.786292][ T193] sysfs_create_link+0x20/0x40
[ 31.786300][ T193] typec_probe+0x90/0x100
[ 31.786308][ T193] really_probe+0x20c/0x3e8
[ 31.786315][ T193] driver_probe_device+0x54/0xb8
[ 31.786324][ T193] __device_attach_driver+0x90/0xc0
[ 31.786334][ T193] bus_for_each_drv+0x70/0xc8
[ 31.786347][ T193] __device_attach+0xec/0x150
[ 31.786357][ T193] device_initial_probe+0x10/0x18
[ 31.786369][ T193] bus_probe_device+0x94/0xa0
[ 31.786381][ T193] device_add+0x45c/0x750
[ 31.786388][ T193] device_register+0x1c/0x28
[ 31.786394][ T193] typec_register_altmode+0x1ec/0x308
[ 31.786400][ T193] typec_partner_register_altmode+0xc/0x18
[ 31.786406][ T193] tcpm_pd_rx_handler+0x16f8/0x1748
[ 31.786413][ T193] kthread_worker_fn+0xd8/0x190
[ 31.786418][ T193] kthread+0x124/0x150
[ 31.786424][ T193] ret_from_fork+0x10/0x18
[ 31.786434][ T193] typec_displayport port0-partner.1: failed to create symlinks
[ 31.786443][ T193] typec_displayport: probe of port0-partner.1 failed with error -17
According to the PD2.0 and PD3.0 protocol specifications(see Section 6.4.4.2),
the Enter Mode Command can be started only when the data role is host(DFP) mode.
Therefore, when the port is in device(ufp) mode, the tcpm framework does not
register partner altmode.
Fixes: 2b5787ea0b ("usb: typec: tcpm: Raise vdm_sm_running flag only when VDM SM is running")
Change-Id: I76874be36179391d8008502ba4722f5e4c9eee70
Signed-off-by: Wang Jie <dave.wang@rock-chips.com>
[ Upstream commit a59c68a6a3 ]
Currently user can configure UAC1 function with
parameters that violate UAC1 spec or are not supported
by UAC1 gadget implementation.
This can lead to incorrect behavior if such gadget
is connected to the host - like enumeration failure
or other issues depending on host's UAC1 driver
implementation, bringing user to a long hours
of debugging the issue.
Instead of silently accept these parameters, throw
an error if they are not valid.
Signed-off-by: Ruslan Bilovol <ruslan.bilovol@gmail.com>
Link: https://lore.kernel.org/r/1614599375-8803-5-git-send-email-ruslan.bilovol@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Tao Huang <huangtao@rock-chips.com>
Change-Id: I2993c5f99161149ac126d55baf54c954279483ff
[ Upstream commit 3713d5ceb0 ]
Currently user can configure UAC2 function with
parameters that violate UAC2 spec or are not supported
by UAC2 gadget implementation.
This can lead to incorrect behavior if such gadget
is connected to the host - like enumeration failure
or other issues depending on host's UAC2 driver
implementation, bringing user to a long hours
of debugging the issue.
Instead of silently accept these parameters, throw
an error if they are not valid.
Signed-off-by: Ruslan Bilovol <ruslan.bilovol@gmail.com>
Link: https://lore.kernel.org/r/1614599375-8803-4-git-send-email-ruslan.bilovol@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Change-Id: Ic6b7e292b60e838c53aab989d1f8b16798dc15e7
Signed-off-by: Tao Huang <huangtao@rock-chips.com>
Patch adds support of SS and SSP speed.
Signed-off-by: Pawel Laszczak <pawell@cadence.com>
Link: https://lore.kernel.org/r/20210310105216.38202-1-pawell@gli-login.cadence.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Bug: 187332233
(cherry picked from commit f8cb3d556b)
Change-Id: I6689c8df4a17fcf561a65dc16d509e26f088c142
Signed-off-by: Jack Pham <jackp@codeaurora.org>
Signed-off-by: Tao Huang <huangtao@rock-chips.com>