#ifndef __DWC2_CORE_H__
 #define __DWC2_CORE_H__
 
+#include <linux/acpi.h>
 #include <linux/phy/phy.h>
 #include <linux/regulator/consumer.h>
 #include <linux/usb/gadget.h>
 
 /* The device ID match table */
 extern const struct of_device_id dwc2_of_match_table[];
+extern const struct acpi_device_id dwc2_acpi_match[];
 
 int dwc2_lowlevel_hw_enable(struct dwc2_hsotg *hsotg);
 int dwc2_lowlevel_hw_disable(struct dwc2_hsotg *hsotg);
 
 };
 MODULE_DEVICE_TABLE(of, dwc2_of_match_table);
 
+const struct acpi_device_id dwc2_acpi_match[] = {
+       { "BCM2848", (kernel_ulong_t)dwc2_set_bcm_params },
+       { },
+};
+MODULE_DEVICE_TABLE(acpi, dwc2_acpi_match);
+
 static void dwc2_set_param_otg_cap(struct dwc2_hsotg *hsotg)
 {
        u8 val;
        return 0;
 }
 
+typedef void (*set_params_cb)(struct dwc2_hsotg *data);
+
 int dwc2_init_params(struct dwc2_hsotg *hsotg)
 {
        const struct of_device_id *match;
-       void (*set_params)(struct dwc2_hsotg *data);
+       set_params_cb set_params;
 
        dwc2_set_default_params(hsotg);
        dwc2_get_device_properties(hsotg);
        if (match && match->data) {
                set_params = match->data;
                set_params(hsotg);
+       } else {
+               const struct acpi_device_id *amatch;
+
+               amatch = acpi_match_device(dwc2_acpi_match, hsotg->dev);
+               if (amatch && amatch->driver_data) {
+                       set_params = (set_params_cb)amatch->driver_data;
+                       set_params(hsotg);
+               }
        }
 
        dwc2_check_params(hsotg);
 
        .driver = {
                .name = dwc2_driver_name,
                .of_match_table = dwc2_of_match_table,
+               .acpi_match_table = ACPI_PTR(dwc2_acpi_match),
                .pm = &dwc2_dev_pm_ops,
        },
        .probe = dwc2_driver_probe,