Loading arch/sh/boards/mach-se/7724/setup.c +5 −4 Original line number Diff line number Diff line Loading @@ -238,7 +238,7 @@ static struct platform_device ceu1_device = { }, }; /* KEYSC */ /* KEYSC in SoC (Needs SW33-2 set to ON) */ static struct sh_keysc_info keysc_info = { .mode = SH_KEYSC_MODE_1, .scan_timing = 10, Loading @@ -255,12 +255,13 @@ static struct sh_keysc_info keysc_info = { static struct resource keysc_resources[] = { [0] = { .start = 0x1a204000, .end = 0x1a20400f, .name = "KEYSC", .start = 0x044b0000, .end = 0x044b000f, .flags = IORESOURCE_MEM, }, [1] = { .start = IRQ0_KEY, .start = 79, .flags = IORESOURCE_IRQ, }, }; Loading arch/sh/kernel/cpu/shmobile/sleep.S +68 −2 Original line number Diff line number Diff line Loading @@ -26,8 +26,30 @@ ENTRY(sh_mobile_standby) tst #SUSP_SH_SF, r0 bt skip_set_sf #ifdef CONFIG_CPU_SUBTYPE_SH7724 /* DBSC: put memory in self-refresh mode */ /* SDRAM: disable power down and put in self-refresh mode */ mov.l dben_reg, r4 mov.l dben_data0, r1 mov.l r1, @r4 mov.l dbrfpdn0_reg, r4 mov.l dbrfpdn0_data0, r1 mov.l r1, @r4 mov.l dbcmdcnt_reg, r4 mov.l dbcmdcnt_data0, r1 mov.l r1, @r4 mov.l dbcmdcnt_reg, r4 mov.l dbcmdcnt_data1, r1 mov.l r1, @r4 mov.l dbrfpdn0_reg, r4 mov.l dbrfpdn0_data1, r1 mov.l r1, @r4 #else /* SBSC: disable power down and put in self-refresh mode */ mov.l 1f, r4 mov.l 2f, r1 mov.l @r4, r2 Loading @@ -35,6 +57,7 @@ ENTRY(sh_mobile_standby) mov.l 3f, r3 and r3, r2 mov.l r2, @r4 #endif skip_set_sf: tst #SUSP_SH_SLEEP, r0 Loading Loading @@ -84,7 +107,36 @@ done_sleep: tst #SUSP_SH_SF, r0 bt skip_restore_sf /* SDRAM: set auto-refresh mode */ #ifdef CONFIG_CPU_SUBTYPE_SH7724 /* DBSC: put memory in auto-refresh mode */ mov.l dbrfpdn0_reg, r4 mov.l dbrfpdn0_data0, r1 mov.l r1, @r4 /* sleep 140 ns */ nop nop nop nop mov.l dbcmdcnt_reg, r4 mov.l dbcmdcnt_data0, r1 mov.l r1, @r4 mov.l dbcmdcnt_reg, r4 mov.l dbcmdcnt_data1, r1 mov.l r1, @r4 mov.l dben_reg, r4 mov.l dben_data1, r1 mov.l r1, @r4 mov.l dbrfpdn0_reg, r4 mov.l dbrfpdn0_data2, r1 mov.l r1, @r4 #else /* SBSC: set auto-refresh mode */ mov.l 1f, r4 mov.l @r4, r2 mov.l 4f, r3 Loading @@ -98,15 +150,29 @@ done_sleep: add r4, r3 or r2, r3 mov.l r3, @r1 #endif skip_restore_sf: rts nop .balign 4 #ifdef CONFIG_CPU_SUBTYPE_SH7724 dben_reg: .long 0xfd000010 /* DBEN */ dben_data0: .long 0 dben_data1: .long 1 dbrfpdn0_reg: .long 0xfd000040 /* DBRFPDN0 */ dbrfpdn0_data0: .long 0 dbrfpdn0_data1: .long 1 dbrfpdn0_data2: .long 0x00010000 dbcmdcnt_reg: .long 0xfd000014 /* DBCMDCNT */ dbcmdcnt_data0: .long 2 dbcmdcnt_data1: .long 4 #else 1: .long 0xfe400008 /* SDCR0 */ 2: .long 0x00000400 3: .long 0xffff7fff 4: .long 0xfffffbff #endif 5: .long 0xa4150020 /* STBCR */ 6: .long 0xfe40001c /* RTCOR */ 7: .long 0xfe400018 /* RTCNT */ Loading drivers/clocksource/sh_cmt.c +28 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ struct sh_cmt_priv { struct platform_device *pdev; unsigned long flags; unsigned long flags_suspend; unsigned long match_value; unsigned long next_match_value; unsigned long max_match_value; Loading Loading @@ -667,11 +668,38 @@ static int __devexit sh_cmt_remove(struct platform_device *pdev) return -EBUSY; /* cannot unregister clockevent and clocksource */ } static int sh_cmt_suspend(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct sh_cmt_priv *p = platform_get_drvdata(pdev); /* save flag state and stop CMT channel */ p->flags_suspend = p->flags; sh_cmt_stop(p, p->flags); return 0; } static int sh_cmt_resume(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct sh_cmt_priv *p = platform_get_drvdata(pdev); /* start CMT channel from saved state */ sh_cmt_start(p, p->flags_suspend); return 0; } static struct dev_pm_ops sh_cmt_dev_pm_ops = { .suspend = sh_cmt_suspend, .resume = sh_cmt_resume, }; static struct platform_driver sh_cmt_device_driver = { .probe = sh_cmt_probe, .remove = __devexit_p(sh_cmt_remove), .driver = { .name = "sh_cmt", .pm = &sh_cmt_dev_pm_ops, } }; Loading drivers/video/sh_mobile_lcdcfb.c +5 −0 Original line number Diff line number Diff line Loading @@ -481,6 +481,9 @@ static int sh_mobile_lcdc_start(struct sh_mobile_lcdc_priv *priv) /* tell the board code to enable the panel */ for (k = 0; k < ARRAY_SIZE(priv->ch); k++) { ch = &priv->ch[k]; if (!ch->enabled) continue; board_cfg = &ch->cfg.board_cfg; if (board_cfg->display_on) board_cfg->display_on(board_cfg->board_data); Loading @@ -498,6 +501,8 @@ static void sh_mobile_lcdc_stop(struct sh_mobile_lcdc_priv *priv) /* clean up deferred io and ask board code to disable panel */ for (k = 0; k < ARRAY_SIZE(priv->ch); k++) { ch = &priv->ch[k]; if (!ch->enabled) continue; /* deferred io mode: * flush frame, and wait for frame end interrupt Loading Loading
arch/sh/boards/mach-se/7724/setup.c +5 −4 Original line number Diff line number Diff line Loading @@ -238,7 +238,7 @@ static struct platform_device ceu1_device = { }, }; /* KEYSC */ /* KEYSC in SoC (Needs SW33-2 set to ON) */ static struct sh_keysc_info keysc_info = { .mode = SH_KEYSC_MODE_1, .scan_timing = 10, Loading @@ -255,12 +255,13 @@ static struct sh_keysc_info keysc_info = { static struct resource keysc_resources[] = { [0] = { .start = 0x1a204000, .end = 0x1a20400f, .name = "KEYSC", .start = 0x044b0000, .end = 0x044b000f, .flags = IORESOURCE_MEM, }, [1] = { .start = IRQ0_KEY, .start = 79, .flags = IORESOURCE_IRQ, }, }; Loading
arch/sh/kernel/cpu/shmobile/sleep.S +68 −2 Original line number Diff line number Diff line Loading @@ -26,8 +26,30 @@ ENTRY(sh_mobile_standby) tst #SUSP_SH_SF, r0 bt skip_set_sf #ifdef CONFIG_CPU_SUBTYPE_SH7724 /* DBSC: put memory in self-refresh mode */ /* SDRAM: disable power down and put in self-refresh mode */ mov.l dben_reg, r4 mov.l dben_data0, r1 mov.l r1, @r4 mov.l dbrfpdn0_reg, r4 mov.l dbrfpdn0_data0, r1 mov.l r1, @r4 mov.l dbcmdcnt_reg, r4 mov.l dbcmdcnt_data0, r1 mov.l r1, @r4 mov.l dbcmdcnt_reg, r4 mov.l dbcmdcnt_data1, r1 mov.l r1, @r4 mov.l dbrfpdn0_reg, r4 mov.l dbrfpdn0_data1, r1 mov.l r1, @r4 #else /* SBSC: disable power down and put in self-refresh mode */ mov.l 1f, r4 mov.l 2f, r1 mov.l @r4, r2 Loading @@ -35,6 +57,7 @@ ENTRY(sh_mobile_standby) mov.l 3f, r3 and r3, r2 mov.l r2, @r4 #endif skip_set_sf: tst #SUSP_SH_SLEEP, r0 Loading Loading @@ -84,7 +107,36 @@ done_sleep: tst #SUSP_SH_SF, r0 bt skip_restore_sf /* SDRAM: set auto-refresh mode */ #ifdef CONFIG_CPU_SUBTYPE_SH7724 /* DBSC: put memory in auto-refresh mode */ mov.l dbrfpdn0_reg, r4 mov.l dbrfpdn0_data0, r1 mov.l r1, @r4 /* sleep 140 ns */ nop nop nop nop mov.l dbcmdcnt_reg, r4 mov.l dbcmdcnt_data0, r1 mov.l r1, @r4 mov.l dbcmdcnt_reg, r4 mov.l dbcmdcnt_data1, r1 mov.l r1, @r4 mov.l dben_reg, r4 mov.l dben_data1, r1 mov.l r1, @r4 mov.l dbrfpdn0_reg, r4 mov.l dbrfpdn0_data2, r1 mov.l r1, @r4 #else /* SBSC: set auto-refresh mode */ mov.l 1f, r4 mov.l @r4, r2 mov.l 4f, r3 Loading @@ -98,15 +150,29 @@ done_sleep: add r4, r3 or r2, r3 mov.l r3, @r1 #endif skip_restore_sf: rts nop .balign 4 #ifdef CONFIG_CPU_SUBTYPE_SH7724 dben_reg: .long 0xfd000010 /* DBEN */ dben_data0: .long 0 dben_data1: .long 1 dbrfpdn0_reg: .long 0xfd000040 /* DBRFPDN0 */ dbrfpdn0_data0: .long 0 dbrfpdn0_data1: .long 1 dbrfpdn0_data2: .long 0x00010000 dbcmdcnt_reg: .long 0xfd000014 /* DBCMDCNT */ dbcmdcnt_data0: .long 2 dbcmdcnt_data1: .long 4 #else 1: .long 0xfe400008 /* SDCR0 */ 2: .long 0x00000400 3: .long 0xffff7fff 4: .long 0xfffffbff #endif 5: .long 0xa4150020 /* STBCR */ 6: .long 0xfe40001c /* RTCOR */ 7: .long 0xfe400018 /* RTCNT */ Loading
drivers/clocksource/sh_cmt.c +28 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ struct sh_cmt_priv { struct platform_device *pdev; unsigned long flags; unsigned long flags_suspend; unsigned long match_value; unsigned long next_match_value; unsigned long max_match_value; Loading Loading @@ -667,11 +668,38 @@ static int __devexit sh_cmt_remove(struct platform_device *pdev) return -EBUSY; /* cannot unregister clockevent and clocksource */ } static int sh_cmt_suspend(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct sh_cmt_priv *p = platform_get_drvdata(pdev); /* save flag state and stop CMT channel */ p->flags_suspend = p->flags; sh_cmt_stop(p, p->flags); return 0; } static int sh_cmt_resume(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct sh_cmt_priv *p = platform_get_drvdata(pdev); /* start CMT channel from saved state */ sh_cmt_start(p, p->flags_suspend); return 0; } static struct dev_pm_ops sh_cmt_dev_pm_ops = { .suspend = sh_cmt_suspend, .resume = sh_cmt_resume, }; static struct platform_driver sh_cmt_device_driver = { .probe = sh_cmt_probe, .remove = __devexit_p(sh_cmt_remove), .driver = { .name = "sh_cmt", .pm = &sh_cmt_dev_pm_ops, } }; Loading
drivers/video/sh_mobile_lcdcfb.c +5 −0 Original line number Diff line number Diff line Loading @@ -481,6 +481,9 @@ static int sh_mobile_lcdc_start(struct sh_mobile_lcdc_priv *priv) /* tell the board code to enable the panel */ for (k = 0; k < ARRAY_SIZE(priv->ch); k++) { ch = &priv->ch[k]; if (!ch->enabled) continue; board_cfg = &ch->cfg.board_cfg; if (board_cfg->display_on) board_cfg->display_on(board_cfg->board_data); Loading @@ -498,6 +501,8 @@ static void sh_mobile_lcdc_stop(struct sh_mobile_lcdc_priv *priv) /* clean up deferred io and ask board code to disable panel */ for (k = 0; k < ARRAY_SIZE(priv->ch); k++) { ch = &priv->ch[k]; if (!ch->enabled) continue; /* deferred io mode: * flush frame, and wait for frame end interrupt Loading