All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Hilman <khilman@ti.com>
To: Tarun Kanti DebBarma <tarun.kanti@ti.com>
Cc: linux-omap@vger.kernel.org, santosh.shilimkar@ti.com, tony@atomide.com
Subject: Re: [PATCH v2 17/18] GPIO: OMAP: Use PM runtime framework
Date: Thu, 16 Jun 2011 11:03:15 -0700	[thread overview]
Message-ID: <87r56tlkm4.fsf@ti.com> (raw)
In-Reply-To: <1308111806-29152-8-git-send-email-tarun.kanti@ti.com> (Tarun Kanti DebBarma's message of "Wed, 15 Jun 2011 09:53:25 +0530")

Tarun Kanti DebBarma <tarun.kanti@ti.com> writes:

> From: Charulatha V <charu@ti.com>
>
> Call runtime pm APIs pm_runtime_get_sync() and pm_runtime_put_sync()
> for enabling/disabling clocks appropriately. Remove syscore_ops and
> instead use dev_pm_ops now.
>
> Signed-off-by: Charulatha V <charu@ti.com>
> Signed-off-by: Tarun Kanti DebBarma <tarun.kanti@ti.com>

Approach is fine.  some minor comments below..

> ---
>  drivers/gpio/gpio-omap.c |  100 ++++++++++++++++++++++++++++++++++++---------
>  1 files changed, 80 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
> index ea984fd..f5bb469 100644
> --- a/drivers/gpio/gpio-omap.c
> +++ b/drivers/gpio/gpio-omap.c
> @@ -80,6 +80,8 @@ struct gpio_bank {
>  	struct omap_gpio_reg_offs *regs;
>  };
>  
> +static void omap_gpio_mod_init(struct gpio_bank *bank);
> +
>  #define GPIO_INDEX(bank, gpio) (gpio % bank->width)
>  #define GPIO_BIT(bank, gpio) (1 << GPIO_INDEX(bank, gpio))
>  #define GPIO_MOD_CTRL_BIT	BIT(0)
> @@ -492,6 +494,22 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset)
>  	struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip);
>  	unsigned long flags;
>  
> +	/*
> +	 * If this is the first gpio_request for the bank,
> +	 * enable the bank module.
> +	 */
> +	if (!bank->mod_usage) {
> +		if (IS_ERR_VALUE(pm_runtime_get_sync(bank->dev) < 0)) {
> +			dev_err(bank->dev, "%s: GPIO bank %d "
> +					"pm_runtime_get_sync failed\n",
> +					__func__, bank->id);
> +			return -EINVAL;
> +		}
> +
> +		/* Initialize the gpio bank registers to init time value */
> +		omap_gpio_mod_init(bank);
> +	}
> +
>  	spin_lock_irqsave(&bank->lock, flags);
>  
>  	/* Set trigger to none. You need to enable the desired trigger with
> @@ -548,6 +566,18 @@ static void omap_gpio_free(struct gpio_chip *chip, unsigned offset)
>  
>  	_reset_gpio(bank, bank->chip.base + offset);
>  	spin_unlock_irqrestore(&bank->lock, flags);
> +
> +	/*
> +	 * If this is the last gpio to be freed in the bank,
> +	 * disable the bank module.
> +	 */
> +	if (!bank->mod_usage) {
> +		if (IS_ERR_VALUE(pm_runtime_put_sync(bank->dev) < 0)) {
> +			dev_err(bank->dev, "%s: GPIO bank %d "
> +					"pm_runtime_put_sync failed\n",
> +					__func__, bank->id);
> +		}
> +	}
>  }
>  
>  /*
> @@ -572,6 +602,9 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
>  	chained_irq_enter(chip, desc);
>  
>  	bank = irq_get_handler_data(irq);
> +
> +	pm_runtime_get_sync(bank->dev);
> +
>  	isr_reg = bank->base + bank->regs->irqstatus;
>  
>  	if (WARN_ON(!isr_reg))
> @@ -640,6 +673,8 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
>  exit:
>  	if (!unmasked)
>  		chained_irq_exit(chip, desc);
> +
> +	pm_runtime_put_sync(bank->dev);
>  }
>  
>  static void gpio_irq_shutdown(struct irq_data *d)
> @@ -1120,12 +1155,25 @@ static int __devinit omap_gpio_probe(struct platform_device *pdev)
>  	}
>  
>  	pm_runtime_enable(bank->dev);
> -	pm_runtime_get_sync(bank->dev);
> +	pm_runtime_irq_safe(bank->dev);
> +	if (IS_ERR_VALUE(pm_runtime_get_sync(bank->dev) < 0)) {
> +		dev_err(bank->dev, "%s: GPIO bank %d pm_runtime_get_sync "
> +				"failed\n", __func__, bank->id);
> +		iounmap(bank->base);
> +		return -EINVAL;
> +	}
>  
>  	omap_gpio_mod_init(bank);
>  	omap_gpio_chip_init(bank);
>  	omap_gpio_show_rev(bank);
>  
> +	if (IS_ERR_VALUE(pm_runtime_put_sync(bank->dev) < 0)) {
> +		dev_err(bank->dev, "%s: GPIO bank %d pm_runtime_put_sync "
> +				"failed\n", __func__, bank->id);
> +		iounmap(bank->base);
> +		return -EINVAL;
> +	}
> +
>  	list_add_tail(&bank->node, &omap_gpio_list);
>  
>  	return ret;
> @@ -1136,7 +1184,7 @@ err_exit:
>  	return ret;
>  }
>  
> -static int omap_gpio_suspend(void)
> +static int omap_gpio_suspend(struct device *dev)
>  {
>  	struct gpio_bank *bank;
>  
> @@ -1163,7 +1211,7 @@ static int omap_gpio_suspend(void)
>  	return 0;
>  }
>  
> -static void omap_gpio_resume(void)
> +static int omap_gpio_resume(struct device *dev)
>  {
>  	struct gpio_bank *bank;
>  
> @@ -1173,7 +1221,7 @@ static void omap_gpio_resume(void)
>  		unsigned long flags;
>  
>  		if (!bank->suspend_support)
> -			return;
> +			return 0;
>  
>  		wake_clear = bank->base + bank->regs->wkup_clear;
>  		wake_set = bank->base + bank->regs->wkup_set;
> @@ -1183,12 +1231,18 @@ static void omap_gpio_resume(void)
>  		__raw_writel(bank->saved_wakeup, wake_set);
>  		spin_unlock_irqrestore(&bank->lock, flags);
>  	}
> +	return 0;
>  }
>  
> -static struct syscore_ops omap_gpio_syscore_ops = {
> -	.suspend	= omap_gpio_suspend,
> -	.resume		= omap_gpio_resume,
> -};
> +static int omap_gpio_pm_runtime_suspend(struct device *dev)

Please drop the 'pm_' in these function names.

> +{
> +	return 0;
> +}
> +
> +static int omap_gpio_pm_runtime_resume(struct device *dev)
> +{
> +	return 0;
> +}

Actually,  empty functions should not even be added.  Just add them in
the patch that uses them.

Kevin

  reply	other threads:[~2011-06-16 18:03 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-15  4:23 [PATCH v2 10/18] GPIO: OMAP: Remove hardcoded offsets in ctxt save/restore Tarun Kanti DebBarma
2011-06-15  4:23 ` [PATCH v2 11/18] GPIO: OMAP: Clean set_gpio_triggering function Tarun Kanti DebBarma
2011-06-16 17:40   ` Kevin Hilman
2011-06-17  5:16     ` DebBarma, Tarun Kanti
2011-06-15  4:23 ` [PATCH v2 12/18] GPIO: OMAP: Clean omap_gpio_mod_init function Tarun Kanti DebBarma
2011-06-16 17:49   ` Kevin Hilman
2011-06-17  5:11     ` DebBarma, Tarun Kanti
2011-06-27 10:48     ` DebBarma, Tarun Kanti
2011-06-27 23:06       ` Kevin Hilman
2011-06-15  4:23 ` [PATCH v2 13/18] GPIO: OMAP15xx: Use pinctrl offset instead of macro Tarun Kanti DebBarma
2011-06-15  4:23 ` [PATCH v2 14/18] GPIO: OMAP: Fix use of readl/readw to access isr_reg Tarun Kanti DebBarma
2011-06-16 17:53   ` Kevin Hilman
2011-06-17  5:07     ` DebBarma, Tarun Kanti
2011-06-16 17:57   ` Kevin Hilman
2011-06-17  5:05     ` DebBarma, Tarun Kanti
2011-06-15  4:23 ` [PATCH v2 15/18] GPIO: OMAP: Remove bank->method & METHOD_* macros Tarun Kanti DebBarma
2011-06-15  4:23 ` [PATCH v2 16/18] GPIO: OMAP: Fix bankwidth for OMAP7xx MPUIO Tarun Kanti DebBarma
2011-06-15  4:23 ` [PATCH v2 17/18] GPIO: OMAP: Use PM runtime framework Tarun Kanti DebBarma
2011-06-16 18:03   ` Kevin Hilman [this message]
2011-06-17  5:00     ` DebBarma, Tarun Kanti
2011-06-15  4:23 ` [PATCH v2 18/18] GPIO: OMAP2+: Clean prepare_for_idle and resume_after_idle Tarun Kanti DebBarma
2011-06-16 18:10   ` Kevin Hilman
2011-06-17  4:57     ` DebBarma, Tarun Kanti

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87r56tlkm4.fsf@ti.com \
    --to=khilman@ti.com \
    --cc=linux-omap@vger.kernel.org \
    --cc=santosh.shilimkar@ti.com \
    --cc=tarun.kanti@ti.com \
    --cc=tony@atomide.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.