}
 EXPORT_SYMBOL_GPL(i2c_dw_acpi_configure);
 
-void i2c_dw_acpi_adjust_bus_speed(struct device *device)
+static u32 i2c_dw_acpi_round_bus_speed(struct device *device)
 {
-       struct dw_i2c_dev *dev = dev_get_drvdata(device);
-       struct i2c_timings *t = &dev->timings;
        u32 acpi_speed;
        int i;
 
         */
        for (i = 0; i < ARRAY_SIZE(supported_speeds); i++) {
                if (acpi_speed >= supported_speeds[i])
-                       break;
+                       return supported_speeds[i];
        }
-       acpi_speed = i < ARRAY_SIZE(supported_speeds) ? supported_speeds[i] : 0;
+
+       return 0;
+}
+
+#else  /* CONFIG_ACPI */
+
+static inline u32 i2c_dw_acpi_round_bus_speed(struct device *device) { return 0; }
+
+#endif /* CONFIG_ACPI */
+
+void i2c_dw_adjust_bus_speed(struct dw_i2c_dev *dev)
+{
+       u32 acpi_speed = i2c_dw_acpi_round_bus_speed(dev->dev);
+       struct i2c_timings *t = &dev->timings;
 
        /*
         * Find bus speed from the "clock-frequency" device property, ACPI
        else
                t->bus_freq_hz = I2C_MAX_FAST_MODE_FREQ;
 }
-EXPORT_SYMBOL_GPL(i2c_dw_acpi_adjust_bus_speed);
-
-#endif /* CONFIG_ACPI */
+EXPORT_SYMBOL_GPL(i2c_dw_adjust_bus_speed);
 
 u32 i2c_dw_scl_hcnt(u32 ic_clk, u32 tSYMBOL, u32 tf, int cond, int offset)
 {
 
 #endif
 
 int i2c_dw_validate_speed(struct dw_i2c_dev *dev);
+void i2c_dw_adjust_bus_speed(struct dw_i2c_dev *dev);
 
 #if IS_ENABLED(CONFIG_ACPI)
 int i2c_dw_acpi_configure(struct device *device);
-void i2c_dw_acpi_adjust_bus_speed(struct device *device);
 #else
 static inline int i2c_dw_acpi_configure(struct device *device) { return -ENODEV; }
-static inline void i2c_dw_acpi_adjust_bus_speed(struct device *device) {}
 #endif
 
        else
                i2c_parse_fw_timings(&pdev->dev, t, false);
 
-       i2c_dw_acpi_adjust_bus_speed(&pdev->dev);
+       i2c_dw_adjust_bus_speed(dev);
 
        if (pdev->dev.of_node)
                dw_i2c_of_configure(pdev);