>From: Ben Dooks [mailto:[EMAIL PROTECTED] > >On Mon, Jul 28, 2008 at 06:07:28PM +0800, Bryan Wu wrote: >> On Mon, Jul 28, 2008 at 5:23 PM, Ben Dooks <[EMAIL PROTECTED]> wrote: >> > On Sun, Jul 27, 2008 at 02:41:54PM +0800, Bryan Wu wrote: >> >> From: Michael Hennerich <[EMAIL PROTECTED]> >> >> >> >> PM_SUSPEND_MEM: Blackfin does not maintain register state through >> >> Hibernate. Save and restore peripheral base initialization during >> >> PM transitions. >> >> >> >> Signed-off-by: Michael Hennerich <[EMAIL PROTECTED]> >> >> Signed-off-by: Bryan Wu <[EMAIL PROTECTED]> >> >> --- >> >> drivers/i2c/busses/i2c-bfin-twi.c | 35 ++++++++++++++++++++++++---- >------- >> >> 1 files changed, 24 insertions(+), 11 deletions(-) >> >> >> >> diff --git a/drivers/i2c/busses/i2c-bfin-twi.c >b/drivers/i2c/busses/i2c-bfin-twi.c >> >> index 48d084b..3c855ff 100644 >> >> --- a/drivers/i2c/busses/i2c-bfin-twi.c >> >> +++ b/drivers/i2c/busses/i2c-bfin-twi.c >> >> @@ -49,6 +49,8 @@ struct bfin_twi_iface { >> >> struct i2c_msg *pmsg; >> >> int msg_num; >> >> int cur_msg; >> >> + u16 saved_clkdiv; >> >> + u16 saved_control; >> >> void __iomem *regs_base; >> >> }; >> >> >> >> @@ -565,32 +567,43 @@ static u32 bfin_twi_functionality(struct >i2c_adapter *adap) >> >> I2C_FUNC_I2C; >> >> } >> >> >> >> - >> >> static struct i2c_algorithm bfin_twi_algorithm = { >> >> .master_xfer = bfin_twi_master_xfer, >> >> .smbus_xfer = bfin_twi_smbus_xfer, >> >> .functionality = bfin_twi_functionality, >> >> }; >> >> >> >> - >> >> -static int i2c_bfin_twi_suspend(struct platform_device *dev, >pm_message_t state) >> >> +static int i2c_bfin_twi_suspend(struct platform_device *pdev, >pm_message_t state) >> >> { >> >> - struct bfin_twi_iface *iface = platform_get_drvdata(dev); >> >> + struct bfin_twi_iface *iface = platform_get_drvdata(pdev); >> >> + >> >> + iface->saved_clkdiv = read_CLKDIV(iface); >> >> + iface->saved_control = read_CONTROL(iface); >> >> + >> >> + free_irq(iface->irq, iface); >> >> >> >> /* Disable TWI */ >> >> - write_CONTROL(iface, read_CONTROL(iface) & ~TWI_ENA); >> >> - SSYNC(); >> >> + write_CONTROL(iface, iface->saved_control & ~TWI_ENA); >> > >> > I assume removing the SSYNC() call is valid? >> > >> >> Yes, I think it is OK for that. We tested on our platform. >> Actually, keeping the SSYNC() is not a big deal for this driver. >> How do you think Michael? >> >> >> return 0; >> >> } >> >> >> >> -static int i2c_bfin_twi_resume(struct platform_device *dev) >> >> +static int i2c_bfin_twi_resume(struct platform_device *pdev) >> >> { >> >> - struct bfin_twi_iface *iface = platform_get_drvdata(dev); >> >> + struct bfin_twi_iface *iface = platform_get_drvdata(pdev); >> >> >> >> - /* Enable TWI */ >> >> - write_CONTROL(iface, read_CONTROL(iface) | TWI_ENA); >> >> - SSYNC(); >> >> + int rc = request_irq(iface->irq, bfin_twi_interrupt_entry, >> >> + IRQF_DISABLED, pdev->name, iface); >> >> + if (rc) { >> >> + dev_err(&pdev->dev, "Can't get IRQ %d !\n", iface->irq); >> >> + return -ENODEV; >> >> + } >> >> + >> >> + /* Resume TWI interface clock as specified */ >> >> + write_CLKDIV(iface, iface->saved_clkdiv); >> >> + >> >> + /* Resume TWI */ >> >> + write_CONTROL(iface, iface->saved_control); >> >> >> >> return 0; >> >> } >> >> -- >> >> 1.5.6 >> > >> > if removing the SSYNC() call is ok, then I'll queue this into >> > my tree which I will be requesting a pull asap. > >ok, this is in my queue, unless anyone objects then it'll be pushed >out later today.
Removing this SSYNC is absolutely safe. There are potentially many other ones that can be removed too. Michael > >-- >Ben > >Q: What's a light-year? >A: One-third less calories than a regular year. _______________________________________________ i2c mailing list [email protected] http://lists.lm-sensors.org/mailman/listinfo/i2c
