Daniel Glöckner wrote:
On 07/21/2010 07:52 PM, Kenneth Heitke wrote:
Unlike I2C, SSBI is a point-to-point connection, and therefore there is no
need to specify a slave device address. The SSBI implementation
overrides the slave device address to be a device register address
instead.  This restricts the client drivers from using the SMBus
communication APIs unless they update the address field (addr) of the
i2c_client structure prior to every SMBus function call.


+static int
+i2c_ssbi_write_bytes(struct i2c_ssbi_dev *ssbi, struct i2c_msg *msg)
+{
+       int ret = 0;
+       u8 *buf = msg->buf;
+       u16 len = msg->len;
+       u16 addr = msg->addr;
+
+       if (ssbi->controller_type == MSM_SBI_CTRL_SSBI2) {
+               u32 mode2 = readl(ssbi->base + SSBI2_MODE2);
+               writel(SSBI_MODE2_REG_ADDR_15_8(mode2, addr),
+                               ssbi->base + SSBI2_MODE2);
+       }
+
+       while (len) {

Where do you set the address if controller_type == MSM_SBI_CTRL_SSBI?

  Daniel



The SSBI_MODE2_REG_ADDR register contains the upper 8-bits of the address which is only supported by SSBI 2.0. The lower 8 address bits are written as part of the SSBI_CMD_WRITE macro which is common for both of the controller types.

--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to