Re: [RFC PATCH 05/10] net: dsa: mv88e6xxx: add support for GPIO configuration

2018-02-04 Thread Andrew Lunn
On Sun, Feb 04, 2018 at 11:53:58AM -0800, Florian Fainelli wrote:
> On 02/03/2018 01:40 PM, Andrew Lunn wrote:
> > From: Brandon Streiff 
> > 
> > MV88E6352 and later switches support GPIO control through the "Scratch
> > & Misc" global2 register. (Older switches do too, though with a slightly
> > different register interface. Only the 6352-style is implemented here.)
> > 
> > Add a new file, global2_scratch.c, for operations in the Scratch & Misc
> > space. Additionally, add a GPIO operations structure to present an
> > abstract view over GPIO manipulation.
> > 
> > Reverse Christmas tree and unsigned has been replaced with unsigned
> > int by Andrew Lunn.
> 
> I thought one of the comments made on Brian's original submission was to
> expose GPIO pins as a proper gpiochip which incidentally might help with
> GPIOs on the switch being used for other purposes (e.g; LEDs, etc.), is
> that an option here?

Hi Florian

The gpiochip part is quite easy. The problem is pinctrl. That is much
harder, since some of the basic assumptions are not true. Any pin can
take any function.

Adding gpiochip and pinctrl is something which can be added later. We
are not defining any DT binding here, so we don't need to consider
backwards compatibility in the future.

  Andrew


Re: [RFC PATCH 05/10] net: dsa: mv88e6xxx: add support for GPIO configuration

2018-02-04 Thread Florian Fainelli
On 02/03/2018 01:40 PM, Andrew Lunn wrote:
> From: Brandon Streiff 
> 
> MV88E6352 and later switches support GPIO control through the "Scratch
> & Misc" global2 register. (Older switches do too, though with a slightly
> different register interface. Only the 6352-style is implemented here.)
> 
> Add a new file, global2_scratch.c, for operations in the Scratch & Misc
> space. Additionally, add a GPIO operations structure to present an
> abstract view over GPIO manipulation.
> 
> Reverse Christmas tree and unsigned has been replaced with unsigned
> int by Andrew Lunn.

I thought one of the comments made on Brian's original submission was to
expose GPIO pins as a proper gpiochip which incidentally might help with
GPIOs on the switch being used for other purposes (e.g; LEDs, etc.), is
that an option here?
-- 
Florian


[RFC PATCH 05/10] net: dsa: mv88e6xxx: add support for GPIO configuration

2018-02-03 Thread Andrew Lunn
From: Brandon Streiff 

MV88E6352 and later switches support GPIO control through the "Scratch
& Misc" global2 register. (Older switches do too, though with a slightly
different register interface. Only the 6352-style is implemented here.)

Add a new file, global2_scratch.c, for operations in the Scratch & Misc
space. Additionally, add a GPIO operations structure to present an
abstract view over GPIO manipulation.

Reverse Christmas tree and unsigned has been replaced with unsigned
int by Andrew Lunn.

Signed-off-by: Brandon Streiff 
Signed-off-by: Andrew Lunn 
---
 drivers/net/dsa/mv88e6xxx/Makefile  |   1 +
 drivers/net/dsa/mv88e6xxx/chip.c|  26 +++
 drivers/net/dsa/mv88e6xxx/chip.h|  33 
 drivers/net/dsa/mv88e6xxx/global2.c |   1 +
 drivers/net/dsa/mv88e6xxx/global2.h |  33 
 drivers/net/dsa/mv88e6xxx/global2_scratch.c | 240 
 6 files changed, 334 insertions(+)
 create mode 100644 drivers/net/dsa/mv88e6xxx/global2_scratch.c

diff --git a/drivers/net/dsa/mv88e6xxx/Makefile 
b/drivers/net/dsa/mv88e6xxx/Makefile
index 40a423c9a982..0cd0e2b1e4a2 100644
--- a/drivers/net/dsa/mv88e6xxx/Makefile
+++ b/drivers/net/dsa/mv88e6xxx/Makefile
@@ -6,6 +6,7 @@ mv88e6xxx-objs += global1_atu.o
 mv88e6xxx-objs += global1_vtu.o
 mv88e6xxx-$(CONFIG_NET_DSA_MV88E6XXX_GLOBAL2) += global2.o
 mv88e6xxx-$(CONFIG_NET_DSA_MV88E6XXX_GLOBAL2) += global2_avb.o
