1 // SPDX-License-Identifier: GPL-2.0
3 * I2C bridge driver for the Greybus "generic" I2C module.
5 * Copyright 2014 Google Inc.
6 * Copyright 2014 Linaro Ltd.
9 #include <linux/kernel.h>
10 #include <linux/module.h>
11 #include <linux/slab.h>
12 #include <linux/i2c.h>
17 struct gb_i2c_device
{
18 struct gb_connection
*connection
;
19 struct gbphy_device
*gbphy_dev
;
23 struct i2c_adapter adapter
;
27 * Map Greybus i2c functionality bits into Linux ones
29 static u32
gb_i2c_functionality_map(u32 gb_i2c_functionality
)
31 return gb_i2c_functionality
; /* All bits the same for now */
34 static int gb_i2c_functionality_operation(struct gb_i2c_device
*gb_i2c_dev
)
36 struct gb_i2c_functionality_response response
;
40 ret
= gb_operation_sync(gb_i2c_dev
->connection
,
41 GB_I2C_TYPE_FUNCTIONALITY
,
42 NULL
, 0, &response
, sizeof(response
));
46 functionality
= le32_to_cpu(response
.functionality
);
47 gb_i2c_dev
->functionality
= gb_i2c_functionality_map(functionality
);
53 * Map Linux i2c_msg flags into Greybus i2c transfer op flags.
55 static u16
gb_i2c_transfer_op_flags_map(u16 flags
)
57 return flags
; /* All flags the same for now */
61 gb_i2c_fill_transfer_op(struct gb_i2c_transfer_op
*op
, struct i2c_msg
*msg
)
63 u16 flags
= gb_i2c_transfer_op_flags_map(msg
->flags
);
65 op
->addr
= cpu_to_le16(msg
->addr
);
66 op
->flags
= cpu_to_le16(flags
);
67 op
->size
= cpu_to_le16(msg
->len
);
70 static struct gb_operation
*
71 gb_i2c_operation_create(struct gb_connection
*connection
,
72 struct i2c_msg
*msgs
, u32 msg_count
)
74 struct gb_i2c_device
*gb_i2c_dev
= gb_connection_get_data(connection
);
75 struct gb_i2c_transfer_request
*request
;
76 struct gb_operation
*operation
;
77 struct gb_i2c_transfer_op
*op
;
79 u32 data_out_size
= 0;
86 if (msg_count
> (u32
)U16_MAX
) {
87 dev_err(&gb_i2c_dev
->gbphy_dev
->dev
, "msg_count (%u) too big\n",
91 op_count
= (u16
)msg_count
;
94 * In addition to space for all message descriptors we need
95 * to have enough to hold all outbound message data.
98 for (i
= 0; i
< msg_count
; i
++, msg
++)
99 if (msg
->flags
& I2C_M_RD
)
100 data_in_size
+= (u32
)msg
->len
;
102 data_out_size
+= (u32
)msg
->len
;
104 request_size
= sizeof(*request
);
105 request_size
+= msg_count
* sizeof(*op
);
106 request_size
+= data_out_size
;
108 /* Response consists only of incoming data */
109 operation
= gb_operation_create(connection
, GB_I2C_TYPE_TRANSFER
,
110 request_size
, data_in_size
, GFP_KERNEL
);
114 request
= operation
->request
->payload
;
115 request
->op_count
= cpu_to_le16(op_count
);
116 /* Fill in the ops array */
117 op
= &request
->ops
[0];
119 for (i
= 0; i
< msg_count
; i
++)
120 gb_i2c_fill_transfer_op(op
++, msg
++);
125 /* Copy over the outgoing data; it starts after the last op */
128 for (i
= 0; i
< msg_count
; i
++) {
129 if (!(msg
->flags
& I2C_M_RD
)) {
130 memcpy(data
, msg
->buf
, msg
->len
);
139 static void gb_i2c_decode_response(struct i2c_msg
*msgs
, u32 msg_count
,
140 struct gb_i2c_transfer_response
*response
)
142 struct i2c_msg
*msg
= msgs
;
148 data
= response
->data
;
149 for (i
= 0; i
< msg_count
; i
++) {
150 if (msg
->flags
& I2C_M_RD
) {
151 memcpy(msg
->buf
, data
, msg
->len
);
159 * Some i2c transfer operations return results that are expected.
161 static bool gb_i2c_expected_transfer_error(int errno
)
163 return errno
== -EAGAIN
|| errno
== -ENODEV
;
166 static int gb_i2c_transfer_operation(struct gb_i2c_device
*gb_i2c_dev
,
167 struct i2c_msg
*msgs
, u32 msg_count
)
169 struct gb_connection
*connection
= gb_i2c_dev
->connection
;
170 struct device
*dev
= &gb_i2c_dev
->gbphy_dev
->dev
;
171 struct gb_operation
*operation
;
174 operation
= gb_i2c_operation_create(connection
, msgs
, msg_count
);
178 ret
= gbphy_runtime_get_sync(gb_i2c_dev
->gbphy_dev
);
180 goto exit_operation_put
;
182 ret
= gb_operation_request_send_sync(operation
);
184 struct gb_i2c_transfer_response
*response
;
186 response
= operation
->response
->payload
;
187 gb_i2c_decode_response(msgs
, msg_count
, response
);
189 } else if (!gb_i2c_expected_transfer_error(ret
)) {
190 dev_err(dev
, "transfer operation failed (%d)\n", ret
);
193 gbphy_runtime_put_autosuspend(gb_i2c_dev
->gbphy_dev
);
196 gb_operation_put(operation
);
201 static int gb_i2c_master_xfer(struct i2c_adapter
*adap
, struct i2c_msg
*msgs
,
204 struct gb_i2c_device
*gb_i2c_dev
;
206 gb_i2c_dev
= i2c_get_adapdata(adap
);
208 return gb_i2c_transfer_operation(gb_i2c_dev
, msgs
, msg_count
);
213 static int gb_i2c_smbus_xfer(struct i2c_adapter
*adap
,
214 u16 addr
, unsigned short flags
, char read_write
,
215 u8 command
, int size
, union i2c_smbus_data
*data
)
217 struct gb_i2c_device
*gb_i2c_dev
;
219 gb_i2c_dev
= i2c_get_adapdata(adap
);
225 static u32
gb_i2c_functionality(struct i2c_adapter
*adap
)
227 struct gb_i2c_device
*gb_i2c_dev
= i2c_get_adapdata(adap
);
229 return gb_i2c_dev
->functionality
;
232 static const struct i2c_algorithm gb_i2c_algorithm
= {
233 .master_xfer
= gb_i2c_master_xfer
,
234 /* .smbus_xfer = gb_i2c_smbus_xfer, */
235 .functionality
= gb_i2c_functionality
,
239 * Do initial setup of the i2c device. This includes verifying we
240 * can support it (based on the protocol version it advertises).
241 * If that's OK, we get and cached its functionality bits.
243 * Note: gb_i2c_dev->connection is assumed to have been valid.
245 static int gb_i2c_device_setup(struct gb_i2c_device
*gb_i2c_dev
)
247 /* Assume the functionality never changes, just get it once */
248 return gb_i2c_functionality_operation(gb_i2c_dev
);
251 static int gb_i2c_probe(struct gbphy_device
*gbphy_dev
,
252 const struct gbphy_device_id
*id
)
254 struct gb_connection
*connection
;
255 struct gb_i2c_device
*gb_i2c_dev
;
256 struct i2c_adapter
*adapter
;
259 gb_i2c_dev
= kzalloc(sizeof(*gb_i2c_dev
), GFP_KERNEL
);
263 connection
= gb_connection_create(gbphy_dev
->bundle
,
264 le16_to_cpu(gbphy_dev
->cport_desc
->id
),
266 if (IS_ERR(connection
)) {
267 ret
= PTR_ERR(connection
);
268 goto exit_i2cdev_free
;
271 gb_i2c_dev
->connection
= connection
;
272 gb_connection_set_data(connection
, gb_i2c_dev
);
273 gb_i2c_dev
->gbphy_dev
= gbphy_dev
;
274 gb_gbphy_set_data(gbphy_dev
, gb_i2c_dev
);
276 ret
= gb_connection_enable(connection
);
278 goto exit_connection_destroy
;
280 ret
= gb_i2c_device_setup(gb_i2c_dev
);
282 goto exit_connection_disable
;
284 /* Looks good; up our i2c adapter */
285 adapter
= &gb_i2c_dev
->adapter
;
286 adapter
->owner
= THIS_MODULE
;
287 adapter
->class = I2C_CLASS_HWMON
| I2C_CLASS_SPD
;
288 adapter
->algo
= &gb_i2c_algorithm
;
289 /* adapter->algo_data = what? */
291 adapter
->dev
.parent
= &gbphy_dev
->dev
;
292 snprintf(adapter
->name
, sizeof(adapter
->name
), "Greybus i2c adapter");
293 i2c_set_adapdata(adapter
, gb_i2c_dev
);
295 ret
= i2c_add_adapter(adapter
);
297 goto exit_connection_disable
;
299 gbphy_runtime_put_autosuspend(gbphy_dev
);
302 exit_connection_disable
:
303 gb_connection_disable(connection
);
304 exit_connection_destroy
:
305 gb_connection_destroy(connection
);
312 static void gb_i2c_remove(struct gbphy_device
*gbphy_dev
)
314 struct gb_i2c_device
*gb_i2c_dev
= gb_gbphy_get_data(gbphy_dev
);
315 struct gb_connection
*connection
= gb_i2c_dev
->connection
;
318 ret
= gbphy_runtime_get_sync(gbphy_dev
);
320 gbphy_runtime_get_noresume(gbphy_dev
);
322 i2c_del_adapter(&gb_i2c_dev
->adapter
);
323 gb_connection_disable(connection
);
324 gb_connection_destroy(connection
);
328 static const struct gbphy_device_id gb_i2c_id_table
[] = {
329 { GBPHY_PROTOCOL(GREYBUS_PROTOCOL_I2C
) },
332 MODULE_DEVICE_TABLE(gbphy
, gb_i2c_id_table
);
334 static struct gbphy_driver i2c_driver
= {
336 .probe
= gb_i2c_probe
,
337 .remove
= gb_i2c_remove
,
338 .id_table
= gb_i2c_id_table
,
341 module_gbphy_driver(i2c_driver
);
342 MODULE_LICENSE("GPL v2");