dwc3: Supply device properties via driver data
Subsystems (2)
PATCH v2 2/3 dwc3: Supply device properties via driver data
For now all PCI enumerated dwc3 devices require some properties to be present. This allows us to unconditionally append them and supply via driver_data.
No functional change intended.
Signed-off-by Andy Shevchenko <[email protected]>
--- drivers/usb/dwc3/dwc3-pci.c | 145 +++++++++++++++--------------------- 1 file changed, 61 insertions(+), 84 deletions(-)
drivers/usb/dwc3/dwc3-pci.c +61 -84
@@ -68,52 +68,45 @@ static const struct acpi_gpio_mapping acpi_dwc3_byt_gpios[] = { { }, }; +static const struct property_entry dwc3_pci_synopsys_properties[] = { +PROPERTY_ENTRY_BOOL ("snps,usb3_lpm_capable" ), +PROPERTY_ENTRY_BOOL ("snps,has-lpm-erratum" ), +PROPERTY_ENTRY_BOOL ("snps,dis_enblslpm_quirk" ), +PROPERTY_ENTRY_BOOL ("linux,sysdev_is_parent" ), + {} +}; + +static const struct property_entry dwc3_pci_intel_properties[] = { +PROPERTY_ENTRY_STRING ("dr_mode" ,"peripheral" ), +PROPERTY_ENTRY_BOOL ("linux,sysdev_is_parent" ), + {} +}; + +static const struct property_entry dwc3_pci_amd_properties[] = { +PROPERTY_ENTRY_BOOL ("snps,has-lpm-erratum" ), +PROPERTY_ENTRY_U8 ("snps,lpm-nyet-threshold" ,0xf ), +PROPERTY_ENTRY_BOOL ("snps,u2exit_lfps_quirk" ), +PROPERTY_ENTRY_BOOL ("snps,u2ss_inp3_quirk" ), +PROPERTY_ENTRY_BOOL ("snps,req_p1p2p3_quirk" ), +PROPERTY_ENTRY_BOOL ("snps,del_p1p2p3_quirk" ), +PROPERTY_ENTRY_BOOL ("snps,del_phy_power_chg_quirk" ), +PROPERTY_ENTRY_BOOL ("snps,lfps_filter_quirk" ), +PROPERTY_ENTRY_BOOL ("snps,rx_detect_poll_quirk" ), +PROPERTY_ENTRY_BOOL ("snps,tx_de_emphasis_quirk" ), +PROPERTY_ENTRY_U8 ("snps,tx_de_emphasis" ,1 ), +/* FIXME these quirks should be removed when AMD NL tapes out */ +PROPERTY_ENTRY_BOOL ("snps,disable_scramble_quirk" ), +PROPERTY_ENTRY_BOOL ("snps,dis_u3_susphy_quirk" ), +PROPERTY_ENTRY_BOOL ("snps,dis_u2_susphy_quirk" ), +PROPERTY_ENTRY_BOOL ("linux,sysdev_is_parent" ), + {} +}; +static int dwc3_pci_quirks (struct dwc3_pci *dwc) { -struct platform_device *dwc3 = dwc->dwc3;struct pci_dev *pdev = dwc->pci; -if (pdev->vendor ==PCI_VENDOR_ID_AMD && - pdev->device ==PCI_DEVICE_ID_AMD_NL_USB ) { -struct property_entry properties[] = { -PROPERTY_ENTRY_BOOL ("snps,has-lpm-erratum" ), -PROPERTY_ENTRY_U8 ("snps,lpm-nyet-threshold" ,0xf ), -PROPERTY_ENTRY_BOOL ("snps,u2exit_lfps_quirk" ), -PROPERTY_ENTRY_BOOL ("snps,u2ss_inp3_quirk" ), -PROPERTY_ENTRY_BOOL ("snps,req_p1p2p3_quirk" ), -PROPERTY_ENTRY_BOOL ("snps,del_p1p2p3_quirk" ), -PROPERTY_ENTRY_BOOL ("snps,del_phy_power_chg_quirk" ), -PROPERTY_ENTRY_BOOL ("snps,lfps_filter_quirk" ), -PROPERTY_ENTRY_BOOL ("snps,rx_detect_poll_quirk" ), -PROPERTY_ENTRY_BOOL ("snps,tx_de_emphasis_quirk" ), -PROPERTY_ENTRY_U8 ("snps,tx_de_emphasis" ,1 ), -/* -* FIXME these quirks should be removed when AMD NL -* tapes out -*/ -PROPERTY_ENTRY_BOOL ("snps,disable_scramble_quirk" ), -PROPERTY_ENTRY_BOOL ("snps,dis_u3_susphy_quirk" ), -PROPERTY_ENTRY_BOOL ("snps,dis_u2_susphy_quirk" ), -PROPERTY_ENTRY_BOOL ("linux,sysdev_is_parent" ), - { }, - }; - -return platform_device_add_properties (dwc3, properties); - } -if (pdev->vendor ==PCI_VENDOR_ID_INTEL ) { -int ret; - -struct property_entry properties[] = { -PROPERTY_ENTRY_STRING ("dr_mode" ,"peripheral" ), -PROPERTY_ENTRY_BOOL ("linux,sysdev_is_parent" ), - { } - }; - - ret =platform_device_add_properties (dwc3, properties); -if (ret <0 ) -return ret; -if (pdev->device ==PCI_DEVICE_ID_INTEL_BXT || pdev->device ==PCI_DEVICE_ID_INTEL_BXT_M ) {guid_parse (PCI_INTEL_BXT_DSM_GUID , &dwc->guid);
@@ -122,6 +115,7 @@ static int dwc3_pci_quirks(struct dwc3_pci *dwc)if (pdev->device ==PCI_DEVICE_ID_INTEL_BYT ) {struct gpio_desc *gpio; +int ret; ret =devm_acpi_dev_add_driver_gpios (&pdev->dev, acpi_dwc3_byt_gpios);
@@ -152,21 +146,6 @@ static int dwc3_pci_quirks(struct dwc3_pci *dwc) } } -if (pdev->vendor ==PCI_VENDOR_ID_SYNOPSYS && - (pdev->device ==PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3 || - pdev->device ==PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3_AXI || - pdev->device ==PCI_DEVICE_ID_SYNOPSYS_HAPSUSB31 )) { -struct property_entry properties[] = { -PROPERTY_ENTRY_BOOL ("snps,usb3_lpm_capable" ), -PROPERTY_ENTRY_BOOL ("snps,has-lpm-erratum" ), -PROPERTY_ENTRY_BOOL ("snps,dis_enblslpm_quirk" ), -PROPERTY_ENTRY_BOOL ("linux,sysdev_is_parent" ), - { }, - }; - -return platform_device_add_properties (dwc3, properties); - } -return 0 ; }
@@ -186,9 +165,9 @@ static void dwc3_pci_resume_work(struct work_struct *work) }#endif -static int dwc3_pci_probe (struct pci_dev *pci, -const struct pci_device_id *id) +static int dwc3_pci_probe (struct pci_dev *pci,const struct pci_device_id *id) { +struct property_entry *p = (struct property_entry *)id->driver_data;struct dwc3_pci *dwc;struct resource res[2 ];int ret;
@@ -231,6 +210,10 @@ static int dwc3_pci_probe(struct pci_dev *pci, dwc->dwc3->dev.parent = dev;ACPI_COMPANION_SET (&dwc->dwc3->dev,ACPI_COMPANION (dev)); + ret =platform_device_add_properties (dwc->dwc3, p); +if (ret <0 ) +return ret; + ret =dwc3_pci_quirks (dwc);if (ret) goto err;
@@ -266,33 +249,27 @@ static void dwc3_pci_remove(struct pci_dev *pci)platform_device_unregister (dwc->dwc3); } +#define DWC3_PCI_DEV (v, d, data) \ + { PCI_VDEVICE(v, PCI_DEVICE_ID_##d), (kernel_ulong_t)&data } +static const struct pci_device_id dwc3_pci_id_table[] = { - { -PCI_DEVICE (PCI_VENDOR_ID_SYNOPSYS , -PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3 ), - }, - { -PCI_DEVICE (PCI_VENDOR_ID_SYNOPSYS , -PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3_AXI ), - }, - { -PCI_DEVICE (PCI_VENDOR_ID_SYNOPSYS , -PCI_DEVICE_ID_SYNOPSYS_HAPSUSB31 ), - }, - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_BSW ), }, - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_BYT ), }, - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_MRFLD ), }, - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_SPTLP ), }, - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_SPTH ), }, - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_BXT ), }, - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_BXT_M ), }, - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_APL ), }, - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_KBP ), }, - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_GLK ), }, - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_CNPLP ), }, - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_CNPH ), }, - {PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_ICLLP ), }, - {PCI_DEVICE (PCI_VENDOR_ID_AMD ,PCI_DEVICE_ID_AMD_NL_USB ), }, +DWC3_PCI_DEV (SYNOPSYS ,SYNOPSYS_HAPSUSB3 , dwc3_pci_synopsys_properties), +DWC3_PCI_DEV (SYNOPSYS ,SYNOPSYS_HAPSUSB3_AXI , dwc3_pci_synopsys_properties), +DWC3_PCI_DEV (SYNOPSYS ,SYNOPSYS_HAPSUSB31 , dwc3_pci_synopsys_properties), +DWC3_PCI_DEV (INTEL ,INTEL_BSW , dwc3_pci_intel_properties), +DWC3_PCI_DEV (INTEL ,INTEL_BYT , dwc3_pci_intel_properties), +DWC3_PCI_DEV (INTEL ,INTEL_MRFLD , dwc3_pci_intel_properties), +DWC3_PCI_DEV (INTEL ,INTEL_SPTLP , dwc3_pci_intel_properties), +DWC3_PCI_DEV (INTEL ,INTEL_SPTH , dwc3_pci_intel_properties), +DWC3_PCI_DEV (INTEL ,INTEL_BXT , dwc3_pci_intel_properties), +DWC3_PCI_DEV (INTEL ,INTEL_BXT_M , dwc3_pci_intel_properties), +DWC3_PCI_DEV (INTEL ,INTEL_APL , dwc3_pci_intel_properties), +DWC3_PCI_DEV (INTEL ,INTEL_KBP , dwc3_pci_intel_properties), +DWC3_PCI_DEV (INTEL ,INTEL_GLK , dwc3_pci_intel_properties), +DWC3_PCI_DEV (INTEL ,INTEL_CNPLP , dwc3_pci_intel_properties), +DWC3_PCI_DEV (INTEL ,INTEL_CNPH , dwc3_pci_intel_properties), +DWC3_PCI_DEV (INTEL ,INTEL_ICLLP , dwc3_pci_intel_properties), +DWC3_PCI_DEV (AMD ,AMD_NL_USB , dwc3_pci_amd_properties), { }/* Terminating Entry */ };MODULE_DEVICE_TABLE (pci, dwc3_pci_id_table);