You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge tag 'usb-4.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB and PHY updates from Greg KH:
"Here is the big USB pull request for 4.18-rc1.
Lots of stuff here, the highlights are:
- phy driver updates and new additions
- usual set of xhci driver updates
- normal set of musb updates
- gadget driver updates and new controllers
- typec work, it's getting closer to getting fully out of the staging
portion of the tree.
- lots of minor cleanups and bugfixes.
All of these have been in linux-next for a while with no reported
issues"
* tag 'usb-4.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (263 commits)
Revert "xhci: Reset Renesas uPD72020x USB controller for 32-bit DMA issue"
xhci: Add quirk to zero 64bit registers on Renesas PCIe controllers
xhci: Allow more than 32 quirks
usb: xhci: force all memory allocations to node
selftests: add test for USB over IP driver
USB: typec: fsusb302: no need to check return value of debugfs_create_dir()
USB: gadget: udc: s3c2410_udc: no need to check return value of debugfs_create functions
USB: gadget: udc: renesas_usb3: no need to check return value of debugfs_create functions
USB: gadget: udc: pxa27x_udc: no need to check return value of debugfs_create functions
USB: gadget: udc: gr_udc: no need to check return value of debugfs_create functions
USB: gadget: udc: bcm63xx_udc: no need to check return value of debugfs_create functions
USB: udc: atmel_usba_udc: no need to check return value of debugfs_create functions
USB: dwc3: no need to check return value of debugfs_create functions
USB: dwc2: no need to check return value of debugfs_create functions
USB: core: no need to check return value of debugfs_create functions
USB: chipidea: no need to check return value of debugfs_create functions
USB: ehci-hcd: no need to check return value of debugfs_create functions
USB: fhci-hcd: no need to check return value of debugfs_create functions
USB: fotg210-hcd: no need to check return value of debugfs_create functions
USB: imx21-hcd: no need to check return value of debugfs_create functions
...
This commit is contained in:
@@ -189,6 +189,28 @@ Description:
|
||||
The file will read "hotplug", "wired" and "not used" if the
|
||||
information is available, and "unknown" otherwise.
|
||||
|
||||
What: /sys/bus/usb/devices/.../(hub interface)/portX/quirks
|
||||
Date: May 2018
|
||||
Contact: Nicolas Boichat <drinkcat@chromium.org>
|
||||
Description:
|
||||
In some cases, we care about time-to-active for devices
|
||||
connected on a specific port (e.g. non-standard USB port like
|
||||
pogo pins), where the device to be connected is known in
|
||||
advance, and behaves well according to the specification.
|
||||
This attribute is a bit-field that controls the behavior of
|
||||
a specific port:
|
||||
- Bit 0 of this field selects the "old" enumeration scheme,
|
||||
as it is considerably faster (it only causes one USB reset
|
||||
instead of 2).
|
||||
The old enumeration scheme can also be selected globally
|
||||
using /sys/module/usbcore/parameters/old_scheme_first, but
|
||||
it is often not desirable as the new scheme was introduced to
|
||||
increase compatibility with more devices.
|
||||
- Bit 1 reduces TRSTRCY to the 10 ms that are required by the
|
||||
USB 2.0 specification, instead of the 50 ms that are normally
|
||||
used to help make enumeration work better on some high speed
|
||||
devices.
|
||||
|
||||
What: /sys/bus/usb/devices/.../(hub interface)/portX/over_current_count
|
||||
Date: February 2018
|
||||
Contact: Richard Leitner <richard.leitner@skidata.com>
|
||||
@@ -236,3 +258,21 @@ Description:
|
||||
Supported values are 0 - 15.
|
||||
More information on how besl values map to microseconds can be found in
|
||||
USB 2.0 ECN Errata for Link Power Management, section 4.10)
|
||||
|
||||
What: /sys/bus/usb/devices/.../rx_lanes
|
||||
Date: March 2018
|
||||
Contact: Mathias Nyman <mathias.nyman@linux.intel.com>
|
||||
Description:
|
||||
Number of rx lanes the device is using.
|
||||
USB 3.2 adds Dual-lane support, 2 rx and 2 tx lanes over Type-C.
|
||||
Inter-Chip SSIC devices support asymmetric lanes up to 4 lanes per
|
||||
direction. Devices before USB 3.2 are single lane (rx_lanes = 1)
|
||||
|
||||
What: /sys/bus/usb/devices/.../tx_lanes
|
||||
Date: March 2018
|
||||
Contact: Mathias Nyman <mathias.nyman@linux.intel.com>
|
||||
Description:
|
||||
Number of tx lanes the device is using.
|
||||
USB 3.2 adds Dual-lane support, 2 rx and 2 tx -lanes over Type-C.
|
||||
Inter-Chip SSIC devices support asymmetric lanes up to 4 lanes per
|
||||
direction. Devices before USB 3.2 are single lane (tx_lanes = 1)
|
||||
|
||||
@@ -1,3 +1,458 @@
|
||||
===== General Properties =====
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/manufacturer
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the name of the device manufacturer.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented as string
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/model_name
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the name of the device model.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented as string
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/serial_number
|
||||
Date: January 2008
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the serial number of the device.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented as string
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/type
|
||||
Date: May 2010
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Describes the main type of the supply.
|
||||
|
||||
Access: Read
|
||||
Valid values: "Battery", "UPS", "Mains", "USB"
|
||||
|
||||
===== Battery Properties =====
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/capacity
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Fine grain representation of battery capacity.
|
||||
Access: Read
|
||||
Valid values: 0 - 100 (percent)
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/capacity_alert_max
|
||||
Date: July 2012
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Maximum battery capacity trip-wire value where the supply will
|
||||
notify user-space of the event. This is normally used for the
|
||||
battery discharging scenario where user-space needs to know the
|
||||
battery has dropped to an upper level so it can take
|
||||
appropriate action (e.g. warning user that battery level is
|
||||
low).
|
||||
|
||||
Access: Read, Write
|
||||
Valid values: 0 - 100 (percent)
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/capacity_alert_min
|
||||
Date: July 2012
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Minimum battery capacity trip-wire value where the supply will
|
||||
notify user-space of the event. This is normally used for the
|
||||
battery discharging scenario where user-space needs to know the
|
||||
battery has dropped to a lower level so it can take
|
||||
appropriate action (e.g. warning user that battery level is
|
||||
critically low).
|
||||
|
||||
Access: Read, Write
|
||||
Valid values: 0 - 100 (percent)
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/capacity_level
|
||||
Date: June 2009
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Coarse representation of battery capacity.
|
||||
|
||||
Access: Read
|
||||
Valid values: "Unknown", "Critical", "Low", "Normal", "High",
|
||||
"Full"
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/current_avg
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports an average IBAT current reading for the battery, over a
|
||||
fixed period. Normally devices will provide a fixed interval in
|
||||
which they average readings to smooth out the reported value.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microamps
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/current_max
|
||||
Date: October 2010
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the maximum IBAT current allowed into the battery.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microamps
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/current_now
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports an instant, single IBAT current reading for the battery.
|
||||
This value is not averaged/smoothed.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microamps
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/charge_type
|
||||
Date: July 2009
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Represents the type of charging currently being applied to the
|
||||
battery.
|
||||
|
||||
Access: Read
|
||||
Valid values: "Unknown", "N/A", "Trickle", "Fast"
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/charge_term_current
|
||||
Date: July 2014
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the charging current value which is used to determine
|
||||
when the battery is considered full and charging should end.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microamps
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/health
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the health of the battery or battery side of charger
|
||||
functionality.
|
||||
|
||||
Access: Read
|
||||
Valid values: "Unknown", "Good", "Overheat", "Dead",
|
||||
"Over voltage", "Unspecified failure", "Cold",
|
||||
"Watchdog timer expire", "Safety timer expire"
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/precharge_current
|
||||
Date: June 2017
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the charging current applied during pre-charging phase
|
||||
for a battery charge cycle.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microamps
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/present
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports whether a battery is present or not in the system.
|
||||
|
||||
Access: Read
|
||||
Valid values:
|
||||
0: Absent
|
||||
1: Present
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/status
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Represents the charging status of the battery. Normally this
|
||||
is read-only reporting although for some supplies this can be
|
||||
used to enable/disable charging to the battery.
|
||||
|
||||
Access: Read, Write
|
||||
Valid values: "Unknown", "Charging", "Discharging",
|
||||
"Not charging", "Full"
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/technology
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Describes the battery technology supported by the supply.
|
||||
|
||||
Access: Read
|
||||
Valid values: "Unknown", "NiMH", "Li-ion", "Li-poly", "LiFe",
|
||||
"NiCd", "LiMn"
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/temp
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the current TBAT battery temperature reading.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in 1/10 Degrees Celsius
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/temp_alert_max
|
||||
Date: July 2012
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Maximum TBAT temperature trip-wire value where the supply will
|
||||
notify user-space of the event. This is normally used for the
|
||||
battery charging scenario where user-space needs to know the
|
||||
battery temperature has crossed an upper threshold so it can
|
||||
take appropriate action (e.g. warning user that battery level is
|
||||
critically high, and charging has stopped).
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in 1/10 Degrees Celsius
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/temp_alert_min
|
||||
Date: July 2012
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Minimum TBAT temperature trip-wire value where the supply will
|
||||
notify user-space of the event. This is normally used for the
|
||||
battery charging scenario where user-space needs to know the
|
||||
battery temperature has crossed a lower threshold so it can take
|
||||
appropriate action (e.g. warning user that battery level is
|
||||
high, and charging current has been reduced accordingly to
|
||||
remedy the situation).
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in 1/10 Degrees Celsius
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/temp_max
|
||||
Date: July 2014
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the maximum allowed TBAT battery temperature for
|
||||
charging.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in 1/10 Degrees Celsius
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/temp_min
|
||||
Date: July 2014
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the minimum allowed TBAT battery temperature for
|
||||
charging.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in 1/10 Degrees Celsius
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/voltage_avg,
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports an average VBAT voltage reading for the battery, over a
|
||||
fixed period. Normally devices will provide a fixed interval in
|
||||
which they average readings to smooth out the reported value.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microvolts
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/voltage_max,
|
||||
Date: January 2008
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the maximum safe VBAT voltage permitted for the battery,
|
||||
during charging.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microvolts
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/voltage_min,
|
||||
Date: January 2008
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the minimum safe VBAT voltage permitted for the battery,
|
||||
during discharging.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microvolts
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/voltage_now,
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports an instant, single VBAT voltage reading for the battery.
|
||||
This value is not averaged/smoothed.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microvolts
|
||||
|
||||
===== USB Properties =====
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/current_avg
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports an average IBUS current reading over a fixed period.
|
||||
Normally devices will provide a fixed interval in which they
|
||||
average readings to smooth out the reported value.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microamps
|
||||
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/current_max
|
||||
Date: October 2010
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the maximum IBUS current the supply can support.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microamps
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/current_now
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the IBUS current supplied now. This value is generally
|
||||
read-only reporting, unless the 'online' state of the supply
|
||||
is set to be programmable, in which case this value can be set
|
||||
within the reported min/max range.
|
||||
|
||||
Access: Read, Write
|
||||
Valid values: Represented in microamps
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/input_current_limit
|
||||
Date: July 2014
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Details the incoming IBUS current limit currently set in the
|
||||
supply. Normally this is configured based on the type of
|
||||
connection made (e.g. A configured SDP should output a maximum
|
||||
of 500mA so the input current limit is set to the same value).
|
||||
|
||||
Access: Read, Write
|
||||
Valid values: Represented in microamps
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/online,
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Indicates if VBUS is present for the supply. When the supply is
|
||||
online, and the supply allows it, then it's possible to switch
|
||||
between online states (e.g. Fixed -> Programmable for a PD_PPS
|
||||
USB supply so voltage and current can be controlled).
|
||||
|
||||
Access: Read, Write
|
||||
Valid values:
|
||||
0: Offline
|
||||
1: Online Fixed - Fixed Voltage Supply
|
||||
2: Online Programmable - Programmable Voltage Supply
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/temp
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the current supply temperature reading. This would
|
||||
normally be the internal temperature of the device itself (e.g
|
||||
TJUNC temperature of an IC)
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in 1/10 Degrees Celsius
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/temp_alert_max
|
||||
Date: July 2012
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Maximum supply temperature trip-wire value where the supply will
|
||||
notify user-space of the event. This is normally used for the
|
||||
charging scenario where user-space needs to know the supply
|
||||
temperature has crossed an upper threshold so it can take
|
||||
appropriate action (e.g. warning user that the supply
|
||||
temperature is critically high, and charging has stopped to
|
||||
remedy the situation).
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in 1/10 Degrees Celsius
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/temp_alert_min
|
||||
Date: July 2012
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Minimum supply temperature trip-wire value where the supply will
|
||||
notify user-space of the event. This is normally used for the
|
||||
charging scenario where user-space needs to know the supply
|
||||
temperature has crossed a lower threshold so it can take
|
||||
appropriate action (e.g. warning user that the supply
|
||||
temperature is high, and charging current has been reduced
|
||||
accordingly to remedy the situation).
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in 1/10 Degrees Celsius
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/temp_max
|
||||
Date: July 2014
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the maximum allowed supply temperature for operation.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in 1/10 Degrees Celsius
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/temp_min
|
||||
Date: July 2014
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the mainimum allowed supply temperature for operation.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in 1/10 Degrees Celsius
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/usb_type
|
||||
Date: March 2018
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports what type of USB connection is currently active for
|
||||
the supply, for example it can show if USB-PD capable source
|
||||
is attached.
|
||||
|
||||
Access: Read-Only
|
||||
Valid values: "Unknown", "SDP", "DCP", "CDP", "ACA", "C", "PD",
|
||||
"PD_DRP", "PD_PPS", "BrickID"
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/voltage_max
|
||||
Date: January 2008
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the maximum VBUS voltage the supply can support.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microvolts
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/voltage_min
|
||||
Date: January 2008
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the minimum VBUS voltage the supply can support.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microvolts
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/voltage_now
|
||||
Date: May 2007
|
||||
Contact: linux-pm@vger.kernel.org
|
||||
Description:
|
||||
Reports the VBUS voltage supplied now. This value is generally
|
||||
read-only reporting, unless the 'online' state of the supply
|
||||
is set to be programmable, in which case this value can be set
|
||||
within the reported min/max range.
|
||||
|
||||
Access: Read, Write
|
||||
Valid values: Represented in microvolts
|
||||
|
||||
===== Device Specific Properties =====
|
||||
|
||||
What: /sys/class/power/ds2760-battery.*/charge_now
|
||||
Date: May 2010
|
||||
KernelVersion: 2.6.35
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
MediaTek XS-PHY binding
|
||||
--------------------------
|
||||
|
||||
The XS-PHY controller supports physical layer functionality for USB3.1
|
||||
GEN2 controller on MediaTek SoCs.
|
||||
|
||||
Required properties (controller (parent) node):
|
||||
- compatible : should be "mediatek,<soc-model>-xsphy", "mediatek,xsphy",
|
||||
soc-model is the name of SoC, such as mt3611 etc;
|
||||
when using "mediatek,xsphy" compatible string, you need SoC specific
|
||||
ones in addition, one of:
|
||||
- "mediatek,mt3611-xsphy"
|
||||
|
||||
- #address-cells, #size-cells : should use the same values as the root node
|
||||
- ranges: must be present
|
||||
|
||||
Optional properties (controller (parent) node):
|
||||
- reg : offset and length of register shared by multiple U3 ports,
|
||||
exclude port's private register, if only U2 ports provided,
|
||||
shouldn't use the property.
|
||||
- mediatek,src-ref-clk-mhz : u32, frequency of reference clock for slew rate
|
||||
calibrate
|
||||
- mediatek,src-coef : u32, coefficient for slew rate calibrate, depends on
|
||||
SoC process
|
||||
|
||||
Required nodes : a sub-node is required for each port the controller
|
||||
provides. Address range information including the usual
|
||||
'reg' property is used inside these nodes to describe
|
||||
the controller's topology.
|
||||
|
||||
Required properties (port (child) node):
|
||||
- reg : address and length of the register set for the port.
|
||||
- clocks : a list of phandle + clock-specifier pairs, one for each
|
||||
entry in clock-names
|
||||
- clock-names : must contain
|
||||
"ref": 48M reference clock for HighSpeed analog phy; and 26M
|
||||
reference clock for SuperSpeedPlus analog phy, sometimes is
|
||||
24M, 25M or 27M, depended on platform.
|
||||
- #phy-cells : should be 1
|
||||
cell after port phandle is phy type from:
|
||||
- PHY_TYPE_USB2
|
||||
- PHY_TYPE_USB3
|
||||
|
||||
The following optional properties are only for debug or HQA test
|
||||
Optional properties (PHY_TYPE_USB2 port (child) node):
|
||||
- mediatek,eye-src : u32, the value of slew rate calibrate
|
||||
- mediatek,eye-vrt : u32, the selection of VRT reference voltage
|
||||
- mediatek,eye-term : u32, the selection of HS_TX TERM reference voltage
|
||||
- mediatek,efuse-intr : u32, the selection of Internal Resistor
|
||||
|
||||
Optional properties (PHY_TYPE_USB3 port (child) node):
|
||||
- mediatek,efuse-intr : u32, the selection of Internal Resistor
|
||||
- mediatek,efuse-tx-imp : u32, the selection of TX Impedance
|
||||
- mediatek,efuse-rx-imp : u32, the selection of RX Impedance
|
||||
|
||||
Banks layout of xsphy
|
||||
-------------------------------------------------------------
|
||||
port offset bank
|
||||
u2 port0 0x0000 MISC
|
||||
0x0100 FMREG
|
||||
0x0300 U2PHY_COM
|
||||
u2 port1 0x1000 MISC
|
||||
0x1100 FMREG
|
||||
0x1300 U2PHY_COM
|
||||
u2 port2 0x2000 MISC
|
||||
...
|
||||
u31 common 0x3000 DIG_GLB
|
||||
0x3100 PHYA_GLB
|
||||
u31 port0 0x3400 DIG_LN_TOP
|
||||
0x3500 DIG_LN_TX0
|
||||
0x3600 DIG_LN_RX0
|
||||
0x3700 DIG_LN_DAIF
|
||||
0x3800 PHYA_LN
|
||||
u31 port1 0x3a00 DIG_LN_TOP
|
||||
0x3b00 DIG_LN_TX0
|
||||
0x3c00 DIG_LN_RX0
|
||||
0x3d00 DIG_LN_DAIF
|
||||
0x3e00 PHYA_LN
|
||||
...
|
||||
|
||||
DIG_GLB & PHYA_GLB are shared by U31 ports.
|
||||
|
||||
Example:
|
||||
|
||||
u3phy: usb-phy@11c40000 {
|
||||
compatible = "mediatek,mt3611-xsphy", "mediatek,xsphy";
|
||||
reg = <0 0x11c43000 0 0x0200>;
|
||||
mediatek,src-ref-clk-mhz = <26>;
|
||||
mediatek,src-coef = <17>;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
ranges;
|
||||
|
||||
u2port0: usb-phy@11c40000 {
|
||||
reg = <0 0x11c40000 0 0x0400>;
|
||||
clocks = <&clk48m>;
|
||||
clock-names = "ref";
|
||||
mediatek,eye-src = <4>;
|
||||
#phy-cells = <1>;
|
||||
};
|
||||
|
||||
u3port0: usb-phy@11c43000 {
|
||||
reg = <0 0x11c43400 0 0x0500>;
|
||||
clocks = <&clk26m>;
|
||||
clock-names = "ref";
|
||||
mediatek,efuse-intr = <28>;
|
||||
#phy-cells = <1>;
|
||||
};
|
||||
};
|
||||
@@ -9,7 +9,8 @@ Required properties:
|
||||
"qcom,ipq8074-qmp-pcie-phy" for PCIe phy on IPQ8074
|
||||
"qcom,msm8996-qmp-pcie-phy" for 14nm PCIe phy on msm8996,
|
||||
"qcom,msm8996-qmp-usb3-phy" for 14nm USB3 phy on msm8996,
|
||||
"qcom,qmp-v3-usb3-phy" for USB3 QMP V3 phy.
|
||||
"qcom,sdm845-qmp-usb3-phy" for USB3 QMP V3 phy on sdm845,
|
||||
"qcom,sdm845-qmp-usb3-uni-phy" for USB3 QMP V3 UNI phy on sdm845.
|
||||
|
||||
- reg: offset and length of register set for PHY's common serdes block.
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ QUSB2 controller supports LS/FS/HS usb connectivity on Qualcomm chipsets.
|
||||
Required properties:
|
||||
- compatible: compatible list, contains
|
||||
"qcom,msm8996-qusb2-phy" for 14nm PHY on msm8996,
|
||||
"qcom,qusb2-v2-phy" for QUSB2 V2 PHY.
|
||||
"qcom,sdm845-qusb2-phy" for 10nm PHY on sdm845.
|
||||
|
||||
- reg: offset and length of the PHY register set.
|
||||
- #phy-cells: must be 0.
|
||||
@@ -27,6 +27,27 @@ Optional properties:
|
||||
tuning parameter value for qusb2 phy.
|
||||
|
||||
- qcom,tcsr-syscon: Phandle to TCSR syscon register region.
|
||||
- qcom,imp-res-offset-value: It is a 6 bit value that specifies offset to be
|
||||
added to PHY refgen RESCODE via IMP_CTRL1 register. It is a PHY
|
||||
tuning parameter that may vary for different boards of same SOC.
|
||||
This property is applicable to only QUSB2 v2 PHY (sdm845).
|
||||
- qcom,hstx-trim-value: It is a 4 bit value that specifies tuning for HSTX
|
||||
output current.
|
||||
Possible range is - 15mA to 24mA (stepsize of 600 uA).
|
||||
See dt-bindings/phy/phy-qcom-qusb2.h for applicable values.
|
||||
This property is applicable to only QUSB2 v2 PHY (sdm845).
|
||||
Default value is 22.2mA for sdm845.
|
||||
- qcom,preemphasis-level: It is a 2 bit value that specifies pre-emphasis level.
|
||||
Possible range is 0 to 15% (stepsize of 5%).
|
||||
See dt-bindings/phy/phy-qcom-qusb2.h for applicable values.
|
||||
This property is applicable to only QUSB2 v2 PHY (sdm845).
|
||||
Default value is 10% for sdm845.
|
||||
- qcom,preemphasis-width: It is a 1 bit value that specifies how long the HSTX
|
||||
pre-emphasis (specified using qcom,preemphasis-level) must be in
|
||||
effect. Duration could be half-bit of full-bit.
|
||||
See dt-bindings/phy/phy-qcom-qusb2.h for applicable values.
|
||||
This property is applicable to only QUSB2 v2 PHY (sdm845).
|
||||
Default value is full-bit width for sdm845.
|
||||
|
||||
Example:
|
||||
hsusb_phy: phy@7411000 {
|
||||
|
||||
@@ -76,6 +76,10 @@ Optional properties:
|
||||
needs to make sure it does not send more than 90%
|
||||
maximum_periodic_data_per_frame. The use case is multiple transactions, but
|
||||
less frame rate.
|
||||
- mux-controls: The mux control for toggling host/device output of this
|
||||
controller. It's expected that a mux state of 0 indicates device mode and a
|
||||
mux state of 1 indicates host mode.
|
||||
- mux-control-names: Shall be "usb_switch" if mux-controls is specified.
|
||||
|
||||
i.mx specific properties
|
||||
- fsl,usbmisc: phandler of non-core register device, with one
|
||||
@@ -102,4 +106,6 @@ Example:
|
||||
rx-burst-size-dword = <0x10>;
|
||||
extcon = <0>, <&usb_id>;
|
||||
phy-clkgate-delay-us = <400>;
|
||||
mux-controls = <&usb_switch>;
|
||||
mux-control-names = "usb_switch";
|
||||
};
|
||||
|
||||
@@ -7,6 +7,26 @@ Required properties:
|
||||
- compatible: must be "snps,dwc3"
|
||||
- reg : Address and length of the register set for the device
|
||||
- interrupts: Interrupts used by the dwc3 controller.
|
||||
- clock-names: should contain "ref", "bus_early", "suspend"
|
||||
- clocks: list of phandle and clock specifier pairs corresponding to
|
||||
entries in the clock-names property.
|
||||
|
||||
Exception for clocks:
|
||||
clocks are optional if the parent node (i.e. glue-layer) is compatible to
|
||||
one of the following:
|
||||
"amlogic,meson-axg-dwc3"
|
||||
"amlogic,meson-gxl-dwc3"
|
||||
"cavium,octeon-7130-usb-uctl"
|
||||
"qcom,dwc3"
|
||||
"samsung,exynos5250-dwusb3"
|
||||
"samsung,exynos7-dwusb3"
|
||||
"sprd,sc9860-dwc3"
|
||||
"st,stih407-dwc3"
|
||||
"ti,am437x-dwc3"
|
||||
"ti,dwc3"
|
||||
"ti,keystone-dwc3"
|
||||
"rockchip,rk3399-dwc3"
|
||||
"xlnx,zynqmp-dwc3"
|
||||
|
||||
Optional properties:
|
||||
- usb-phy : array of phandle for the PHY device. The first element
|
||||
@@ -15,6 +35,7 @@ Optional properties:
|
||||
- phys: from the *Generic PHY* bindings
|
||||
- phy-names: from the *Generic PHY* bindings; supported names are "usb2-phy"
|
||||
or "usb3-phy".
|
||||
- resets: a single pair of phandle and reset specifier
|
||||
- snps,usb3_lpm_capable: determines if platform is USB3 LPM capable
|
||||
- snps,disable_scramble_quirk: true when SW should disable data scrambling.
|
||||
Only really useful for FPGA builds.
|
||||
|
||||
@@ -6,12 +6,6 @@ Required properties :
|
||||
- interrupts : Interrupt specifier
|
||||
|
||||
Optional properties :
|
||||
- fcs,max-sink-microvolt : Maximum voltage to negotiate when configured as sink
|
||||
- fcs,max-sink-microamp : Maximum current to negotiate when configured as sink
|
||||
- fcs,max-sink-microwatt : Maximum power to negotiate when configured as sink
|
||||
If this is less then max-sink-microvolt *
|
||||
max-sink-microamp then the configured current will
|
||||
be clamped.
|
||||
- fcs,operating-sink-microwatt :
|
||||
Minimum amount of power accepted from a sink
|
||||
when negotiating
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
HiSilicon STB xHCI
|
||||
|
||||
The device node for HiSilicon STB xHCI host controller
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "hisilicon,hi3798cv200-xhci"
|
||||
- reg: specifies physical base address and size of the registers
|
||||
- interrupts : interrupt used by the controller
|
||||
- clocks: a list of phandle + clock-specifier pairs, one for each
|
||||
entry in clock-names
|
||||
- clock-names: must contain
|
||||
"bus": for bus clock
|
||||
"utmi": for utmi clock
|
||||
"pipe": for pipe clock
|
||||
"suspend": for suspend clock
|
||||
- resets: a list of phandle and reset specifier pairs as listed in
|
||||
reset-names property.
|
||||
- reset-names: must contain
|
||||
"soft": for soft reset
|
||||
- phys: a list of phandle + phy specifier pairs
|
||||
- phy-names: must contain at least one of following:
|
||||
"inno": for inno phy
|
||||
"combo": for combo phy
|
||||
|
||||
Optional properties:
|
||||
- usb2-lpm-disable: indicate if we don't want to enable USB2 HW LPM
|
||||
- usb3-lpm-capable: determines if platform is USB3 LPM capable
|
||||
- imod-interval-ns: default interrupt moderation interval is 40000ns
|
||||
|
||||
Example:
|
||||
|
||||
xhci0: xchi@f98a0000 {
|
||||
compatible = "hisilicon,hi3798cv200-xhci";
|
||||
reg = <0xf98a0000 0x10000>;
|
||||
interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&crg HISTB_USB3_BUS_CLK>,
|
||||
<&crg HISTB_USB3_UTMI_CLK>,
|
||||
<&crg HISTB_USB3_PIPE_CLK>,
|
||||
<&crg HISTB_USB3_SUSPEND_CLK>;
|
||||
clock-names = "bus", "utmi", "pipe", "suspend";
|
||||
resets = <&crg 0xb0 12>;
|
||||
reset-names = "soft";
|
||||
phys = <&usb2_phy1_port1 0>, <&combphy0 PHY_TYPE_USB3>;
|
||||
phy-names = "inno", "combo";
|
||||
};
|
||||
@@ -1,54 +1,95 @@
|
||||
Qualcomm SuperSpeed DWC3 USB SoC controller
|
||||
|
||||
Required properties:
|
||||
- compatible: should contain "qcom,dwc3"
|
||||
- compatible: Compatible list, contains
|
||||
"qcom,dwc3"
|
||||
"qcom,msm8996-dwc3" for msm8996 SOC.
|
||||
"qcom,sdm845-dwc3" for sdm845 SOC.
|
||||
- reg: Offset and length of register set for QSCRATCH wrapper
|
||||
- power-domains: specifies a phandle to PM domain provider node
|
||||
- clocks: A list of phandle + clock-specifier pairs for the
|
||||
clocks listed in clock-names
|
||||
- clock-names: Should contain the following:
|
||||
- clock-names: Should contain the following:
|
||||
"core" Master/Core clock, have to be >= 125 MHz for SS
|
||||
operation and >= 60MHz for HS operation
|
||||
"mock_utmi" Mock utmi clock needed for ITP/SOF generation in
|
||||
host mode. Its frequency should be 19.2MHz.
|
||||
"sleep" Sleep clock, used for wakeup when USB3 core goes
|
||||
into low power mode (U3).
|
||||
|
||||
Optional clocks:
|
||||
"iface" System bus AXI clock. Not present on all platforms
|
||||
"sleep" Sleep clock, used when USB3 core goes into low
|
||||
power mode (U3).
|
||||
"iface" System bus AXI clock.
|
||||
Not present on "qcom,msm8996-dwc3" compatible.
|
||||
"cfg_noc" System Config NOC clock.
|
||||
Not present on "qcom,msm8996-dwc3" compatible.
|
||||
- assigned-clocks: Should be:
|
||||
MOCK_UTMI_CLK
|
||||
MASTER_CLK
|
||||
- assigned-clock-rates: Should be:
|
||||
19.2Mhz (192000000) for MOCK_UTMI_CLK
|
||||
>=125Mhz (125000000) for MASTER_CLK in SS mode
|
||||
>=60Mhz (60000000) for MASTER_CLK in HS mode
|
||||
|
||||
Optional properties:
|
||||
- resets: Phandle to reset control that resets core and wrapper.
|
||||
- interrupts: specifies interrupts from controller wrapper used
|
||||
to wakeup from low power/susepnd state. Must contain
|
||||
one or more entry for interrupt-names property
|
||||
- interrupt-names: Must include the following entries:
|
||||
- "hs_phy_irq": The interrupt that is asserted when a
|
||||
wakeup event is received on USB2 bus
|
||||
- "ss_phy_irq": The interrupt that is asserted when a
|
||||
wakeup event is received on USB3 bus
|
||||
- "dm_hs_phy_irq" and "dp_hs_phy_irq": Separate
|
||||
interrupts for any wakeup event on DM and DP lines
|
||||
- qcom,select-utmi-as-pipe-clk: if present, disable USB3 pipe_clk requirement.
|
||||
Used when dwc3 operates without SSPHY and only
|
||||
HS/FS/LS modes are supported.
|
||||
|
||||
Required child node:
|
||||
A child node must exist to represent the core DWC3 IP block. The name of
|
||||
the node is not important. The content of the node is defined in dwc3.txt.
|
||||
|
||||
Phy documentation is provided in the following places:
|
||||
Documentation/devicetree/bindings/phy/qcom-dwc3-usb-phy.txt
|
||||
Documentation/devicetree/bindings/phy/qcom-qmp-phy.txt - USB3 QMP PHY
|
||||
Documentation/devicetree/bindings/phy/qcom-qusb2-phy.txt - USB2 QUSB2 PHY
|
||||
|
||||
Example device nodes:
|
||||
|
||||
hs_phy: phy@100f8800 {
|
||||
compatible = "qcom,dwc3-hs-usb-phy";
|
||||
reg = <0x100f8800 0x30>;
|
||||
clocks = <&gcc USB30_0_UTMI_CLK>;
|
||||
clock-names = "ref";
|
||||
#phy-cells = <0>;
|
||||
|
||||
compatible = "qcom,qusb2-v2-phy";
|
||||
...
|
||||
};
|
||||
|
||||
ss_phy: phy@100f8830 {
|
||||
compatible = "qcom,dwc3-ss-usb-phy";
|
||||
reg = <0x100f8830 0x30>;
|
||||
clocks = <&gcc USB30_0_MASTER_CLK>;
|
||||
clock-names = "ref";
|
||||
#phy-cells = <0>;
|
||||
|
||||
compatible = "qcom,qmp-v3-usb3-phy";
|
||||
...
|
||||
};
|
||||
|
||||
usb3_0: usb30@0 {
|
||||
usb3_0: usb30@a6f8800 {
|
||||
compatible = "qcom,dwc3";
|
||||
reg = <0xa6f8800 0x400>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
clocks = <&gcc USB30_0_MASTER_CLK>;
|
||||
clock-names = "core";
|
||||
|
||||
ranges;
|
||||
|
||||
interrupts = <0 131 0>, <0 486 0>, <0 488 0>, <0 489 0>;
|
||||
interrupt-names = "hs_phy_irq", "ss_phy_irq",
|
||||
"dm_hs_phy_irq", "dp_hs_phy_irq";
|
||||
|
||||
clocks = <&gcc GCC_USB30_PRIM_MASTER_CLK>,
|
||||
<&gcc GCC_USB30_PRIM_MOCK_UTMI_CLK>,
|
||||
<&gcc GCC_USB30_PRIM_SLEEP_CLK>;
|
||||
clock-names = "core", "mock_utmi", "sleep";
|
||||
|
||||
assigned-clocks = <&gcc GCC_USB30_PRIM_MOCK_UTMI_CLK>,
|
||||
<&gcc GCC_USB30_PRIM_MASTER_CLK>;
|
||||
assigned-clock-rates = <19200000>, <133000000>;
|
||||
|
||||
resets = <&gcc GCC_USB30_PRIM_BCR>;
|
||||
reset-names = "core_reset";
|
||||
power-domains = <&gcc USB30_PRIM_GDSC>;
|
||||
qcom,select-utmi-as-pipe-clk;
|
||||
|
||||
dwc3@10000000 {
|
||||
compatible = "snps,dwc3";
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
Richtek RT1711H TypeC PD Controller.
|
||||
|
||||
Required properties:
|
||||
- compatible : Must be "richtek,rt1711h".
|
||||
- reg : Must be 0x4e, it's slave address of RT1711H.
|
||||
- interrupt-parent : the phandle for the interrupt controller that
|
||||
provides interrupts for this device.
|
||||
- interrupts : <a b> where a is the interrupt number and b represents an
|
||||
encoding of the sense and level information for the interrupt.
|
||||
|
||||
Example :
|
||||
rt1711h@4e {
|
||||
compatible = "richtek,rt1711h";
|
||||
reg = <0x4e>;
|
||||
interrupt-parent = <&gpio26>;
|
||||
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
|
||||
};
|
||||
@@ -674,9 +674,8 @@ operations, both of which can be traced. Format is::
|
||||
__entry->flags & DWC3_EP_ENABLED ? 'E' : 'e',
|
||||
__entry->flags & DWC3_EP_STALL ? 'S' : 's',
|
||||
__entry->flags & DWC3_EP_WEDGE ? 'W' : 'w',
|
||||
__entry->flags & DWC3_EP_BUSY ? 'B' : 'b',
|
||||
__entry->flags & DWC3_EP_TRANSFER_STARTED ? 'B' : 'b',
|
||||
__entry->flags & DWC3_EP_PENDING_REQUEST ? 'P' : 'p',
|
||||
__entry->flags & DWC3_EP_MISSED_ISOC ? 'M' : 'm',
|
||||
__entry->flags & DWC3_EP_END_TRANSFER_PENDING ? 'E' : 'e',
|
||||
__entry->direction ? '<' : '>'
|
||||
)
|
||||
|
||||
+10
@@ -2331,6 +2331,14 @@ S: Maintained
|
||||
F: drivers/gpio/gpio-ath79.c
|
||||
F: Documentation/devicetree/bindings/gpio/gpio-ath79.txt
|
||||
|
||||
ATHEROS 71XX/9XXX USB PHY DRIVER
|
||||
M: Alban Bedel <albeu@free.fr>
|
||||
W: https://github.com/AlbanBedel/linux
|
||||
T: git git://github.com/AlbanBedel/linux
|
||||
S: Maintained
|
||||
F: drivers/phy/qualcomm/phy-ath79-usb.c
|
||||
F: Documentation/devicetree/bindings/phy/phy-ath79-usb.txt
|
||||
|
||||
ATHEROS ATH GENERIC UTILITIES
|
||||
M: Kalle Valo <kvalo@codeaurora.org>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
@@ -11267,6 +11275,7 @@ M: Sebastian Reichel <sre@kernel.org>
|
||||
L: linux-pm@vger.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git
|
||||
S: Maintained
|
||||
F: Documentation/ABI/testing/sysfs-class-power
|
||||
F: Documentation/devicetree/bindings/power/supply/
|
||||
F: include/linux/power_supply.h
|
||||
F: drivers/power/supply/
|
||||
@@ -14692,6 +14701,7 @@ S: Maintained
|
||||
F: Documentation/usb/usbip_protocol.txt
|
||||
F: drivers/usb/usbip/
|
||||
F: tools/usb/usbip/
|
||||
F: tools/testing/selftests/drivers/usb/usbip/
|
||||
|
||||
USB PEGASUS DRIVER
|
||||
M: Petko Manolov <petkan@nucleusys.com>
|
||||
|
||||
@@ -202,8 +202,7 @@ config I2C_CHT_WC
|
||||
|
||||
Note this controller is hooked up to a TI bq24292i charger-IC,
|
||||
combined with a FUSB302 Type-C port-controller as such it is advised
|
||||
to also select CONFIG_CHARGER_BQ24190=m and CONFIG_TYPEC_FUSB302=m
|
||||
(the fusb302 driver currently is in drivers/staging).
|
||||
to also select CONFIG_TYPEC_FUSB302=m.
|
||||
|
||||
config I2C_NFORCE2
|
||||
tristate "Nvidia nForce2, nForce3 and nForce4"
|
||||
|
||||
+30
-12
@@ -62,6 +62,9 @@ struct pn533_usb_phy {
|
||||
struct urb *out_urb;
|
||||
struct urb *in_urb;
|
||||
|
||||
struct urb *ack_urb;
|
||||
u8 *ack_buffer;
|
||||
|
||||
struct pn533 *priv;
|
||||
};
|
||||
|
||||
@@ -150,13 +153,16 @@ static int pn533_usb_send_ack(struct pn533 *dev, gfp_t flags)
|
||||
struct pn533_usb_phy *phy = dev->phy;
|
||||
static const u8 ack[6] = {0x00, 0x00, 0xff, 0x00, 0xff, 0x00};
|
||||
/* spec 7.1.1.3: Preamble, SoPC (2), ACK Code (2), Postamble */
|
||||
int rc;
|
||||
|
||||
phy->out_urb->transfer_buffer = (u8 *)ack;
|
||||
phy->out_urb->transfer_buffer_length = sizeof(ack);
|
||||
rc = usb_submit_urb(phy->out_urb, flags);
|
||||
if (!phy->ack_buffer) {
|
||||
phy->ack_buffer = kmemdup(ack, sizeof(ack), flags);
|
||||
if (!phy->ack_buffer)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
return rc;
|
||||
phy->ack_urb->transfer_buffer = phy->ack_buffer;
|
||||
phy->ack_urb->transfer_buffer_length = sizeof(ack);
|
||||
return usb_submit_urb(phy->ack_urb, flags);
|
||||
}
|
||||
|
||||
static int pn533_usb_send_frame(struct pn533 *dev,
|
||||
@@ -375,26 +381,31 @@ static int pn533_acr122_poweron_rdr(struct pn533_usb_phy *phy)
|
||||
/* Power on th reader (CCID cmd) */
|
||||
u8 cmd[10] = {PN533_ACR122_PC_TO_RDR_ICCPOWERON,
|
||||
0, 0, 0, 0, 0, 0, 3, 0, 0};
|
||||
char *buffer;
|
||||
int transferred;
|
||||
int rc;
|
||||
void *cntx;
|
||||
struct pn533_acr122_poweron_rdr_arg arg;
|
||||
|
||||
dev_dbg(&phy->udev->dev, "%s\n", __func__);
|
||||
|
||||
buffer = kmemdup(cmd, sizeof(cmd), GFP_KERNEL);
|
||||
if (!buffer)
|
||||
return -ENOMEM;
|
||||
|
||||
init_completion(&arg.done);
|
||||
cntx = phy->in_urb->context; /* backup context */
|
||||
|
||||
phy->in_urb->complete = pn533_acr122_poweron_rdr_resp;
|
||||
phy->in_urb->context = &arg;
|
||||
|
||||
phy->out_urb->transfer_buffer = cmd;
|
||||
phy->out_urb->transfer_buffer_length = sizeof(cmd);
|
||||
|
||||
print_hex_dump_debug("ACR122 TX: ", DUMP_PREFIX_NONE, 16, 1,
|
||||
cmd, sizeof(cmd), false);
|
||||
|
||||
rc = usb_submit_urb(phy->out_urb, GFP_KERNEL);
|
||||
if (rc) {
|
||||
rc = usb_bulk_msg(phy->udev, phy->out_urb->pipe, buffer, sizeof(cmd),
|
||||
&transferred, 0);
|
||||
kfree(buffer);
|
||||
if (rc || (transferred != sizeof(cmd))) {
|
||||
nfc_err(&phy->udev->dev,
|
||||
"Reader power on cmd error %d\n", rc);
|
||||
return rc;
|
||||
@@ -490,8 +501,9 @@ static int pn533_usb_probe(struct usb_interface *interface,
|
||||
|
||||
phy->in_urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||
phy->out_urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||
phy->ack_urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||
|
||||
if (!phy->in_urb || !phy->out_urb)
|
||||
if (!phy->in_urb || !phy->out_urb || !phy->ack_urb)
|
||||
goto error;
|
||||
|
||||
usb_fill_bulk_urb(phy->in_urb, phy->udev,
|
||||
@@ -501,7 +513,9 @@ static int pn533_usb_probe(struct usb_interface *interface,
|
||||
usb_fill_bulk_urb(phy->out_urb, phy->udev,
|
||||
usb_sndbulkpipe(phy->udev, out_endpoint),
|
||||
NULL, 0, pn533_send_complete, phy);
|
||||
|
||||
usb_fill_bulk_urb(phy->ack_urb, phy->udev,
|
||||
usb_sndbulkpipe(phy->udev, out_endpoint),
|
||||
NULL, 0, pn533_send_complete, phy);
|
||||
|
||||
switch (id->driver_info) {
|
||||
case PN533_DEVICE_STD:
|
||||
@@ -554,6 +568,7 @@ static int pn533_usb_probe(struct usb_interface *interface,
|
||||
error:
|
||||
usb_free_urb(phy->in_urb);
|
||||
usb_free_urb(phy->out_urb);
|
||||
usb_free_urb(phy->ack_urb);
|
||||
usb_put_dev(phy->udev);
|
||||
kfree(in_buf);
|
||||
|
||||
@@ -573,10 +588,13 @@ static void pn533_usb_disconnect(struct usb_interface *interface)
|
||||
|
||||
usb_kill_urb(phy->in_urb);
|
||||
usb_kill_urb(phy->out_urb);
|
||||
usb_kill_urb(phy->ack_urb);
|
||||
|
||||
kfree(phy->in_urb->transfer_buffer);
|
||||
usb_free_urb(phy->in_urb);
|
||||
usb_free_urb(phy->out_urb);
|
||||
usb_free_urb(phy->ack_urb);
|
||||
kfree(phy->ack_buffer);
|
||||
|
||||
nfc_info(&interface->dev, "NXP PN533 NFC device disconnected\n");
|
||||
}
|
||||
|
||||
@@ -12,3 +12,12 @@ config PHY_MTK_TPHY
|
||||
different banks layout, the T-PHY with shared banks between
|
||||
multi-ports is first version, otherwise is second veriosn,
|
||||
so you can easily distinguish them by banks layout.
|
||||
|
||||
config PHY_MTK_XSPHY
|
||||
tristate "MediaTek XS-PHY Driver"
|
||||
depends on ARCH_MEDIATEK && OF
|
||||
select GENERIC_PHY
|
||||
help
|
||||
Enable this to support the SuperSpeedPlus XS-PHY transceiver for
|
||||
USB3.1 GEN2 controllers on MediaTek chips. The driver supports
|
||||
multiple USB2.0, USB3.1 GEN2 ports.
|
||||
|
||||
@@ -3,3 +3,4 @@
|
||||
#
|
||||
|
||||
obj-$(CONFIG_PHY_MTK_TPHY) += phy-mtk-tphy.o
|
||||
obj-$(CONFIG_PHY_MTK_XSPHY) += phy-mtk-xsphy.o
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -19,6 +19,8 @@
|
||||
|
||||
#define PHY_MDM6600_PHY_DELAY_MS 4000 /* PHY enable 2.2s to 3.5s */
|
||||
#define PHY_MDM6600_ENABLED_DELAY_MS 8000 /* 8s more total for MDM6600 */
|
||||
#define MDM6600_MODEM_IDLE_DELAY_MS 1000 /* modem after USB suspend */
|
||||
#define MDM6600_MODEM_WAKE_DELAY_MS 200 /* modem response after idle */
|
||||
|
||||
enum phy_mdm6600_ctrl_lines {
|
||||
PHY_MDM6600_ENABLE, /* USB PHY enable */
|
||||
@@ -93,9 +95,11 @@ struct phy_mdm6600 {
|
||||
struct gpio_descs *cmd_gpios;
|
||||
struct delayed_work bootup_work;
|
||||
struct delayed_work status_work;
|
||||
struct delayed_work modem_wake_work;
|
||||
struct completion ack;
|
||||
bool enabled; /* mdm6600 phy enabled */
|
||||
bool running; /* mdm6600 boot done */
|
||||
bool awake; /* mdm6600 respnds on n_gsm */
|
||||
int status;
|
||||
};
|
||||
|
||||
@@ -446,6 +450,62 @@ static void phy_mdm6600_deferred_power_on(struct work_struct *work)
|
||||
dev_err(ddata->dev, "Device not functional\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* USB suspend puts mdm6600 into low power mode. For any n_gsm using apps,
|
||||
* we need to keep the modem awake by kicking it's mode0 GPIO. This will
|
||||
* keep the modem awake for about 1.2 seconds. When no n_gsm apps are using
|
||||
* the modem, runtime PM auto mode can be enabled so modem can enter low
|
||||
* power mode.
|
||||
*/
|
||||
static void phy_mdm6600_wake_modem(struct phy_mdm6600 *ddata)
|
||||
{
|
||||
struct gpio_desc *mode_gpio0;
|
||||
|
||||
mode_gpio0 = ddata->mode_gpios->desc[PHY_MDM6600_MODE0];
|
||||
gpiod_set_value_cansleep(mode_gpio0, 1);
|
||||
usleep_range(5, 15);
|
||||
gpiod_set_value_cansleep(mode_gpio0, 0);
|
||||
if (ddata->awake)
|
||||
usleep_range(5, 15);
|
||||
else
|
||||
msleep(MDM6600_MODEM_WAKE_DELAY_MS);
|
||||
}
|
||||
|
||||
static void phy_mdm6600_modem_wake(struct work_struct *work)
|
||||
{
|
||||
struct phy_mdm6600 *ddata;
|
||||
|
||||
ddata = container_of(work, struct phy_mdm6600, modem_wake_work.work);
|
||||
phy_mdm6600_wake_modem(ddata);
|
||||
schedule_delayed_work(&ddata->modem_wake_work,
|
||||
msecs_to_jiffies(MDM6600_MODEM_IDLE_DELAY_MS));
|
||||
}
|
||||
|
||||
static int __maybe_unused phy_mdm6600_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct phy_mdm6600 *ddata = dev_get_drvdata(dev);
|
||||
|
||||
cancel_delayed_work_sync(&ddata->modem_wake_work);
|
||||
ddata->awake = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __maybe_unused phy_mdm6600_runtime_resume(struct device *dev)
|
||||
{
|
||||
struct phy_mdm6600 *ddata = dev_get_drvdata(dev);
|
||||
|
||||
phy_mdm6600_modem_wake(&ddata->modem_wake_work.work);
|
||||
ddata->awake = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops phy_mdm6600_pm_ops = {
|
||||
SET_RUNTIME_PM_OPS(phy_mdm6600_runtime_suspend,
|
||||
phy_mdm6600_runtime_resume, NULL)
|
||||
};
|
||||
|
||||
static const struct of_device_id phy_mdm6600_id_table[] = {
|
||||
{ .compatible = "motorola,mapphone-mdm6600", },
|
||||
{},
|
||||
@@ -464,6 +524,7 @@ static int phy_mdm6600_probe(struct platform_device *pdev)
|
||||
INIT_DELAYED_WORK(&ddata->bootup_work,
|
||||
phy_mdm6600_deferred_power_on);
|
||||
INIT_DELAYED_WORK(&ddata->status_work, phy_mdm6600_status);
|
||||
INIT_DELAYED_WORK(&ddata->modem_wake_work, phy_mdm6600_modem_wake);
|
||||
init_completion(&ddata->ack);
|
||||
|
||||
ddata->dev = &pdev->dev;
|
||||
@@ -500,6 +561,24 @@ static int phy_mdm6600_probe(struct platform_device *pdev)
|
||||
*/
|
||||
msleep(PHY_MDM6600_PHY_DELAY_MS + 500);
|
||||
|
||||
/*
|
||||
* Enable PM runtime only after PHY has been powered up properly.
|
||||
* It is currently only needed after USB suspends mdm6600 and n_gsm
|
||||
* needs to access the device. We don't want to do this earlier as
|
||||
* gpio mode0 pin doubles as mdm6600 wake-up gpio.
|
||||
*/
|
||||
pm_runtime_use_autosuspend(ddata->dev);
|
||||
pm_runtime_set_autosuspend_delay(ddata->dev,
|
||||
MDM6600_MODEM_IDLE_DELAY_MS);
|
||||
pm_runtime_enable(ddata->dev);
|
||||
error = pm_runtime_get_sync(ddata->dev);
|
||||
if (error < 0) {
|
||||
dev_warn(ddata->dev, "failed to wake modem: %i\n", error);
|
||||
pm_runtime_put_noidle(ddata->dev);
|
||||
}
|
||||
pm_runtime_mark_last_busy(ddata->dev);
|
||||
pm_runtime_put_autosuspend(ddata->dev);
|
||||
|
||||
return 0;
|
||||
|
||||
cleanup:
|
||||
@@ -512,6 +591,10 @@ static int phy_mdm6600_remove(struct platform_device *pdev)
|
||||
struct phy_mdm6600 *ddata = platform_get_drvdata(pdev);
|
||||
struct gpio_desc *reset_gpio = ddata->ctrl_gpios[PHY_MDM6600_RESET];
|
||||
|
||||
pm_runtime_dont_use_autosuspend(ddata->dev);
|
||||
pm_runtime_put_sync(ddata->dev);
|
||||
pm_runtime_disable(ddata->dev);
|
||||
|
||||
if (!ddata->running)
|
||||
wait_for_completion_timeout(&ddata->ack,
|
||||
msecs_to_jiffies(PHY_MDM6600_ENABLED_DELAY_MS));
|
||||
@@ -519,6 +602,7 @@ static int phy_mdm6600_remove(struct platform_device *pdev)
|
||||
gpiod_set_value_cansleep(reset_gpio, 1);
|
||||
phy_mdm6600_device_power_off(ddata);
|
||||
|
||||
cancel_delayed_work_sync(&ddata->modem_wake_work);
|
||||
cancel_delayed_work_sync(&ddata->bootup_work);
|
||||
cancel_delayed_work_sync(&ddata->status_work);
|
||||
|
||||
@@ -530,6 +614,7 @@ static struct platform_driver phy_mdm6600_driver = {
|
||||
.remove = phy_mdm6600_remove,
|
||||
.driver = {
|
||||
.name = "phy-mapphone-mdm6600",
|
||||
.pm = &phy_mdm6600_pm_ops,
|
||||
.of_match_table = of_match_ptr(phy_mdm6600_id_table),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -153,6 +153,9 @@ int phy_pm_runtime_get(struct phy *phy)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!phy)
|
||||
return 0;
|
||||
|
||||
if (!pm_runtime_enabled(&phy->dev))
|
||||
return -ENOTSUPP;
|
||||
|
||||
@@ -168,6 +171,9 @@ int phy_pm_runtime_get_sync(struct phy *phy)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!phy)
|
||||
return 0;
|
||||
|
||||
if (!pm_runtime_enabled(&phy->dev))
|
||||
return -ENOTSUPP;
|
||||
|
||||
@@ -181,6 +187,9 @@ EXPORT_SYMBOL_GPL(phy_pm_runtime_get_sync);
|
||||
|
||||
int phy_pm_runtime_put(struct phy *phy)
|
||||
{
|
||||
if (!phy)
|
||||
return 0;
|
||||
|
||||
if (!pm_runtime_enabled(&phy->dev))
|
||||
return -ENOTSUPP;
|
||||
|
||||
@@ -190,6 +199,9 @@ EXPORT_SYMBOL_GPL(phy_pm_runtime_put);
|
||||
|
||||
int phy_pm_runtime_put_sync(struct phy *phy)
|
||||
{
|
||||
if (!phy)
|
||||
return 0;
|
||||
|
||||
if (!pm_runtime_enabled(&phy->dev))
|
||||
return -ENOTSUPP;
|
||||
|
||||
@@ -199,6 +211,9 @@ EXPORT_SYMBOL_GPL(phy_pm_runtime_put_sync);
|
||||
|
||||
void phy_pm_runtime_allow(struct phy *phy)
|
||||
{
|
||||
if (!phy)
|
||||
return;
|
||||
|
||||
if (!pm_runtime_enabled(&phy->dev))
|
||||
return;
|
||||
|
||||
@@ -208,6 +223,9 @@ EXPORT_SYMBOL_GPL(phy_pm_runtime_allow);
|
||||
|
||||
void phy_pm_runtime_forbid(struct phy *phy)
|
||||
{
|
||||
if (!phy)
|
||||
return;
|
||||
|
||||
if (!pm_runtime_enabled(&phy->dev))
|
||||
return;
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user