On Tue, Dec 18, 2018 at 12:50:56PM +0100, Johan Hovold wrote:
On Thu, Nov 22, 2018 at 10:39:24PM +0530, Nishad Kamdar wrote:
Use the gpiod interface instead of the deprecated old non-descriptor interface.
Signed-off-by: Nishad Kamdar nishadkamdar@gmail.com
Changes in v2:
- Move comment to the same line as to what it applies to.
drivers/staging/greybus/arche-platform.c | 119 ++++++++--------------- 1 file changed, 41 insertions(+), 78 deletions(-)
diff --git a/drivers/staging/greybus/arche-platform.c b/drivers/staging/greybus/arche-platform.c index 4c36e88766e7..a5cea79d8e32 100644 --- a/drivers/staging/greybus/arche-platform.c +++ b/drivers/staging/greybus/arche-platform.c @@ -8,10 +8,9 @@ #include <linux/clk.h> #include <linux/delay.h> -#include <linux/gpio.h> +#include <linux/gpio/consumer.h> #include <linux/init.h> #include <linux/module.h> -#include <linux/of_gpio.h> #include <linux/of_platform.h> #include <linux/pinctrl/consumer.h> #include <linux/platform_device.h> @@ -45,14 +44,14 @@ enum svc_wakedetect_state { struct arche_platform_drvdata { /* Control GPIO signals to and from AP <=> SVC */
- int svc_reset_gpio;
- struct gpio_desc *svc_reset;
- struct gpio_desc *svc_sysboot;
Why move sysboot? The flag below is about reset (but should eventually go away).
Ok, I'll restore its position.
bool is_reset_act_hi;
- int svc_sysboot_gpio;
- int wake_detect_gpio; /* bi-dir,maps to WAKE_MOD & WAKE_FRAME signals */
- struct gpio_desc *wake_detect; /* bi-dir,maps to WAKE_MOD & WAKE_FRAME signals */
enum arche_platform_state state;
- int svc_refclk_req;
- struct gpio_desc *svc_refclk_req; struct clk *svc_ref_clk;
struct pinctrl *pinctrl; @@ -85,9 +84,9 @@ static void arche_platform_set_wake_detect_state( arche_pdata->wake_detect_state = state; } -static inline void svc_reset_onoff(unsigned int gpio, bool onoff) +static inline void svc_reset_onoff(struct gpio_desc *gpio, bool onoff) {
- gpio_set_value(gpio, onoff);
- gpiod_set_value(gpio, onoff);
} static int apb_cold_boot(struct device *dev, void *data) @@ -116,7 +115,6 @@ static int apb_poweroff(struct device *dev, void *data) static void arche_platform_wd_irq_en(struct arche_platform_drvdata *arche_pdata) { /* Enable interrupt here, to read event back from SVC */
- gpio_direction_input(arche_pdata->wake_detect_gpio); enable_irq(arche_pdata->wake_detect_irq);
} @@ -160,7 +158,7 @@ static irqreturn_t arche_platform_wd_irq(int irq, void *devid) spin_lock_irqsave(&arche_pdata->wake_lock, flags);
- if (gpio_get_value(arche_pdata->wake_detect_gpio)) {
- if (gpiod_get_value(arche_pdata->wake_detect)) { /* wake/detect rising */
/* @@ -224,10 +222,10 @@ arche_platform_coldboot_seq(struct arche_platform_drvdata *arche_pdata) dev_info(arche_pdata->dev, "Booting from cold boot state\n");
- svc_reset_onoff(arche_pdata->svc_reset_gpio,
- svc_reset_onoff(arche_pdata->svc_reset,
No need to break line here.
Ok.
arche_pdata->is_reset_act_hi);
- gpio_set_value(arche_pdata->svc_sysboot_gpio, 0);
- gpiod_set_value(arche_pdata->svc_sysboot, 0); usleep_range(100, 200);
ret = clk_prepare_enable(arche_pdata->svc_ref_clk); @@ -238,7 +236,7 @@ arche_platform_coldboot_seq(struct arche_platform_drvdata *arche_pdata) } /* bring SVC out of reset */
- svc_reset_onoff(arche_pdata->svc_reset_gpio,
- svc_reset_onoff(arche_pdata->svc_reset,
Same here. Please check throughout.
Yes.
!arche_pdata->is_reset_act_hi);
arche_platform_set_state(arche_pdata, ARCHE_PLATFORM_STATE_ACTIVE); @@ -259,10 +257,10 @@ arche_platform_fw_flashing_seq(struct arche_platform_drvdata *arche_pdata) dev_info(arche_pdata->dev, "Switching to FW flashing state\n");
- svc_reset_onoff(arche_pdata->svc_reset_gpio,
- svc_reset_onoff(arche_pdata->svc_reset, arche_pdata->is_reset_act_hi);
- gpio_set_value(arche_pdata->svc_sysboot_gpio, 1);
- gpiod_set_value(arche_pdata->svc_sysboot, 1);
usleep_range(100, 200); @@ -273,7 +271,7 @@ arche_platform_fw_flashing_seq(struct arche_platform_drvdata *arche_pdata) return ret; }
- svc_reset_onoff(arche_pdata->svc_reset_gpio,
- svc_reset_onoff(arche_pdata->svc_reset, !arche_pdata->is_reset_act_hi);
arche_platform_set_state(arche_pdata, ARCHE_PLATFORM_STATE_FW_FLASHING); @@ -305,7 +303,7 @@ arche_platform_poweroff_seq(struct arche_platform_drvdata *arche_pdata) clk_disable_unprepare(arche_pdata->svc_ref_clk); /* As part of exit, put APB back in reset state */
- svc_reset_onoff(arche_pdata->svc_reset_gpio,
- svc_reset_onoff(arche_pdata->svc_reset, arche_pdata->is_reset_act_hi);
arche_platform_set_state(arche_pdata, ARCHE_PLATFORM_STATE_OFF); @@ -435,6 +433,7 @@ static int arche_platform_probe(struct platform_device *pdev) struct device *dev = &pdev->dev; struct device_node *np = dev->of_node; int ret;
- unsigned int flags;
arche_pdata = devm_kzalloc(&pdev->dev, sizeof(*arche_pdata), GFP_KERNEL); @@ -444,61 +443,33 @@ static int arche_platform_probe(struct platform_device *pdev) /* setup svc reset gpio */ arche_pdata->is_reset_act_hi = of_property_read_bool(np, "svc,reset-active-high");
This should also go away eventually in favour of gpio flags in devicetree. Fine to keep for now, though.
Ok.
- arche_pdata->svc_reset_gpio = of_get_named_gpio(np,
"svc,reset-gpio",
0);
- if (!gpio_is_valid(arche_pdata->svc_reset_gpio)) {
dev_err(dev, "failed to get reset-gpio\n");
return arche_pdata->svc_reset_gpio;
- }
- ret = devm_gpio_request(dev, arche_pdata->svc_reset_gpio, "svc-reset");
- if (ret) {
dev_err(dev, "failed to request svc-reset gpio:%d\n", ret);
return ret;
- }
- ret = gpio_direction_output(arche_pdata->svc_reset_gpio,
arche_pdata->is_reset_act_hi);
- if (ret) {
dev_err(dev, "failed to set svc-reset gpio dir:%d\n", ret);
- if (arche_pdata->is_reset_act_hi)
flags = GPIOD_OUT_HIGH;
- else
flags = GPIOD_OUT_LOW;
- arche_pdata->svc_reset = devm_gpiod_get(dev, "svc,reset-gpio", flags);
- if (IS_ERR(arche_pdata->svc_reset)) {
ret = PTR_ERR(arche_pdata->svc_reset);
return ret; }dev_err(dev, "failed to request svc-reset GPIO:%d\n", ret);
Thanks, Johan
Thanks for the review.
Regards, Nishad