Thread (29 messages) 29 messages, 4 authors, 2018-09-10

Re: [PATCH v6 01/10] i3c: Add core I3C infrastructure

From: vitor <hidden>
Date: 2018-08-22 16:43:46
Also in: linux-devicetree, linux-gpio, linux-i2c, lkml

Hi Boris,


On 19-07-2018 16:29, Boris Brezillon wrote:
+int i3c_bus_register(struct i3c_bus *i3cbus)
+{
+	struct i2c_dev_desc *desc;
+
+	i3c_bus_for_each_i2cdev(i3cbus, desc) {
+		switch (desc->boardinfo->lvr & I3C_LVR_I2C_INDEX_MASK) {
+		case I3C_LVR_I2C_INDEX(0):
+			if (i3cbus->mode < I3C_BUS_MODE_MIXED_FAST)
+				i3cbus->mode = I3C_BUS_MODE_MIXED_FAST;
+			break;
+
+		case I3C_LVR_I2C_INDEX(1):
+		case I3C_LVR_I2C_INDEX(2):
+			if (i3cbus->mode < I3C_BUS_MODE_MIXED_SLOW)
+				i3cbus->mode = I3C_BUS_MODE_MIXED_SLOW;
+			break;
+
+		default:
+			return -EINVAL;
+		}
+	}
+
+	if (!i3cbus->scl_rate.i3c)
+		i3cbus->scl_rate.i3c = I3C_BUS_TYP_I3C_SCL_RATE;
+
+	if (!i3cbus->scl_rate.i2c) {
+		if (i3cbus->mode == I3C_BUS_MODE_MIXED_SLOW)
+			i3cbus->scl_rate.i2c = I3C_BUS_I2C_FM_SCL_RATE;
+		else
+			i3cbus->scl_rate.i2c = I3C_BUS_I2C_FM_PLUS_SCL_RATE;
+	}
+
+	/*
+	 * I3C/I2C frequency may have been overridden, check that user-provided
+	 * values are not exceeding max possible frequency.
+	 */
+	if (i3cbus->scl_rate.i3c > I3C_BUS_MAX_I3C_SCL_RATE ||
+	    i3cbus->scl_rate.i2c > I3C_BUS_I2C_FM_PLUS_SCL_RATE) {
+		return -EINVAL;
+	}
+
+	dev_set_name(&i3cbus->dev, "i3c-%d", i3cbus->id);
+
+	return device_add(&i3cbus->dev);
+}
During the tests of the bus with i2c devices I found the i2c_dev_desc 
objects aren't allocated before this function. This cause i3cbus->mode = 
I3C_BUS_MODE_PURE.

I want to do something for the slave and secondary master, do you 
already have infrastructure that you can share?


Best regards,
Vitor Soares
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help