Re: [PATCH v2] RFC: staging: greybus: shape up greybus GPIO

From: Viresh Kumar
Date: Tue Oct 11 2016 - 22:22:02 EST


I was looking to exactly do thanks, thanks for doing it before us :)

On 10-10-16, 10:39, Linus Walleij wrote:
> static int gb_gpio_probe(struct gbphy_device *gbphy_dev,
> const struct gbphy_device_id *id)
> {
> @@ -690,7 +556,6 @@ static int gb_gpio_probe(struct gbphy_device *gbphy_dev,
> gpio->get = gb_gpio_get;
> gpio->set = gb_gpio_set;
> gpio->set_debounce = gb_gpio_set_debounce;
> - gpio->to_irq = gb_gpio_to_irq;
> gpio->base = -1; /* Allocate base dynamically */
> gpio->ngpio = ggc->line_max + 1;
> gpio->can_sleep = true;
> @@ -699,26 +564,26 @@ static int gb_gpio_probe(struct gbphy_device *gbphy_dev,
> if (ret)
> goto exit_line_free;
>
> - ret = gb_gpio_irqchip_add(gpio, irqc, 0,
> - handle_level_irq, IRQ_TYPE_NONE);
> + ret = devm_gpiochip_add_data(&connection->bundle->dev,

We should be using gbphy_dev->dev here instead.

> + gpio, ggc);
> if (ret) {
> dev_err(&connection->bundle->dev,

And also at these places. I will send a patch to fix these separately though.

> - "failed to add irq chip: %d\n", ret);
> + "failed to add gpio chip: %d\n", ret);
> goto exit_line_free;
> }
>
> - ret = gpiochip_add(gpio);
> + ret = gpiochip_irqchip_add(gpio, irqc,
> + 0, handle_level_irq,
> + IRQ_TYPE_NONE);
> if (ret) {
> dev_err(&connection->bundle->dev,
> - "failed to add gpio chip: %d\n", ret);
> - goto exit_gpio_irqchip_remove;
> + "failed to add gpio irqchip: %d\n", ret);
> + goto exit_line_free;
> }
>
> gbphy_runtime_put_autosuspend(gbphy_dev);
> return 0;
>
> -exit_gpio_irqchip_remove:
> - gb_gpio_irqchip_remove(ggc);
> exit_line_free:
> kfree(ggc->lines);
> exit_connection_disable:
> @@ -741,8 +606,6 @@ static void gb_gpio_remove(struct gbphy_device *gbphy_dev)
> gbphy_runtime_get_noresume(gbphy_dev);
>
> gb_connection_disable_rx(connection);
> - gpiochip_remove(&ggc->chip);

This should stay as is, right?

> - gb_gpio_irqchip_remove(ggc);
> gb_connection_disable(connection);
> gb_connection_destroy(connection);
> kfree(ggc->lines);

--
viresh