Merge "usb: dwc3: dwc3-msm-core: Avoid reading USB repeater version on CONNDONE"
This commit is contained in:
commit
d3fd35877d
@ -637,6 +637,8 @@ struct dwc3_msm {
|
||||
bool qos_rec_start;
|
||||
u8 qos_rec_index;
|
||||
u32 qos_rec_irq[PM_QOS_REC_MAX_RECORD];
|
||||
|
||||
int repeater_rev;
|
||||
};
|
||||
|
||||
#define USB_HSPHY_3P3_VOL_MIN 3050000 /* uV */
|
||||
@ -3288,21 +3290,6 @@ static void mdwc3_update_u1u2_value(struct dwc3 *dwc)
|
||||
dwc->dis_u2_entry_quirk ? "disabled" : "enabled");
|
||||
}
|
||||
|
||||
int dwc3_msm_get_repeater_ver(struct dwc3_msm *mdwc)
|
||||
{
|
||||
struct usb_repeater *ur = NULL;
|
||||
int ver;
|
||||
|
||||
ur = devm_usb_get_repeater_by_phandle(mdwc->hs_phy->dev, "usb-repeater", 0);
|
||||
if (IS_ERR(ur))
|
||||
return -ENODEV;
|
||||
|
||||
ver = usb_repeater_get_version(ur);
|
||||
usb_put_repeater(ur);
|
||||
|
||||
return ver;
|
||||
}
|
||||
|
||||
static void handle_gsi_buffer_setup_event(struct dwc3 *dwc)
|
||||
{
|
||||
struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
|
||||
@ -3469,7 +3456,7 @@ void dwc3_msm_notify_event(struct dwc3 *dwc,
|
||||
* silicon. Limit the controller PHY soft reset to the
|
||||
* version which requires it.
|
||||
*/
|
||||
if (dwc3_msm_get_repeater_ver(mdwc) == USB_REPEATER_V1) {
|
||||
if (mdwc->repeater_rev == USB_REPEATER_V1) {
|
||||
udelay(20);
|
||||
/*
|
||||
* Perform usb2 phy soft reset as given
|
||||
@ -5848,6 +5835,21 @@ static int dwc3_msm_core_init(struct dwc3_msm *mdwc)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int dwc3_msm_get_repeater_ver(struct dwc3_msm *mdwc)
|
||||
{
|
||||
struct usb_repeater *ur = NULL;
|
||||
|
||||
ur = usb_get_repeater_by_phandle(mdwc->hs_phy->dev, "usb-repeater", 0);
|
||||
if (IS_ERR(ur)) {
|
||||
pr_err("unable to get repeater %ld\n", PTR_ERR(ur));
|
||||
return PTR_ERR(ur);
|
||||
}
|
||||
|
||||
mdwc->repeater_rev = usb_repeater_get_version(ur);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dwc3_msm_parse_core_params(struct dwc3_msm *mdwc, struct device_node *dwc3_node)
|
||||
{
|
||||
struct device_node *phy_node;
|
||||
@ -5883,6 +5885,9 @@ static int dwc3_msm_parse_core_params(struct dwc3_msm *mdwc, struct device_node
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Populate USB repeater version for TD 9.23 WA */
|
||||
dwc3_msm_get_repeater_ver(mdwc);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2021-2022, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2023, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
#include <linux/device.h>
|
||||
#include <linux/err.h>
|
||||
@ -103,6 +103,43 @@ struct usb_repeater *devm_usb_get_repeater_by_phandle(struct device *dev,
|
||||
}
|
||||
EXPORT_SYMBOL(devm_usb_get_repeater_by_phandle);
|
||||
|
||||
struct usb_repeater *usb_get_repeater_by_node(struct device_node *node)
|
||||
{
|
||||
struct usb_repeater *r = ERR_PTR(-ENODEV);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&repeater_lock, flags);
|
||||
r = of_usb_find_repeater(node);
|
||||
spin_unlock_irqrestore(&repeater_lock, flags);
|
||||
|
||||
return r;
|
||||
}
|
||||
EXPORT_SYMBOL(usb_get_repeater_by_node);
|
||||
|
||||
struct usb_repeater *usb_get_repeater_by_phandle(struct device *dev,
|
||||
const char *phandle, u8 index)
|
||||
{
|
||||
struct device_node *node;
|
||||
struct usb_repeater *r;
|
||||
|
||||
if (!dev->of_node) {
|
||||
dev_dbg(dev, "device does not have a device node entry\n");
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
node = of_parse_phandle(dev->of_node, phandle, index);
|
||||
if (!node) {
|
||||
dev_dbg(dev, "failed to get %s phandle in %pOF node\n", phandle,
|
||||
dev->of_node);
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
r = usb_get_repeater_by_node(node);
|
||||
of_node_put(node);
|
||||
return r;
|
||||
}
|
||||
EXPORT_SYMBOL(usb_get_repeater_by_phandle);
|
||||
|
||||
/**
|
||||
* usb_add_repeater_dev - Add repeater device
|
||||
* @r: repeater device available
|
||||
|
@ -28,6 +28,9 @@ struct usb_repeater *devm_usb_get_repeater_by_phandle(struct device *dev,
|
||||
const char *phandle, u8 index);
|
||||
struct usb_repeater *devm_usb_get_repeater_by_node(struct device *dev,
|
||||
struct device_node *node);
|
||||
struct usb_repeater *usb_get_repeater_by_phandle(struct device *dev,
|
||||
const char *phandle, u8 index);
|
||||
struct usb_repeater *usb_get_repeater_by_node(struct device_node *node);
|
||||
void usb_put_repeater(struct usb_repeater *r);
|
||||
int usb_add_repeater_dev(struct usb_repeater *r);
|
||||
void usb_remove_repeater_dev(struct usb_repeater *r);
|
||||
@ -40,6 +43,14 @@ static inline struct usb_repeater *devm_usb_get_repeater_by_node(
|
||||
struct device *dev, struct device_node *node)
|
||||
{ return ERR_PTR(-ENXIO); }
|
||||
|
||||
static inline struct usb_repeater *usb_get_repeater_by_phandle(
|
||||
struct device *d, const char *phandle, u8 index)
|
||||
{ return ERR_PTR(-ENXIO); }
|
||||
|
||||
static inline struct usb_repeater *usb_get_repeater_by_node(
|
||||
struct device_node *node)
|
||||
{ return ERR_PTR(-ENXIO); }
|
||||
|
||||
static inline void usb_put_repeater(struct usb_repeater *r)
|
||||
{ }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user