]> git.kernelconcepts.de Git - mv-sheeva.git/commitdiff
Add restart/reboot IPM hook csb1725
authorNils Faerber <nils.faerber@kernelconcepts.de>
Wed, 2 Feb 2011 09:54:25 +0000 (10:54 +0100)
committerNils Faerber <nils.faerber@kernelconcepts.de>
Wed, 2 Feb 2011 09:54:25 +0000 (10:54 +0100)
arch/arm/mach-mv78xx0/rdstor-setup.c

index 9b6121436c7aedb7a8f86b6c535f234df0c2419c..2a036047c9b5161c3bb63813e87d0473794dffe9 100644 (file)
@@ -304,6 +304,38 @@ static void rdstor_poweroff(void)
        i2c_transfer(adap, &msg, 1);
 }
 
+static void rdstor_restart(char mode, const char *cmd)
+{
+       struct i2c_msg msg;
+       struct i2c_adapter *adap = i2c_get_adapter(1);
+       unsigned char buf[2];
+
+       if (!adap) {
+               printk(KERN_ERR "I2C adapter 1 not found\n");
+               return;
+       }
+
+       buf[0] = 0x01;  /* cmd arg offset */
+       buf[1] = 0x00;  /* 0 seconds delay */
+       msg.addr = 0x38;
+       msg.flags = 0;
+       msg.len = 2;
+       msg.buf = buf;
+
+       i2c_transfer(adap, &msg, 1);
+
+       printk(KERN_INFO "RDStor restarting...\n");
+
+       buf[0] = 0x00;  /* cmd offset */
+       buf[1] = 0x04;  /* reboot cmd */
+       msg.addr = 0x38;
+       msg.flags = 0;
+       msg.len = 2;
+       msg.buf = buf;
+
+       i2c_transfer(adap, &msg, 1);
+}
+
 static void __init db78x00_init(void)
 {
        /*
@@ -364,8 +396,10 @@ static void __init db78x00_init(void)
 
                mv78xx0_xor0_init();
 
-               /* mv78xx0_wdt_init(); */
+               /* mv78xx0_wdt_init(); */ /* SysRST is not connected so the WDT cannot fire */
+
                pm_power_off = rdstor_poweroff;
+               arm_pm_restart = rdstor_restart;
        } else {
                /* second CPU core */
        }