mirror of https://gitee.com/openkylin/linux.git
USB / PHY driver fixes for 5.10-rc6
Here are a few small USB and PHY driver fixes for 5.10-rc6. They include: - small PHY driver fixes to resolve reported issues - USB quirks added for "broken" devices - typec fixes for reported problems - USB gadget fixes for small issues Full details are in the shortlog, nothing major in here and all have been in linux-next with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCX8I/Zw8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ylW8wCfeC+naWV26DHdh8B/CR0Ku9pi3+IAn2VbIPYG r34bOIGwc4X5jbMBrLoz =31VX -----END PGP SIGNATURE----- Merge tag 'usb-5.10-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb Pull USB / PHY driver fixes from Greg KH: "Here are a few small USB and PHY driver fixes for 5.10-rc6. They include: - small PHY driver fixes to resolve reported issues - USB quirks added for "broken" devices - typec fixes for reported problems - USB gadget fixes for small issues Full details are in the shortlog, nothing major in here and all have been in linux-next with no reported issues" * tag 'usb-5.10-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: usb: typec: stusb160x: fix power-opmode property with typec-power-opmode USB: core: Change %pK for __user pointers to %px USB: core: Fix regression in Hercules audio card usb: gadget: Fix memleak in gadgetfs_fill_super usb: gadget: f_midi: Fix memleak in f_midi_alloc USB: quirks: Add USB_QUIRK_DISCONNECT_SUSPEND quirk for Lenovo A630Z TIO built-in usb-audio card usb: typec: qcom-pmic-typec: fix builtin build errors phy: mediatek: fix spelling mistake in Kconfig "veriosn" -> "version" phy: qualcomm: Fix 28 nm Hi-Speed USB PHY OF dependency phy: qualcomm: usb: Fix SuperSpeed PHY OF dependency phy: intel: PHY_INTEL_KEEMBAY_EMMC should depend on ARCH_KEEMBAY usb: cdns3: gadget: calculate TD_SIZE based on TD usb: cdns3: gadget: initialize link_trb as NULL phy: cpcap-usb: Use IRQF_ONESHOT phy: qcom-qmp: Initialize another pointer to NULL phy: tegra: xusb: Fix dangling pointer on probe failure phy: usb: Fix incorrect clearing of tca_drv_sel bit in SETUP reg for 7211
This commit is contained in:
commit
67f34fa889
|
@ -270,11 +270,6 @@ static void usb_init_common_7211b0(struct brcm_usb_init_params *params)
|
|||
reg |= params->mode << USB_PHY_UTMI_CTL_1_PHY_MODE_SHIFT;
|
||||
brcm_usb_writel(reg, usb_phy + USB_PHY_UTMI_CTL_1);
|
||||
|
||||
/* Fix the incorrect default */
|
||||
reg = brcm_usb_readl(ctrl + USB_CTRL_SETUP);
|
||||
reg &= ~USB_CTRL_SETUP_tca_drv_sel_MASK;
|
||||
brcm_usb_writel(reg, ctrl + USB_CTRL_SETUP);
|
||||
|
||||
usb_init_common(params);
|
||||
|
||||
/*
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
config PHY_INTEL_KEEMBAY_EMMC
|
||||
tristate "Intel Keem Bay EMMC PHY driver"
|
||||
depends on (OF && ARM64) || COMPILE_TEST
|
||||
depends on ARCH_KEEMBAY || COMPILE_TEST
|
||||
depends on HAS_IOMEM
|
||||
select GENERIC_PHY
|
||||
select REGMAP_MMIO
|
||||
|
|
|
@ -12,7 +12,7 @@ config PHY_MTK_TPHY
|
|||
it supports multiple usb2.0, usb3.0 ports, PCIe and
|
||||
SATA, and meanwhile supports two version T-PHY which have
|
||||
different banks layout, the T-PHY with shared banks between
|
||||
multi-ports is first version, otherwise is second veriosn,
|
||||
multi-ports is first version, otherwise is second version,
|
||||
so you can easily distinguish them by banks layout.
|
||||
|
||||
config PHY_MTK_UFS
|
||||
|
|
|
@ -364,7 +364,8 @@ static int cpcap_usb_init_irq(struct platform_device *pdev,
|
|||
|
||||
error = devm_request_threaded_irq(ddata->dev, irq, NULL,
|
||||
cpcap_phy_irq_thread,
|
||||
IRQF_SHARED,
|
||||
IRQF_SHARED |
|
||||
IRQF_ONESHOT,
|
||||
name, ddata);
|
||||
if (error) {
|
||||
dev_err(ddata->dev, "could not get irq %s: %i\n",
|
||||
|
|
|
@ -87,7 +87,7 @@ config PHY_QCOM_USB_HSIC
|
|||
|
||||
config PHY_QCOM_USB_HS_28NM
|
||||
tristate "Qualcomm 28nm High-Speed PHY"
|
||||
depends on ARCH_QCOM || COMPILE_TEST
|
||||
depends on OF && (ARCH_QCOM || COMPILE_TEST)
|
||||
depends on EXTCON || !EXTCON # if EXTCON=m, this cannot be built-in
|
||||
select GENERIC_PHY
|
||||
help
|
||||
|
@ -98,7 +98,7 @@ config PHY_QCOM_USB_HS_28NM
|
|||
|
||||
config PHY_QCOM_USB_SS
|
||||
tristate "Qualcomm USB Super-Speed PHY driver"
|
||||
depends on ARCH_QCOM || COMPILE_TEST
|
||||
depends on OF && (ARCH_QCOM || COMPILE_TEST)
|
||||
depends on EXTCON || !EXTCON # if EXTCON=m, this cannot be built-in
|
||||
select GENERIC_PHY
|
||||
help
|
||||
|
|
|
@ -3926,7 +3926,7 @@ static int qcom_qmp_phy_probe(struct platform_device *pdev)
|
|||
struct phy_provider *phy_provider;
|
||||
void __iomem *serdes;
|
||||
void __iomem *usb_serdes;
|
||||
void __iomem *dp_serdes;
|
||||
void __iomem *dp_serdes = NULL;
|
||||
const struct qmp_phy_combo_cfg *combo_cfg = NULL;
|
||||
const struct qmp_phy_cfg *cfg = NULL;
|
||||
const struct qmp_phy_cfg *usb_cfg = NULL;
|
||||
|
|
|
@ -1242,6 +1242,7 @@ static int tegra_xusb_padctl_probe(struct platform_device *pdev)
|
|||
reset:
|
||||
reset_control_assert(padctl->rst);
|
||||
remove:
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
soc->ops->remove(padctl);
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -1114,7 +1114,7 @@ static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep,
|
|||
struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
|
||||
struct cdns3_request *priv_req;
|
||||
struct cdns3_trb *trb;
|
||||
struct cdns3_trb *link_trb;
|
||||
struct cdns3_trb *link_trb = NULL;
|
||||
dma_addr_t trb_dma;
|
||||
u32 togle_pcs = 1;
|
||||
int sg_iter = 0;
|
||||
|
@ -1193,10 +1193,20 @@ static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep,
|
|||
|
||||
/* set incorrect Cycle Bit for first trb*/
|
||||
control = priv_ep->pcs ? 0 : TRB_CYCLE;
|
||||
trb->length = 0;
|
||||
if (priv_dev->dev_ver >= DEV_VER_V2) {
|
||||
u16 td_size;
|
||||
|
||||
td_size = DIV_ROUND_UP(request->length,
|
||||
priv_ep->endpoint.maxpacket);
|
||||
if (priv_dev->gadget.speed == USB_SPEED_SUPER)
|
||||
trb->length = TRB_TDL_SS_SIZE(td_size);
|
||||
else
|
||||
control |= TRB_TDL_HS_SIZE(td_size);
|
||||
}
|
||||
|
||||
do {
|
||||
u32 length;
|
||||
u16 td_size = 0;
|
||||
|
||||
/* fill TRB */
|
||||
control |= TRB_TYPE(TRB_NORMAL);
|
||||
|
@ -1208,20 +1218,12 @@ static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep,
|
|||
length = request->length;
|
||||
}
|
||||
|
||||
if (likely(priv_dev->dev_ver >= DEV_VER_V2))
|
||||
td_size = DIV_ROUND_UP(length,
|
||||
priv_ep->endpoint.maxpacket);
|
||||
else if (priv_ep->flags & EP_TDLCHK_EN)
|
||||
if (priv_ep->flags & EP_TDLCHK_EN)
|
||||
total_tdl += DIV_ROUND_UP(length,
|
||||
priv_ep->endpoint.maxpacket);
|
||||
|
||||
trb->length = cpu_to_le32(TRB_BURST_LEN(priv_ep->trb_burst_size) |
|
||||
trb->length |= cpu_to_le32(TRB_BURST_LEN(priv_ep->trb_burst_size) |
|
||||
TRB_LEN(length));
|
||||
if (priv_dev->gadget.speed == USB_SPEED_SUPER)
|
||||
trb->length |= cpu_to_le32(TRB_TDL_SS_SIZE(td_size));
|
||||
else
|
||||
control |= TRB_TDL_HS_SIZE(td_size);
|
||||
|
||||
pcs = priv_ep->pcs ? TRB_CYCLE : 0;
|
||||
|
||||
/*
|
||||
|
|
|
@ -482,11 +482,11 @@ static void snoop_urb(struct usb_device *udev,
|
|||
|
||||
if (userurb) { /* Async */
|
||||
if (when == SUBMIT)
|
||||
dev_info(&udev->dev, "userurb %pK, ep%d %s-%s, "
|
||||
dev_info(&udev->dev, "userurb %px, ep%d %s-%s, "
|
||||
"length %u\n",
|
||||
userurb, ep, t, d, length);
|
||||
else
|
||||
dev_info(&udev->dev, "userurb %pK, ep%d %s-%s, "
|
||||
dev_info(&udev->dev, "userurb %px, ep%d %s-%s, "
|
||||
"actual_length %u status %d\n",
|
||||
userurb, ep, t, d, length,
|
||||
timeout_or_status);
|
||||
|
@ -1997,7 +1997,7 @@ static int proc_reapurb(struct usb_dev_state *ps, void __user *arg)
|
|||
if (as) {
|
||||
int retval;
|
||||
|
||||
snoop(&ps->dev->dev, "reap %pK\n", as->userurb);
|
||||
snoop(&ps->dev->dev, "reap %px\n", as->userurb);
|
||||
retval = processcompl(as, (void __user * __user *)arg);
|
||||
free_async(as);
|
||||
return retval;
|
||||
|
@ -2014,7 +2014,7 @@ static int proc_reapurbnonblock(struct usb_dev_state *ps, void __user *arg)
|
|||
|
||||
as = async_getcompleted(ps);
|
||||
if (as) {
|
||||
snoop(&ps->dev->dev, "reap %pK\n", as->userurb);
|
||||
snoop(&ps->dev->dev, "reap %px\n", as->userurb);
|
||||
retval = processcompl(as, (void __user * __user *)arg);
|
||||
free_async(as);
|
||||
} else {
|
||||
|
@ -2142,7 +2142,7 @@ static int proc_reapurb_compat(struct usb_dev_state *ps, void __user *arg)
|
|||
if (as) {
|
||||
int retval;
|
||||
|
||||
snoop(&ps->dev->dev, "reap %pK\n", as->userurb);
|
||||
snoop(&ps->dev->dev, "reap %px\n", as->userurb);
|
||||
retval = processcompl_compat(as, (void __user * __user *)arg);
|
||||
free_async(as);
|
||||
return retval;
|
||||
|
@ -2159,7 +2159,7 @@ static int proc_reapurbnonblock_compat(struct usb_dev_state *ps, void __user *ar
|
|||
|
||||
as = async_getcompleted(ps);
|
||||
if (as) {
|
||||
snoop(&ps->dev->dev, "reap %pK\n", as->userurb);
|
||||
snoop(&ps->dev->dev, "reap %px\n", as->userurb);
|
||||
retval = processcompl_compat(as, (void __user * __user *)arg);
|
||||
free_async(as);
|
||||
} else {
|
||||
|
@ -2624,7 +2624,7 @@ static long usbdev_do_ioctl(struct file *file, unsigned int cmd,
|
|||
#endif
|
||||
|
||||
case USBDEVFS_DISCARDURB:
|
||||
snoop(&dev->dev, "%s: DISCARDURB %pK\n", __func__, p);
|
||||
snoop(&dev->dev, "%s: DISCARDURB %px\n", __func__, p);
|
||||
ret = proc_unlinkurb(ps, p);
|
||||
break;
|
||||
|
||||
|
|
|
@ -348,6 +348,10 @@ static const struct usb_device_id usb_quirk_list[] = {
|
|||
/* Guillemot Webcam Hercules Dualpix Exchange*/
|
||||
{ USB_DEVICE(0x06f8, 0x3005), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||
|
||||
/* Guillemot Hercules DJ Console audio card (BZ 208357) */
|
||||
{ USB_DEVICE(0x06f8, 0xb000), .driver_info =
|
||||
USB_QUIRK_ENDPOINT_IGNORE },
|
||||
|
||||
/* Midiman M-Audio Keystation 88es */
|
||||
{ USB_DEVICE(0x0763, 0x0192), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||
|
||||
|
@ -421,6 +425,10 @@ static const struct usb_device_id usb_quirk_list[] = {
|
|||
{ USB_DEVICE(0x1532, 0x0116), .driver_info =
|
||||
USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL },
|
||||
|
||||
/* Lenovo ThinkCenter A630Z TI024Gen3 usb-audio */
|
||||
{ USB_DEVICE(0x17ef, 0xa012), .driver_info =
|
||||
USB_QUIRK_DISCONNECT_SUSPEND },
|
||||
|
||||
/* BUILDWIN Photo Frame */
|
||||
{ USB_DEVICE(0x1908, 0x1315), .driver_info =
|
||||
USB_QUIRK_HONOR_BNUMINTERFACES },
|
||||
|
@ -521,6 +529,8 @@ static const struct usb_device_id usb_amd_resume_quirk_list[] = {
|
|||
* Matched for devices with USB_QUIRK_ENDPOINT_IGNORE.
|
||||
*/
|
||||
static const struct usb_device_id usb_endpoint_ignore[] = {
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(0x06f8, 0xb000, 5), .driver_info = 0x01 },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(0x06f8, 0xb000, 5), .driver_info = 0x81 },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(0x0926, 0x0202, 1), .driver_info = 0x85 },
|
||||
{ USB_DEVICE_INTERFACE_NUMBER(0x0926, 0x0208, 1), .driver_info = 0x85 },
|
||||
{ }
|
||||
|
|
|
@ -1315,7 +1315,7 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi)
|
|||
midi->id = kstrdup(opts->id, GFP_KERNEL);
|
||||
if (opts->id && !midi->id) {
|
||||
status = -ENOMEM;
|
||||
goto setup_fail;
|
||||
goto midi_free;
|
||||
}
|
||||
midi->in_ports = opts->in_ports;
|
||||
midi->out_ports = opts->out_ports;
|
||||
|
@ -1327,7 +1327,7 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi)
|
|||
|
||||
status = kfifo_alloc(&midi->in_req_fifo, midi->qlen, GFP_KERNEL);
|
||||
if (status)
|
||||
goto setup_fail;
|
||||
goto midi_free;
|
||||
|
||||
spin_lock_init(&midi->transmit_lock);
|
||||
|
||||
|
@ -1343,9 +1343,13 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi)
|
|||
|
||||
return &midi->func;
|
||||
|
||||
midi_free:
|
||||
if (midi)
|
||||
kfree(midi->id);
|
||||
kfree(midi);
|
||||
setup_fail:
|
||||
mutex_unlock(&opts->lock);
|
||||
kfree(midi);
|
||||
|
||||
return ERR_PTR(status);
|
||||
}
|
||||
|
||||
|
|
|
@ -2039,6 +2039,9 @@ gadgetfs_fill_super (struct super_block *sb, struct fs_context *fc)
|
|||
return 0;
|
||||
|
||||
Enomem:
|
||||
kfree(CHIP);
|
||||
CHIP = NULL;
|
||||
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
|
@ -88,6 +88,7 @@ config TYPEC_STUSB160X
|
|||
config TYPEC_QCOM_PMIC
|
||||
tristate "Qualcomm PMIC USB Type-C driver"
|
||||
depends on ARCH_QCOM || COMPILE_TEST
|
||||
depends on USB_ROLE_SWITCH || !USB_ROLE_SWITCH
|
||||
help
|
||||
Driver for supporting role switch over the Qualcomm PMIC. This will
|
||||
handle the USB Type-C role and orientation detection reported by the
|
||||
|
|
|
@ -562,7 +562,7 @@ static int stusb160x_get_fw_caps(struct stusb160x *chip,
|
|||
* Supported power operation mode can be configured through device tree
|
||||
* else it is read from chip registers in stusb160x_get_caps.
|
||||
*/
|
||||
ret = fwnode_property_read_string(fwnode, "power-opmode", &cap_str);
|
||||
ret = fwnode_property_read_string(fwnode, "typec-power-opmode", &cap_str);
|
||||
if (!ret) {
|
||||
ret = typec_find_pwr_opmode(cap_str);
|
||||
/* Power delivery not yet supported */
|
||||
|
|
Loading…
Reference in New Issue