USB patches for 3.17-rc1
Here is the big USB driver update for 3.17-rc1. Loads of gadget driver changes in here, including some big file movements to make things easier to manage over time. There's also the usual xhci and uas driver updates, and a handful of other changes in here. The changelog has the full details. All of these have been in linux-next for a while. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEABECAAYFAlPf2ZIACgkQMUfUDdst+ylvQwCfQKPKcwhtq4vJ2imUzJROEZwN ygYAnRpFpH/19X59uGSdE7DAdhbitqKg =uPh1 -----END PGP SIGNATURE----- Merge tag 'usb-3.17-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb Pull USB updates from Greg KH: "Here is the big USB driver update for 3.17-rc1. Loads of gadget driver changes in here, including some big file movements to make things easier to manage over time. There's also the usual xhci and uas driver updates, and a handful of other changes in here. The changelog has the full details. All of these have been in linux-next for a while" * tag 'usb-3.17-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (211 commits) USB: devio: fix issue with log flooding uas: Log a warning when we cannot use uas because the hcd lacks streams uas: Only complain about missing sg if all other checks succeed xhci: Add missing checks for xhci_alloc_command failure xhci: Rename Asrock P67 pci product-id to EJ168 xhci: Blacklist using streams on the Etron EJ168 controller uas: Limit qdepth to 32 when connected over usb-2 uwb/whci: use correct structure type name in sizeof usb-core bInterval quirk USB: serial: ftdi_sio: Add support for new Xsens devices USB: serial: ftdi_sio: Annotate the current Xsens PID assignments usb: chipidea: debug: fix sparse non static symbol warnings usb: ci_hdrc_imx doc: fsl,usbphy is required usb: ci_hdrc_imx: Return -EINVAL for missing USB PHY usb: core: allow zero packet flag for interrupt urbs usb: lvstest: Fix sparse warnings generated by kbuild test bot USB: core: hcd-pci: free IRQ before disabling PCI device when shutting down phy: miphy365x: Represent each PHY channel as a DT subnode phy: miphy365x: Provide support for the MiPHY356x Generic PHY phy: miphy365x: Add Device Tree bindings for the MiPHY365x ...
This commit is contained in:
commit
ae9b475ebe
267 changed files with 11206 additions and 5806 deletions
|
|
@ -23,6 +23,7 @@ enum omap_control_phy_type {
|
|||
OMAP_CTRL_TYPE_OTGHS = 1, /* Mailbox OTGHS_CONTROL */
|
||||
OMAP_CTRL_TYPE_USB2, /* USB2_PHY, power down in CONTROL_DEV_CONF */
|
||||
OMAP_CTRL_TYPE_PIPE3, /* PIPE3 PHY, DPLL & seperate Rx/Tx power */
|
||||
OMAP_CTRL_TYPE_PCIE, /* RX TX control of ACSPCIE */
|
||||
OMAP_CTRL_TYPE_DRA7USB2, /* USB2 PHY, power and power_aux e.g. DRA7 */
|
||||
OMAP_CTRL_TYPE_AM437USB2, /* USB2 PHY, power e.g. AM437x */
|
||||
};
|
||||
|
|
@ -33,6 +34,7 @@ struct omap_control_phy {
|
|||
u32 __iomem *otghs_control;
|
||||
u32 __iomem *power;
|
||||
u32 __iomem *power_aux;
|
||||
u32 __iomem *pcie_pcs;
|
||||
|
||||
struct clk *sys_clk;
|
||||
|
||||
|
|
@ -63,6 +65,9 @@ enum omap_control_usb_mode {
|
|||
#define OMAP_CTRL_PIPE3_PHY_TX_RX_POWERON 0x3
|
||||
#define OMAP_CTRL_PIPE3_PHY_TX_RX_POWEROFF 0x0
|
||||
|
||||
#define OMAP_CTRL_PCIE_PCS_MASK 0xff
|
||||
#define OMAP_CTRL_PCIE_PCS_DELAY_COUNT_SHIFT 0x8
|
||||
|
||||
#define OMAP_CTRL_USB2_PHY_PD BIT(28)
|
||||
|
||||
#define AM437X_CTRL_USB2_PHY_PD BIT(0)
|
||||
|
|
@ -74,6 +79,7 @@ enum omap_control_usb_mode {
|
|||
void omap_control_phy_power(struct device *dev, int on);
|
||||
void omap_control_usb_set_mode(struct device *dev,
|
||||
enum omap_control_usb_mode mode);
|
||||
void omap_control_pcie_pcs(struct device *dev, u8 id, u8 delay);
|
||||
#else
|
||||
|
||||
static inline void omap_control_phy_power(struct device *dev, int on)
|
||||
|
|
@ -84,6 +90,10 @@ static inline void omap_control_usb_set_mode(struct device *dev,
|
|||
enum omap_control_usb_mode mode)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void omap_control_pcie_pcs(struct device *dev, u8 id, u8 delay)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __OMAP_CONTROL_PHY_H__ */
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include <linux/of.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
||||
struct phy;
|
||||
|
||||
|
|
@ -65,6 +66,7 @@ struct phy {
|
|||
int init_count;
|
||||
int power_count;
|
||||
struct phy_attrs attrs;
|
||||
struct regulator *pwr;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -156,9 +158,10 @@ void devm_phy_put(struct device *dev, struct phy *phy);
|
|||
struct phy *of_phy_get(struct device_node *np, const char *con_id);
|
||||
struct phy *of_phy_simple_xlate(struct device *dev,
|
||||
struct of_phandle_args *args);
|
||||
struct phy *phy_create(struct device *dev, const struct phy_ops *ops,
|
||||
struct phy_init_data *init_data);
|
||||
struct phy *devm_phy_create(struct device *dev,
|
||||
struct phy *phy_create(struct device *dev, struct device_node *node,
|
||||
const struct phy_ops *ops,
|
||||
struct phy_init_data *init_data);
|
||||
struct phy *devm_phy_create(struct device *dev, struct device_node *node,
|
||||
const struct phy_ops *ops, struct phy_init_data *init_data);
|
||||
void phy_destroy(struct phy *phy);
|
||||
void devm_phy_destroy(struct device *dev, struct phy *phy);
|
||||
|
|
@ -297,13 +300,17 @@ static inline struct phy *of_phy_simple_xlate(struct device *dev,
|
|||
}
|
||||
|
||||
static inline struct phy *phy_create(struct device *dev,
|
||||
const struct phy_ops *ops, struct phy_init_data *init_data)
|
||||
struct device_node *node,
|
||||
const struct phy_ops *ops,
|
||||
struct phy_init_data *init_data)
|
||||
{
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
|
||||
static inline struct phy *devm_phy_create(struct device *dev,
|
||||
const struct phy_ops *ops, struct phy_init_data *init_data)
|
||||
struct device_node *node,
|
||||
const struct phy_ops *ops,
|
||||
struct phy_init_data *init_data)
|
||||
{
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -386,6 +386,21 @@ struct usb_composite_driver {
|
|||
|
||||
extern int usb_composite_probe(struct usb_composite_driver *driver);
|
||||
extern void usb_composite_unregister(struct usb_composite_driver *driver);
|
||||
|
||||
/**
|
||||
* module_usb_composite_driver() - Helper macro for registering a USB gadget
|
||||
* composite driver
|
||||
* @__usb_composite_driver: usb_composite_driver struct
|
||||
*
|
||||
* Helper macro for USB gadget composite drivers which do not do anything
|
||||
* special in module init/exit. This eliminates a lot of boilerplate. Each
|
||||
* module may only use this macro once, and calling it replaces module_init()
|
||||
* and module_exit()
|
||||
*/
|
||||
#define module_usb_composite_driver(__usb_composite_driver) \
|
||||
module_driver(__usb_composite_driver, usb_composite_probe, \
|
||||
usb_composite_unregister)
|
||||
|
||||
extern void usb_composite_setup_continue(struct usb_composite_dev *cdev);
|
||||
extern int composite_dev_prepare(struct usb_composite_driver *composite,
|
||||
struct usb_composite_dev *cdev);
|
||||
|
|
|
|||
|
|
@ -30,4 +30,15 @@
|
|||
descriptor */
|
||||
#define USB_QUIRK_DELAY_INIT 0x00000040
|
||||
|
||||
/*
|
||||
* For high speed and super speed interupt endpoints, the USB 2.0 and
|
||||
* USB 3.0 spec require the interval in microframes
|
||||
* (1 microframe = 125 microseconds) to be calculated as
|
||||
* interval = 2 ^ (bInterval-1).
|
||||
*
|
||||
* Devices with this quirk report their bInterval as the result of this
|
||||
* calculation instead of the exponent variable used in the calculation.
|
||||
*/
|
||||
#define USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL 0x00000080
|
||||
|
||||
#endif /* __LINUX_USB_QUIRKS_H */
|
||||
|
|
|
|||
|
|
@ -153,6 +153,9 @@ struct renesas_usbhs_driver_param {
|
|||
*/
|
||||
int pio_dma_border; /* default is 64byte */
|
||||
|
||||
u32 type;
|
||||
u32 enable_gpio;
|
||||
|
||||
/*
|
||||
* option:
|
||||
*/
|
||||
|
|
@ -160,6 +163,9 @@ struct renesas_usbhs_driver_param {
|
|||
u32 has_sudmac:1; /* for SUDMAC */
|
||||
};
|
||||
|
||||
#define USBHS_TYPE_R8A7790 1
|
||||
#define USBHS_TYPE_R8A7791 2
|
||||
|
||||
/*
|
||||
* option:
|
||||
*
|
||||
|
|
|
|||
199
include/linux/usb/usb338x.h
Normal file
199
include/linux/usb/usb338x.h
Normal file
|
|
@ -0,0 +1,199 @@
|
|||
/*
|
||||
* USB 338x super/high/full speed USB device controller.
|
||||
* Unlike many such controllers, this one talks PCI.
|
||||
*
|
||||
* Copyright (C) 2002 NetChip Technology, Inc. (http://www.netchip.com)
|
||||
* Copyright (C) 2003 David Brownell
|
||||
* Copyright (C) 2014 Ricardo Ribalda - Qtechnology/AS
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_USB_USB338X_H
|
||||
#define __LINUX_USB_USB338X_H
|
||||
|
||||
#include <linux/usb/net2280.h>
|
||||
|
||||
/*
|
||||
* Extra defined bits for net2280 registers
|
||||
*/
|
||||
#define SCRATCH 0x0b
|
||||
|
||||
#define DEFECT7374_FSM_FIELD 28
|
||||
#define SUPER_SPEED 8
|
||||
#define DMA_REQUEST_OUTSTANDING 5
|
||||
#define DMA_PAUSE_DONE_INTERRUPT 26
|
||||
#define SET_ISOCHRONOUS_DELAY 24
|
||||
#define SET_SEL 22
|
||||
#define SUPER_SPEED_MODE 8
|
||||
|
||||
/*ep_cfg*/
|
||||
#define MAX_BURST_SIZE 24
|
||||
#define EP_FIFO_BYTE_COUNT 16
|
||||
#define IN_ENDPOINT_ENABLE 14
|
||||
#define IN_ENDPOINT_TYPE 12
|
||||
#define OUT_ENDPOINT_ENABLE 10
|
||||
#define OUT_ENDPOINT_TYPE 8
|
||||
|
||||
struct usb338x_usb_ext_regs {
|
||||
u32 usbclass;
|
||||
#define DEVICE_PROTOCOL 16
|
||||
#define DEVICE_SUB_CLASS 8
|
||||
#define DEVICE_CLASS 0
|
||||
u32 ss_sel;
|
||||
#define U2_SYSTEM_EXIT_LATENCY 8
|
||||
#define U1_SYSTEM_EXIT_LATENCY 0
|
||||
u32 ss_del;
|
||||
#define U2_DEVICE_EXIT_LATENCY 8
|
||||
#define U1_DEVICE_EXIT_LATENCY 0
|
||||
u32 usb2lpm;
|
||||
#define USB_L1_LPM_HIRD 2
|
||||
#define USB_L1_LPM_REMOTE_WAKE 1
|
||||
#define USB_L1_LPM_SUPPORT 0
|
||||
u32 usb3belt;
|
||||
#define BELT_MULTIPLIER 10
|
||||
#define BEST_EFFORT_LATENCY_TOLERANCE 0
|
||||
u32 usbctl2;
|
||||
#define LTM_ENABLE 7
|
||||
#define U2_ENABLE 6
|
||||
#define U1_ENABLE 5
|
||||
#define FUNCTION_SUSPEND 4
|
||||
#define USB3_CORE_ENABLE 3
|
||||
#define USB2_CORE_ENABLE 2
|
||||
#define SERIAL_NUMBER_STRING_ENABLE 0
|
||||
u32 in_timeout;
|
||||
#define GPEP3_TIMEOUT 19
|
||||
#define GPEP2_TIMEOUT 18
|
||||
#define GPEP1_TIMEOUT 17
|
||||
#define GPEP0_TIMEOUT 16
|
||||
#define GPEP3_TIMEOUT_VALUE 13
|
||||
#define GPEP3_TIMEOUT_ENABLE 12
|
||||
#define GPEP2_TIMEOUT_VALUE 9
|
||||
#define GPEP2_TIMEOUT_ENABLE 8
|
||||
#define GPEP1_TIMEOUT_VALUE 5
|
||||
#define GPEP1_TIMEOUT_ENABLE 4
|
||||
#define GPEP0_TIMEOUT_VALUE 1
|
||||
#define GPEP0_TIMEOUT_ENABLE 0
|
||||
u32 isodelay;
|
||||
#define ISOCHRONOUS_DELAY 0
|
||||
} __packed;
|
||||
|
||||
struct usb338x_fifo_regs {
|
||||
/* offset 0x0500, 0x0520, 0x0540, 0x0560, 0x0580 */
|
||||
u32 ep_fifo_size_base;
|
||||
#define IN_FIFO_BASE_ADDRESS 22
|
||||
#define IN_FIFO_SIZE 16
|
||||
#define OUT_FIFO_BASE_ADDRESS 6
|
||||
#define OUT_FIFO_SIZE 0
|
||||
u32 ep_fifo_out_wrptr;
|
||||
u32 ep_fifo_out_rdptr;
|
||||
u32 ep_fifo_in_wrptr;
|
||||
u32 ep_fifo_in_rdptr;
|
||||
u32 unused[3];
|
||||
} __packed;
|
||||
|
||||
|
||||
/* Link layer */
|
||||
struct usb338x_ll_regs {
|
||||
/* offset 0x700 */
|
||||
u32 ll_ltssm_ctrl1;
|
||||
u32 ll_ltssm_ctrl2;
|
||||
u32 ll_ltssm_ctrl3;
|
||||
u32 unused[2];
|
||||
u32 ll_general_ctrl0;
|
||||
u32 ll_general_ctrl1;
|
||||
#define PM_U3_AUTO_EXIT 29
|
||||
#define PM_U2_AUTO_EXIT 28
|
||||
#define PM_U1_AUTO_EXIT 27
|
||||
#define PM_FORCE_U2_ENTRY 26
|
||||
#define PM_FORCE_U1_ENTRY 25
|
||||
#define PM_LGO_COLLISION_SEND_LAU 24
|
||||
#define PM_DIR_LINK_REJECT 23
|
||||
#define PM_FORCE_LINK_ACCEPT 22
|
||||
#define PM_DIR_ENTRY_U3 20
|
||||
#define PM_DIR_ENTRY_U2 19
|
||||
#define PM_DIR_ENTRY_U1 18
|
||||
#define PM_U2_ENABLE 17
|
||||
#define PM_U1_ENABLE 16
|
||||
#define SKP_THRESHOLD_ADJUST_FMW 8
|
||||
#define RESEND_DPP_ON_LRTY_FMW 7
|
||||
#define DL_BIT_VALUE_FMW 6
|
||||
#define FORCE_DL_BIT 5
|
||||
u32 ll_general_ctrl2;
|
||||
#define SELECT_INVERT_LANE_POLARITY 7
|
||||
#define FORCE_INVERT_LANE_POLARITY 6
|
||||
u32 ll_general_ctrl3;
|
||||
u32 ll_general_ctrl4;
|
||||
u32 ll_error_gen;
|
||||
} __packed;
|
||||
|
||||
struct usb338x_ll_lfps_regs {
|
||||
/* offset 0x748 */
|
||||
u32 ll_lfps_5;
|
||||
#define TIMER_LFPS_6US 16
|
||||
u32 ll_lfps_6;
|
||||
#define TIMER_LFPS_80US 0
|
||||
} __packed;
|
||||
|
||||
struct usb338x_ll_tsn_regs {
|
||||
/* offset 0x77C */
|
||||
u32 ll_tsn_counters_2;
|
||||
#define HOT_TX_NORESET_TS2 24
|
||||
u32 ll_tsn_counters_3;
|
||||
#define HOT_RX_RESET_TS2 0
|
||||
} __packed;
|
||||
|
||||
struct usb338x_ll_chi_regs {
|
||||
/* offset 0x79C */
|
||||
u32 ll_tsn_chicken_bit;
|
||||
#define RECOVERY_IDLE_TO_RECOVER_FMW 3
|
||||
} __packed;
|
||||
|
||||
/* protocol layer */
|
||||
struct usb338x_pl_regs {
|
||||
/* offset 0x800 */
|
||||
u32 pl_reg_1;
|
||||
u32 pl_reg_2;
|
||||
u32 pl_reg_3;
|
||||
u32 pl_reg_4;
|
||||
u32 pl_ep_ctrl;
|
||||
/* Protocol Layer Endpoint Control*/
|
||||
#define PL_EP_CTRL 0x810
|
||||
#define ENDPOINT_SELECT 0
|
||||
/* [4:0] */
|
||||
#define EP_INITIALIZED 16
|
||||
#define SEQUENCE_NUMBER_RESET 17
|
||||
#define CLEAR_ACK_ERROR_CODE 20
|
||||
u32 pl_reg_6;
|
||||
u32 pl_reg_7;
|
||||
u32 pl_reg_8;
|
||||
u32 pl_ep_status_1;
|
||||
/* Protocol Layer Endpoint Status 1*/
|
||||
#define PL_EP_STATUS_1 0x820
|
||||
#define STATE 16
|
||||
#define ACK_GOOD_NORMAL 0x11
|
||||
#define ACK_GOOD_MORE_ACKS_TO_COME 0x16
|
||||
u32 pl_ep_status_2;
|
||||
u32 pl_ep_status_3;
|
||||
/* Protocol Layer Endpoint Status 3*/
|
||||
#define PL_EP_STATUS_3 0x828
|
||||
#define SEQUENCE_NUMBER 0
|
||||
u32 pl_ep_status_4;
|
||||
/* Protocol Layer Endpoint Status 4*/
|
||||
#define PL_EP_STATUS_4 0x82c
|
||||
u32 pl_ep_cfg_4;
|
||||
/* Protocol Layer Endpoint Configuration 4*/
|
||||
#define PL_EP_CFG_4 0x830
|
||||
#define NON_CTRL_IN_TOLERATE_BAD_DIR 6
|
||||
} __packed;
|
||||
|
||||
#endif /* __LINUX_USB_USB338X_H */
|
||||
27
include/linux/usb/xhci_pdriver.h
Normal file
27
include/linux/usb/xhci_pdriver.h
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __USB_CORE_XHCI_PDRIVER_H
|
||||
#define __USB_CORE_XHCI_PDRIVER_H
|
||||
|
||||
/**
|
||||
* struct usb_xhci_pdata - platform_data for generic xhci platform driver
|
||||
*
|
||||
* @usb3_lpm_capable: determines if this xhci platform supports USB3
|
||||
* LPM capability
|
||||
*
|
||||
*/
|
||||
struct usb_xhci_pdata {
|
||||
unsigned usb3_lpm_capable:1;
|
||||
};
|
||||
|
||||
#endif /* __USB_CORE_XHCI_PDRIVER_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue