Skip to content

Commit 1258450

Browse files
Chunfeng Yungregkh
authored andcommitted
usb: mtu3: introduce a funtion to check maximum speed
The max_speed got from DTS may be not supported by the hardware, so need check it, and assign a proper default value. And make it clear by introducing a funtion. Signed-off-by: Chunfeng Yun <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent b7d5c3c commit 1258450

File tree

1 file changed

+28
-20
lines changed

1 file changed

+28
-20
lines changed

drivers/usb/mtu3/mtu3_core.c

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -573,9 +573,6 @@ static void mtu3_set_speed(struct mtu3 *mtu)
573573
{
574574
void __iomem *mbase = mtu->mac_base;
575575

576-
if (!mtu->is_u3_ip && (mtu->max_speed > USB_SPEED_HIGH))
577-
mtu->max_speed = USB_SPEED_HIGH;
578-
579576
if (mtu->max_speed == USB_SPEED_FULL) {
580577
/* disable U3 SS function */
581578
mtu3_clrbits(mbase, U3D_USB3_CONFIG, USB3_EN);
@@ -761,6 +758,32 @@ static irqreturn_t mtu3_irq(int irq, void *data)
761758
return IRQ_HANDLED;
762759
}
763760

761+
static void mtu3_check_params(struct mtu3 *mtu)
762+
{
763+
/* check the max_speed parameter */
764+
switch (mtu->max_speed) {
765+
case USB_SPEED_FULL:
766+
case USB_SPEED_HIGH:
767+
case USB_SPEED_SUPER:
768+
case USB_SPEED_SUPER_PLUS:
769+
break;
770+
default:
771+
dev_err(mtu->dev, "invalid max_speed: %s\n",
772+
usb_speed_string(mtu->max_speed));
773+
fallthrough;
774+
case USB_SPEED_UNKNOWN:
775+
/* default as SSP */
776+
mtu->max_speed = USB_SPEED_SUPER_PLUS;
777+
break;
778+
}
779+
780+
if (!mtu->is_u3_ip && (mtu->max_speed > USB_SPEED_HIGH))
781+
mtu->max_speed = USB_SPEED_HIGH;
782+
783+
dev_info(mtu->dev, "max_speed: %s\n",
784+
usb_speed_string(mtu->max_speed));
785+
}
786+
764787
static int mtu3_hw_init(struct mtu3 *mtu)
765788
{
766789
u32 value;
@@ -776,6 +799,8 @@ static int mtu3_hw_init(struct mtu3 *mtu)
776799
dev_info(mtu->dev, "IP version 0x%x(%s IP)\n", mtu->hw_version,
777800
mtu->is_u3_ip ? "U3" : "U2");
778801

802+
mtu3_check_params(mtu);
803+
779804
mtu3_device_reset(mtu);
780805

781806
ret = mtu3_device_enable(mtu);
@@ -855,23 +880,6 @@ int ssusb_gadget_init(struct ssusb_mtk *ssusb)
855880
mtu->ssusb = ssusb;
856881
mtu->max_speed = usb_get_maximum_speed(dev);
857882

858-
/* check the max_speed parameter */
859-
switch (mtu->max_speed) {
860-
case USB_SPEED_FULL:
861-
case USB_SPEED_HIGH:
862-
case USB_SPEED_SUPER:
863-
case USB_SPEED_SUPER_PLUS:
864-
break;
865-
default:
866-
dev_err(dev, "invalid max_speed: %s\n",
867-
usb_speed_string(mtu->max_speed));
868-
/* fall through */
869-
case USB_SPEED_UNKNOWN:
870-
/* default as SSP */
871-
mtu->max_speed = USB_SPEED_SUPER_PLUS;
872-
break;
873-
}
874-
875883
dev_dbg(dev, "mac_base=0x%p, ippc_base=0x%p\n",
876884
mtu->mac_base, mtu->ippc_base);
877885

0 commit comments

Comments
 (0)