@@ -145,43 +145,6 @@ static const struct debugfs_reg32 dsps_musb_regs[] = {
145
145
{ "mode" , 0xe8 },
146
146
};
147
147
148
- static void dsps_musb_try_idle (struct musb * musb , unsigned long timeout )
149
- {
150
- struct device * dev = musb -> controller ;
151
- struct dsps_glue * glue = dev_get_drvdata (dev -> parent );
152
-
153
- if (timeout == 0 )
154
- timeout = jiffies + msecs_to_jiffies (3 );
155
-
156
- /* Never idle if active, or when VBUS timeout is not set as host */
157
- if (musb -> is_active || (musb -> a_wait_bcon == 0 &&
158
- musb -> xceiv -> otg -> state == OTG_STATE_A_WAIT_BCON )) {
159
- dev_dbg (musb -> controller , "%s active, deleting timer\n" ,
160
- usb_otg_state_string (musb -> xceiv -> otg -> state ));
161
- del_timer (& glue -> timer );
162
- glue -> last_timer = jiffies ;
163
- return ;
164
- }
165
- if (musb -> port_mode != MUSB_PORT_MODE_DUAL_ROLE )
166
- return ;
167
-
168
- if (!musb -> g .dev .driver )
169
- return ;
170
-
171
- if (time_after (glue -> last_timer , timeout ) &&
172
- timer_pending (& glue -> timer )) {
173
- dev_dbg (musb -> controller ,
174
- "Longer idle timer already pending, ignoring...\n" );
175
- return ;
176
- }
177
- glue -> last_timer = timeout ;
178
-
179
- dev_dbg (musb -> controller , "%s inactive, starting idle timer for %u ms\n" ,
180
- usb_otg_state_string (musb -> xceiv -> otg -> state ),
181
- jiffies_to_msecs (timeout - jiffies ));
182
- mod_timer (& glue -> timer , timeout );
183
- }
184
-
185
148
/**
186
149
* dsps_musb_enable - enable interrupts
187
150
*/
@@ -206,7 +169,6 @@ static void dsps_musb_enable(struct musb *musb)
206
169
musb -> port_mode == MUSB_PORT_MODE_DUAL_ROLE )
207
170
mod_timer (& glue -> timer , jiffies +
208
171
msecs_to_jiffies (wrp -> poll_timeout ));
209
- dsps_musb_try_idle (musb , 0 );
210
172
}
211
173
212
174
/**
@@ -236,6 +198,11 @@ static void otg_timer(unsigned long _musb)
236
198
u8 devctl ;
237
199
unsigned long flags ;
238
200
int skip_session = 0 ;
201
+ int err ;
202
+
203
+ err = pm_runtime_get_sync (dev );
204
+ if (err < 0 )
205
+ dev_err (dev , "Poll could not pm_runtime_get: %i\n" , err );
239
206
240
207
/*
241
208
* We poll because DSPS IP's won't expose several OTG-critical
@@ -279,6 +246,9 @@ static void otg_timer(unsigned long _musb)
279
246
break ;
280
247
}
281
248
spin_unlock_irqrestore (& musb -> lock , flags );
249
+
250
+ pm_runtime_mark_last_busy (dev );
251
+ pm_runtime_put_autosuspend (dev );
282
252
}
283
253
284
254
static irqreturn_t dsps_interrupt (int irq , void * hci )
@@ -634,7 +604,6 @@ static struct musb_platform_ops dsps_ops = {
634
604
.enable = dsps_musb_enable ,
635
605
.disable = dsps_musb_disable ,
636
606
637
- .try_idle = dsps_musb_try_idle ,
638
607
.set_mode = dsps_musb_set_mode ,
639
608
.recover = dsps_musb_recover ,
640
609
};
@@ -798,6 +767,8 @@ static int dsps_probe(struct platform_device *pdev)
798
767
799
768
platform_set_drvdata (pdev , glue );
800
769
pm_runtime_enable (& pdev -> dev );
770
+ pm_runtime_use_autosuspend (& pdev -> dev );
771
+ pm_runtime_set_autosuspend_delay (& pdev -> dev , 200 );
801
772
802
773
ret = pm_runtime_get_sync (& pdev -> dev );
803
774
if (ret < 0 ) {
@@ -809,11 +780,15 @@ static int dsps_probe(struct platform_device *pdev)
809
780
if (ret )
810
781
goto err3 ;
811
782
783
+ pm_runtime_mark_last_busy (& pdev -> dev );
784
+ pm_runtime_put_autosuspend (& pdev -> dev );
785
+
812
786
return 0 ;
813
787
814
788
err3 :
815
- pm_runtime_put (& pdev -> dev );
789
+ pm_runtime_put_sync (& pdev -> dev );
816
790
err2 :
791
+ pm_runtime_dont_use_autosuspend (& pdev -> dev );
817
792
pm_runtime_disable (& pdev -> dev );
818
793
return ret ;
819
794
}
@@ -825,7 +800,8 @@ static int dsps_remove(struct platform_device *pdev)
825
800
platform_device_unregister (glue -> musb );
826
801
827
802
/* disable usbss clocks */
828
- pm_runtime_put (& pdev -> dev );
803
+ pm_runtime_dont_use_autosuspend (& pdev -> dev );
804
+ pm_runtime_put_sync (& pdev -> dev );
829
805
pm_runtime_disable (& pdev -> dev );
830
806
831
807
return 0 ;
0 commit comments