[U-Boot] [PATCH v3 01/10] dm: i2c: Add a uclass for I2C

Masahiro Yamada yamada.m at jp.panasonic.com
Wed Dec 3 14:24:46 CET 2014


Hi Simon,


A little more comments from me.




On Mon, 24 Nov 2014 11:57:15 -0700
Simon Glass <sjg at chromium.org> wrote:

> +int i2c_set_bus_speed(struct udevice *bus, unsigned int speed)
> +{
> +	struct dm_i2c_ops *ops = i2c_get_ops(bus);
> +	struct dm_i2c_bus *i2c = bus->uclass_priv;
> +	int ret;
> +
> +	if (ops->set_bus_speed) {
> +		ret = ops->set_bus_speed(bus, speed);
> +		if (ret)
> +			return ret;
> +	}
> +	i2c->speed_hz = speed;
> +
> +	return 0;
> +}


This looks odd.


If each driver does not have .set_bus_speed handler,
we cannot change the bus speed
because changing the bus speed involves some hardware
register(s) setting.

We should not change i2c->speed_hz without changing the
actual speed.

I think the code should be:


	if (ops->set_bus_speed) {
		ret = ops->set_bus_speed(bus, speed);
		if (ret)
			return ret;
		i2c->speed_hz = speed;
	}






+	/**
+	 * set_bus_speed() - set the speed of a bus (optional)
+	 *
+	 * The bus speed value will be updated by the uclass if this function
+	 * does not return an error.
+	 *
+	 * @bus:	Bus to adjust
+	 * @speed:	Requested speed in Hz
+	 * @return 0 if OK, -INVAL for invalid values


s/-INVAL/-EINVAL/






Best Regards
Masahiro Yamada


More information about the U-Boot mailing list