aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2014-11-11 11:49:38 +1100
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2014-11-11 11:49:38 +1100
commit2e47b392d69e17f5614ee7796710a69aa273a8c1 (patch)
tree6c8d97b2b9624f82bc7d94fc71faaacfd4648431 /include
parentd3d9c9e6b9a20bcc138d98c87ffaa48b4776d4c2 (diff)
downloadskiboot-2e47b392d69e17f5614ee7796710a69aa273a8c1.zip
skiboot-2e47b392d69e17f5614ee7796710a69aa273a8c1.tar.gz
skiboot-2e47b392d69e17f5614ee7796710a69aa273a8c1.tar.bz2
i2c: Move bus management and OPAL API to core i2c code
And start adding interfaces to lookup i2c busses. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'include')
-rw-r--r--include/i2c.h28
1 files changed, 25 insertions, 3 deletions
diff --git a/include/i2c.h b/include/i2c.h
index af88ba0..2647bdc 100644
--- a/include/i2c.h
+++ b/include/i2c.h
@@ -21,9 +21,9 @@ struct i2c_request;
struct i2c_bus {
struct list_node link;
- struct dt_node *i2c_port;
- int (*queue_req)(struct i2c_bus *bus,
- struct i2c_request *req);
+ struct dt_node *dt_node;
+ uint32_t opal_id;
+ int (*queue_req)(struct i2c_request *req);
struct i2c_request *(*alloc_req)(struct i2c_bus *bus);
void (*free_req)(struct i2c_request *req);
};
@@ -47,6 +47,28 @@ struct i2c_request {
void *user_data; /* Client data */
};
+extern struct list_head i2c_bus_list;
+
+/* Generic i2c */
+extern void i2c_add_bus(struct i2c_bus *bus);
+extern struct i2c_bus *i2c_find_bus_by_id(uint32_t opal_id);
+
+static inline struct i2c_request *i2c_alloc_req(struct i2c_bus *bus)
+{
+ return bus->alloc_req(bus);
+}
+
+static inline void i2c_free_req(struct i2c_request *req)
+{
+ req->bus->free_req(req);
+}
+
+static inline int i2c_queue_req(struct i2c_request *req)
+{
+ return req->bus->queue_req(req);
+}
+
+/* P8 implementation details */
extern void p8_i2c_init(void);
extern void p8_i2c_interrupt(void);