mdio-mux-gpio: use new gpiod_get_array and gpiod_put_array functions
Subsystems (4)
PATCH v2 3/3 mdio-mux-gpio: use new gpiod_get_array and gpiod_put_array functions
Use the new gpiod_get_array and gpiod_put_array functions for obtaining and disposing of GPIO descriptors.
---
This patch depends on my previous patch "gpiolib: add gpiod_get_array and gpiod_put_array functions".
v2: use the new interface
Only compile-tested.
drivers/net/phy/mdio-mux-gpio.c | 61 +++++++++++----------------------------- 1 file changed, 18 insertions(+), 43 deletions(-)
drivers/net/phy/mdio-mux-gpio.c +18 -43
@@ -12,33 +12,31 @@#include <linux/module.h> #include <linux/phy.h> #include <linux/mdio-mux.h> -#include <linux/of_gpio.h> +#include <linux/gpio/consumer.h> #define DRV_VERSION "1.1"#define DRV_DESCRIPTION "GPIO controlled MDIO bus multiplexer driver" -#define MDIO_MUX_GPIO_MAX_BITS 8 -struct mdio_mux_gpio_state { -struct gpio_desc *gpio[MDIO_MUX_GPIO_MAX_BITS ]; -unsigned int num_gpios; +struct gpio_descs *gpios;void *mux_handle; };static int mdio_mux_gpio_switch_fn (int current_child,int desired_child,void *data) { -int values[MDIO_MUX_GPIO_MAX_BITS ]; -unsigned int n;struct mdio_mux_gpio_state *s = data; +int values[s->gpios->array_size]; +unsigned int n;if (current_child == desired_child)return 0 ; -for (n =0 ; n < s->num_gpios; n++) { +for (n =0 ; n < s->gpios->array_size; n++) values[n] = (desired_child >> n) &1 ; - } -gpiod_set_array_cansleep (s->num_gpios, s->gpio, values); + +gpiod_set_array_cansleep (s->gpios->array_size, s->gpios->desc_array, + values);return 0 ; }
@@ -46,56 +44,33 @@ static int mdio_mux_gpio_switch_fn(int current_child, int desired_child,static int mdio_mux_gpio_probe (struct platform_device *pdev) {struct mdio_mux_gpio_state *s; -int num_gpios; -unsigned int n;int r; -if (!pdev->dev.of_node) -return -ENODEV ; - - num_gpios =of_gpio_count (pdev->dev.of_node); -if (num_gpios <=0 || num_gpios >MDIO_MUX_GPIO_MAX_BITS ) -return -ENODEV ; - s =devm_kzalloc (&pdev->dev,sizeof (*s),GFP_KERNEL );if (!s)return -ENOMEM ; - s->num_gpios = num_gpios; - -for (n =0 ; n < num_gpios; ) { -struct gpio_desc *gpio =gpiod_get_index (&pdev->dev,NULL , n, -GPIOD_OUT_LOW ); -if (IS_ERR (gpio)) { - r =PTR_ERR (gpio); - goto err; - } - s->gpio[n] = gpio; - n++; - } + s->gpios =gpiod_get_array (&pdev->dev,NULL ,GPIOD_OUT_LOW ); +if (IS_ERR (s->gpios)) +return PTR_ERR (s->gpios); r =mdio_mux_init (&pdev->dev, mdio_mux_gpio_switch_fn, &s->mux_handle, s); -if (r ==0 ) { - pdev->dev.platform_data = s; -return 0 ; - } -err: -while (n) { - n--; -gpiod_put (s->gpio[n]); +if (r !=0 ) { +gpiod_put_array (s->gpios); +return r; } -return r; + + pdev->dev.platform_data = s; +return 0 ; }static int mdio_mux_gpio_remove (struct platform_device *pdev) { -unsigned int n;struct mdio_mux_gpio_state *s =dev_get_platdata (&pdev->dev);mdio_mux_uninit (s->mux_handle); -for (n =0 ; n < s->num_gpios; n++) -gpiod_put (s->gpio[n]); +gpiod_put_array (s->gpios);return 0 ; }
--
2.0.5
Quoted 9 lines · Rojhalat Ibrahim
Use the new
gpiod_get_arrayandgpiod_put_arrayfunctions for obtaining and disposing of GPIO descriptors.Cc David Miller <[email protected]>Signed-off-by Rojhalat Ibrahim <[email protected]>---
This patch depends on my previous patch "gpiolib: addgpiod_get_arrayandgpiod_put_arrayfunctions".
Quoted 6 lines
v2: use the new interface
Only compile-tested.
drivers/net/phy/mdio-mux-gpio.c | 61 +++++++++++----------------------------- 1 file changed, 18 insertions(+), 43 deletions(-)
Oh yeah.
It would be great to have a tested-by for the next revision though.
Rojhalat, have you been able to test these new interfaces outside of this driver?
Quoted 17 lines · On Monday 09 February 2015 14:18:14 Alexandre Courbot wrote:
Quoted 9 lines · Rojhalat Ibrahim
Use the new
gpiod_get_arrayandgpiod_put_arrayfunctions for obtaining and disposing of GPIO descriptors.Cc David Miller <[email protected]>Signed-off-by Rojhalat Ibrahim <[email protected]>---
This patch depends on my previous patch "gpiolib: addgpiod_get_arrayandgpiod_put_arrayfunctions".Quoted 6 lines
v2: use the new interface
Only compile-tested.
drivers/net/phy/mdio-mux-gpio.c | 61 +++++++++++----------------------------- 1 file changed, 18 insertions(+), 43 deletions(-)
Quoted 7 lines
Oh yeah.
It would be great to have a tested-by for the next revision though.
Rojhalat, have you been able to test these new interfaces outside of this driver?
I have tested the new interface with my FPGA configuration driver (which I plan to submit eventually). I cannot test the mdio-mux-gpio driver because I lack the necessary hardware.
Quoted 22 lines · Rojhalat Ibrahim
Quoted 21 lines · On Monday 09 February 2015 14:18:14 Alexandre Courbot wrote:
Quoted 9 lines · Rojhalat Ibrahim
Use the new
gpiod_get_arrayandgpiod_put_arrayfunctions for obtaining and disposing of GPIO descriptors.Cc David Miller <[email protected]>Signed-off-by Rojhalat Ibrahim <[email protected]>---
This patch depends on my previous patch "gpiolib: addgpiod_get_arrayandgpiod_put_arrayfunctions".Quoted 6 lines
v2: use the new interface
Only compile-tested.
drivers/net/phy/mdio-mux-gpio.c | 61 +++++++++++----------------------------- 1 file changed, 18 insertions(+), 43 deletions(-)Oh yeah.
It would be great to have a tested-by for the next revision though.
Quoted 7 lines
Quoted 3 lines
Rojhalat, have you been able to test these new interfaces outside of this driver?
I have tested the new interface with my FPGA configuration driver (which I plan to submit eventually). I cannot test the mdio-mux-gpio driver because I lack the necessary hardware.
That's good enough - I just want to make sure the interface has undergone some testing. :P