Lines 71-98
Link Here
|
71 |
static int |
71 |
static int |
72 |
ds1672_read(device_t dev, uint8_t addr, uint8_t *data, uint8_t size) |
72 |
ds1672_read(device_t dev, uint8_t addr, uint8_t *data, uint8_t size) |
73 |
{ |
73 |
{ |
74 |
struct iic_msg msgs[2] = { |
74 |
return (iicdev_readfrom(dev, addr, data, size, IIC_INTRWAIT)); |
75 |
{ DS1672_ADDR, IIC_M_WR, 1, &addr }, |
|
|
76 |
{ DS1672_ADDR, IIC_M_RD, size, data } |
77 |
}; |
78 |
|
79 |
return (iicbus_transfer(dev, msgs, 2)); |
80 |
} |
75 |
} |
81 |
|
76 |
|
82 |
static int |
77 |
static int |
83 |
ds1672_write(device_t dev, uint8_t addr, uint8_t *data, uint8_t size) |
78 |
ds1672_write(device_t dev, uint8_t addr, uint8_t *data, uint8_t size) |
84 |
{ |
79 |
{ |
85 |
uint8_t buffer[MAX_IIC_DATA_SIZE + 1]; |
|
|
86 |
struct iic_msg msgs[1] = { |
87 |
{ DS1672_ADDR, IIC_M_WR, size + 1, buffer }, |
88 |
}; |
89 |
|
90 |
if (size > MAX_IIC_DATA_SIZE) |
80 |
if (size > MAX_IIC_DATA_SIZE) |
91 |
return (ENOMEM); |
81 |
return (ENOMEM); |
92 |
/* NB: register pointer precedes actual data */ |
82 |
|
93 |
buffer[0] = addr; |
83 |
return (iicdev_writeto(dev, addr, data, size, IIC_INTRWAIT)); |
94 |
memcpy(buffer + 1, data, size); |
|
|
95 |
return (iicbus_transfer(dev, msgs, 1)); |
96 |
} |
84 |
} |
97 |
|
85 |
|
98 |
static int |
86 |
static int |