+mv88e6xxx-$(CONFIG_NET_DSA_MV88E6XXX_GLOBAL2) += global2_scratch.o
 mv88e6xxx-objs += phy.o
 mv88e6xxx-objs += port.o
 mv88e6xxx-$(CONFIG_NET_DSA_MV88E6XXX_PTP) += ptp.o
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index a795efd41511..41e28e28e65b 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -2480,6 +2480,7 @@ static const struct mv88e6xxx_ops mv88e6141_ops = {
.reset = mv88e6352_g1_reset,
.vtu_getnext = mv88e6352_g1_vtu_getnext,
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
+   .gpio_ops = &mv88e6352_gpio_ops,
 };
 
 static const struct mv88e6xxx_ops mv88e6161_ops = {
@@ -2610,6 +2611,7 @@ static const struct mv88e6xxx_ops mv88e6172_ops = {
.vtu_getnext = mv88e6352_g1_vtu_getnext,
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
.serdes_power = mv88e6352_serdes_power,
+   .gpio_ops = &mv88e6352_gpio_ops,
 };
 
 static const struct mv88e6xxx_ops mv88e6175_ops = {
@@ -2681,6 +2683,7 @@ static const struct mv88e6xxx_ops mv88e6176_ops = {
.vtu_getnext = mv88e6352_g1_vtu_getnext,
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
.serdes_power = mv88e6352_serdes_power,
+   .gpio_ops = &mv88e6352_gpio_ops,
 };
 
 static const struct mv88e6xxx_ops mv88e6185_ops = {
@@ -2744,6 +2747,7 @@ static const struct mv88e6xxx_ops mv88e6190_ops = {
.vtu_getnext = mv88e6390_g1_vtu_getnext,
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
.serdes_power = mv88e6390_serdes_power,
+   .gpio_ops = &mv88e6352_gpio_ops,
 };
 
 static const struct mv88e6xxx_ops mv88e6190x_ops = {
@@ -2779,6 +2783,7 @@ static const struct mv88e6xxx_ops mv88e6190x_ops = {
.vtu_getnext = mv88e6390_g1_vtu_getnext,
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
.serdes_power = mv88e6390_serdes_power,
+   .gpio_ops = &mv88e6352_gpio_ops,
 };
 
 static const struct mv88e6xxx_ops mv88e6191_ops = {
@@ -2851,6 +2856,7 @@ static const struct mv88e6xxx_ops mv88e6240_ops = {
.vtu_getnext = mv88e6352_g1_vtu_getnext,
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
.serdes_power = mv88e6352_serdes_power,
+   .gpio_ops = &mv88e6352_gpio_ops,
.avb_ops = &mv88e6352_avb_ops,
 };
 
@@ -2888,6 +2894,7 @@ static const struct mv88e6xxx_ops mv88e6290_ops = {
.vtu_getnext = mv88e6390_g1_vtu_getnext,
.vtu_loadpurge = mv88e6390_g1_vtu_loadpurge,
.serdes_power = mv88e6390_serdes_power,
+   .gpio_ops = &mv88e6352_gpio_ops,
.avb_ops = &mv88e6390_avb_ops,
 };
 
@@ -2923,6 +2930,7 @@ static const struct mv88e6xxx_ops mv88e6320_ops = {
.reset = mv88e6352_g1_reset,
.vtu_getnext = mv88e6185_g1_vtu_getnext,
.vtu_loadpurge = mv88e6185_g1_vtu_loadpurge,
+   .gpio_ops = &mv88e6352_gpio_ops,
.avb_ops = &mv88e6352_avb_ops,
 };
 
@@ -2956,6 +2964,7 @@ static const struct mv88e6xxx_ops mv88e6321_ops = {
.reset = mv88e6352_g1_reset,
.vtu_getnext = mv88e6185_g1_vtu_getnext,
.vtu_loadpurge = mv88e6185_g1_vtu_loadpurge,
+   .gpio_ops = &mv88e6352_gpio_ops,
.avb_ops = &mv88e6352_avb_ops,
 };
 
@@ -2993,6 +3002,7 @@ static const struct mv88e6xxx_ops mv88e6341_ops = {
.reset = mv88e6352_g1_reset,
.vtu_getnext = mv88e6352_g1_vtu_getnext,
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
+   .gpio_ops = &mv88e6352_gpio_ops,
.avb_ops = &mv88e6390_avb_ops,
 };
 
@@ -3100,6 +3110,7 @@ static const struct mv88e6xxx_ops mv88e6