RTEMS CPU Kit with SuperCore  4.11.3
i2c.h
Go to the documentation of this file.
1 
9 /*
10  * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
11  *
12  * embedded brains GmbH
13  * Dornierstr. 4
14  * 82178 Puchheim
15  * Germany
16  * <rtems@embedded-brains.de>
17  *
18  * The license and distribution terms for this file may be
19  * found in the file LICENSE in this distribution or at
20  * http://www.rtems.org/license/LICENSE.
21  */
22 
23 #ifndef _DEV_I2C_I2C_H
24 #define _DEV_I2C_I2C_H
25 
26 #include <linux/i2c.h>
27 #include <linux/i2c-dev.h>
28 
29 #include <rtems.h>
30 #include <rtems/seterr.h>
31 
32 #include <sys/ioctl.h>
33 #include <sys/stat.h>
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif /* __cplusplus */
38 
39 typedef struct i2c_msg i2c_msg;
40 
41 typedef struct i2c_bus i2c_bus;
42 
43 typedef struct i2c_dev i2c_dev;
44 
46 
74 #define I2C_BUS_OBTAIN 0x800
75 
81 #define I2C_BUS_RELEASE 0x801
82 
88 #define I2C_BUS_GET_CONTROL 0x802
89 
95 #define I2C_BUS_SET_CLOCK 0x803
96 
102 #define I2C_BUS_CLOCK_DEFAULT 100000
103 
107 struct i2c_bus {
119  int (*transfer)(i2c_bus *bus, i2c_msg *msgs, uint32_t msg_count);
120 
130  int (*set_clock)(i2c_bus *bus, unsigned long clock);
131 
137  void (*destroy)(i2c_bus *bus);
138 
143 
147  uint16_t default_address;
148 
153 
157  bool use_pec;
158 
162  unsigned long retries;
163 
168 
172  unsigned long functionality;
173 };
174 
190 int i2c_bus_init(i2c_bus *bus);
191 
209 i2c_bus *i2c_bus_alloc_and_init(size_t size);
210 
216 void i2c_bus_destroy(i2c_bus *bus);
217 
224 
237 int i2c_bus_register(
238  i2c_bus *bus,
239  const char *bus_path
240 );
241 
247 void i2c_bus_obtain(i2c_bus *bus);
248 
254 void i2c_bus_release(i2c_bus *bus);
255 
269 int i2c_bus_transfer(i2c_bus *bus, i2c_msg *msgs, uint32_t msg_count);
270 
284 #define I2C_DEV_IO_CONTROL 0x900
285 
289 struct i2c_dev {
296  ssize_t (*read)(i2c_dev *dev, void *buf, size_t n, off_t offset);
297 
304  ssize_t (*write)(i2c_dev *dev, const void *buf, size_t n, off_t offset);
305 
312  int (*ioctl)(i2c_dev *dev, ioctl_command_t command, void *arg);
313 
317  off_t (*get_size)(i2c_dev *dev);
318 
322  blksize_t (*get_block_size)(i2c_dev *dev);
323 
327  void (*destroy)(i2c_dev *dev);
328 
333 
337  uint16_t address;
338 
345  int bus_fd;
346 };
347 
348 
366 int i2c_dev_init(i2c_dev *dev, const char *bus_path, uint16_t address);
367 
388  size_t size,
389  const char *bus_path,
390  uint16_t address
391 );
392 
398 void i2c_dev_destroy(i2c_dev *dev);
399 
406 
419 int i2c_dev_register(
420  i2c_dev *dev,
421  const char *dev_path
422 );
423  /* end of i2c device driver */
425 
428 #ifdef __cplusplus
429 }
430 #endif /* __cplusplus */
431 
432 #endif /* _DEV_I2C_I2C_H */
void i2c_bus_obtain(i2c_bus *bus)
Obtains the bus.
Definition: i2c-bus.c:34
rtems_id mutex
Mutex to protect the bus access.
Definition: i2c.h:142
ssize_t read(int fd, void *buffer, size_t count)
POSIX 1003.1b 6.4.1 - Read From a File.
Definition: read.c:27
int(* set_clock)(i2c_bus *bus, unsigned long clock)
Sets the bus clock.
Definition: i2c.h:130
Data which Ease the Burden of Consistently Setting Errno.
void i2c_bus_destroy_and_free(i2c_bus *bus)
Destroys a bus control and frees its memory.
Definition: i2c-bus.c:319
Objects_Id rtems_id
Used to manage and manipulate RTEMS object identifiers.
Definition: types.h:80
I2C slave device control.
Definition: i2c.h:289
i2c_dev * i2c_dev_alloc_and_init(size_t size, const char *bus_path, uint16_t address)
Allocates a device control from the heap and initializes it.
Definition: i2c-dev.c:270
ssize_t write(int fd, const void *buffer, size_t count)
POSIX 1003.1b 6.4.2 - Write to a File.
Definition: write.c:30
int i2c_dev_init(i2c_dev *dev, const char *bus_path, uint16_t address)
Initializes a device control.
Definition: i2c-dev.c:265
uint16_t default_address
Default slave device address.
Definition: i2c.h:147
Argument type for I2C_RDWR IO control call.
Definition: i2c-dev.h:125
unsigned long functionality
Controller functionality.
Definition: i2c.h:172
void(* destroy)(i2c_bus *bus)
Destroys the bus.
Definition: i2c.h:137
I2C transfer message.
Definition: i2c.h:137
uint16_t address
The device address.
Definition: i2c.h:337
int(* transfer)(i2c_bus *bus, i2c_msg *msgs, uint32_t msg_count)
Transfers I2C messages.
Definition: i2c.h:119
Watchdog_Interval rtems_interval
Used to manage and manipulate intervals specified by clock ticks.
Definition: types.h:119
unsigned long retries
Transfer retry count.
Definition: i2c.h:162
int i2c_bus_register(i2c_bus *bus, const char *bus_path)
Registers a bus control.
Definition: i2c-bus.c:242
rtems_interval timeout
Transaction timeout in ticks.
Definition: i2c.h:167
I2C bus control.
Definition: i2c.h:107
void i2c_bus_release(i2c_bus *bus)
Releases the bus.
Definition: i2c-bus.c:43
RTEMS Port of Linux I2C Device API.
int i2c_bus_init(i2c_bus *bus)
Initializes a bus control.
Definition: i2c-bus.c:325
void i2c_dev_destroy(i2c_dev *dev)
Destroys a device control.
Definition: i2c-dev.c:250
i2c_bus * bus
The bus control.
Definition: i2c.h:332
bool ten_bit_address
Use 10-bit addresses.
Definition: i2c.h:152
int i2c_dev_register(i2c_dev *dev, const char *dev_path)
Registers a device control.
Definition: i2c-dev.c:139
RTEMS Port of Linux I2C API.
int bus_fd
File descriptor of the bus.
Definition: i2c.h:345
int i2c_bus_transfer(i2c_bus *bus, i2c_msg *msgs, uint32_t msg_count)
Transfers I2C messages.
Definition: i2c-bus.c:52
bool use_pec
Use SMBus PEC.
Definition: i2c.h:157
i2c_bus * i2c_bus_alloc_and_init(size_t size)
Allocates a bus control from the heap and initializes it.
Definition: i2c-bus.c:332
void i2c_dev_destroy_and_free(i2c_dev *dev)
Destroys a device control and frees its memory.
Definition: i2c-dev.c:259
void i2c_bus_destroy(i2c_bus *bus)
Destroys a bus control.
Definition: i2c-bus.c:310