aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/wm8994-core.c
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2011-03-17 17:42:29 -0400
committerSamuel Ortiz <sameo@linux.intel.com>2011-03-23 05:42:10 -0400
commit4277163c2a451fd8db0883cde5e55cf61a70fe85 (patch)
tree9044303832b24eef57534ea45f45e9d26cc30b26 /drivers/mfd/wm8994-core.c
parent334e9ab8f9bb90ddf1eff0b07609961a628064b6 (diff)
mfd: Push byte swap out of WM8994 bulk I/O
For bulk I/O it is both convenient and more sensible to pre-swap the data rather than doing the swap as part of the I/O operation so move the byte swaps we're currently doing into the core write function into the register based functions, giving the bulk write function a straight pass through to the chip. This leaves reads inconsistent, this will be addressed as a followup patch. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/mfd/wm8994-core.c')
-rw-r--r--drivers/mfd/wm8994-core.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c
index ce93796e7f57..475bd50d5528 100644
--- a/drivers/mfd/wm8994-core.c
+++ b/drivers/mfd/wm8994-core.c
@@ -107,9 +107,7 @@ static int wm8994_write(struct wm8994 *wm8994, unsigned short reg,
107 107
108 for (i = 0; i < bytes / 2; i++) { 108 for (i = 0; i < bytes / 2; i++) {
109 dev_vdbg(wm8994->dev, "Write %04x to R%d(0x%x)\n", 109 dev_vdbg(wm8994->dev, "Write %04x to R%d(0x%x)\n",
110 buf[i], reg + i, reg + i); 110 be16_to_cpu(buf[i]), reg + i, reg + i);
111
112 buf[i] = cpu_to_be16(buf[i]);
113 } 111 }
114 112
115 return wm8994->write_dev(wm8994, reg, bytes, src); 113 return wm8994->write_dev(wm8994, reg, bytes, src);
@@ -127,6 +125,8 @@ int wm8994_reg_write(struct wm8994 *wm8994, unsigned short reg,
127{ 125{
128 int ret; 126 int ret;
129 127
128 val = cpu_to_be16(val);
129
130 mutex_lock(&wm8994->io_lock); 130 mutex_lock(&wm8994->io_lock);
131 131
132 ret = wm8994_write(wm8994, reg, 2, &val); 132 ret = wm8994_write(wm8994, reg, 2, &val);
@@ -143,7 +143,7 @@ EXPORT_SYMBOL_GPL(wm8994_reg_write);
143 * @wm8994: Device to write to 143 * @wm8994: Device to write to
144 * @reg: First register 144 * @reg: First register
145 * @count: Number of registers 145 * @count: Number of registers
146 * @buf: Buffer to write from. 146 * @buf: Buffer to write from. Data must be big-endian formatted.
147 */ 147 */
148int wm8994_bulk_write(struct wm8994 *wm8994, unsigned short reg, 148int wm8994_bulk_write(struct wm8994 *wm8994, unsigned short reg,
149 int count, u16 *buf) 149 int count, u16 *buf)
@@ -183,6 +183,8 @@ int wm8994_set_bits(struct wm8994 *wm8994, unsigned short reg,
183 r &= ~mask; 183 r &= ~mask;
184 r |= val; 184 r |= val;
185 185
186 r = cpu_to_be16(r);
187
186 ret = wm8994_write(wm8994, reg, 2, &r); 188 ret = wm8994_write(wm8994, reg, 2, &r);
187 189
188out: 190out: