@@ -191,25 +191,21 @@ static void shmob_drm_crtc_start_stop(struct shmob_drm_crtc *scrtc, bool start)
191
191
}
192
192
}
193
193
194
- /*
195
- * shmob_drm_crtc_start - Configure and start the LCDC
196
- * @scrtc: the SH Mobile CRTC
197
- *
198
- * Configure and start the LCDC device. External devices (clocks, MERAM, panels,
199
- * ...) are not touched by this function.
200
- */
201
- static void shmob_drm_crtc_start (struct shmob_drm_crtc * scrtc )
194
+ static inline struct shmob_drm_crtc * to_shmob_crtc (struct drm_crtc * crtc )
202
195
{
203
- struct drm_crtc * crtc = & scrtc -> base ;
196
+ return container_of (crtc , struct shmob_drm_crtc , base );
197
+ }
198
+
199
+ static void shmob_drm_crtc_atomic_enable (struct drm_crtc * crtc ,
200
+ struct drm_atomic_state * state )
201
+ {
202
+ struct shmob_drm_crtc * scrtc = to_shmob_crtc (crtc );
204
203
struct shmob_drm_device * sdev = to_shmob_device (crtc -> dev );
205
204
const struct shmob_drm_interface_data * idata = & sdev -> pdata -> iface ;
206
205
struct device * dev = sdev -> dev ;
207
206
u32 value ;
208
207
int ret ;
209
208
210
- if (scrtc -> started )
211
- return ;
212
-
213
209
ret = pm_runtime_resume_and_get (dev );
214
210
if (ret )
215
211
return ;
@@ -256,18 +252,14 @@ static void shmob_drm_crtc_start(struct shmob_drm_crtc *scrtc)
256
252
257
253
/* Turn vertical blank interrupt reporting back on. */
258
254
drm_crtc_vblank_on (crtc );
259
-
260
- scrtc -> started = true;
261
255
}
262
256
263
- static void shmob_drm_crtc_stop (struct shmob_drm_crtc * scrtc )
257
+ static void shmob_drm_crtc_atomic_disable (struct drm_crtc * crtc ,
258
+ struct drm_atomic_state * state )
264
259
{
265
- struct drm_crtc * crtc = & scrtc -> base ;
260
+ struct shmob_drm_crtc * scrtc = to_shmob_crtc ( crtc ) ;
266
261
struct shmob_drm_device * sdev = to_shmob_device (crtc -> dev );
267
262
268
- if (!scrtc -> started )
269
- return ;
270
-
271
263
/*
272
264
* Disable vertical blank interrupt reporting. We first need to wait
273
265
* for page flip completion before stopping the CRTC as userspace
@@ -283,28 +275,6 @@ static void shmob_drm_crtc_stop(struct shmob_drm_crtc *scrtc)
283
275
lcdc_write (sdev , LDCNT1R , 0 );
284
276
285
277
pm_runtime_put (sdev -> dev );
286
-
287
- scrtc -> started = false;
288
- }
289
-
290
- static inline struct shmob_drm_crtc * to_shmob_crtc (struct drm_crtc * crtc )
291
- {
292
- return container_of (crtc , struct shmob_drm_crtc , base );
293
- }
294
-
295
- static void shmob_drm_crtc_dpms (struct drm_crtc * crtc , int mode )
296
- {
297
- struct shmob_drm_crtc * scrtc = to_shmob_crtc (crtc );
298
-
299
- if (scrtc -> dpms == mode )
300
- return ;
301
-
302
- if (mode == DRM_MODE_DPMS_ON )
303
- shmob_drm_crtc_start (scrtc );
304
- else
305
- shmob_drm_crtc_stop (scrtc );
306
-
307
- scrtc -> dpms = mode ;
308
278
}
309
279
310
280
static void shmob_drm_crtc_atomic_flush (struct drm_crtc * crtc ,
@@ -323,18 +293,6 @@ static void shmob_drm_crtc_atomic_flush(struct drm_crtc *crtc,
323
293
}
324
294
}
325
295
326
- static void shmob_drm_crtc_atomic_enable (struct drm_crtc * crtc ,
327
- struct drm_atomic_state * state )
328
- {
329
- shmob_drm_crtc_dpms (crtc , DRM_MODE_DPMS_ON );
330
- }
331
-
332
- static void shmob_drm_crtc_atomic_disable (struct drm_crtc * crtc ,
333
- struct drm_atomic_state * state )
334
- {
335
- shmob_drm_crtc_dpms (crtc , DRM_MODE_DPMS_OFF );
336
- }
337
-
338
296
static const struct drm_crtc_helper_funcs crtc_helper_funcs = {
339
297
.atomic_flush = shmob_drm_crtc_atomic_flush ,
340
298
.atomic_enable = shmob_drm_crtc_atomic_enable ,
@@ -424,8 +382,6 @@ int shmob_drm_crtc_create(struct shmob_drm_device *sdev)
424
382
425
383
init_waitqueue_head (& sdev -> crtc .flip_wait );
426
384
427
- sdev -> crtc .dpms = DRM_MODE_DPMS_OFF ;
428
-
429
385
primary = shmob_drm_plane_create (sdev , DRM_PLANE_TYPE_PRIMARY , 0 );
430
386
if (IS_ERR (primary ))
431
387
return PTR_ERR (primary );
0 commit comments