mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-29 17:22:07 +00:00
Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
This commit is contained in:
commit
5cd9bc5cb9
@ -13,8 +13,12 @@ description: Maxim TCPCI Type-C PD controller
|
|||||||
|
|
||||||
properties:
|
properties:
|
||||||
compatible:
|
compatible:
|
||||||
enum:
|
oneOf:
|
||||||
|
- enum:
|
||||||
- maxim,max33359
|
- maxim,max33359
|
||||||
|
- items:
|
||||||
|
- const: maxim,max77759-tcpci
|
||||||
|
- const: maxim,max33359
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
@ -453,8 +453,10 @@ allOf:
|
|||||||
then:
|
then:
|
||||||
properties:
|
properties:
|
||||||
interrupts:
|
interrupts:
|
||||||
|
minItems: 3
|
||||||
maxItems: 4
|
maxItems: 4
|
||||||
interrupt-names:
|
interrupt-names:
|
||||||
|
minItems: 3
|
||||||
items:
|
items:
|
||||||
- const: pwr_event
|
- const: pwr_event
|
||||||
- const: dp_hs_phy_irq
|
- const: dp_hs_phy_irq
|
||||||
|
@ -26,6 +26,7 @@ properties:
|
|||||||
- renesas,usbhs-r9a07g043 # RZ/G2UL and RZ/Five
|
- renesas,usbhs-r9a07g043 # RZ/G2UL and RZ/Five
|
||||||
- renesas,usbhs-r9a07g044 # RZ/G2{L,LC}
|
- renesas,usbhs-r9a07g044 # RZ/G2{L,LC}
|
||||||
- renesas,usbhs-r9a07g054 # RZ/V2L
|
- renesas,usbhs-r9a07g054 # RZ/V2L
|
||||||
|
- renesas,usbhs-r9a08g045 # RZ/G3S
|
||||||
- const: renesas,rzg2l-usbhs
|
- const: renesas,rzg2l-usbhs
|
||||||
|
|
||||||
- items:
|
- items:
|
||||||
@ -130,6 +131,7 @@ allOf:
|
|||||||
- renesas,usbhs-r9a07g043
|
- renesas,usbhs-r9a07g043
|
||||||
- renesas,usbhs-r9a07g044
|
- renesas,usbhs-r9a07g044
|
||||||
- renesas,usbhs-r9a07g054
|
- renesas,usbhs-r9a07g054
|
||||||
|
- renesas,usbhs-r9a08g045
|
||||||
then:
|
then:
|
||||||
properties:
|
properties:
|
||||||
interrupts:
|
interrupts:
|
||||||
|
@ -256,8 +256,14 @@ static int ci_ehci_hub_control(
|
|||||||
struct device *dev = hcd->self.controller;
|
struct device *dev = hcd->self.controller;
|
||||||
struct ci_hdrc *ci = dev_get_drvdata(dev);
|
struct ci_hdrc *ci = dev_get_drvdata(dev);
|
||||||
|
|
||||||
port_index = wIndex & 0xff;
|
/*
|
||||||
port_index -= (port_index > 0);
|
* Avoid out-of-bounds values while calculating the port index
|
||||||
|
* from wIndex. The compiler doesn't like pointers to invalid
|
||||||
|
* addresses, even if they are never used.
|
||||||
|
*/
|
||||||
|
port_index = (wIndex - 1) & 0xff;
|
||||||
|
if (port_index >= HCS_N_PORTS_MAX)
|
||||||
|
port_index = 0;
|
||||||
status_reg = &ehci->regs->port_status[port_index];
|
status_reg = &ehci->regs->port_status[port_index];
|
||||||
|
|
||||||
spin_lock_irqsave(&ehci->lock, flags);
|
spin_lock_irqsave(&ehci->lock, flags);
|
||||||
|
@ -422,7 +422,12 @@ static int suspend_common(struct device *dev, pm_message_t msg)
|
|||||||
bool do_wakeup;
|
bool do_wakeup;
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
do_wakeup = PMSG_IS_AUTO(msg) ? true : device_may_wakeup(dev);
|
if (PMSG_IS_AUTO(msg))
|
||||||
|
do_wakeup = true;
|
||||||
|
else if (PMSG_NO_WAKEUP(msg))
|
||||||
|
do_wakeup = false;
|
||||||
|
else
|
||||||
|
do_wakeup = device_may_wakeup(dev);
|
||||||
|
|
||||||
/* Root hub suspend should have stopped all downstream traffic,
|
/* Root hub suspend should have stopped all downstream traffic,
|
||||||
* and all bus master traffic. And done so for both the interface
|
* and all bus master traffic. And done so for both the interface
|
||||||
@ -521,6 +526,11 @@ static int hcd_pci_suspend(struct device *dev)
|
|||||||
return suspend_common(dev, PMSG_SUSPEND);
|
return suspend_common(dev, PMSG_SUSPEND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int hcd_pci_freeze(struct device *dev)
|
||||||
|
{
|
||||||
|
return suspend_common(dev, PMSG_FREEZE);
|
||||||
|
}
|
||||||
|
|
||||||
static int hcd_pci_suspend_noirq(struct device *dev)
|
static int hcd_pci_suspend_noirq(struct device *dev)
|
||||||
{
|
{
|
||||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||||
@ -590,6 +600,7 @@ static int hcd_pci_restore(struct device *dev)
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
#define hcd_pci_suspend NULL
|
#define hcd_pci_suspend NULL
|
||||||
|
#define hcd_pci_freeze NULL
|
||||||
#define hcd_pci_suspend_noirq NULL
|
#define hcd_pci_suspend_noirq NULL
|
||||||
#define hcd_pci_poweroff_late NULL
|
#define hcd_pci_poweroff_late NULL
|
||||||
#define hcd_pci_resume_noirq NULL
|
#define hcd_pci_resume_noirq NULL
|
||||||
@ -624,7 +635,7 @@ const struct dev_pm_ops usb_hcd_pci_pm_ops = {
|
|||||||
.suspend_noirq = hcd_pci_suspend_noirq,
|
.suspend_noirq = hcd_pci_suspend_noirq,
|
||||||
.resume_noirq = hcd_pci_resume_noirq,
|
.resume_noirq = hcd_pci_resume_noirq,
|
||||||
.resume = hcd_pci_resume,
|
.resume = hcd_pci_resume,
|
||||||
.freeze = hcd_pci_suspend,
|
.freeze = hcd_pci_freeze,
|
||||||
.freeze_noirq = check_root_hub_suspended,
|
.freeze_noirq = check_root_hub_suspended,
|
||||||
.thaw_noirq = NULL,
|
.thaw_noirq = NULL,
|
||||||
.thaw = hcd_pci_resume,
|
.thaw = hcd_pci_resume,
|
||||||
|
@ -1479,6 +1479,26 @@ static int dwc3_core_init(struct dwc3 *dwc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* STAR 9001346572: This issue affects DWC_usb31 versions 1.80a and
|
||||||
|
* prior. When an active endpoint not currently cached in the host
|
||||||
|
* controller is chosen to be cached to the same index as an endpoint
|
||||||
|
* receiving NAKs, the endpoint receiving NAKs enters continuous
|
||||||
|
* retry mode. This prevents it from being evicted from the host
|
||||||
|
* controller cache, blocking the new endpoint from being cached and
|
||||||
|
* serviced.
|
||||||
|
*
|
||||||
|
* To resolve this, for controller versions 1.70a and 1.80a, set the
|
||||||
|
* GUCTL3 bit[16] (USB2.0 Internal Retry Disable) to 1. This bit
|
||||||
|
* disables the USB2.0 internal retry feature. The GUCTL3[16] register
|
||||||
|
* function is available only from version 1.70a.
|
||||||
|
*/
|
||||||
|
if (DWC3_VER_IS_WITHIN(DWC31, 170A, 180A)) {
|
||||||
|
reg = dwc3_readl(dwc->regs, DWC3_GUCTL3);
|
||||||
|
reg |= DWC3_GUCTL3_USB20_RETRY_DISABLE;
|
||||||
|
dwc3_writel(dwc->regs, DWC3_GUCTL3, reg);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_power_off_phy:
|
err_power_off_phy:
|
||||||
|
@ -425,6 +425,7 @@
|
|||||||
|
|
||||||
/* Global User Control Register 3 */
|
/* Global User Control Register 3 */
|
||||||
#define DWC3_GUCTL3_SPLITDISABLE BIT(14)
|
#define DWC3_GUCTL3_SPLITDISABLE BIT(14)
|
||||||
|
#define DWC3_GUCTL3_USB20_RETRY_DISABLE BIT(16)
|
||||||
|
|
||||||
/* Device Configuration Register */
|
/* Device Configuration Register */
|
||||||
#define DWC3_DCFG_NUMLANES(n) (((n) & 0x3) << 30) /* DWC_usb32 only */
|
#define DWC3_DCFG_NUMLANES(n) (((n) & 0x3) << 30) /* DWC_usb32 only */
|
||||||
@ -956,7 +957,6 @@ struct dwc3_request {
|
|||||||
struct usb_request request;
|
struct usb_request request;
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
struct dwc3_ep *dep;
|
struct dwc3_ep *dep;
|
||||||
struct scatterlist *sg;
|
|
||||||
struct scatterlist *start_sg;
|
struct scatterlist *start_sg;
|
||||||
|
|
||||||
unsigned int num_pending_sgs;
|
unsigned int num_pending_sgs;
|
||||||
|
@ -441,14 +441,10 @@ static int usbg_bot_setup(struct usb_function *f,
|
|||||||
pr_err("No LUNs configured?\n");
|
pr_err("No LUNs configured?\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* If 4 LUNs are present we return 3 i.e. LUN 0..3 can be
|
|
||||||
* accessed. The upper limit is 0xf
|
|
||||||
*/
|
|
||||||
luns--;
|
luns--;
|
||||||
if (luns > 0xf) {
|
if (luns > US_BULK_MAX_LUN_LIMIT) {
|
||||||
pr_info_once("Limiting the number of luns to 16\n");
|
pr_info_once("Limiting the number of luns to 16\n");
|
||||||
luns = 0xf;
|
luns = US_BULK_MAX_LUN_LIMIT;
|
||||||
}
|
}
|
||||||
ret_lun = cdev->req->buf;
|
ret_lun = cdev->req->buf;
|
||||||
*ret_lun = luns;
|
*ret_lun = luns;
|
||||||
|
@ -131,7 +131,7 @@ static inline bool fsg_lun_is_open(struct fsg_lun *curlun)
|
|||||||
#define FSG_BUFLEN ((u32)16384)
|
#define FSG_BUFLEN ((u32)16384)
|
||||||
|
|
||||||
/* Maximal number of LUNs supported in mass storage function */
|
/* Maximal number of LUNs supported in mass storage function */
|
||||||
#define FSG_MAX_LUNS 16
|
#define FSG_MAX_LUNS (US_BULK_MAX_LUN_LIMIT + 1)
|
||||||
|
|
||||||
enum fsg_buffer_state {
|
enum fsg_buffer_state {
|
||||||
BUF_STATE_SENDING = -2,
|
BUF_STATE_SENDING = -2,
|
||||||
|
@ -3,8 +3,7 @@
|
|||||||
# USB Storage driver configuration
|
# USB Storage driver configuration
|
||||||
#
|
#
|
||||||
|
|
||||||
comment "NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may"
|
comment "NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; see USB_STORAGE Help for more info"
|
||||||
comment "also be needed; see USB_STORAGE Help for more info"
|
|
||||||
|
|
||||||
config USB_STORAGE
|
config USB_STORAGE
|
||||||
tristate "USB Mass Storage support"
|
tristate "USB Mass Storage support"
|
||||||
|
@ -1087,13 +1087,9 @@ int usb_stor_Bulk_max_lun(struct us_data *us)
|
|||||||
usb_stor_dbg(us, "GetMaxLUN command result is %d, data is %d\n",
|
usb_stor_dbg(us, "GetMaxLUN command result is %d, data is %d\n",
|
||||||
result, us->iobuf[0]);
|
result, us->iobuf[0]);
|
||||||
|
|
||||||
/*
|
/* If we have a successful request, return the result if valid. */
|
||||||
* If we have a successful request, return the result if valid. The
|
|
||||||
* CBW LUN field is 4 bits wide, so the value reported by the device
|
|
||||||
* should fit into that.
|
|
||||||
*/
|
|
||||||
if (result > 0) {
|
if (result > 0) {
|
||||||
if (us->iobuf[0] < 16) {
|
if (us->iobuf[0] <= US_BULK_MAX_LUN_LIMIT) {
|
||||||
return us->iobuf[0];
|
return us->iobuf[0];
|
||||||
} else {
|
} else {
|
||||||
dev_info(&us->pusb_intf->dev,
|
dev_info(&us->pusb_intf->dev,
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
#include <linux/mod_devicetable.h>
|
#include <linux/mod_devicetable.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/pm_wakeup.h>
|
|
||||||
#include <linux/pm_wakeirq.h>
|
#include <linux/pm_wakeirq.h>
|
||||||
#include <linux/regmap.h>
|
#include <linux/regmap.h>
|
||||||
#include <linux/regulator/consumer.h>
|
#include <linux/regulator/consumer.h>
|
||||||
|
@ -570,7 +570,8 @@ const struct dev_pm_ops name = { \
|
|||||||
{ .event = PM_EVENT_AUTO_RESUME, })
|
{ .event = PM_EVENT_AUTO_RESUME, })
|
||||||
|
|
||||||
#define PMSG_IS_AUTO(msg) (((msg).event & PM_EVENT_AUTO) != 0)
|
#define PMSG_IS_AUTO(msg) (((msg).event & PM_EVENT_AUTO) != 0)
|
||||||
|
#define PMSG_NO_WAKEUP(msg) (((msg).event & \
|
||||||
|
(PM_EVENT_FREEZE | PM_EVENT_QUIESCE)) != 0)
|
||||||
/*
|
/*
|
||||||
* Device run-time power management status.
|
* Device run-time power management status.
|
||||||
*
|
*
|
||||||
|
@ -82,4 +82,12 @@ struct bulk_cs_wrap {
|
|||||||
#define US_BULK_RESET_REQUEST 0xff
|
#define US_BULK_RESET_REQUEST 0xff
|
||||||
#define US_BULK_GET_MAX_LUN 0xfe
|
#define US_BULK_GET_MAX_LUN 0xfe
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If 4 LUNs are supported then the LUNs would be
|
||||||
|
* numbered from 0 to 3, and the return value for
|
||||||
|
* US_BULK_GET_MAX_LUN request would be 3. The valid
|
||||||
|
* LUN field is 4 bits wide, the upper limit is 0x0f.
|
||||||
|
*/
|
||||||
|
#define US_BULK_MAX_LUN_LIMIT 0x0f
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -206,7 +206,7 @@ struct usb_ffs_dmabuf_transfer_req {
|
|||||||
* +-----+-----------------+------+--------------------------+
|
* +-----+-----------------+------+--------------------------+
|
||||||
* | off | name | type | description |
|
* | off | name | type | description |
|
||||||
* +-----+-----------------+------+--------------------------+
|
* +-----+-----------------+------+--------------------------+
|
||||||
* | 0 | inteface | U8 | related interface number |
|
* | 0 | interface | U8 | related interface number |
|
||||||
* +-----+-----------------+------+--------------------------+
|
* +-----+-----------------+------+--------------------------+
|
||||||
* | 1 | dwLength | U32 | length of the descriptor |
|
* | 1 | dwLength | U32 | length of the descriptor |
|
||||||
* +-----+-----------------+------+--------------------------+
|
* +-----+-----------------+------+--------------------------+
|
||||||
@ -224,7 +224,7 @@ struct usb_ffs_dmabuf_transfer_req {
|
|||||||
* +-----+-----------------+------+--------------------------+
|
* +-----+-----------------+------+--------------------------+
|
||||||
* | off | name | type | description |
|
* | off | name | type | description |
|
||||||
* +-----+-----------------+------+--------------------------+
|
* +-----+-----------------+------+--------------------------+
|
||||||
* | 0 | inteface | U8 | related interface number |
|
* | 0 | interface | U8 | related interface number |
|
||||||
* +-----+-----------------+------+--------------------------+
|
* +-----+-----------------+------+--------------------------+
|
||||||
* | 1 | dwLength | U32 | length of the descriptor |
|
* | 1 | dwLength | U32 | length of the descriptor |
|
||||||
* +-----+-----------------+------+--------------------------+
|
* +-----+-----------------+------+--------------------------+
|
||||||
@ -237,7 +237,7 @@ struct usb_ffs_dmabuf_transfer_req {
|
|||||||
* | 11 | ExtProp[] | | list of ext. prop. d. |
|
* | 11 | ExtProp[] | | list of ext. prop. d. |
|
||||||
* +-----+-----------------+------+--------------------------+
|
* +-----+-----------------+------+--------------------------+
|
||||||
*
|
*
|
||||||
* ExtCompat[] is an array of valid Extended Compatiblity descriptors
|
* ExtCompat[] is an array of valid Extended Compatibility descriptors
|
||||||
* which have the following format:
|
* which have the following format:
|
||||||
*
|
*
|
||||||
* +-----+-----------------------+------+-------------------------------------+
|
* +-----+-----------------------+------+-------------------------------------+
|
||||||
@ -295,7 +295,7 @@ struct usb_functionfs_strings_head {
|
|||||||
* | 16 | stringtab | StringTab[lang_count] | table of strings per lang |
|
* | 16 | stringtab | StringTab[lang_count] | table of strings per lang |
|
||||||
*
|
*
|
||||||
* For each language there is one stringtab entry (ie. there are lang_count
|
* For each language there is one stringtab entry (ie. there are lang_count
|
||||||
* stringtab entires). Each StringTab has following format:
|
* stringtab entries). Each StringTab has following format:
|
||||||
*
|
*
|
||||||
* | off | name | type | description |
|
* | off | name | type | description |
|
||||||
* |-----+---------+-------------------+------------------------------------|
|
* |-----+---------+-------------------+------------------------------------|
|
||||||
|
Loading…
Reference in New Issue
Block a user