2 * I2C bridge driver for the Greybus "generic" I2C module.
4 * Copyright 2014 Google Inc.
5 * Copyright 2014 Linaro Ltd.
7 * Released under the GPLv2 only.
10 #include <linux/kernel.h>
11 #include <linux/module.h>
12 #include <linux/slab.h>
13 #include <linux/i2c.h>
18 struct gb_i2c_device
{
19 struct gb_connection
*connection
;
20 struct gbphy_device
*gbphy_dev
;
24 struct i2c_adapter adapter
;
28 * Map Greybus i2c functionality bits into Linux ones
30 static u32
gb_i2c_functionality_map(u32 gb_i2c_functionality
)
32 return gb_i2c_functionality
; /* All bits the same for now */
35 static int gb_i2c_functionality_operation(struct gb_i2c_device
*gb_i2c_dev
)
37 struct gb_i2c_functionality_response response
;
41 ret
= gb_operation_sync(gb_i2c_dev
->connection
,
42 GB_I2C_TYPE_FUNCTIONALITY
,
43 NULL
, 0, &response
, sizeof(response
));
47 functionality
= le32_to_cpu(response
.functionality
);
48 gb_i2c_dev
->functionality
= gb_i2c_functionality_map(functionality
);
54 * Map Linux i2c_msg flags into Greybus i2c transfer op flags.
56 static u16
gb_i2c_transfer_op_flags_map(u16 flags
)
58 return flags
; /* All flags the same for now */
62 gb_i2c_fill_transfer_op(struct gb_i2c_transfer_op
*op
, struct i2c_msg
*msg
)
64 u16 flags
= gb_i2c_transfer_op_flags_map(msg
->flags
);
66 op
->addr
= cpu_to_le16(msg
->addr
);
67 op
->flags
= cpu_to_le16(flags
);
68 op
->size
= cpu_to_le16(msg
->len
);
71 static struct gb_operation
*
72 gb_i2c_operation_create(struct gb_connection
*connection
,
73 struct i2c_msg
*msgs
, u32 msg_count
)
75 struct gb_i2c_device
*gb_i2c_dev
= gb_connection_get_data(connection
);
76 struct gb_i2c_transfer_request
*request
;
77 struct gb_operation
*operation
;
78 struct gb_i2c_transfer_op
*op
;
80 u32 data_out_size
= 0;
87 if (msg_count
> (u32
)U16_MAX
) {
88 dev_err(&gb_i2c_dev
->gbphy_dev
->dev
, "msg_count (%u) too big\n",
92 op_count
= (u16
)msg_count
;
95 * In addition to space for all message descriptors we need
96 * to have enough to hold all outbound message data.
99 for (i
= 0; i
< msg_count
; i
++, msg
++)
100 if (msg
->flags
& I2C_M_RD
)
101 data_in_size
+= (u32
)msg
->len
;
103 data_out_size
+= (u32
)msg
->len
;
105 request_size
= sizeof(*request
);
106 request_size
+= msg_count
* sizeof(*op
);
107 request_size
+= data_out_size
;
109 /* Response consists only of incoming data */
110 operation
= gb_operation_create(connection
, GB_I2C_TYPE_TRANSFER
,
111 request_size
, data_in_size
, GFP_KERNEL
);
115 request
= operation
->request
->payload
;
116 request
->op_count
= cpu_to_le16(op_count
);
117 /* Fill in the ops array */
118 op
= &request
->ops
[0];
120 for (i
= 0; i
< msg_count
; i
++)
121 gb_i2c_fill_transfer_op(op
++, msg
++);
126 /* Copy over the outgoing data; it starts after the last op */
129 for (i
= 0; i
< msg_count
; i
++) {
130 if (!(msg
->flags
& I2C_M_RD
)) {
131 memcpy(data
, msg
->buf
, msg
->len
);
140 static void gb_i2c_decode_response(struct i2c_msg
*msgs
, u32 msg_count
,
141 struct gb_i2c_transfer_response
*response
)
143 struct i2c_msg
*msg
= msgs
;
149 data
= response
->data
;
150 for (i
= 0; i
< msg_count
; i
++) {
151 if (msg
->flags
& I2C_M_RD
) {
152 memcpy(msg
->buf
, data
, msg
->len
);
160 * Some i2c transfer operations return results that are expected.
162 static bool gb_i2c_expected_transfer_error(int errno
)
164 return errno
== -EAGAIN
|| errno
== -ENODEV
;
167 static int gb_i2c_transfer_operation(struct gb_i2c_device
*gb_i2c_dev
,
168 struct i2c_msg
*msgs
, u32 msg_count
)
170 struct gb_connection
*connection
= gb_i2c_dev
->connection
;
171 struct device
*dev
= &gb_i2c_dev
->gbphy_dev
->dev
;
172 struct gb_operation
*operation
;
175 operation
= gb_i2c_operation_create(connection
, msgs
, msg_count
);
179 ret
= gbphy_runtime_get_sync(gb_i2c_dev
->gbphy_dev
);
181 goto exit_operation_put
;
183 ret
= gb_operation_request_send_sync(operation
);
185 struct gb_i2c_transfer_response
*response
;
187 response
= operation
->response
->payload
;
188 gb_i2c_decode_response(msgs
, msg_count
, response
);
190 } else if (!gb_i2c_expected_transfer_error(ret
)) {
191 dev_err(dev
, "transfer operation failed (%d)\n", ret
);
194 gbphy_runtime_put_autosuspend(gb_i2c_dev
->gbphy_dev
);
197 gb_operation_put(operation
);
202 static int gb_i2c_master_xfer(struct i2c_adapter
*adap
, struct i2c_msg
*msgs
,
205 struct gb_i2c_device
*gb_i2c_dev
;
207 gb_i2c_dev
= i2c_get_adapdata(adap
);
209 return gb_i2c_transfer_operation(gb_i2c_dev
, msgs
, msg_count
);
214 static int gb_i2c_smbus_xfer(struct i2c_adapter
*adap
,
215 u16 addr
, unsigned short flags
, char read_write
,
216 u8 command
, int size
, union i2c_smbus_data
*data
)
218 struct gb_i2c_device
*gb_i2c_dev
;
220 gb_i2c_dev
= i2c_get_adapdata(adap
);
226 static u32
gb_i2c_functionality(struct i2c_adapter
*adap
)
228 struct gb_i2c_device
*gb_i2c_dev
= i2c_get_adapdata(adap
);
230 return gb_i2c_dev
->functionality
;
233 static const struct i2c_algorithm gb_i2c_algorithm
= {
234 .master_xfer
= gb_i2c_master_xfer
,
235 /* .smbus_xfer = gb_i2c_smbus_xfer, */
236 .functionality
= gb_i2c_functionality
,
240 * Do initial setup of the i2c device. This includes verifying we
241 * can support it (based on the protocol version it advertises).
242 * If that's OK, we get and cached its functionality bits.
244 * Note: gb_i2c_dev->connection is assumed to have been valid.
246 static int gb_i2c_device_setup(struct gb_i2c_device
*gb_i2c_dev
)
248 /* Assume the functionality never changes, just get it once */
249 return gb_i2c_functionality_operation(gb_i2c_dev
);
252 static int gb_i2c_probe(struct gbphy_device
*gbphy_dev
,
253 const struct gbphy_device_id
*id
)
255 struct gb_connection
*connection
;
256 struct gb_i2c_device
*gb_i2c_dev
;
257 struct i2c_adapter
*adapter
;
260 gb_i2c_dev
= kzalloc(sizeof(*gb_i2c_dev
), GFP_KERNEL
);
264 connection
= gb_connection_create(gbphy_dev
->bundle
,
265 le16_to_cpu(gbphy_dev
->cport_desc
->id
),
267 if (IS_ERR(connection
)) {
268 ret
= PTR_ERR(connection
);
269 goto exit_i2cdev_free
;
272 gb_i2c_dev
->connection
= connection
;
273 gb_connection_set_data(connection
, gb_i2c_dev
);
274 gb_i2c_dev
->gbphy_dev
= gbphy_dev
;
275 gb_gbphy_set_data(gbphy_dev
, gb_i2c_dev
);
277 ret
= gb_connection_enable(connection
);
279 goto exit_connection_destroy
;
281 ret
= gb_i2c_device_setup(gb_i2c_dev
);
283 goto exit_connection_disable
;
285 /* Looks good; up our i2c adapter */
286 adapter
= &gb_i2c_dev
->adapter
;
287 adapter
->owner
= THIS_MODULE
;
288 adapter
->class = I2C_CLASS_HWMON
| I2C_CLASS_SPD
;
289 adapter
->algo
= &gb_i2c_algorithm
;
290 /* adapter->algo_data = what? */
292 adapter
->dev
.parent
= &gbphy_dev
->dev
;
293 snprintf(adapter
->name
, sizeof(adapter
->name
), "Greybus i2c adapter");
294 i2c_set_adapdata(adapter
, gb_i2c_dev
);
296 ret
= i2c_add_adapter(adapter
);
298 goto exit_connection_disable
;
300 gbphy_runtime_put_autosuspend(gbphy_dev
);
303 exit_connection_disable
:
304 gb_connection_disable(connection
);
305 exit_connection_destroy
:
306 gb_connection_destroy(connection
);
313 static void gb_i2c_remove(struct gbphy_device
*gbphy_dev
)
315 struct gb_i2c_device
*gb_i2c_dev
= gb_gbphy_get_data(gbphy_dev
);
316 struct gb_connection
*connection
= gb_i2c_dev
->connection
;
319 ret
= gbphy_runtime_get_sync(gbphy_dev
);
321 gbphy_runtime_get_noresume(gbphy_dev
);
323 i2c_del_adapter(&gb_i2c_dev
->adapter
);
324 gb_connection_disable(connection
);
325 gb_connection_destroy(connection
);
329 static const struct gbphy_device_id gb_i2c_id_table
[] = {
330 { GBPHY_PROTOCOL(GREYBUS_PROTOCOL_I2C
) },
333 MODULE_DEVICE_TABLE(gbphy
, gb_i2c_id_table
);
335 static struct gbphy_driver i2c_driver
= {
337 .probe
= gb_i2c_probe
,
338 .remove
= gb_i2c_remove
,
339 .id_table
= gb_i2c_id_table
,
342 module_gbphy_driver(i2c_driver
);
343 MODULE_LICENSE("GPL v2");