I2C: Eliminate the I2C_WRITEREAD method
This commit is contained in:
parent
b64a45d667
commit
c0fb4e34a7
@ -336,12 +336,6 @@ static int efm32_i2c_write(FAR struct i2c_dev_s *dev, const uint8_t * buffer,
|
||||
static int efm32_i2c_read(FAR struct i2c_dev_s *dev, uint8_t * buffer,
|
||||
int buflen);
|
||||
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int efm32_i2c_writeread(FAR struct i2c_dev_s *dev,
|
||||
const uint8_t * wbuffer, int wbuflen,
|
||||
uint8_t * buffer, int buflen);
|
||||
#endif /* CONFIG_I2C_WRITEREAD */
|
||||
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
static int efm32_i2c_transfer(FAR struct i2c_dev_s *dev,
|
||||
FAR struct i2c_msg_s *msgs, int count);
|
||||
@ -421,9 +415,6 @@ static const struct i2c_ops_s efm32_i2c_ops =
|
||||
.setaddress = efm32_i2c_setaddress,
|
||||
.write = efm32_i2c_write,
|
||||
.read = efm32_i2c_read
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
, .writeread = efm32_i2c_writeread
|
||||
#endif
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
, .transfer = efm32_i2c_transfer
|
||||
#endif
|
||||
@ -1703,38 +1694,6 @@ int efm32_i2c_read(FAR struct i2c_dev_s *dev, uint8_t * buffer, int buflen)
|
||||
return efm32_i2c_process(dev, &msgv, 1);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: efm32_i2c_writeread
|
||||
*
|
||||
* Description:
|
||||
* Read then write I2C data
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int efm32_i2c_writeread(FAR struct i2c_dev_s *dev,
|
||||
const uint8_t * wbuffer, int wbuflen,
|
||||
uint8_t * buffer, int buflen)
|
||||
{
|
||||
struct i2c_msg_s msgv[2] =
|
||||
{
|
||||
{
|
||||
.addr = ((struct efm32_i2c_inst_s *)dev)->address,
|
||||
.flags = ((struct efm32_i2c_inst_s *)dev)->flags,
|
||||
.buffer = (uint8_t *) wbuffer, /* This is really ugly, sorry const ... */
|
||||
.length = wbuflen},
|
||||
{
|
||||
.addr = ((struct efm32_i2c_inst_s *)dev)->address,
|
||||
.flags = ((struct efm32_i2c_inst_s *)dev)->flags |
|
||||
((buflen > 0) ? I2C_M_READ : I2C_M_NORESTART),
|
||||
.buffer = buffer,
|
||||
.length = (buflen > 0) ? buflen : -buflen}
|
||||
};
|
||||
|
||||
return efm32_i2c_process(dev, msgv, 2);
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: efm32_i2c_transfer
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
* arch/arm/src/sam34/sam_twi.c
|
||||
*
|
||||
* Copyright (C) 2013, 2015 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2013, 2015-2016 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* References:
|
||||
@ -195,10 +195,6 @@ static int twi_setaddress(FAR struct i2c_dev_s *dev, int addr, int nbits);
|
||||
static int twi_write(FAR struct i2c_dev_s *dev, const uint8_t *buffer,
|
||||
int buflen);
|
||||
static int twi_read(FAR struct i2c_dev_s *dev, uint8_t *buffer, int buflen);
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int twi_writeread(FAR struct i2c_dev_s *inst, const uint8_t *wbuffer,
|
||||
int wbuflen, uint8_t *rbuffer, int rbuflen);
|
||||
#endif
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
static int twi_transfer(FAR struct i2c_dev_s *dev,
|
||||
FAR struct i2c_msg_s *msgs, int count);
|
||||
@ -234,9 +230,6 @@ struct i2c_ops_s g_twiops =
|
||||
.setaddress = twi_setaddress,
|
||||
.write = twi_write,
|
||||
.read = twi_read,
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
.writeread = twi_writeread,
|
||||
#endif
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
.transfer = twi_transfer
|
||||
#endif
|
||||
@ -904,73 +897,6 @@ static int twi_read(FAR struct i2c_dev_s *dev, uint8_t *rbuffer, int rbuflen)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: twi_writeread
|
||||
*
|
||||
* Description:
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int twi_writeread(FAR struct i2c_dev_s *dev, const uint8_t *wbuffer,
|
||||
int wbuflen, uint8_t *rbuffer, int rbuflen)
|
||||
{
|
||||
struct twi_dev_s *priv = (struct twi_dev_s *)dev;
|
||||
irqstate_t flags;
|
||||
int ret;
|
||||
|
||||
struct i2c_msg_s msgv[2] =
|
||||
{
|
||||
{
|
||||
.addr = priv->address,
|
||||
.flags = priv->flags,
|
||||
.buffer = (uint8_t *)wbuffer, /* Override const */
|
||||
.length = wbuflen
|
||||
},
|
||||
{
|
||||
.addr = priv->address,
|
||||
.flags = priv->flags | ((rbuflen > 0) ? I2C_M_READ : I2C_M_NORESTART),
|
||||
.buffer = rbuffer,
|
||||
.length = (rbuflen < 0) ? -rbuflen : rbuflen
|
||||
}
|
||||
};
|
||||
|
||||
DEBUGASSERT(dev != NULL);
|
||||
i2cvdbg("TWI%d wbuflen: %d rbuflen: %d\n", priv->twi, wbuflen, rbuflen);
|
||||
|
||||
/* Get exclusive access to the device */
|
||||
|
||||
twi_takesem(&priv->exclsem);
|
||||
|
||||
/* Initiate the read */
|
||||
|
||||
priv->msg = msgv;
|
||||
priv->msgc = 2;
|
||||
|
||||
/* Initiate the write operation. The rest will be handled from interrupt
|
||||
* logic. Interrupts must be disabled to prevent re-entrance from the
|
||||
* interrupt level.
|
||||
*/
|
||||
|
||||
flags = irqsave();
|
||||
twi_startwrite(priv, msgv);
|
||||
|
||||
/* And wait for the write/read to complete. Interrupts will be re-enabled
|
||||
* while we are waiting.
|
||||
*/
|
||||
|
||||
ret = twi_wait(priv);
|
||||
if (ret < 0)
|
||||
{
|
||||
i2cdbg("ERROR: Transfer failed: %d\n", ret);
|
||||
}
|
||||
|
||||
irqrestore(flags);
|
||||
twi_givesem(&priv->exclsem);
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: twi_setownaddress
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
* arch/arm/src/sama5/sam_twi.c
|
||||
*
|
||||
* Copyright (C) 2013-2014 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2013-2014, 2016 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* References:
|
||||
@ -242,10 +242,6 @@ static int twi_setaddress(FAR struct i2c_dev_s *dev, int addr, int nbits);
|
||||
static int twi_write(FAR struct i2c_dev_s *dev, const uint8_t *buffer,
|
||||
int buflen);
|
||||
static int twi_read(FAR struct i2c_dev_s *dev, uint8_t *buffer, int buflen);
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int twi_writeread(FAR struct i2c_dev_s *inst, const uint8_t *wbuffer,
|
||||
int wbuflen, uint8_t *rbuffer, int rbuflen);
|
||||
#endif
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
static int twi_transfer(FAR struct i2c_dev_s *dev,
|
||||
FAR struct i2c_msg_s *msgs, int count);
|
||||
@ -332,9 +328,6 @@ struct i2c_ops_s g_twiops =
|
||||
.setaddress = twi_setaddress,
|
||||
.write = twi_write,
|
||||
.read = twi_read,
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
.writeread = twi_writeread,
|
||||
#endif
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
.transfer = twi_transfer
|
||||
#endif
|
||||
@ -1018,83 +1011,6 @@ static int twi_read(FAR struct i2c_dev_s *dev, uint8_t *rbuffer, int rbuflen)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: twi_writeread
|
||||
*
|
||||
* Description:
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int twi_writeread(FAR struct i2c_dev_s *dev, const uint8_t *wbuffer,
|
||||
int wbuflen, uint8_t *rbuffer, int rbuflen)
|
||||
{
|
||||
struct twi_dev_s *priv = (struct twi_dev_s *)dev;
|
||||
struct i2c_msg_s msgv[2];
|
||||
irqstate_t flags;
|
||||
int ret;
|
||||
|
||||
DEBUGASSERT(dev != NULL);
|
||||
i2cvdbg("TWI%d wbuflen: %d rbuflen: %d\n", priv->attr->twi, wbuflen, rbuflen);
|
||||
|
||||
/* Format two messages: The first is a write */
|
||||
|
||||
msgv[0].addr = priv->address;
|
||||
msgv[0].flags = priv->flags;
|
||||
msgv[0].buffer = (uint8_t *)wbuffer; /* Override const */
|
||||
msgv[0].length = wbuflen;
|
||||
|
||||
/* The second is either a read (rbuflen > 0) or a write (rbuflen <= 0) with
|
||||
* no restart.
|
||||
*/
|
||||
|
||||
if (rbuflen > 0)
|
||||
{
|
||||
msgv[1].flags = (priv->flags | I2C_M_READ);
|
||||
}
|
||||
else
|
||||
{
|
||||
msgv[1].flags = (priv->flags | I2C_M_NORESTART),
|
||||
rbuflen = -rbuflen;
|
||||
}
|
||||
|
||||
msgv[1].addr = priv->address;
|
||||
msgv[1].buffer = rbuffer;
|
||||
msgv[1].length = rbuflen;
|
||||
|
||||
/* Get exclusive access to the device */
|
||||
|
||||
twi_takesem(&priv->exclsem);
|
||||
|
||||
/* Perform the write-read */
|
||||
|
||||
priv->msg = msgv;
|
||||
priv->msgc = 2;
|
||||
|
||||
/* Initiate the write operation. The rest will be handled from interrupt
|
||||
* logic. Interrupts must be disabled to prevent re-entrance from the
|
||||
* interrupt level.
|
||||
*/
|
||||
|
||||
flags = irqsave();
|
||||
twi_startwrite(priv, msgv);
|
||||
|
||||
/* And wait for the write/read to complete. Interrupts will be re-enabled
|
||||
* while we are waiting.
|
||||
*/
|
||||
|
||||
ret = twi_wait(priv, wbuflen + rbuflen);
|
||||
if (ret < 0)
|
||||
{
|
||||
i2cdbg("ERROR: Transfer failed: %d\n", ret);
|
||||
}
|
||||
|
||||
irqrestore(flags);
|
||||
twi_givesem(&priv->exclsem);
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: twi_setownaddress
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
* arch/arm/src/samv7/sam_twihs.c
|
||||
*
|
||||
* Copyright (C) 2015 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2015-2016 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* This driver derives from the SAMA5Dx TWIHS driver. References:
|
||||
@ -237,10 +237,6 @@ static int twi_setaddress(FAR struct i2c_dev_s *dev, int addr, int nbits);
|
||||
static int twi_write(FAR struct i2c_dev_s *dev, const uint8_t *buffer,
|
||||
int buflen);
|
||||
static int twi_read(FAR struct i2c_dev_s *dev, uint8_t *buffer, int buflen);
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int twi_writeread(FAR struct i2c_dev_s *inst, const uint8_t *wbuffer,
|
||||
int wbuflen, uint8_t *rbuffer, int rbuflen);
|
||||
#endif
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
static int twi_transfer(FAR struct i2c_dev_s *dev,
|
||||
FAR struct i2c_msg_s *msgs, int count);
|
||||
@ -312,9 +308,6 @@ struct i2c_ops_s g_twiops =
|
||||
.setaddress = twi_setaddress,
|
||||
.write = twi_write,
|
||||
.read = twi_read,
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
.writeread = twi_writeread,
|
||||
#endif
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
.transfer = twi_transfer
|
||||
#endif
|
||||
@ -1045,83 +1038,6 @@ static int twi_read(FAR struct i2c_dev_s *dev, uint8_t *rbuffer, int rbuflen)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: twi_writeread
|
||||
*
|
||||
* Description:
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int twi_writeread(FAR struct i2c_dev_s *dev, const uint8_t *wbuffer,
|
||||
int wbuflen, uint8_t *rbuffer, int rbuflen)
|
||||
{
|
||||
struct twi_dev_s *priv = (struct twi_dev_s *)dev;
|
||||
struct i2c_msg_s msgv[2];
|
||||
irqstate_t flags;
|
||||
int ret;
|
||||
|
||||
DEBUGASSERT(dev != NULL);
|
||||
i2cvdbg("TWIHS%d wbuflen: %d rbuflen: %d\n", priv->attr->twi, wbuflen, rbuflen);
|
||||
|
||||
/* Format two messages: The first is a write */
|
||||
|
||||
msgv[0].addr = priv->address;
|
||||
msgv[0].flags = priv->flags;
|
||||
msgv[0].buffer = (uint8_t *)wbuffer; /* Override const */
|
||||
msgv[0].length = wbuflen;
|
||||
|
||||
/* The second is either a read (rbuflen > 0) or a write (rbuflen < 0) with
|
||||
* no restart.
|
||||
*/
|
||||
|
||||
if (rbuflen > 0)
|
||||
{
|
||||
msgv[1].flags = (priv->flags | I2C_M_READ);
|
||||
}
|
||||
else
|
||||
{
|
||||
msgv[1].flags = (priv->flags | I2C_M_NORESTART);
|
||||
rbuflen = -rbuflen;
|
||||
}
|
||||
|
||||
msgv[1].addr = priv->address;
|
||||
msgv[1].buffer = rbuffer;
|
||||
msgv[1].length = rbuflen;
|
||||
|
||||
/* Get exclusive access to the device */
|
||||
|
||||
twi_takesem(&priv->exclsem);
|
||||
|
||||
/* Initiate the read */
|
||||
|
||||
priv->msg = msgv;
|
||||
priv->msgc = 2;
|
||||
|
||||
/* Initiate the write operation. The rest will be handled from interrupt
|
||||
* logic. Interrupts must be disabled to prevent re-entrance from the
|
||||
* interrupt level.
|
||||
*/
|
||||
|
||||
flags = irqsave();
|
||||
twi_startwrite(priv, msgv);
|
||||
|
||||
/* And wait for the write/read to complete. Interrupts will be re-enabled
|
||||
* while we are waiting.
|
||||
*/
|
||||
|
||||
ret = twi_wait(priv, wbuflen + rbuflen);
|
||||
if (ret < 0)
|
||||
{
|
||||
i2cdbg("ERROR: Transfer failed: %d\n", ret);
|
||||
}
|
||||
|
||||
irqrestore(flags);
|
||||
twi_givesem(&priv->exclsem);
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: twi_setownaddress
|
||||
*
|
||||
|
@ -357,12 +357,6 @@ static int stm32_i2c_write(FAR struct i2c_dev_s *dev, const uint8_t *buffer,
|
||||
int buflen);
|
||||
static int stm32_i2c_read(FAR struct i2c_dev_s *dev, uint8_t *buffer, int buflen);
|
||||
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int stm32_i2c_writeread(FAR struct i2c_dev_s *dev,
|
||||
const uint8_t *wbuffer, int wbuflen,
|
||||
uint8_t *buffer, int buflen);
|
||||
#endif /* CONFIG_I2C_WRITEREAD */
|
||||
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
static int stm32_i2c_transfer(FAR struct i2c_dev_s *dev, FAR struct i2c_msg_s *msgs,
|
||||
int count);
|
||||
@ -488,9 +482,6 @@ static const struct i2c_ops_s stm32_i2c_ops =
|
||||
.setaddress = stm32_i2c_setaddress,
|
||||
.write = stm32_i2c_write,
|
||||
.read = stm32_i2c_read
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
, .writeread = stm32_i2c_writeread
|
||||
#endif
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
, .transfer = stm32_i2c_transfer
|
||||
#endif
|
||||
@ -1913,42 +1904,6 @@ int stm32_i2c_read(FAR struct i2c_dev_s *dev, uint8_t *buffer, int buflen)
|
||||
return stm32_i2c_process(dev, &msgv, 1);
|
||||
}
|
||||
|
||||
/************************************************************************************
|
||||
* Name: stm32_i2c_writeread
|
||||
*
|
||||
* Description:
|
||||
* Read then write I2C data
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int stm32_i2c_writeread(FAR struct i2c_dev_s *dev,
|
||||
const uint8_t *wbuffer, int wbuflen,
|
||||
uint8_t *buffer, int buflen)
|
||||
{
|
||||
stm32_i2c_sem_wait(dev); /* Ensure that address or flags don't change meanwhile */
|
||||
|
||||
struct i2c_msg_s msgv[2] =
|
||||
{
|
||||
{
|
||||
.addr = ((struct stm32_i2c_inst_s *)dev)->address,
|
||||
.flags = ((struct stm32_i2c_inst_s *)dev)->flags,
|
||||
.buffer = (uint8_t *)wbuffer, /* This is really ugly, sorry const ... */
|
||||
.length = wbuflen
|
||||
},
|
||||
{
|
||||
.addr = ((struct stm32_i2c_inst_s *)dev)->address,
|
||||
.flags = ((struct stm32_i2c_inst_s *)dev)->flags |
|
||||
((buflen > 0) ? I2C_M_READ : I2C_M_NORESTART),
|
||||
.buffer = buffer,
|
||||
.length = (buflen > 0) ? buflen : -buflen
|
||||
}
|
||||
};
|
||||
|
||||
return stm32_i2c_process(dev, msgv, 2);
|
||||
}
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
* Name: stm32_i2c_transfer
|
||||
*
|
||||
|
@ -386,12 +386,6 @@ static int stm32_i2c_write(FAR struct i2c_dev_s *dev, const uint8_t *buffer,
|
||||
int buflen);
|
||||
static int stm32_i2c_read(FAR struct i2c_dev_s *dev, uint8_t *buffer, int buflen);
|
||||
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int stm32_i2c_writeread(FAR struct i2c_dev_s *dev,
|
||||
const uint8_t *wbuffer, int wbuflen,
|
||||
uint8_t *buffer, int buflen);
|
||||
#endif /* CONFIG_I2C_WRITEREAD */
|
||||
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
static int stm32_i2c_transfer(FAR struct i2c_dev_s *dev, FAR struct i2c_msg_s *msgs,
|
||||
int count);
|
||||
@ -496,9 +490,6 @@ static const struct i2c_ops_s stm32_i2c_ops =
|
||||
.setaddress = stm32_i2c_setaddress,
|
||||
.write = stm32_i2c_write,
|
||||
.read = stm32_i2c_read
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
, .writeread = stm32_i2c_writeread
|
||||
#endif
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
, .transfer = stm32_i2c_transfer
|
||||
#endif
|
||||
@ -2357,42 +2348,6 @@ int stm32_i2c_read(FAR struct i2c_dev_s *dev, uint8_t *buffer, int buflen)
|
||||
return stm32_i2c_process(dev, &msgv, 1);
|
||||
}
|
||||
|
||||
/************************************************************************************
|
||||
* Name: stm32_i2c_writeread
|
||||
*
|
||||
* Description:
|
||||
* Read then write I2C data
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int stm32_i2c_writeread(FAR struct i2c_dev_s *dev,
|
||||
const uint8_t *wbuffer, int wbuflen,
|
||||
uint8_t *buffer, int buflen)
|
||||
{
|
||||
stm32_i2c_sem_wait(dev); /* Ensure that address or flags don't change meanwhile */
|
||||
|
||||
struct i2c_msg_s msgv[2] =
|
||||
{
|
||||
{
|
||||
.addr = ((struct stm32_i2c_inst_s *)dev)->address,
|
||||
.flags = ((struct stm32_i2c_inst_s *)dev)->flags,
|
||||
.buffer = (uint8_t *)wbuffer, /* This is really ugly, sorry const ... */
|
||||
.length = wbuflen
|
||||
},
|
||||
{
|
||||
.addr = ((struct stm32_i2c_inst_s *)dev)->address,
|
||||
.flags = ((struct stm32_i2c_inst_s *)dev)->flags |
|
||||
((buflen > 0) ? I2C_M_READ : I2C_M_NORESTART),
|
||||
.buffer = buffer,
|
||||
.length = (buflen > 0) ? buflen : -buflen
|
||||
}
|
||||
};
|
||||
|
||||
return stm32_i2c_process(dev, msgv, 2);
|
||||
}
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
* Name: stm32_i2c_transfer
|
||||
*
|
||||
|
@ -342,11 +342,6 @@ static int stm32_i2c_process(FAR struct i2c_dev_s *dev, FAR struct i2c_msg_s *ms
|
||||
static int stm32_i2c_write(FAR struct i2c_dev_s *dev, const uint8_t *buffer,
|
||||
int buflen);
|
||||
static int stm32_i2c_read(FAR struct i2c_dev_s *dev, uint8_t *buffer, int buflen);
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int stm32_i2c_writeread(FAR struct i2c_dev_s *dev,
|
||||
const uint8_t *wbuffer, int wbuflen,
|
||||
uint8_t *buffer, int buflen);
|
||||
#endif
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
static int stm32_i2c_transfer(FAR struct i2c_dev_s *dev, FAR struct i2c_msg_s *msgs,
|
||||
int count);
|
||||
@ -451,9 +446,6 @@ struct i2c_ops_s stm32_i2c_ops =
|
||||
.setaddress = stm32_i2c_setaddress,
|
||||
.write = stm32_i2c_write,
|
||||
.read = stm32_i2c_read
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
, .writeread = stm32_i2c_writeread
|
||||
#endif
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
, .transfer = stm32_i2c_transfer
|
||||
#endif
|
||||
@ -1912,42 +1904,6 @@ int stm32_i2c_read(FAR struct i2c_dev_s *dev, uint8_t *buffer, int buflen)
|
||||
return stm32_i2c_process(dev, &msgv, 1);
|
||||
}
|
||||
|
||||
/************************************************************************************
|
||||
* Name: stm32_i2c_writeread
|
||||
*
|
||||
* Description:
|
||||
* Read then write I2C data
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int stm32_i2c_writeread(FAR struct i2c_dev_s *dev,
|
||||
const uint8_t *wbuffer, int wbuflen,
|
||||
uint8_t *buffer, int buflen)
|
||||
{
|
||||
stm32_i2c_sem_wait(dev); /* ensure that address or flags don't change meanwhile */
|
||||
|
||||
struct i2c_msg_s msgv[2] =
|
||||
{
|
||||
{
|
||||
.addr = ((struct stm32_i2c_inst_s *)dev)->address,
|
||||
.flags = ((struct stm32_i2c_inst_s *)dev)->flags,
|
||||
.buffer = (uint8_t *)wbuffer, /* this is really ugly, sorry const ... */
|
||||
.length = wbuflen
|
||||
},
|
||||
{
|
||||
.addr = ((struct stm32_i2c_inst_s *)dev)->address,
|
||||
.flags = ((struct stm32_i2c_inst_s *)dev)->flags |
|
||||
((buflen > 0) ? I2C_M_READ : I2C_M_NORESTART),
|
||||
.buffer = buffer,
|
||||
.length = (buflen > 0) ? buflen : -buflen
|
||||
}
|
||||
};
|
||||
|
||||
return stm32_i2c_process(dev, msgv, 2);
|
||||
}
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
* Name: stm32_i2c_transfer
|
||||
*
|
||||
|
@ -349,12 +349,6 @@ static int tiva_i2c_write(struct i2c_dev_s *dev, const uint8_t *buffer,
|
||||
int buflen);
|
||||
static int tiva_i2c_read(struct i2c_dev_s *dev, uint8_t *buffer, int buflen);
|
||||
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int tiva_i2c_writeread(struct i2c_dev_s *dev,
|
||||
const uint8_t *wbuffer, int wbuflen,
|
||||
uint8_t *buffer, int buflen);
|
||||
#endif /* CONFIG_I2C_WRITEREAD */
|
||||
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
static int tiva_i2c_transfer(struct i2c_dev_s *dev, struct i2c_msg_s *msgv,
|
||||
int msgc);
|
||||
@ -592,9 +586,6 @@ static const struct i2c_ops_s tiva_i2c_ops =
|
||||
.setaddress = tiva_i2c_setaddress,
|
||||
.write = tiva_i2c_write,
|
||||
.read = tiva_i2c_read
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
, .writeread = tiva_i2c_writeread
|
||||
#endif
|
||||
#ifdef CONFIG_I2C_TRANSFER
|
||||
, .transfer = tiva_i2c_transfer
|
||||
#endif
|
||||
@ -2141,44 +2132,6 @@ int tiva_i2c_read(struct i2c_dev_s *dev, uint8_t *buffer, int buflen)
|
||||
return tiva_i2c_process(dev, &msgv, 1);
|
||||
}
|
||||
|
||||
/************************************************************************************
|
||||
* Name: tiva_i2c_writeread
|
||||
*
|
||||
* Description:
|
||||
* Read then write I2C data
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
#ifdef CONFIG_I2C_WRITEREAD
|
||||
static int tiva_i2c_writeread(struct i2c_dev_s *dev,
|
||||
const uint8_t *wbuffer, int wbuflen,
|
||||
uint8_t *buffer, int buflen)
|
||||
{
|
||||
struct tiva_i2c_inst_s *inst = (struct tiva_i2c_inst_s *)dev;
|
||||
struct i2c_msg_s msgv[2] =
|
||||
{
|
||||
{
|
||||
.addr = inst->address,
|
||||
.flags = inst->flags,
|
||||
.buffer = (uint8_t *)wbuffer, /* This is really ugly, sorry const ... */
|
||||
.length = wbuflen
|
||||
},
|
||||
{
|
||||
.addr = inst->address,
|
||||
.flags = inst->flags | ((buflen > 0) ? I2C_M_READ : I2C_M_NORESTART),
|
||||
.buffer = buffer,
|
||||
.length = (buflen > 0) ? buflen : -buflen
|
||||
}
|
||||
};
|
||||
|
||||
DEBUGASSERT(inst && inst->priv && inst->priv->config);
|
||||
i2cvdbg("I2C%d: wbuflen=%d buflen=%d\n", inst->priv->config->devno, wbuflen, buflen);
|
||||
|
||||
tiva_i2c_sem_wait(dev); /* Ensure that address or flags don't change meanwhile */
|
||||
return tiva_i2c_process(dev, msgv, 2);
|
||||
}
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
* Name: tiva_i2c_transfer
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user