Skip to content

Commit

Permalink
Merge remote-tracking branch 'spi/topic/wr' into spi-next
Browse files Browse the repository at this point in the history
  • Loading branch information
Mark Brown committed Oct 25, 2013
2 parents 344a851 + 2359074 commit 82f85cf
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 12 deletions.
7 changes: 1 addition & 6 deletions drivers/hwmon/adt7310.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,8 @@ static const u8 adt7310_reg_table[] = {
static int adt7310_spi_read_word(struct device *dev, u8 reg)
{
struct spi_device *spi = to_spi_device(dev);
int ret;

ret = spi_w8r16(spi, AD7310_COMMAND(reg) | ADT7310_CMD_READ);
if (ret < 0)
return ret;

return be16_to_cpu((__force __be16)ret);
return spi_w8r16be(spi, AD7310_COMMAND(reg) | ADT7310_CMD_READ);
}

static int adt7310_spi_write_word(struct device *dev, u8 reg, u16 data)
Expand Down
3 changes: 1 addition & 2 deletions drivers/staging/iio/meter/ade7753.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,14 @@ static int ade7753_spi_read_reg_16(struct device *dev,
struct ade7753_state *st = iio_priv(indio_dev);
ssize_t ret;

ret = spi_w8r16(st->us, ADE7753_READ_REG(reg_address));
ret = spi_w8r16be(st->us, ADE7753_READ_REG(reg_address));
if (ret < 0) {
dev_err(&st->us->dev, "problem when reading 16 bit register 0x%02X",
reg_address);
return ret;
}

*val = ret;
*val = be16_to_cpup(val);

return 0;
}
Expand Down
3 changes: 1 addition & 2 deletions drivers/staging/iio/meter/ade7754.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,14 @@ static int ade7754_spi_read_reg_16(struct device *dev,
struct ade7754_state *st = iio_priv(indio_dev);
int ret;

ret = spi_w8r16(st->us, ADE7754_READ_REG(reg_address));
ret = spi_w8r16be(st->us, ADE7754_READ_REG(reg_address));
if (ret < 0) {
dev_err(&st->us->dev, "problem when reading 16 bit register 0x%02X",
reg_address);
return ret;
}

*val = ret;
*val = be16_to_cpup(val);

return 0;
}
Expand Down
3 changes: 1 addition & 2 deletions drivers/staging/iio/meter/ade7759.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,14 @@ static int ade7759_spi_read_reg_16(struct device *dev,
struct ade7759_state *st = iio_priv(indio_dev);
int ret;

ret = spi_w8r16(st->us, ADE7759_READ_REG(reg_address));
ret = spi_w8r16be(st->us, ADE7759_READ_REG(reg_address));
if (ret < 0) {
dev_err(&st->us->dev, "problem when reading 16 bit register 0x%02X",
reg_address);
return ret;
}

*val = ret;
*val = be16_to_cpup(val);

return 0;
}
Expand Down
27 changes: 27 additions & 0 deletions include/linux/spi/spi.h
Original file line number Diff line number Diff line change
Expand Up @@ -853,6 +853,33 @@ static inline ssize_t spi_w8r16(struct spi_device *spi, u8 cmd)
return (status < 0) ? status : result;
}

/**
* spi_w8r16be - SPI synchronous 8 bit write followed by 16 bit big-endian read
* @spi: device with which data will be exchanged
* @cmd: command to be written before data is read back
* Context: can sleep
*
* This returns the (unsigned) sixteen bit number returned by the device in cpu
* endianness, or else a negative error code. Callable only from contexts that
* can sleep.
*
* This function is similar to spi_w8r16, with the exception that it will
* convert the read 16 bit data word from big-endian to native endianness.
*
*/
static inline ssize_t spi_w8r16be(struct spi_device *spi, u8 cmd)

{
ssize_t status;
__be16 result;

status = spi_write_then_read(spi, &cmd, 1, &result, 2);
if (status < 0)
return status;

return be16_to_cpu(result);
}

/*---------------------------------------------------------------------------*/

/*
Expand Down

0 comments on commit 82f85cf

Please sign in to comment.