Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1426872

[PATCH v4 net-next v4 05/14] net: dsa: mv88e6xxx: add switch register helpers

From Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Newsgroups linux.kernel
Subject [PATCH v4 net-next v4 05/14] net: dsa: mv88e6xxx: add switch register helpers
Date 2016-06-20 20:00 +0200
Message-ID <rMbEl-2RX-3@gated-at.bofh.it> (permalink)
References <rM9VT-215-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


The mixed assignments, allocations and registrations in the probe code
make it hard to follow the logic and figure out what is DSA or chip
specific.

Extract the struct dsa_switch related code in a simple
mv88e6xxx_register_switch helper function.

For symmetry in the code, add a mv88e6xxx_unregister_switch function.

Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
---
 drivers/net/dsa/mv88e6xxx.c | 41 ++++++++++++++++++++++++++++-------------
 1 file changed, 28 insertions(+), 13 deletions(-)

diff --git a/drivers/net/dsa/mv88e6xxx.c b/drivers/net/dsa/mv88e6xxx.c
index 4b4bffc..ad7735d 100644
--- a/drivers/net/dsa/mv88e6xxx.c
+++ b/drivers/net/dsa/mv88e6xxx.c
@@ -3690,30 +3690,48 @@ static struct dsa_switch_driver mv88e6xxx_switch_driver = {
 	.port_fdb_dump          = mv88e6xxx_port_fdb_dump,
 };
 
+static int mv88e6xxx_register_switch(struct mv88e6xxx_priv_state *ps,
+				     struct device_node *np)
+{
+	struct device *dev = ps->dev;
+	struct dsa_switch *ds;
+
+	ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL);
+	if (!ds)
+		return -ENOMEM;
+
+	ds->dev = dev;
+	ds->priv = ps;
+	ds->drv = &mv88e6xxx_switch_driver;
+
+	dev_set_drvdata(dev, ds);
+
+	return dsa_register_switch(ds, np);
+}
+
+static void mv88e6xxx_unregister_switch(struct mv88e6xxx_priv_state *ps)
+{
+	dsa_unregister_switch(ps->ds);
+}
+
 static int mv88e6xxx_probe(struct mdio_device *mdiodev)
 {
 	struct device *dev = &mdiodev->dev;
 	struct device_node *np = dev->of_node;
 	struct mv88e6xxx_priv_state *ps;
 	int id, prod_num, rev;
-	struct dsa_switch *ds;
 	u32 eeprom_len;
 	int err;
 
-	ds = devm_kzalloc(dev, sizeof(*ds) + sizeof(*ps), GFP_KERNEL);
-	if (!ds)
+	ps = devm_kzalloc(dev, sizeof(*ps), GFP_KERNEL);
+	if (!ps)
 		return -ENOMEM;
 
-	ps = (struct mv88e6xxx_priv_state *)(ds + 1);
-	ds->priv = ps;
-	ds->dev = dev;
 	ps->dev = dev;
 	ps->bus = mdiodev->bus;
 	ps->sw_addr = mdiodev->addr;
 	mutex_init(&ps->smi_mutex);
 
-	ds->drv = &mv88e6xxx_switch_driver;
-
 	id = mv88e6xxx_reg_read(ps, REG_PORT(0), PORT_SWITCH_ID);
 	if (id < 0)
 		return id;
@@ -3745,9 +3763,7 @@ static int mv88e6xxx_probe(struct mdio_device *mdiodev)
 	if (err)
 		return err;
 
-	dev_set_drvdata(dev, ds);
-
-	err = dsa_register_switch(ds, np);
+	err = mv88e6xxx_register_switch(ps, np);
 	if (err) {
 		mv88e6xxx_mdio_unregister(ps);
 		return err;
@@ -3764,8 +3780,7 @@ static void mv88e6xxx_remove(struct mdio_device *mdiodev)
 	struct dsa_switch *ds = dev_get_drvdata(&mdiodev->dev);
 	struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
 
-	dsa_unregister_switch(ds);
-
+	mv88e6xxx_unregister_switch(ps);
 	mv88e6xxx_mdio_unregister(ps);
 }
 
-- 
2.9.0

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v4 net-next v4 00/14] net: dsa: mv88e6xxx: probe compatible Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 18:10 +0200
  [PATCH v4 net-next v4 02/14] net: dsa: mv88e6xxx: remove redundant assignments Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 18:10 +0200
  [PATCH v4 net-next v4 11/14] net: dsa: mv88e6xxx: add detection helper Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 18:10 +0200
  [PATCH v4 net-next v4 09/14] net: dsa: mv88e6xxx: add chip allocation helper Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 18:10 +0200
  [PATCH v4 net-next v4 06/14] net: dsa: mv88e6xxx: use gpio get optional variant Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 18:10 +0200
  [PATCH v4 net-next v4 14/14] net: dsa: mv88e6xxx: abstract switch registers accesses Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 18:10 +0200
    Re: [PATCH v4 net-next v4 14/14] net: dsa: mv88e6xxx: abstract  switch registers accesses Andrew Lunn <andrew@lunn.ch> - 2016-06-20 18:40 +0200
      Re: [PATCH v4 net-next v4 14/14] net: dsa: mv88e6xxx: abstract switch registers accesses Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 20:00 +0200
  [PATCH v4 net-next v4 13/14] net: dsa: mv88e6xxx: add port base address to info Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 18:10 +0200
  [PATCH v4 net-next v4 12/14] net: dsa: mv88e6xxx: pass compatible info Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 18:10 +0200
  [PATCH v4 net-next v4 08/14] net: dsa: mv88e6xxx: rename smi_mutex to reg_lock Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 18:10 +0200
  [PATCH v4 net-next v4 05/14] net: dsa: mv88e6xxx: add switch register helpers Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 20:00 +0200
  [PATCH v4 net-next v4 01/14] net: dsa: mv88e6xxx: fix style issues Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 20:00 +0200
  [PATCH v4 net-next v4 03/14] net: dsa: mv88e6xxx: use already declared variables Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 20:00 +0200
  [PATCH v4 net-next v4 07/14] net: dsa: mv88e6xxx: remove table args in info lookup Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 20:00 +0200
  [PATCH v4 net-next v4 04/14] net: dsa: mv88e6xxx: do not increment bus refcount Vivien Didelot <vivien.didelot@savoirfairelinux.com> - 2016-06-20 20:00 +0200

csiph-web