On Tue, Dec 18, 2018 at 12:35:40PM +0100, Johan Hovold wrote: > On Thu, Nov 22, 2018 at 10:38:18PM +0530, Nishad Kamdar wrote: > > Use the gpiod interface instead of the deprecated old non-descriptor > > interface. > > > > Signed-off-by: Nishad Kamdar <nishadkamdar@xxxxxxxxx> > > --- > > Changes in v2: > > - Resolved compilation errors. > > --- > > drivers/staging/greybus/arche-apb-ctrl.c | 159 +++++++++-------------- > > 1 file changed, 65 insertions(+), 94 deletions(-) > > > > diff --git a/drivers/staging/greybus/arche-apb-ctrl.c b/drivers/staging/greybus/arche-apb-ctrl.c > > index be5ffed90bcf..e887f6aee20b 100644 > > --- a/drivers/staging/greybus/arche-apb-ctrl.c > > +++ b/drivers/staging/greybus/arche-apb-ctrl.c > > @@ -8,9 +8,8 @@ > > > > #include <linux/clk.h> > > #include <linux/delay.h> > > -#include <linux/gpio.h> > > +#include <linux/gpio/consumer.h> > > #include <linux/interrupt.h> > > -#include <linux/of_gpio.h> > > #include <linux/of_irq.h> > > #include <linux/module.h> > > #include <linux/pinctrl/consumer.h> > > @@ -24,12 +23,12 @@ static void apb_bootret_deassert(struct device *dev); > > > > struct arche_apb_ctrl_drvdata { > > /* Control GPIO signals to and from AP <=> AP Bridges */ > > - int resetn_gpio; > > - int boot_ret_gpio; > > - int pwroff_gpio; > > - int wake_in_gpio; > > - int wake_out_gpio; > > - int pwrdn_gpio; > > + struct gpio_desc *resetn; > > + struct gpio_desc *boot_ret; > > + struct gpio_desc *pwroff; > > + struct gpio_desc *wake_in; > > + struct gpio_desc *wake_out; > > + struct gpio_desc *pwrdn; > > > > enum arche_platform_state state; > > bool init_disabled; > > @@ -37,28 +36,28 @@ struct arche_apb_ctrl_drvdata { > > struct regulator *vcore; > > struct regulator *vio; > > > > - int clk_en_gpio; > > + struct gpio_desc *clk_en; > > struct clk *clk; > > > > struct pinctrl *pinctrl; > > struct pinctrl_state *pin_default; > > > > /* V2: SPI Bus control */ > > - int spi_en_gpio; > > + struct gpio_desc *spi_en; > > bool spi_en_polarity_high; > > }; > > > > /* > > * Note that these low level api's are active high > > */ > > -static inline void deassert_reset(unsigned int gpio) > > +static inline void deassert_reset(struct gpio_desc *gpio) > > { > > - gpio_set_value(gpio, 1); > > + gpiod_set_value(gpio, 1); > > } > > > > -static inline void assert_reset(unsigned int gpio) > > +static inline void assert_reset(struct gpio_desc *gpio) > > { > > - gpio_set_value(gpio, 0); > > + gpiod_set_value(gpio, 0); > > } > > As the comment above deassert_reset() suggests, this change will > actually change the semantics of these calls by taking any gpio flags > into account (e.g. ACTIVE_LOW which will invert the signals). > > Perhaps you should just use gpiod_set_raw_value() for now, and this can > be addressed later. Alternatively, drop the comment and invert the > polarity here and any users will need to update their device trees. > > Either way, mention this in the commit message. > Ok, I'll use the gpiod_set_raw_value(). > > /* > > @@ -75,11 +74,11 @@ static int coldboot_seq(struct platform_device *pdev) > > return 0; > > > > /* Hold APB in reset state */ > > - assert_reset(apb->resetn_gpio); > > + assert_reset(apb->resetn); > > > > if (apb->state == ARCHE_PLATFORM_STATE_FW_FLASHING && > > - gpio_is_valid(apb->spi_en_gpio)) > > - devm_gpio_free(dev, apb->spi_en_gpio); > > + apb->spi_en) > > No need to break the line any more. > Ok. > > + devm_gpiod_put(dev, apb->spi_en); > > > > /* Enable power to APB */ > > if (!IS_ERR(apb->vcore)) { > > @@ -101,13 +100,13 @@ static int coldboot_seq(struct platform_device *pdev) > > apb_bootret_deassert(dev); > > > > /* On DB3 clock was not mandatory */ > > - if (gpio_is_valid(apb->clk_en_gpio)) > > - gpio_set_value(apb->clk_en_gpio, 1); > > + if (apb->clk_en) > > + gpiod_set_value(apb->clk_en, 1); > > > > usleep_range(100, 200); > > > > /* deassert reset to APB : Active-low signal */ > > - deassert_reset(apb->resetn_gpio); > > + deassert_reset(apb->resetn); > > > > apb->state = ARCHE_PLATFORM_STATE_ACTIVE; > > > > @@ -119,6 +118,7 @@ static int fw_flashing_seq(struct platform_device *pdev) > > struct device *dev = &pdev->dev; > > struct arche_apb_ctrl_drvdata *apb = platform_get_drvdata(pdev); > > int ret; > > + unsigned long flags; > > > > if (apb->init_disabled || > > apb->state == ARCHE_PLATFORM_STATE_FW_FLASHING) > > @@ -136,25 +136,20 @@ static int fw_flashing_seq(struct platform_device *pdev) > > return ret; > > } > > > > - if (gpio_is_valid(apb->spi_en_gpio)) { > > spi_en_gpio is currently optional, so cannot just drop the check. > Ok, I'll restore it. > > - unsigned long flags; > > + if (apb->spi_en_polarity_high) > > + flags = GPIOD_OUT_HIGH; > > + else > > + flags = GPIOD_OUT_LOW; > > This should probably also be converted to honouring the gpio flags, but > perhaps better to do in a later patch. > Ok. > > > > - if (apb->spi_en_polarity_high) > > - flags = GPIOF_OUT_INIT_HIGH; > > - else > > - flags = GPIOF_OUT_INIT_LOW; > > - > > - ret = devm_gpio_request_one(dev, apb->spi_en_gpio, > > - flags, "apb_spi_en"); > > - if (ret) { > > - dev_err(dev, "Failed requesting SPI bus en gpio %d\n", > > - apb->spi_en_gpio); > > - return ret; > > - } > > + apb->spi_en = devm_gpiod_get(dev, "gb,spi-en-gpio", flags); > > + if (IS_ERR(apb->spi_en)) { > > + ret = PTR_ERR(apb->spi_en); > > + dev_err(dev, "Failed requesting SPI bus en GPIO: %d\n", ret); > > + return ret; > > } > > > > /* for flashing device should be in reset state */ > > - assert_reset(apb->resetn_gpio); > > + assert_reset(apb->resetn); > > apb->state = ARCHE_PLATFORM_STATE_FW_FLASHING; > > > > return 0; > > @@ -177,8 +172,8 @@ static int standby_boot_seq(struct platform_device *pdev) > > return 0; > > > > if (apb->state == ARCHE_PLATFORM_STATE_FW_FLASHING && > > - gpio_is_valid(apb->spi_en_gpio)) > > - devm_gpio_free(dev, apb->spi_en_gpio); > > + apb->spi_en) > > No line break. Check this throughout. > Yes. > > + devm_gpiod_put(dev, apb->spi_en); > > > > /* > > * As per WDM spec, do nothing > > > @@ -404,12 +379,8 @@ static int apb_ctrl_get_devtree_data(struct platform_device *pdev, > > } > > > > /* Only applicable for platform >= V2 */ > > - apb->spi_en_gpio = of_get_named_gpio(np, "spi-en-gpio", 0); > > - if (apb->spi_en_gpio >= 0) { > > - if (of_property_read_bool(pdev->dev.of_node, > > - "spi-en-active-high")) > > - apb->spi_en_polarity_high = true; > > - } > > + if (of_property_read_bool(pdev->dev.of_node, "gb,spi-en-active-high")) > > + apb->spi_en_polarity_high = true; > > Guess it's fine to drop the spi_en check here though. > Ok. Thanks for the review. regards, Nishad > Johan _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel