Commit 78486bb6 authored by Tomasz Wlostowski's avatar Tomasz Wlostowski

dev/i2c: report -ENODEV if device not responding

parent 8cdc1250
......@@ -23,6 +23,8 @@
#include "dev/i2c.h"
#include "dev/24aa025.h"
#include <errno.h>
int m24aa025_init(struct m24aa025_device *dev, struct i2c_bus *i2c, uint8_t addr)
{
dev->bus = i2c;
......@@ -36,8 +38,13 @@ int m24aa025_read_mac(struct m24aa025_device *dev, uint8_t *mac)
int i;
bb_i2c_start( dev->bus );
bb_i2c_put_byte (dev->bus, dev->addr << 1);
if ( bb_i2c_put_byte (dev->bus, dev->addr << 1) < 0)
{
bb_i2c_stop( dev->bus );
return -ENODEV;
}
bb_i2c_put_byte (dev->bus, 0xfa );
bb_i2c_repeat_start( dev->bus );
bb_i2c_put_byte (dev->bus, (dev->addr << 1) | 1);
......
......@@ -13,6 +13,8 @@
#include "dev/bb_i2c.h"
#include "dev/gpio.h"
#include <errno.h>
void bb_i2c_delay(uint32_t delay)
{
int i;
......@@ -45,7 +47,7 @@ void bb_i2c_stop(struct i2c_bus *bus)
M_SDA_OUT(1);
}
unsigned char bb_i2c_put_byte(struct i2c_bus *bus, uint8_t data)
int bb_i2c_put_byte(struct i2c_bus *bus, uint8_t data)
{
int i;
uint8_t ack;
......@@ -59,11 +61,11 @@ unsigned char bb_i2c_put_byte(struct i2c_bus *bus, uint8_t data)
M_SDA_OUT(1);
M_SCL_OUT(1);
ack = M_SDA_IN; /* ack: sda is pulled low ->success. */
ack = M_SDA_IN; /* ack: sda is pulled low -> success. */
M_SCL_OUT(0);
M_SDA_OUT(0);
return ack != 0;
return ack == 0 ? 0 : -ENODEV;
}
void bb_i2c_get_byte(struct i2c_bus *bus, uint8_t *data, uint8_t last)
......
......@@ -22,7 +22,7 @@ void bb_i2c_start(struct i2c_bus *bus);
void bb_i2c_repeat_start(struct i2c_bus *bus);
void bb_i2c_stop(struct i2c_bus *bus);
void bb_i2c_get_byte(struct i2c_bus *bus, uint8_t *data, uint8_t last);
uint8_t bb_i2c_put_byte(struct i2c_bus *bus, uint8_t data);
int bb_i2c_put_byte(struct i2c_bus *bus, uint8_t data);
void bb_i2c_delay(uint32_t delay);
void bb_i2c_scan(struct i2c_bus *bus);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment