@@ -38,6 +38,7 @@ enum sysc_soc {
38
38
SOC_2420 ,
39
39
SOC_2430 ,
40
40
SOC_3430 ,
41
+ SOC_AM35 ,
41
42
SOC_3630 ,
42
43
SOC_4430 ,
43
44
SOC_4460 ,
@@ -1097,6 +1098,11 @@ static int sysc_enable_module(struct device *dev)
1097
1098
if (ddata -> cfg .quirks & (SYSC_QUIRK_SWSUP_SIDLE |
1098
1099
SYSC_QUIRK_SWSUP_SIDLE_ACT )) {
1099
1100
best_mode = SYSC_IDLE_NO ;
1101
+
1102
+ /* Clear WAKEUP */
1103
+ if (regbits -> enwkup_shift >= 0 &&
1104
+ ddata -> cfg .sysc_val & BIT (regbits -> enwkup_shift ))
1105
+ reg &= ~BIT (regbits -> enwkup_shift );
1100
1106
} else {
1101
1107
best_mode = fls (ddata -> cfg .sidlemodes ) - 1 ;
1102
1108
if (best_mode > SYSC_IDLE_MASK ) {
@@ -1224,6 +1230,13 @@ static int sysc_disable_module(struct device *dev)
1224
1230
}
1225
1231
}
1226
1232
1233
+ if (ddata -> cfg .quirks & SYSC_QUIRK_SWSUP_SIDLE_ACT ) {
1234
+ /* Set WAKEUP */
1235
+ if (regbits -> enwkup_shift >= 0 &&
1236
+ ddata -> cfg .sysc_val & BIT (regbits -> enwkup_shift ))
1237
+ reg |= BIT (regbits -> enwkup_shift );
1238
+ }
1239
+
1227
1240
reg &= ~(SYSC_IDLE_MASK << regbits -> sidle_shift );
1228
1241
reg |= best_mode << regbits -> sidle_shift ;
1229
1242
if (regbits -> autoidle_shift >= 0 &&
@@ -1518,16 +1531,16 @@ struct sysc_revision_quirk {
1518
1531
static const struct sysc_revision_quirk sysc_revision_quirks [] = {
1519
1532
/* These drivers need to be fixed to not use pm_runtime_irq_safe() */
1520
1533
SYSC_QUIRK ("uart" , 0 , 0x50 , 0x54 , 0x58 , 0x00000046 , 0xffffffff ,
1521
- SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_LEGACY_IDLE ),
1534
+ SYSC_QUIRK_SWSUP_SIDLE_ACT | SYSC_QUIRK_LEGACY_IDLE ),
1522
1535
SYSC_QUIRK ("uart" , 0 , 0x50 , 0x54 , 0x58 , 0x00000052 , 0xffffffff ,
1523
- SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_LEGACY_IDLE ),
1536
+ SYSC_QUIRK_SWSUP_SIDLE_ACT | SYSC_QUIRK_LEGACY_IDLE ),
1524
1537
/* Uarts on omap4 and later */
1525
1538
SYSC_QUIRK ("uart" , 0 , 0x50 , 0x54 , 0x58 , 0x50411e03 , 0xffff00ff ,
1526
- SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_LEGACY_IDLE ),
1539
+ SYSC_QUIRK_SWSUP_SIDLE_ACT | SYSC_QUIRK_LEGACY_IDLE ),
1527
1540
SYSC_QUIRK ("uart" , 0 , 0x50 , 0x54 , 0x58 , 0x47422e03 , 0xffffffff ,
1528
- SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_LEGACY_IDLE ),
1541
+ SYSC_QUIRK_SWSUP_SIDLE_ACT | SYSC_QUIRK_LEGACY_IDLE ),
1529
1542
SYSC_QUIRK ("uart" , 0 , 0x50 , 0x54 , 0x58 , 0x47424e03 , 0xffffffff ,
1530
- SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_LEGACY_IDLE ),
1543
+ SYSC_QUIRK_SWSUP_SIDLE_ACT | SYSC_QUIRK_LEGACY_IDLE ),
1531
1544
1532
1545
/* Quirks that need to be set based on the module address */
1533
1546
SYSC_QUIRK ("mcpdm" , 0x40132000 , 0 , 0x10 , - ENODEV , 0x50000800 , 0xffffffff ,
@@ -1862,7 +1875,7 @@ static void sysc_pre_reset_quirk_dss(struct sysc *ddata)
1862
1875
dev_warn (ddata -> dev , "%s: timed out %08x !+ %08x\n" ,
1863
1876
__func__ , val , irq_mask );
1864
1877
1865
- if (sysc_soc -> soc == SOC_3430 ) {
1878
+ if (sysc_soc -> soc == SOC_3430 || sysc_soc -> soc == SOC_AM35 ) {
1866
1879
/* Clear DSS_SDI_CONTROL */
1867
1880
sysc_write (ddata , 0x44 , 0 );
1868
1881
@@ -2150,8 +2163,7 @@ static int sysc_reset(struct sysc *ddata)
2150
2163
}
2151
2164
2152
2165
if (ddata -> cfg .srst_udelay )
2153
- usleep_range (ddata -> cfg .srst_udelay ,
2154
- ddata -> cfg .srst_udelay * 2 );
2166
+ fsleep (ddata -> cfg .srst_udelay );
2155
2167
2156
2168
if (ddata -> post_reset_quirk )
2157
2169
ddata -> post_reset_quirk (ddata );
@@ -3025,6 +3037,7 @@ static void ti_sysc_idle(struct work_struct *work)
3025
3037
static const struct soc_device_attribute sysc_soc_match [] = {
3026
3038
SOC_FLAG ("OMAP242*" , SOC_2420 ),
3027
3039
SOC_FLAG ("OMAP243*" , SOC_2430 ),
3040
+ SOC_FLAG ("AM35*" , SOC_AM35 ),
3028
3041
SOC_FLAG ("OMAP3[45]*" , SOC_3430 ),
3029
3042
SOC_FLAG ("OMAP3[67]*" , SOC_3630 ),
3030
3043
SOC_FLAG ("OMAP443*" , SOC_4430 ),
@@ -3229,7 +3242,7 @@ static int sysc_check_active_timer(struct sysc *ddata)
3229
3242
* can be dropped if we stop supporting old beagleboard revisions
3230
3243
* A to B4 at some point.
3231
3244
*/
3232
- if (sysc_soc -> soc == SOC_3430 )
3245
+ if (sysc_soc -> soc == SOC_3430 || sysc_soc -> soc == SOC_AM35 )
3233
3246
error = - ENXIO ;
3234
3247
else
3235
3248
error = - EBUSY ;
0 commit comments