|
@@ -119,6 +119,46 @@ static void __init omap_i2c_mux_pins(int bus)
|
|
omap_cfg_reg(scl);
|
|
omap_cfg_reg(scl);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int __init omap_i2c_nr_ports(void)
|
|
|
|
+{
|
|
|
|
+ int ports = 0;
|
|
|
|
+
|
|
|
|
+ if (cpu_class_is_omap1())
|
|
|
|
+ ports = 1;
|
|
|
|
+ else if (cpu_is_omap24xx())
|
|
|
|
+ ports = 2;
|
|
|
|
+ else if (cpu_is_omap34xx())
|
|
|
|
+ ports = 3;
|
|
|
|
+
|
|
|
|
+ return ports;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * omap_i2c_bus_setup - Process command line options for the I2C bus speed
|
|
|
|
+ * @str: String of options
|
|
|
|
+ *
|
|
|
|
+ * This function allow to override the default I2C bus speed for given I2C
|
|
|
|
+ * bus with a command line option.
|
|
|
|
+ *
|
|
|
|
+ * Format: i2c_bus=bus_id,clkrate (in kHz)
|
|
|
|
+ *
|
|
|
|
+ * Returns 1 on success, 0 otherwise.
|
|
|
|
+ */
|
|
|
|
+static int __init omap_i2c_bus_setup(char *str)
|
|
|
|
+{
|
|
|
|
+ int ports;
|
|
|
|
+ int ints[3];
|
|
|
|
+
|
|
|
|
+ ports = omap_i2c_nr_ports();
|
|
|
|
+ get_options(str, 3, ints);
|
|
|
|
+ if (ints[0] < 2 || ints[1] < 1 || ints[1] > ports)
|
|
|
|
+ return 0;
|
|
|
|
+ i2c_rate[ints[1] - 1] = ints[2];
|
|
|
|
+
|
|
|
|
+ return 1;
|
|
|
|
+}
|
|
|
|
+__setup("i2c_bus=", omap_i2c_bus_setup);
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* omap_register_i2c_bus - register I2C bus with device descriptors
|
|
* omap_register_i2c_bus - register I2C bus with device descriptors
|
|
* @bus_id: bus id counting from number 1
|
|
* @bus_id: bus id counting from number 1
|
|
@@ -132,19 +172,12 @@ int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
|
|
struct i2c_board_info const *info,
|
|
struct i2c_board_info const *info,
|
|
unsigned len)
|
|
unsigned len)
|
|
{
|
|
{
|
|
- int ports, err;
|
|
|
|
|
|
+ int err;
|
|
struct platform_device *pdev;
|
|
struct platform_device *pdev;
|
|
struct resource *res;
|
|
struct resource *res;
|
|
resource_size_t base, irq;
|
|
resource_size_t base, irq;
|
|
|
|
|
|
- if (cpu_class_is_omap1())
|
|
|
|
- ports = 1;
|
|
|
|
- else if (cpu_is_omap24xx())
|
|
|
|
- ports = 2;
|
|
|
|
- else if (cpu_is_omap34xx())
|
|
|
|
- ports = 3;
|
|
|
|
-
|
|
|
|
- BUG_ON(bus_id < 1 || bus_id > ports);
|
|
|
|
|
|
+ BUG_ON(bus_id < 1 || bus_id > omap_i2c_nr_ports());
|
|
|
|
|
|
if (info) {
|
|
if (info) {
|
|
err = i2c_register_board_info(bus_id, info, len);
|
|
err = i2c_register_board_info(bus_id, info, len);
|
|
@@ -153,7 +186,8 @@ int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
|
|
}
|
|
}
|
|
|
|
|
|
pdev = &omap_i2c_devices[bus_id - 1];
|
|
pdev = &omap_i2c_devices[bus_id - 1];
|
|
- *(u32 *)pdev->dev.platform_data = clkrate;
|
|
|
|
|
|
+ if (i2c_rate[bus_id - 1] == 0)
|
|
|
|
+ i2c_rate[bus_id - 1] = clkrate;
|
|
|
|
|
|
if (bus_id == 1) {
|
|
if (bus_id == 1) {
|
|
res = pdev->resource;
|
|
res = pdev->resource;
|