mdio-mux-gpio: Use GPIO descriptor interface and new gpiod_set_array function
Subsystems (4)
PATCH v2 1/1 mdio-mux-gpio: Use GPIO descriptor interface and new gpiod_set_array function
Convert mdio-mux-gpio to the GPIO descriptor interface and use the new gpiod_set_array function to set all output signals simultaneously.
--
This patch depends on the gpiod_set_array function, which is available in the linux-gpio devel tree.
v2: fix gpiod_get_index usage
drivers/net/phy/mdio-mux-gpio.c | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-)
drivers/net/phy/mdio-mux-gpio.c +14 -24
@@ -14,13 +14,13 @@#include <linux/mdio-mux.h> #include <linux/of_gpio.h> -#define DRV_VERSION "1.0" +#define DRV_VERSION "1.1"#define DRV_DESCRIPTION "GPIO controlled MDIO bus multiplexer driver"#define MDIO_MUX_GPIO_MAX_BITS 8struct mdio_mux_gpio_state { -int gpio[MDIO_MUX_GPIO_MAX_BITS ]; +struct gpio_desc *gpio[MDIO_MUX_GPIO_MAX_BITS ];unsigned int num_gpios;void *mux_handle; };
@@ -28,29 +28,23 @@ struct mdio_mux_gpio_state {static int mdio_mux_gpio_switch_fn (int current_child,int desired_child,void *data) { -int change; +int values[MDIO_MUX_GPIO_MAX_BITS ];unsigned int n;struct mdio_mux_gpio_state *s = data;if (current_child == desired_child)return 0 ; - change = current_child ==-1 ?-1 : current_child ^ desired_child; -for (n =0 ; n < s->num_gpios; n++) { -if (change &1 ) -gpio_set_value_cansleep (s->gpio[n], - (desired_child &1 ) !=0 ); - change >>=1 ; - desired_child >>=1 ; + values[n] = (desired_child >> n) &1 ; } +gpiod_set_array_cansleep (s->num_gpios, s->gpio, values);return 0 ; }static int mdio_mux_gpio_probe (struct platform_device *pdev) { -enum of_gpio_flags f;struct mdio_mux_gpio_state *s;int num_gpios;unsigned int n;
@@ -70,22 +64,14 @@ static int mdio_mux_gpio_probe(struct platform_device *pdev) s->num_gpios = num_gpios;for (n =0 ; n < num_gpios; ) { -int gpio =of_get_gpio_flags (pdev->dev.of_node, n, &f); -if (gpio <0 ) { - r = (gpio == -ENODEV ) ? -EPROBE_DEFER : gpio; +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++; - - r =gpio_request (gpio,"mdio_mux_gpio" ); -if (r) - goto err; - - r =gpio_direction_output (gpio,0 ); -if (r) - goto err; } r = mdio_mux_init(&pdev->dev,
@@ -98,15 +84,19 @@ static int mdio_mux_gpio_probe(struct platform_device *pdev) err:while (n) { n--; -gpio_free (s->gpio[n]); +gpiod_put (s->gpio[n]); }return r; }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]); + }return 0 ; }
--
2.0.4
Hello.
Quoted 18 lines · Rojhalat Ibrahim
Convert mdio-mux-gpio to the GPIO descriptor interface and use the new
gpiod_set_arrayfunction to set all output signals simultaneously.Signed-off-by Rojhalat Ibrahim <[email protected]>Acked-by David S. Miller <[email protected]>--
This patch depends on thegpiod_set_arrayfunction, which is available in the linux-gpio devel tree.v2: fix
gpiod_get_indexusagedrivers/net/phy/mdio-mux-gpio.c | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-)drivers/net/phy/mdio-mux-gpio.c +0
-0
[...]
Quoted 1 line
drivers/net/phy/mdio-mux-gpio.c +0
-0@@ -98,15 +84,19 @@ static int mdio_mux_gpio_probe(struct platform_device *pdev)
[...]
drivers/net/phy/mdio-mux-gpio.c static int mdio_mux_gpio_probe(struct platform_device *pdev) · line 99
Quoted 8 lines
static int mdio_mux_gpio_remove(struct platform_device *pdev) {drivers/net/phy/mdio-mux-gpio.c +4
-0+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]); + }
{} not needed; scripts/checkpatch.pl should have complained...
WBR, Sergei
Quoted 5 lines · Rojhalat Ibrahim
Convert mdio-mux-gpio to the GPIO descriptor interface and use the new
gpiod_set_arrayfunction to set all output signals simultaneously.Signed-off-by Rojhalat Ibrahim <[email protected]>Acked-by David S. Miller <[email protected]>
Patch applied.
Yours,
Linus Walleij
Quoted 13 lines · Sergei Shtylyov
On 11/25/2014 12:31 PM, Rojhalat Ibrahim wrote:
[...]drivers/net/phy/mdio-mux-gpio.c static int mdio_mux_gpio_probe(struct platform_device *pdev) · line 99
Quoted 9 lines
static int mdio_mux_gpio_remove(struct platform_device *pdev) {drivers/net/phy/mdio-mux-gpio.c +4
-0+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]); + }
Quoted 1 line
{} not needed;
scripts/checkpatch.plshould have complained...
Yep it complains so I fixed it up when applying the patch.
Yours,
Linus Walleij