Thread (22 messages) 22 messages, 4 authors, 2016-01-05

Re: [PATCH 01/10] i2c-mux: add common core data for every mux instance

From: Peter Rosin <peda@lysator.liu.se>
Date: 2016-01-05 09:05:31
Also in: linux-i2c, lkml

Hi Guenter,

On 2016-01-04 16:37, Guenter Roeck wrote:
On 01/04/2016 07:10 AM, Peter Rosin wrote:
quoted
From: Peter Rosin <redacted>

The initial core mux structure starts off small with only the parent
adapter pointer, which all muxes have, and a priv pointer for mux
driver private data.

Add i2c_mux_alloc function to unify the creation of a mux.

Where appropriate, pass around the mux core structure instead of the
parent adapter or the driver private data.

Remove the parent adapter pointer from the driver private data for all
mux drivers.

Signed-off-by: Peter Rosin <redacted>
---
  drivers/i2c/i2c-mux.c                      | 35 ++++++++++++++++++++++++-----
  drivers/i2c/muxes/i2c-arb-gpio-challenge.c | 24 +++++++++++---------
  drivers/i2c/muxes/i2c-mux-gpio.c           | 20 +++++++++--------
  drivers/i2c/muxes/i2c-mux-pca9541.c        | 36 ++++++++++++++++--------------
  drivers/i2c/muxes/i2c-mux-pca954x.c        | 22 +++++++++++++-----
  drivers/i2c/muxes/i2c-mux-pinctrl.c        | 24 +++++++++++---------
  drivers/i2c/muxes/i2c-mux-reg.c            | 25 ++++++++++++---------
  include/linux/i2c-mux.h                    | 14 +++++++++++-
  8 files changed, 129 insertions(+), 71 deletions(-)
*snip*
quoted
+struct i2c_mux_core *i2c_mux_alloc(struct device *dev, int sizeof_priv)
+{
+    struct i2c_mux_core *muxc;
+
+    muxc = devm_kzalloc(dev, sizeof(*muxc), GFP_KERNEL);
+    if (!muxc)
+        return NULL;
+    if (sizeof_priv) {
+        muxc->priv = devm_kzalloc(dev, sizeof_priv, GFP_KERNEL);
+        if (!muxc->priv)
+            goto fail;
+    }
Why not just allocate sizeof(*muxc) + sizeof_priv in a single operation
and then assign muxc->priv to muxc + 1 if sizeof_priv > 0 ?
Why indeed, good suggestion.

*snip*
quoted
@@ -134,13 +134,14 @@ static int i2c_arbitrator_probe(struct platform_device *pdev)
          return -EINVAL;
      }

-    arb = devm_kzalloc(dev, sizeof(*arb), GFP_KERNEL);
-    if (!arb) {
-        dev_err(dev, "Cannot allocate i2c_arbitrator_data\n");
+    muxc = i2c_mux_alloc(dev, sizeof(*arb));
+    if (!muxc) {
+        dev_err(dev, "Cannot allocate i2c_mux_core structure\n");
Unnecessary error message.
Right, I'll remove that (and the others just like it).

I'll see if I can cook up a v2 that also converts the i2c muxes elsewhere in
drivers/ that I wasn't aware of.

Cheers,
Peter
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help