Acked-by: Sonic Zhang <sonic.zhang@xxxxxxxxxx> >-----Original Message----- >From: Rafael J. Wysocki [mailto:rjw@xxxxxxx] >Sent: Thursday, July 12, 2012 3:24 AM >To: LKML >Cc: Linux PM list; Linus Walleij; linux-i2c@xxxxxxxxxxxxxxx; Zhang, Sonic; Jean >Delvare; Ben Dooks; Wolfram Sang; Peter Korsgaard; Guan Xuetao; Vitaly Wool; >Colin Cross; Stephen Warren >Subject: [PATCH 2/7] i2c-bfin-twi: Use struct dev_pm_ops for power management > >From: Rafael J. Wysocki <rjw@xxxxxxx> > >Make the Blackfin On-Chip Two Wire Interface driver define its PM >callbacks through a struct dev_pm_ops object rather than by using >legacy PM hooks in struct platform_driver. > >Signed-off-by: Rafael J. Wysocki <rjw@xxxxxxx> >--- > drivers/i2c/busses/i2c-bfin-twi.c | 18 ++++++++++-------- > 1 file changed, 10 insertions(+), 8 deletions(-) > >Index: linux/drivers/i2c/busses/i2c-bfin-twi.c >============================================================= >====== >--- linux.orig/drivers/i2c/busses/i2c-bfin-twi.c >+++ linux/drivers/i2c/busses/i2c-bfin-twi.c >@@ -611,9 +611,9 @@ static struct i2c_algorithm bfin_twi_alg > .functionality = bfin_twi_functionality, > }; > >-static int i2c_bfin_twi_suspend(struct platform_device *pdev, pm_message_t >state) >+static int i2c_bfin_twi_suspend(struct device *dev) > { >- struct bfin_twi_iface *iface = platform_get_drvdata(pdev); >+ struct bfin_twi_iface *iface = dev_get_drvdata(dev); > > iface->saved_clkdiv = read_CLKDIV(iface); > iface->saved_control = read_CONTROL(iface); >@@ -626,14 +626,14 @@ static int i2c_bfin_twi_suspend(struct p > return 0; > } > >-static int i2c_bfin_twi_resume(struct platform_device *pdev) >+static int i2c_bfin_twi_resume(struct device *dev) > { >- struct bfin_twi_iface *iface = platform_get_drvdata(pdev); >+ struct bfin_twi_iface *iface = dev_get_drvdata(dev); > > int rc = request_irq(iface->irq, bfin_twi_interrupt_entry, >- 0, pdev->name, iface); >+ 0, to_platform_device(dev)->name, iface); > if (rc) { >- dev_err(&pdev->dev, "Can't get IRQ %d !\n", iface->irq); >+ dev_err(dev, "Can't get IRQ %d !\n", iface->irq); > return -ENODEV; > } > >@@ -646,6 +646,9 @@ static int i2c_bfin_twi_resume(struct pl > return 0; > } > >+static SIMPLE_DEV_PM_OPS(i2c_bfin_twi_pm, >+ i2c_bfin_twi_suspend, i2c_bfin_twi_resume); >+ > static int i2c_bfin_twi_probe(struct platform_device *pdev) > { > struct bfin_twi_iface *iface; >@@ -770,11 +773,10 @@ static int i2c_bfin_twi_remove(struct pl > static struct platform_driver i2c_bfin_twi_driver = { > .probe = i2c_bfin_twi_probe, > .remove = i2c_bfin_twi_remove, >- .suspend = i2c_bfin_twi_suspend, >- .resume = i2c_bfin_twi_resume, > .driver = { > .name = "i2c-bfin-twi", > .owner = THIS_MODULE, >+ .pm = &i2c_bfin_twi_pm, > }, > }; > > ��.n��������+%������w��{.n�����{��-��)��jg��������ݢj����G�������j:+v���w�m������w�������h�����٥