// SPDX-License-Identifier: GPL-2.0+ /* * Setup platform devices needed by the Freescale multi-port host * and/or dual-role USB controller modules based on the description * in flat device tree.
*/
/* * returns 1 for usb controller version 1.6 * returns 2 for usb controller version 2.2 * returns 3 for usb controller version 2.4 * returns 4 for usb controller version 2.5 * returns 0 otherwise
*/ if (of_device_is_compatible(np, "fsl-usb2-dr")) { if (of_device_is_compatible(np, "fsl-usb2-dr-v1.6"))
ver = FSL_USB_VER_1_6; elseif (of_device_is_compatible(np, "fsl-usb2-dr-v2.2"))
ver = FSL_USB_VER_2_2; elseif (of_device_is_compatible(np, "fsl-usb2-dr-v2.4"))
ver = FSL_USB_VER_2_4; elseif (of_device_is_compatible(np, "fsl-usb2-dr-v2.5"))
ver = FSL_USB_VER_2_5; else/* for previous controller versions */
ver = FSL_USB_VER_OLD;
if (ver > FSL_USB_VER_NONE) return ver;
}
if (of_device_is_compatible(np, "fsl,mpc5121-usb2-dr")) return FSL_USB_VER_OLD;
if (of_device_is_compatible(np, "fsl-usb2-mph")) { if (of_device_is_compatible(np, "fsl-usb2-mph-v1.6"))
ver = FSL_USB_VER_1_6; elseif (of_device_is_compatible(np, "fsl-usb2-mph-v2.2"))
ver = FSL_USB_VER_2_2; elseif (of_device_is_compatible(np, "fsl-usb2-mph-v2.4"))
ver = FSL_USB_VER_2_4; elseif (of_device_is_compatible(np, "fsl-usb2-mph-v2.5"))
ver = FSL_USB_VER_2_5; else/* for previous controller versions */
ver = FSL_USB_VER_OLD;
}
/* Activate Erratum by reading property in device tree */
pdata->has_fsl_erratum_a007792 =
of_property_read_bool(np, "fsl,usb-erratum-a007792");
pdata->has_fsl_erratum_a005275 =
of_property_read_bool(np, "fsl,usb-erratum-a005275");
pdata->has_fsl_erratum_a005697 =
of_property_read_bool(np, "fsl,usb_erratum-a005697");
pdata->has_fsl_erratum_a006918 =
of_property_read_bool(np, "fsl,usb_erratum-a006918");
pdata->has_fsl_erratum_14 =
of_property_read_bool(np, "fsl,usb_erratum-14");
/* * Determine whether phy_clk_valid needs to be checked * by reading property in device tree
*/
pdata->check_phy_clk_valid =
of_property_read_bool(np, "phy-clk-valid");
if (pdata->have_sysif_regs) { if (pdata->controller_ver == FSL_USB_VER_NONE) {
dev_warn(&ofdev->dev, "Could not get controller version\n"); return -ENODEV;
}
}
for (i = 0; i < ARRAY_SIZE(dev_data->drivers); i++) { if (!dev_data->drivers[i]) continue;
usb_dev = fsl_usb2_device_register(ofdev, pdata,
dev_data->drivers[i], idx); if (IS_ERR(usb_dev)) {
dev_err(&ofdev->dev, "Can't register usb device\n"); return PTR_ERR(usb_dev);
}
}
idx++; return 0;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.