i2c: designware: Round down ACPI provided clk to nearest supported clk
The Lenovo Miix2 8 DSDT contains an i2c clk / bus speed of 1700000 Hz
for one if its devices, which is not supported.
This is the second DSDT to show up with an unsupported clk in a short
time, remove the hardcoded fix for DSDTs with a 1 MiHz clock and simply
always round down the clk to the nearest supported value.
Reported-by: russianneuromancer@ya.ru
Fixes: 682c6c2188
("i2c: designware: Some broken DSTDs use 1MiHz ...")
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
parent
ba201c4f5e
commit
231d069fcd
|
@ -256,7 +256,8 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
|
||||||
struct dw_i2c_dev *dev;
|
struct dw_i2c_dev *dev;
|
||||||
u32 acpi_speed, ht = 0;
|
u32 acpi_speed, ht = 0;
|
||||||
struct resource *mem;
|
struct resource *mem;
|
||||||
int irq, ret;
|
int i, irq, ret;
|
||||||
|
const int supported_speeds[] = { 0, 100000, 400000, 1000000, 3400000 };
|
||||||
|
|
||||||
irq = platform_get_irq(pdev, 0);
|
irq = platform_get_irq(pdev, 0);
|
||||||
if (irq < 0)
|
if (irq < 0)
|
||||||
|
@ -297,9 +298,16 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
acpi_speed = i2c_acpi_find_bus_speed(&pdev->dev);
|
acpi_speed = i2c_acpi_find_bus_speed(&pdev->dev);
|
||||||
/* Some broken DSTDs use 1MiHz instead of 1MHz */
|
/*
|
||||||
if (acpi_speed == 1048576)
|
* Some DSTDs use a non standard speed, round down to the lowest
|
||||||
acpi_speed = 1000000;
|
* standard speed.
|
||||||
|
*/
|
||||||
|
for (i = 1; i < ARRAY_SIZE(supported_speeds); i++) {
|
||||||
|
if (acpi_speed < supported_speeds[i])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
acpi_speed = supported_speeds[i - 1];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find bus speed from the "clock-frequency" device property, ACPI
|
* Find bus speed from the "clock-frequency" device property, ACPI
|
||||||
* or by using fast mode if neither is set.
|
* or by using fast mode if neither is set.
|
||||||
|
|
Loading…
Reference in New Issue