Skip to content

Commit

Permalink
sm501: add power control callback
Browse files Browse the repository at this point in the history
Add callback to get or set the power control if the device has the sleep
connected to some form of GPIO.

Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Cc: Arnaud Patard <apatard@mandriva.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Ben Dooks authored and Linus Torvalds committed Jul 25, 2008
1 parent 717115e commit 472dba7
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
31 changes: 31 additions & 0 deletions drivers/mfd/sm501.c
Original file line number Diff line number Diff line change
Expand Up @@ -1138,8 +1138,31 @@ static int sm501_plat_probe(struct platform_device *dev)
}

#ifdef CONFIG_PM

/* power management support */

static void sm501_set_power(struct sm501_devdata *sm, int on)
{
struct sm501_platdata *pd = sm->platdata;

if (pd == NULL)
return;

if (pd->get_power) {
if (pd->get_power(sm->dev) == on) {
dev_dbg(sm->dev, "is already %d\n", on);
return;
}
}

if (pd->set_power) {
dev_dbg(sm->dev, "setting power to %d\n", on);

pd->set_power(sm->dev, on);
sm501_mdelay(sm, 10);
}
}

static int sm501_plat_suspend(struct platform_device *pdev, pm_message_t state)
{
struct sm501_devdata *sm = platform_get_drvdata(pdev);
Expand All @@ -1148,13 +1171,21 @@ static int sm501_plat_suspend(struct platform_device *pdev, pm_message_t state)
sm->pm_misc = readl(sm->regs + SM501_MISC_CONTROL);

sm501_dump_regs(sm);

if (sm->platdata) {
if (sm->platdata->flags & SM501_FLAG_SUSPEND_OFF)
sm501_set_power(sm, 0);
}

return 0;
}

static int sm501_plat_resume(struct platform_device *pdev)
{
struct sm501_devdata *sm = platform_get_drvdata(pdev);

sm501_set_power(sm, 1);

sm501_dump_regs(sm);
sm501_dump_gate(sm);
sm501_dump_clk(sm);
Expand Down
7 changes: 7 additions & 0 deletions include/linux/sm501.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,8 @@ struct sm501_init_gpio {
struct sm501_reg_init gpio_ddr_high;
};

#define SM501_FLAG_SUSPEND_OFF (1<<4)

/* sm501_platdata
*
* This is passed with the platform device to allow the board
Expand All @@ -170,6 +172,11 @@ struct sm501_platdata {
struct sm501_init_gpio *init_gpiop;
struct sm501_platdata_fb *fb;

int flags;

int (*get_power)(struct device *dev);
int (*set_power)(struct device *dev, unsigned int on);

struct sm501_platdata_gpio_i2c *gpio_i2c;
unsigned int gpio_i2c_nr;
};

0 comments on commit 472dba7

Please sign in to comment.