Re: [PATCH] save/restore samcop gpio configuration upon PM events

From: Paul Sokolovsky <pmiscml_at_gmail.com>
Date: Sat, 29 Sep 2007 23:32:14 +0300

Hello Milan,

Wednesday, September 26, 2007, 9:17:50 PM, you wrote:

> New revision of patch, with static functions and added some
> whitespace:)

  This patch has broken whitespace. Please attach files, don't paste
them inline. Please resubmit, now apparently against the previous
version, which was committed. Thanks.

> Signed-off-by: Milan Plzik <milan.plzik_at_gmail.com>
> ---
> drivers/mfd/samcop_base.c | 33 +++++++++++++++++++++++++++++++++
> 1 files changed, 33 insertions(+), 0 deletions(-)

> diff --git a/drivers/mfd/samcop_base.c b/drivers/mfd/samcop_base.c
> index 97901f6..4a92176 100644
> --- a/drivers/mfd/samcop_base.c
> +++ b/drivers/mfd/samcop_base.c
> @@ -64,6 +64,8 @@
> #include <asm/arch/clock.h>
> #include <asm/types.h>
>
> +#define SAMCOP_GPIO_REGISTERS (_SAMCOP_GPIO_INTPND/sizeof(uint32_t))
> +
> struct samcop_data
> {
> struct device *dev;
> @@ -73,6 +75,7 @@ struct samcop_data
> unsigned long irqmask;
> struct platform_device **devices;
> int ndevices;
> + uint32_t gpio_suspend_data[SAMCOP_GPIO_REGISTERS];
> } *samcop_device_data; /* XXX samcop_device_data is a hack */
>
> static void samcop_set_gpio_bit(struct device *dev, unsigned gpio, int
> val);
> @@ -981,6 +984,32 @@ void samcop_set_gpio_int_enable(struct device *dev,
> unsigned int idx, u32 mask,
> spin_unlock_irqrestore(&samcop->gpio_lock, flags);
> }
>
> +static void samcop_gpio_suspend(struct platform_device *pdev)
> +{
> + struct samcop_data *samcop;
> + int i;
> +
> + samcop = platform_get_drvdata(pdev);
> +
> + for (i=0; i < SAMCOP_GPIO_REGISTERS; i++) {
> + samcop->gpio_suspend_data[i] =
> + samcop_read_register(samcop, _SAMCOP_GPIO_Base + i * 4);
> + };
> +}
> +
> +static void samcop_gpio_resume(struct platform_device *pdev)
> +{
> + struct samcop_data *samcop;
> + int i;
> +
> + samcop = platform_get_drvdata(pdev);
> +
> + for (i = 0; i < SAMCOP_GPIO_REGISTERS; i++) {
> + samcop_write_register(samcop, _SAMCOP_GPIO_Base + i * 4,
> + samcop->gpio_suspend_data[i]);
> + };
> +}
> +
> void samcop_reset_fcd(struct device *dev)
> {
> struct samcop_data *samcop = dev->driver_data;
> @@ -1403,6 +1432,8 @@ static int samcop_suspend(struct platform_device
> *pdev, pm_message_t state)
> {
> struct samcop_data *samcop;
>
> + samcop_gpio_suspend(pdev);
> +
> samcop = platform_get_drvdata(pdev);
>
> samcop->irqmask = samcop_read_register(samcop, SAMCOP_IC_INTMSK);
> @@ -1418,6 +1449,8 @@ static int samcop_resume(struct platform_device
> *pdev)
> {
> struct samcop_data *samcop;
>
> + samcop_gpio_resume(pdev);
> +
> samcop = platform_get_drvdata(pdev);
>
> if (samcop->irqmask != 0xffffffff)

-- 
Best regards,
 Paul                            mailto:pmiscml_at_gmail.com
Received on Sat Sep 29 2007 - 16:32:25 EDT

This archive was generated by hypermail 2.2.0 : Sat Sep 29 2007 - 16:33:03 EDT