Hi,
On Fri, Oct 06, 2017 at 05:51:35PM +0200, srinivas.kandagatla@xxxxxxxxxx wrote:
From: Srinivas Kandagatla <srinivas.kandagatla@xxxxxxxxxx>[...]
This patch adds support to read/write slimbus value elements.
Currently it only supports byte read/write. Adding this support in
regmap would give codec drivers more flexibility when there are more
than 2 control interfaces like slimbus, i2c.
Without this patch each codec driver has to directly call slimbus value
element apis, and this could would get messy once we want to add i2c
interface to it.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@xxxxxxxxxx>
---
+static int regmap_slimbus_byte_reg_read(void *context, unsigned int reg,
+ unsigned int *val)
+{
+ struct slim_device *slim = context;
+ struct slim_val_inf msg = {0,};
+
+ msg.start_offset = reg;
+ msg.num_bytes = 1;
+ msg.rbuf = (void *)val;
+
+ return slim_request_val_element(slim, &msg);
+}
This looks like it won't work on big-endian systems. I know big endian
is pretty uncommon in devices that will likely have SLIMBus, but it's
better to be endian-independent.
+static int regmap_slimbus_byte_reg_write(void *context, unsigned int reg,
+ unsigned int val)
+{
+ struct slim_device *slim = context;
+ struct slim_val_inf msg = {0,};
+
+ msg.start_offset = reg;
+ msg.num_bytes = 1;
+ msg.wbuf = (void *)&val;
+
+ return slim_change_val_element(slim, &msg);
+}
dito
+static struct regmap_bus regmap_slimbus_bus = {
+ .reg_write = regmap_slimbus_byte_reg_write,
+ .reg_read = regmap_slimbus_byte_reg_read,
+};
Thanks,
Jonathan NeuschÃfer