aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrzej Hajda <a.hajda@samsung.com>2017-09-29 06:05:36 -0400
committerInki Dae <inki.dae@samsung.com>2017-10-25 20:06:32 -0400
commit524c59f1b79885154c2424aac00ed66f6a6eac29 (patch)
tree57c044f2b296c9bae1ae923047daba0c44cd6f94
parent6ace38a52783705038e312220eb5d31237866fec (diff)
drm/exynos/mixer: remove mixer_resources sub-structure
mixer_resources adds only unnecessary redirection, removing it makes the code shorter and cleaner. Signed-off-by: Andrzej Hajda <a.hajda@samsung.com> Reviewed-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de> Signed-off-by: Inki Dae <inki.dae@samsung.com>
-rw-r--r--drivers/gpu/drm/exynos/exynos_mixer.c324
1 files changed, 148 insertions, 176 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c
index fba120346189..c0e92021748b 100644
--- a/drivers/gpu/drm/exynos/exynos_mixer.c
+++ b/drivers/gpu/drm/exynos/exynos_mixer.c
@@ -67,19 +67,6 @@
67#define MXR_FORMAT_ARGB4444 6 67#define MXR_FORMAT_ARGB4444 6
68#define MXR_FORMAT_ARGB8888 7 68#define MXR_FORMAT_ARGB8888 7
69 69
70struct mixer_resources {
71 int irq;
72 void __iomem *mixer_regs;
73 void __iomem *vp_regs;
74 spinlock_t reg_slock;
75 struct clk *mixer;
76 struct clk *vp;
77 struct clk *hdmi;
78 struct clk *sclk_mixer;
79 struct clk *sclk_hdmi;
80 struct clk *mout_mixer;
81};
82
83enum mixer_version_id { 70enum mixer_version_id {
84 MXR_VER_0_0_0_16, 71 MXR_VER_0_0_0_16,
85 MXR_VER_16_0_33_0, 72 MXR_VER_16_0_33_0,
@@ -117,7 +104,16 @@ struct mixer_context {
117 struct exynos_drm_plane planes[MIXER_WIN_NR]; 104 struct exynos_drm_plane planes[MIXER_WIN_NR];
118 unsigned long flags; 105 unsigned long flags;
119 106
120 struct mixer_resources mixer_res; 107 int irq;
108 void __iomem *mixer_regs;
109 void __iomem *vp_regs;
110 spinlock_t reg_slock;
111 struct clk *mixer;
112 struct clk *vp;
113 struct clk *hdmi;
114 struct clk *sclk_mixer;
115 struct clk *sclk_hdmi;
116 struct clk *mout_mixer;
121 enum mixer_version_id mxr_ver; 117 enum mixer_version_id mxr_ver;
122}; 118};
123 119
@@ -194,44 +190,44 @@ static inline bool is_alpha_format(unsigned int pixel_format)
194 } 190 }
195} 191}
196 192
197static inline u32 vp_reg_read(struct mixer_resources *res, u32 reg_id) 193static inline u32 vp_reg_read(struct mixer_context *ctx, u32 reg_id)
198{ 194{
199 return readl(res->vp_regs + reg_id); 195 return readl(ctx->vp_regs + reg_id);
200} 196}
201 197
202static inline void vp_reg_write(struct mixer_resources *res, u32 reg_id, 198static inline void vp_reg_write(struct mixer_context *ctx, u32 reg_id,
203 u32 val) 199 u32 val)
204{ 200{
205 writel(val, res->vp_regs + reg_id); 201 writel(val, ctx->vp_regs + reg_id);
206} 202}
207 203
208static inline void vp_reg_writemask(struct mixer_resources *res, u32 reg_id, 204static inline void vp_reg_writemask(struct mixer_context *ctx, u32 reg_id,
209 u32 val, u32 mask) 205 u32 val, u32 mask)
210{ 206{
211 u32 old = vp_reg_read(res, reg_id); 207 u32 old = vp_reg_read(ctx, reg_id);
212 208
213 val = (val & mask) | (old & ~mask); 209 val = (val & mask) | (old & ~mask);
214 writel(val, res->vp_regs + reg_id); 210 writel(val, ctx->vp_regs + reg_id);
215} 211}
216 212
217static inline u32 mixer_reg_read(struct mixer_resources *res, u32 reg_id) 213static inline u32 mixer_reg_read(struct mixer_context *ctx, u32 reg_id)
218{ 214{
219 return readl(res->mixer_regs + reg_id); 215 return readl(ctx->mixer_regs + reg_id);
220} 216}
221 217
222static inline void mixer_reg_write(struct mixer_resources *res, u32 reg_id, 218static inline void mixer_reg_write(struct mixer_context *ctx, u32 reg_id,
223 u32 val) 219 u32 val)
224{ 220{
225 writel(val, res->mixer_regs + reg_id); 221 writel(val, ctx->mixer_regs + reg_id);
226} 222}
227 223
228static inline void mixer_reg_writemask(struct mixer_resources *res, 224static inline void mixer_reg_writemask(struct mixer_context *ctx,
229 u32 reg_id, u32 val, u32 mask) 225 u32 reg_id, u32 val, u32 mask)
230{ 226{
231 u32 old = mixer_reg_read(res, reg_id); 227 u32 old = mixer_reg_read(ctx, reg_id);
232 228
233 val = (val & mask) | (old & ~mask); 229 val = (val & mask) | (old & ~mask);
234 writel(val, res->mixer_regs + reg_id); 230 writel(val, ctx->mixer_regs + reg_id);
235} 231}
236 232
237static void mixer_regs_dump(struct mixer_context *ctx) 233static void mixer_regs_dump(struct mixer_context *ctx)
@@ -239,7 +235,7 @@ static void mixer_regs_dump(struct mixer_context *ctx)
239#define DUMPREG(reg_id) \ 235#define DUMPREG(reg_id) \
240do { \ 236do { \
241 DRM_DEBUG_KMS(#reg_id " = %08x\n", \ 237 DRM_DEBUG_KMS(#reg_id " = %08x\n", \
242 (u32)readl(ctx->mixer_res.mixer_regs + reg_id)); \ 238 (u32)readl(ctx->mixer_regs + reg_id)); \
243} while (0) 239} while (0)
244 240
245 DUMPREG(MXR_STATUS); 241 DUMPREG(MXR_STATUS);
@@ -271,7 +267,7 @@ static void vp_regs_dump(struct mixer_context *ctx)
271#define DUMPREG(reg_id) \ 267#define DUMPREG(reg_id) \
272do { \ 268do { \
273 DRM_DEBUG_KMS(#reg_id " = %08x\n", \ 269 DRM_DEBUG_KMS(#reg_id " = %08x\n", \
274 (u32) readl(ctx->mixer_res.vp_regs + reg_id)); \ 270 (u32) readl(ctx->vp_regs + reg_id)); \
275} while (0) 271} while (0)
276 272
277 DUMPREG(VP_ENABLE); 273 DUMPREG(VP_ENABLE);
@@ -301,7 +297,7 @@ do { \
301#undef DUMPREG 297#undef DUMPREG
302} 298}
303 299
304static inline void vp_filter_set(struct mixer_resources *res, 300static inline void vp_filter_set(struct mixer_context *ctx,
305 int reg_id, const u8 *data, unsigned int size) 301 int reg_id, const u8 *data, unsigned int size)
306{ 302{
307 /* assure 4-byte align */ 303 /* assure 4-byte align */
@@ -309,24 +305,23 @@ static inline void vp_filter_set(struct mixer_resources *res,
309 for (; size; size -= 4, reg_id += 4, data += 4) { 305 for (; size; size -= 4, reg_id += 4, data += 4) {
310 u32 val = (data[0] << 24) | (data[1] << 16) | 306 u32 val = (data[0] << 24) | (data[1] << 16) |
311 (data[2] << 8) | data[3]; 307 (data[2] << 8) | data[3];
312 vp_reg_write(res, reg_id, val); 308 vp_reg_write(ctx, reg_id, val);
313 } 309 }
314} 310}
315 311
316static void vp_default_filter(struct mixer_resources *res) 312static void vp_default_filter(struct mixer_context *ctx)
317{ 313{
318 vp_filter_set(res, VP_POLY8_Y0_LL, 314 vp_filter_set(ctx, VP_POLY8_Y0_LL,
319 filter_y_horiz_tap8, sizeof(filter_y_horiz_tap8)); 315 filter_y_horiz_tap8, sizeof(filter_y_horiz_tap8));
320 vp_filter_set(res, VP_POLY4_Y0_LL, 316 vp_filter_set(ctx, VP_POLY4_Y0_LL,
321 filter_y_vert_tap4, sizeof(filter_y_vert_tap4)); 317 filter_y_vert_tap4, sizeof(filter_y_vert_tap4));
322 vp_filter_set(res, VP_POLY4_C0_LL, 318 vp_filter_set(ctx, VP_POLY4_C0_LL,
323 filter_cr_horiz_tap4, sizeof(filter_cr_horiz_tap4)); 319 filter_cr_horiz_tap4, sizeof(filter_cr_horiz_tap4));
324} 320}
325 321
326static void mixer_cfg_gfx_blend(struct mixer_context *ctx, unsigned int win, 322static void mixer_cfg_gfx_blend(struct mixer_context *ctx, unsigned int win,
327 bool alpha) 323 bool alpha)
328{ 324{
329 struct mixer_resources *res = &ctx->mixer_res;
330 u32 val; 325 u32 val;
331 326
332 val = MXR_GRP_CFG_COLOR_KEY_DISABLE; /* no blank key */ 327 val = MXR_GRP_CFG_COLOR_KEY_DISABLE; /* no blank key */
@@ -335,13 +330,12 @@ static void mixer_cfg_gfx_blend(struct mixer_context *ctx, unsigned int win,
335 val |= MXR_GRP_CFG_BLEND_PRE_MUL; 330 val |= MXR_GRP_CFG_BLEND_PRE_MUL;
336 val |= MXR_GRP_CFG_PIXEL_BLEND_EN; 331 val |= MXR_GRP_CFG_PIXEL_BLEND_EN;
337 } 332 }
338 mixer_reg_writemask(res, MXR_GRAPHIC_CFG(win), 333 mixer_reg_writemask(ctx, MXR_GRAPHIC_CFG(win),
339 val, MXR_GRP_CFG_MISC_MASK); 334 val, MXR_GRP_CFG_MISC_MASK);
340} 335}
341 336
342static void mixer_cfg_vp_blend(struct mixer_context *ctx) 337static void mixer_cfg_vp_blend(struct mixer_context *ctx)
343{ 338{
344 struct mixer_resources *res = &ctx->mixer_res;
345 u32 val; 339 u32 val;
346 340
347 /* 341 /*
@@ -351,25 +345,22 @@ static void mixer_cfg_vp_blend(struct mixer_context *ctx)
351 * support blending of the video layer through this. 345 * support blending of the video layer through this.
352 */ 346 */
353 val = 0; 347 val = 0;
354 mixer_reg_write(res, MXR_VIDEO_CFG, val); 348 mixer_reg_write(ctx, MXR_VIDEO_CFG, val);
355} 349}
356 350
357static void mixer_vsync_set_update(struct mixer_context *ctx, bool enable) 351static void mixer_vsync_set_update(struct mixer_context *ctx, bool enable)
358{ 352{
359 struct mixer_resources *res = &ctx->mixer_res;
360
361 /* block update on vsync */ 353 /* block update on vsync */
362 mixer_reg_writemask(res, MXR_STATUS, enable ? 354 mixer_reg_writemask(ctx, MXR_STATUS, enable ?
363 MXR_STATUS_SYNC_ENABLE : 0, MXR_STATUS_SYNC_ENABLE); 355 MXR_STATUS_SYNC_ENABLE : 0, MXR_STATUS_SYNC_ENABLE);
364 356
365 if (test_bit(MXR_BIT_VP_ENABLED, &ctx->flags)) 357 if (test_bit(MXR_BIT_VP_ENABLED, &ctx->flags))
366 vp_reg_write(res, VP_SHADOW_UPDATE, enable ? 358 vp_reg_write(ctx, VP_SHADOW_UPDATE, enable ?
367 VP_SHADOW_UPDATE_ENABLE : 0); 359 VP_SHADOW_UPDATE_ENABLE : 0);
368} 360}
369 361
370static void mixer_cfg_scan(struct mixer_context *ctx, int width, int height) 362static void mixer_cfg_scan(struct mixer_context *ctx, int width, int height)
371{ 363{
372 struct mixer_resources *res = &ctx->mixer_res;
373 u32 val; 364 u32 val;
374 365
375 /* choosing between interlace and progressive mode */ 366 /* choosing between interlace and progressive mode */
@@ -378,7 +369,7 @@ static void mixer_cfg_scan(struct mixer_context *ctx, int width, int height)
378 369
379 /* setup display size */ 370 /* setup display size */
380 if (ctx->mxr_ver == MXR_VER_128_0_0_184) { 371 if (ctx->mxr_ver == MXR_VER_128_0_0_184) {
381 mixer_reg_write(&ctx->mixer_res, MXR_RESOLUTION, 372 mixer_reg_write(ctx, MXR_RESOLUTION,
382 MXR_MXR_RES_HEIGHT(height) | MXR_MXR_RES_WIDTH(width)); 373 MXR_MXR_RES_HEIGHT(height) | MXR_MXR_RES_WIDTH(width));
383 } else { 374 } else {
384 /* choosing between proper HD and SD mode */ 375 /* choosing between proper HD and SD mode */
@@ -394,12 +385,11 @@ static void mixer_cfg_scan(struct mixer_context *ctx, int width, int height)
394 val |= MXR_CFG_SCAN_HD_720 | MXR_CFG_SCAN_HD; 385 val |= MXR_CFG_SCAN_HD_720 | MXR_CFG_SCAN_HD;
395 } 386 }
396 387
397 mixer_reg_writemask(res, MXR_CFG, val, MXR_CFG_SCAN_MASK); 388 mixer_reg_writemask(ctx, MXR_CFG, val, MXR_CFG_SCAN_MASK);
398} 389}
399 390
400static void mixer_cfg_rgb_fmt(struct mixer_context *ctx, unsigned int height) 391static void mixer_cfg_rgb_fmt(struct mixer_context *ctx, unsigned int height)
401{ 392{
402 struct mixer_resources *res = &ctx->mixer_res;
403 u32 val; 393 u32 val;
404 394
405 switch (height) { 395 switch (height) {
@@ -412,45 +402,44 @@ static void mixer_cfg_rgb_fmt(struct mixer_context *ctx, unsigned int height)
412 default: 402 default:
413 val = MXR_CFG_RGB709_16_235; 403 val = MXR_CFG_RGB709_16_235;
414 /* Configure the BT.709 CSC matrix for full range RGB. */ 404 /* Configure the BT.709 CSC matrix for full range RGB. */
415 mixer_reg_write(res, MXR_CM_COEFF_Y, 405 mixer_reg_write(ctx, MXR_CM_COEFF_Y,
416 MXR_CSC_CT( 0.184, 0.614, 0.063) | 406 MXR_CSC_CT( 0.184, 0.614, 0.063) |
417 MXR_CM_COEFF_RGB_FULL); 407 MXR_CM_COEFF_RGB_FULL);
418 mixer_reg_write(res, MXR_CM_COEFF_CB, 408 mixer_reg_write(ctx, MXR_CM_COEFF_CB,
419 MXR_CSC_CT(-0.102, -0.338, 0.440)); 409 MXR_CSC_CT(-0.102, -0.338, 0.440));
420 mixer_reg_write(res, MXR_CM_COEFF_CR, 410 mixer_reg_write(ctx, MXR_CM_COEFF_CR,
421 MXR_CSC_CT( 0.440, -0.399, -0.040)); 411 MXR_CSC_CT( 0.440, -0.399, -0.040));
422 break; 412 break;
423 } 413 }
424 414
425 mixer_reg_writemask(res, MXR_CFG, val, MXR_CFG_RGB_FMT_MASK); 415 mixer_reg_writemask(ctx, MXR_CFG, val, MXR_CFG_RGB_FMT_MASK);
426} 416}
427 417
428static void mixer_cfg_layer(struct mixer_context *ctx, unsigned int win, 418static void mixer_cfg_layer(struct mixer_context *ctx, unsigned int win,
429 unsigned int priority, bool enable) 419 unsigned int priority, bool enable)
430{ 420{
431 struct mixer_resources *res = &ctx->mixer_res;
432 u32 val = enable ? ~0 : 0; 421 u32 val = enable ? ~0 : 0;
433 422
434 switch (win) { 423 switch (win) {
435 case 0: 424 case 0:
436 mixer_reg_writemask(res, MXR_CFG, val, MXR_CFG_GRP0_ENABLE); 425 mixer_reg_writemask(ctx, MXR_CFG, val, MXR_CFG_GRP0_ENABLE);
437 mixer_reg_writemask(res, MXR_LAYER_CFG, 426 mixer_reg_writemask(ctx, MXR_LAYER_CFG,
438 MXR_LAYER_CFG_GRP0_VAL(priority), 427 MXR_LAYER_CFG_GRP0_VAL(priority),
439 MXR_LAYER_CFG_GRP0_MASK); 428 MXR_LAYER_CFG_GRP0_MASK);
440 break; 429 break;
441 case 1: 430 case 1:
442 mixer_reg_writemask(res, MXR_CFG, val, MXR_CFG_GRP1_ENABLE); 431 mixer_reg_writemask(ctx, MXR_CFG, val, MXR_CFG_GRP1_ENABLE);
443 mixer_reg_writemask(res, MXR_LAYER_CFG, 432 mixer_reg_writemask(ctx, MXR_LAYER_CFG,
444 MXR_LAYER_CFG_GRP1_VAL(priority), 433 MXR_LAYER_CFG_GRP1_VAL(priority),
445 MXR_LAYER_CFG_GRP1_MASK); 434 MXR_LAYER_CFG_GRP1_MASK);
446 435
447 break; 436 break;
448 case VP_DEFAULT_WIN: 437 case VP_DEFAULT_WIN:
449 if (test_bit(MXR_BIT_VP_ENABLED, &ctx->flags)) { 438 if (test_bit(MXR_BIT_VP_ENABLED, &ctx->flags)) {
450 vp_reg_writemask(res, VP_ENABLE, val, VP_ENABLE_ON); 439 vp_reg_writemask(ctx, VP_ENABLE, val, VP_ENABLE_ON);
451 mixer_reg_writemask(res, MXR_CFG, val, 440 mixer_reg_writemask(ctx, MXR_CFG, val,
452 MXR_CFG_VP_ENABLE); 441 MXR_CFG_VP_ENABLE);
453 mixer_reg_writemask(res, MXR_LAYER_CFG, 442 mixer_reg_writemask(ctx, MXR_LAYER_CFG,
454 MXR_LAYER_CFG_VP_VAL(priority), 443 MXR_LAYER_CFG_VP_VAL(priority),
455 MXR_LAYER_CFG_VP_MASK); 444 MXR_LAYER_CFG_VP_MASK);
456 } 445 }
@@ -460,19 +449,16 @@ static void mixer_cfg_layer(struct mixer_context *ctx, unsigned int win,
460 449
461static void mixer_run(struct mixer_context *ctx) 450static void mixer_run(struct mixer_context *ctx)
462{ 451{
463 struct mixer_resources *res = &ctx->mixer_res; 452 mixer_reg_writemask(ctx, MXR_STATUS, ~0, MXR_STATUS_REG_RUN);
464
465 mixer_reg_writemask(res, MXR_STATUS, ~0, MXR_STATUS_REG_RUN);
466} 453}
467 454
468static void mixer_stop(struct mixer_context *ctx) 455static void mixer_stop(struct mixer_context *ctx)
469{ 456{
470 struct mixer_resources *res = &ctx->mixer_res;
471 int timeout = 20; 457 int timeout = 20;
472 458
473 mixer_reg_writemask(res, MXR_STATUS, 0, MXR_STATUS_REG_RUN); 459 mixer_reg_writemask(ctx, MXR_STATUS, 0, MXR_STATUS_REG_RUN);
474 460
475 while (!(mixer_reg_read(res, MXR_STATUS) & MXR_STATUS_REG_IDLE) && 461 while (!(mixer_reg_read(ctx, MXR_STATUS) & MXR_STATUS_REG_IDLE) &&
476 --timeout) 462 --timeout)
477 usleep_range(10000, 12000); 463 usleep_range(10000, 12000);
478} 464}
@@ -496,7 +482,6 @@ static void vp_video_buffer(struct mixer_context *ctx,
496{ 482{
497 struct exynos_drm_plane_state *state = 483 struct exynos_drm_plane_state *state =
498 to_exynos_plane_state(plane->base.state); 484 to_exynos_plane_state(plane->base.state);
499 struct mixer_resources *res = &ctx->mixer_res;
500 struct drm_framebuffer *fb = state->base.fb; 485 struct drm_framebuffer *fb = state->base.fb;
501 unsigned int priority = state->base.normalized_zpos + 1; 486 unsigned int priority = state->base.normalized_zpos + 1;
502 unsigned long flags; 487 unsigned long flags;
@@ -523,55 +508,55 @@ static void vp_video_buffer(struct mixer_context *ctx,
523 chroma_addr[1] = 0; 508 chroma_addr[1] = 0;
524 } 509 }
525 510
526 spin_lock_irqsave(&res->reg_slock, flags); 511 spin_lock_irqsave(&ctx->reg_slock, flags);
527 512
528 /* interlace or progressive scan mode */ 513 /* interlace or progressive scan mode */
529 val = (test_bit(MXR_BIT_INTERLACE, &ctx->flags) ? ~0 : 0); 514 val = (test_bit(MXR_BIT_INTERLACE, &ctx->flags) ? ~0 : 0);
530 vp_reg_writemask(res, VP_MODE, val, VP_MODE_LINE_SKIP); 515 vp_reg_writemask(ctx, VP_MODE, val, VP_MODE_LINE_SKIP);
531 516
532 /* setup format */ 517 /* setup format */
533 val = (is_nv21 ? VP_MODE_NV21 : VP_MODE_NV12); 518 val = (is_nv21 ? VP_MODE_NV21 : VP_MODE_NV12);
534 val |= (is_tiled ? VP_MODE_MEM_TILED : VP_MODE_MEM_LINEAR); 519 val |= (is_tiled ? VP_MODE_MEM_TILED : VP_MODE_MEM_LINEAR);
535 vp_reg_writemask(res, VP_MODE, val, VP_MODE_FMT_MASK); 520 vp_reg_writemask(ctx, VP_MODE, val, VP_MODE_FMT_MASK);
536 521
537 /* setting size of input image */ 522 /* setting size of input image */
538 vp_reg_write(res, VP_IMG_SIZE_Y, VP_IMG_HSIZE(fb->pitches[0]) | 523 vp_reg_write(ctx, VP_IMG_SIZE_Y, VP_IMG_HSIZE(fb->pitches[0]) |
539 VP_IMG_VSIZE(fb->height)); 524 VP_IMG_VSIZE(fb->height));
540 /* chroma plane for NV12/NV21 is half the height of the luma plane */ 525 /* chroma plane for NV12/NV21 is half the height of the luma plane */
541 vp_reg_write(res, VP_IMG_SIZE_C, VP_IMG_HSIZE(fb->pitches[0]) | 526 vp_reg_write(ctx, VP_IMG_SIZE_C, VP_IMG_HSIZE(fb->pitches[0]) |
542 VP_IMG_VSIZE(fb->height / 2)); 527 VP_IMG_VSIZE(fb->height / 2));
543 528
544 vp_reg_write(res, VP_SRC_WIDTH, state->src.w); 529 vp_reg_write(ctx, VP_SRC_WIDTH, state->src.w);
545 vp_reg_write(res, VP_SRC_HEIGHT, state->src.h); 530 vp_reg_write(ctx, VP_SRC_HEIGHT, state->src.h);
546 vp_reg_write(res, VP_SRC_H_POSITION, 531 vp_reg_write(ctx, VP_SRC_H_POSITION,
547 VP_SRC_H_POSITION_VAL(state->src.x)); 532 VP_SRC_H_POSITION_VAL(state->src.x));
548 vp_reg_write(res, VP_SRC_V_POSITION, state->src.y); 533 vp_reg_write(ctx, VP_SRC_V_POSITION, state->src.y);
549 534
550 vp_reg_write(res, VP_DST_WIDTH, state->crtc.w); 535 vp_reg_write(ctx, VP_DST_WIDTH, state->crtc.w);
551 vp_reg_write(res, VP_DST_H_POSITION, state->crtc.x); 536 vp_reg_write(ctx, VP_DST_H_POSITION, state->crtc.x);
552 if (test_bit(MXR_BIT_INTERLACE, &ctx->flags)) { 537 if (test_bit(MXR_BIT_INTERLACE, &ctx->flags)) {
553 vp_reg_write(res, VP_DST_HEIGHT, state->crtc.h / 2); 538 vp_reg_write(ctx, VP_DST_HEIGHT, state->crtc.h / 2);
554 vp_reg_write(res, VP_DST_V_POSITION, state->crtc.y / 2); 539 vp_reg_write(ctx, VP_DST_V_POSITION, state->crtc.y / 2);
555 } else { 540 } else {
556 vp_reg_write(res, VP_DST_HEIGHT, state->crtc.h); 541 vp_reg_write(ctx, VP_DST_HEIGHT, state->crtc.h);
557 vp_reg_write(res, VP_DST_V_POSITION, state->crtc.y); 542 vp_reg_write(ctx, VP_DST_V_POSITION, state->crtc.y);
558 } 543 }
559 544
560 vp_reg_write(res, VP_H_RATIO, state->h_ratio); 545 vp_reg_write(ctx, VP_H_RATIO, state->h_ratio);
561 vp_reg_write(res, VP_V_RATIO, state->v_ratio); 546 vp_reg_write(ctx, VP_V_RATIO, state->v_ratio);
562 547
563 vp_reg_write(res, VP_ENDIAN_MODE, VP_ENDIAN_MODE_LITTLE); 548 vp_reg_write(ctx, VP_ENDIAN_MODE, VP_ENDIAN_MODE_LITTLE);
564 549
565 /* set buffer address to vp */ 550 /* set buffer address to vp */
566 vp_reg_write(res, VP_TOP_Y_PTR, luma_addr[0]); 551 vp_reg_write(ctx, VP_TOP_Y_PTR, luma_addr[0]);
567 vp_reg_write(res, VP_BOT_Y_PTR, luma_addr[1]); 552 vp_reg_write(ctx, VP_BOT_Y_PTR, luma_addr[1]);
568 vp_reg_write(res, VP_TOP_C_PTR, chroma_addr[0]); 553 vp_reg_write(ctx, VP_TOP_C_PTR, chroma_addr[0]);
569 vp_reg_write(res, VP_BOT_C_PTR, chroma_addr[1]); 554 vp_reg_write(ctx, VP_BOT_C_PTR, chroma_addr[1]);
570 555
571 mixer_cfg_layer(ctx, plane->index, priority, true); 556 mixer_cfg_layer(ctx, plane->index, priority, true);
572 mixer_cfg_vp_blend(ctx); 557 mixer_cfg_vp_blend(ctx);
573 558
574 spin_unlock_irqrestore(&res->reg_slock, flags); 559 spin_unlock_irqrestore(&ctx->reg_slock, flags);
575 560
576 mixer_regs_dump(ctx); 561 mixer_regs_dump(ctx);
577 vp_regs_dump(ctx); 562 vp_regs_dump(ctx);
@@ -579,9 +564,7 @@ static void vp_video_buffer(struct mixer_context *ctx,
579 564
580static void mixer_layer_update(struct mixer_context *ctx) 565static void mixer_layer_update(struct mixer_context *ctx)
581{ 566{
582 struct mixer_resources *res = &ctx->mixer_res; 567 mixer_reg_writemask(ctx, MXR_CFG, ~0, MXR_CFG_LAYER_UPDATE);
583
584 mixer_reg_writemask(res, MXR_CFG, ~0, MXR_CFG_LAYER_UPDATE);
585} 568}
586 569
587static void mixer_graph_buffer(struct mixer_context *ctx, 570static void mixer_graph_buffer(struct mixer_context *ctx,
@@ -589,7 +572,6 @@ static void mixer_graph_buffer(struct mixer_context *ctx,
589{ 572{
590 struct exynos_drm_plane_state *state = 573 struct exynos_drm_plane_state *state =
591 to_exynos_plane_state(plane->base.state); 574 to_exynos_plane_state(plane->base.state);
592 struct mixer_resources *res = &ctx->mixer_res;
593 struct drm_framebuffer *fb = state->base.fb; 575 struct drm_framebuffer *fb = state->base.fb;
594 unsigned int priority = state->base.normalized_zpos + 1; 576 unsigned int priority = state->base.normalized_zpos + 1;
595 unsigned long flags; 577 unsigned long flags;
@@ -634,29 +616,29 @@ static void mixer_graph_buffer(struct mixer_context *ctx,
634 + (state->src.x * fb->format->cpp[0]) 616 + (state->src.x * fb->format->cpp[0])
635 + (state->src.y * fb->pitches[0]); 617 + (state->src.y * fb->pitches[0]);
636 618
637 spin_lock_irqsave(&res->reg_slock, flags); 619 spin_lock_irqsave(&ctx->reg_slock, flags);
638 620
639 /* setup format */ 621 /* setup format */
640 mixer_reg_writemask(res, MXR_GRAPHIC_CFG(win), 622 mixer_reg_writemask(ctx, MXR_GRAPHIC_CFG(win),
641 MXR_GRP_CFG_FORMAT_VAL(fmt), MXR_GRP_CFG_FORMAT_MASK); 623 MXR_GRP_CFG_FORMAT_VAL(fmt), MXR_GRP_CFG_FORMAT_MASK);
642 624
643 /* setup geometry */ 625 /* setup geometry */
644 mixer_reg_write(res, MXR_GRAPHIC_SPAN(win), 626 mixer_reg_write(ctx, MXR_GRAPHIC_SPAN(win),
645 fb->pitches[0] / fb->format->cpp[0]); 627 fb->pitches[0] / fb->format->cpp[0]);
646 628
647 val = MXR_GRP_WH_WIDTH(state->src.w); 629 val = MXR_GRP_WH_WIDTH(state->src.w);
648 val |= MXR_GRP_WH_HEIGHT(state->src.h); 630 val |= MXR_GRP_WH_HEIGHT(state->src.h);
649 val |= MXR_GRP_WH_H_SCALE(x_ratio); 631 val |= MXR_GRP_WH_H_SCALE(x_ratio);
650 val |= MXR_GRP_WH_V_SCALE(y_ratio); 632 val |= MXR_GRP_WH_V_SCALE(y_ratio);
651 mixer_reg_write(res, MXR_GRAPHIC_WH(win), val); 633 mixer_reg_write(ctx, MXR_GRAPHIC_WH(win), val);
652 634
653 /* setup offsets in display image */ 635 /* setup offsets in display image */
654 val = MXR_GRP_DXY_DX(dst_x_offset); 636 val = MXR_GRP_DXY_DX(dst_x_offset);
655 val |= MXR_GRP_DXY_DY(dst_y_offset); 637 val |= MXR_GRP_DXY_DY(dst_y_offset);
656 mixer_reg_write(res, MXR_GRAPHIC_DXY(win), val); 638 mixer_reg_write(ctx, MXR_GRAPHIC_DXY(win), val);
657 639
658 /* set buffer address to mixer */ 640 /* set buffer address to mixer */
659 mixer_reg_write(res, MXR_GRAPHIC_BASE(win), dma_addr); 641 mixer_reg_write(ctx, MXR_GRAPHIC_BASE(win), dma_addr);
660 642
661 mixer_cfg_layer(ctx, win, priority, true); 643 mixer_cfg_layer(ctx, win, priority, true);
662 mixer_cfg_gfx_blend(ctx, win, is_alpha_format(fb->format->format)); 644 mixer_cfg_gfx_blend(ctx, win, is_alpha_format(fb->format->format));
@@ -666,20 +648,19 @@ static void mixer_graph_buffer(struct mixer_context *ctx,
666 ctx->mxr_ver == MXR_VER_128_0_0_184) 648 ctx->mxr_ver == MXR_VER_128_0_0_184)
667 mixer_layer_update(ctx); 649 mixer_layer_update(ctx);
668 650
669 spin_unlock_irqrestore(&res->reg_slock, flags); 651 spin_unlock_irqrestore(&ctx->reg_slock, flags);
670 652
671 mixer_regs_dump(ctx); 653 mixer_regs_dump(ctx);
672} 654}
673 655
674static void vp_win_reset(struct mixer_context *ctx) 656static void vp_win_reset(struct mixer_context *ctx)
675{ 657{
676 struct mixer_resources *res = &ctx->mixer_res;
677 unsigned int tries = 100; 658 unsigned int tries = 100;
678 659
679 vp_reg_write(res, VP_SRESET, VP_SRESET_PROCESSING); 660 vp_reg_write(ctx, VP_SRESET, VP_SRESET_PROCESSING);
680 while (--tries) { 661 while (--tries) {
681 /* waiting until VP_SRESET_PROCESSING is 0 */ 662 /* waiting until VP_SRESET_PROCESSING is 0 */
682 if (~vp_reg_read(res, VP_SRESET) & VP_SRESET_PROCESSING) 663 if (~vp_reg_read(ctx, VP_SRESET) & VP_SRESET_PROCESSING)
683 break; 664 break;
684 mdelay(10); 665 mdelay(10);
685 } 666 }
@@ -688,57 +669,55 @@ static void vp_win_reset(struct mixer_context *ctx)
688 669
689static void mixer_win_reset(struct mixer_context *ctx) 670static void mixer_win_reset(struct mixer_context *ctx)
690{ 671{
691 struct mixer_resources *res = &ctx->mixer_res;
692 unsigned long flags; 672 unsigned long flags;
693 673
694 spin_lock_irqsave(&res->reg_slock, flags); 674 spin_lock_irqsave(&ctx->reg_slock, flags);
695 675
696 mixer_reg_writemask(res, MXR_CFG, MXR_CFG_DST_HDMI, MXR_CFG_DST_MASK); 676 mixer_reg_writemask(ctx, MXR_CFG, MXR_CFG_DST_HDMI, MXR_CFG_DST_MASK);
697 677
698 /* set output in RGB888 mode */ 678 /* set output in RGB888 mode */
699 mixer_reg_writemask(res, MXR_CFG, MXR_CFG_OUT_RGB888, MXR_CFG_OUT_MASK); 679 mixer_reg_writemask(ctx, MXR_CFG, MXR_CFG_OUT_RGB888, MXR_CFG_OUT_MASK);
700 680
701 /* 16 beat burst in DMA */ 681 /* 16 beat burst in DMA */
702 mixer_reg_writemask(res, MXR_STATUS, MXR_STATUS_16_BURST, 682 mixer_reg_writemask(ctx, MXR_STATUS, MXR_STATUS_16_BURST,
703 MXR_STATUS_BURST_MASK); 683 MXR_STATUS_BURST_MASK);
704 684
705 /* reset default layer priority */ 685 /* reset default layer priority */
706 mixer_reg_write(res, MXR_LAYER_CFG, 0); 686 mixer_reg_write(ctx, MXR_LAYER_CFG, 0);
707 687
708 /* set all background colors to RGB (0,0,0) */ 688 /* set all background colors to RGB (0,0,0) */
709 mixer_reg_write(res, MXR_BG_COLOR0, MXR_YCBCR_VAL(0, 128, 128)); 689 mixer_reg_write(ctx, MXR_BG_COLOR0, MXR_YCBCR_VAL(0, 128, 128));
710 mixer_reg_write(res, MXR_BG_COLOR1, MXR_YCBCR_VAL(0, 128, 128)); 690 mixer_reg_write(ctx, MXR_BG_COLOR1, MXR_YCBCR_VAL(0, 128, 128));
711 mixer_reg_write(res, MXR_BG_COLOR2, MXR_YCBCR_VAL(0, 128, 128)); 691 mixer_reg_write(ctx, MXR_BG_COLOR2, MXR_YCBCR_VAL(0, 128, 128));
712 692
713 if (test_bit(MXR_BIT_VP_ENABLED, &ctx->flags)) { 693 if (test_bit(MXR_BIT_VP_ENABLED, &ctx->flags)) {
714 /* configuration of Video Processor Registers */ 694 /* configuration of Video Processor Registers */
715 vp_win_reset(ctx); 695 vp_win_reset(ctx);
716 vp_default_filter(res); 696 vp_default_filter(ctx);
717 } 697 }
718 698
719 /* disable all layers */ 699 /* disable all layers */
720 mixer_reg_writemask(res, MXR_CFG, 0, MXR_CFG_GRP0_ENABLE); 700 mixer_reg_writemask(ctx, MXR_CFG, 0, MXR_CFG_GRP0_ENABLE);
721 mixer_reg_writemask(res, MXR_CFG, 0, MXR_CFG_GRP1_ENABLE); 701 mixer_reg_writemask(ctx, MXR_CFG, 0, MXR_CFG_GRP1_ENABLE);
722 if (test_bit(MXR_BIT_VP_ENABLED, &ctx->flags)) 702 if (test_bit(MXR_BIT_VP_ENABLED, &ctx->flags))
723 mixer_reg_writemask(res, MXR_CFG, 0, MXR_CFG_VP_ENABLE); 703 mixer_reg_writemask(ctx, MXR_CFG, 0, MXR_CFG_VP_ENABLE);
724 704
725 /* set all source image offsets to zero */ 705 /* set all source image offsets to zero */
726 mixer_reg_write(res, MXR_GRAPHIC_SXY(0), 0); 706 mixer_reg_write(ctx, MXR_GRAPHIC_SXY(0), 0);
727 mixer_reg_write(res, MXR_GRAPHIC_SXY(1), 0); 707 mixer_reg_write(ctx, MXR_GRAPHIC_SXY(1), 0);
728 708
729 spin_unlock_irqrestore(&res->reg_slock, flags); 709 spin_unlock_irqrestore(&ctx->reg_slock, flags);
730} 710}
731 711
732static irqreturn_t mixer_irq_handler(int irq, void *arg) 712static irqreturn_t mixer_irq_handler(int irq, void *arg)
733{ 713{
734 struct mixer_context *ctx = arg; 714 struct mixer_context *ctx = arg;
735 struct mixer_resources *res = &ctx->mixer_res;
736 u32 val, base, shadow; 715 u32 val, base, shadow;
737 716
738 spin_lock(&res->reg_slock); 717 spin_lock(&ctx->reg_slock);
739 718
740 /* read interrupt status for handling and clearing flags for VSYNC */ 719 /* read interrupt status for handling and clearing flags for VSYNC */
741 val = mixer_reg_read(res, MXR_INT_STATUS); 720 val = mixer_reg_read(ctx, MXR_INT_STATUS);
742 721
743 /* handling VSYNC */ 722 /* handling VSYNC */
744 if (val & MXR_INT_STATUS_VSYNC) { 723 if (val & MXR_INT_STATUS_VSYNC) {
@@ -748,13 +727,13 @@ static irqreturn_t mixer_irq_handler(int irq, void *arg)
748 727
749 /* interlace scan need to check shadow register */ 728 /* interlace scan need to check shadow register */
750 if (test_bit(MXR_BIT_INTERLACE, &ctx->flags)) { 729 if (test_bit(MXR_BIT_INTERLACE, &ctx->flags)) {
751 base = mixer_reg_read(res, MXR_GRAPHIC_BASE(0)); 730 base = mixer_reg_read(ctx, MXR_GRAPHIC_BASE(0));
752 shadow = mixer_reg_read(res, MXR_GRAPHIC_BASE_S(0)); 731 shadow = mixer_reg_read(ctx, MXR_GRAPHIC_BASE_S(0));
753 if (base != shadow) 732 if (base != shadow)
754 goto out; 733 goto out;
755 734
756 base = mixer_reg_read(res, MXR_GRAPHIC_BASE(1)); 735 base = mixer_reg_read(ctx, MXR_GRAPHIC_BASE(1));
757 shadow = mixer_reg_read(res, MXR_GRAPHIC_BASE_S(1)); 736 shadow = mixer_reg_read(ctx, MXR_GRAPHIC_BASE_S(1));
758 if (base != shadow) 737 if (base != shadow)
759 goto out; 738 goto out;
760 } 739 }
@@ -764,9 +743,9 @@ static irqreturn_t mixer_irq_handler(int irq, void *arg)
764 743
765out: 744out:
766 /* clear interrupts */ 745 /* clear interrupts */
767 mixer_reg_write(res, MXR_INT_STATUS, val); 746 mixer_reg_write(ctx, MXR_INT_STATUS, val);
768 747
769 spin_unlock(&res->reg_slock); 748 spin_unlock(&ctx->reg_slock);
770 749
771 return IRQ_HANDLED; 750 return IRQ_HANDLED;
772} 751}
@@ -774,26 +753,25 @@ out:
774static int mixer_resources_init(struct mixer_context *mixer_ctx) 753static int mixer_resources_init(struct mixer_context *mixer_ctx)
775{ 754{
776 struct device *dev = &mixer_ctx->pdev->dev; 755 struct device *dev = &mixer_ctx->pdev->dev;
777 struct mixer_resources *mixer_res = &mixer_ctx->mixer_res;
778 struct resource *res; 756 struct resource *res;
779 int ret; 757 int ret;
780 758
781 spin_lock_init(&mixer_res->reg_slock); 759 spin_lock_init(&mixer_ctx->reg_slock);
782 760
783 mixer_res->mixer = devm_clk_get(dev, "mixer"); 761 mixer_ctx->mixer = devm_clk_get(dev, "mixer");
784 if (IS_ERR(mixer_res->mixer)) { 762 if (IS_ERR(mixer_ctx->mixer)) {
785 dev_err(dev, "failed to get clock 'mixer'\n"); 763 dev_err(dev, "failed to get clock 'mixer'\n");
786 return -ENODEV; 764 return -ENODEV;
787 } 765 }
788 766
789 mixer_res->hdmi = devm_clk_get(dev, "hdmi"); 767 mixer_ctx->hdmi = devm_clk_get(dev, "hdmi");
790 if (IS_ERR(mixer_res->hdmi)) { 768 if (IS_ERR(mixer_ctx->hdmi)) {
791 dev_err(dev, "failed to get clock 'hdmi'\n"); 769 dev_err(dev, "failed to get clock 'hdmi'\n");
792 return PTR_ERR(mixer_res->hdmi); 770 return PTR_ERR(mixer_ctx->hdmi);
793 } 771 }
794 772
795 mixer_res->sclk_hdmi = devm_clk_get(dev, "sclk_hdmi"); 773 mixer_ctx->sclk_hdmi = devm_clk_get(dev, "sclk_hdmi");
796 if (IS_ERR(mixer_res->sclk_hdmi)) { 774 if (IS_ERR(mixer_ctx->sclk_hdmi)) {
797 dev_err(dev, "failed to get clock 'sclk_hdmi'\n"); 775 dev_err(dev, "failed to get clock 'sclk_hdmi'\n");
798 return -ENODEV; 776 return -ENODEV;
799 } 777 }
@@ -803,9 +781,9 @@ static int mixer_resources_init(struct mixer_context *mixer_ctx)
803 return -ENXIO; 781 return -ENXIO;
804 } 782 }
805 783
806 mixer_res->mixer_regs = devm_ioremap(dev, res->start, 784 mixer_ctx->mixer_regs = devm_ioremap(dev, res->start,
807 resource_size(res)); 785 resource_size(res));
808 if (mixer_res->mixer_regs == NULL) { 786 if (mixer_ctx->mixer_regs == NULL) {
809 dev_err(dev, "register mapping failed.\n"); 787 dev_err(dev, "register mapping failed.\n");
810 return -ENXIO; 788 return -ENXIO;
811 } 789 }
@@ -822,7 +800,7 @@ static int mixer_resources_init(struct mixer_context *mixer_ctx)
822 dev_err(dev, "request interrupt failed.\n"); 800 dev_err(dev, "request interrupt failed.\n");
823 return ret; 801 return ret;
824 } 802 }
825 mixer_res->irq = res->start; 803 mixer_ctx->irq = res->start;
826 804
827 return 0; 805 return 0;
828} 806}
@@ -830,30 +808,29 @@ static int mixer_resources_init(struct mixer_context *mixer_ctx)
830static int vp_resources_init(struct mixer_context *mixer_ctx) 808static int vp_resources_init(struct mixer_context *mixer_ctx)
831{ 809{
832 struct device *dev = &mixer_ctx->pdev->dev; 810 struct device *dev = &mixer_ctx->pdev->dev;
833 struct mixer_resources *mixer_res = &mixer_ctx->mixer_res;
834 struct resource *res; 811 struct resource *res;
835 812
836 mixer_res->vp = devm_clk_get(dev, "vp"); 813 mixer_ctx->vp = devm_clk_get(dev, "vp");
837 if (IS_ERR(mixer_res->vp)) { 814 if (IS_ERR(mixer_ctx->vp)) {
838 dev_err(dev, "failed to get clock 'vp'\n"); 815 dev_err(dev, "failed to get clock 'vp'\n");
839 return -ENODEV; 816 return -ENODEV;
840 } 817 }
841 818
842 if (test_bit(MXR_BIT_HAS_SCLK, &mixer_ctx->flags)) { 819 if (test_bit(MXR_BIT_HAS_SCLK, &mixer_ctx->flags)) {
843 mixer_res->sclk_mixer = devm_clk_get(dev, "sclk_mixer"); 820 mixer_ctx->sclk_mixer = devm_clk_get(dev, "sclk_mixer");
844 if (IS_ERR(mixer_res->sclk_mixer)) { 821 if (IS_ERR(mixer_ctx->sclk_mixer)) {
845 dev_err(dev, "failed to get clock 'sclk_mixer'\n"); 822 dev_err(dev, "failed to get clock 'sclk_mixer'\n");
846 return -ENODEV; 823 return -ENODEV;
847 } 824 }
848 mixer_res->mout_mixer = devm_clk_get(dev, "mout_mixer"); 825 mixer_ctx->mout_mixer = devm_clk_get(dev, "mout_mixer");
849 if (IS_ERR(mixer_res->mout_mixer)) { 826 if (IS_ERR(mixer_ctx->mout_mixer)) {
850 dev_err(dev, "failed to get clock 'mout_mixer'\n"); 827 dev_err(dev, "failed to get clock 'mout_mixer'\n");
851 return -ENODEV; 828 return -ENODEV;
852 } 829 }
853 830
854 if (mixer_res->sclk_hdmi && mixer_res->mout_mixer) 831 if (mixer_ctx->sclk_hdmi && mixer_ctx->mout_mixer)
855 clk_set_parent(mixer_res->mout_mixer, 832 clk_set_parent(mixer_ctx->mout_mixer,
856 mixer_res->sclk_hdmi); 833 mixer_ctx->sclk_hdmi);
857 } 834 }
858 835
859 res = platform_get_resource(mixer_ctx->pdev, IORESOURCE_MEM, 1); 836 res = platform_get_resource(mixer_ctx->pdev, IORESOURCE_MEM, 1);
@@ -862,9 +839,9 @@ static int vp_resources_init(struct mixer_context *mixer_ctx)
862 return -ENXIO; 839 return -ENXIO;
863 } 840 }
864 841
865 mixer_res->vp_regs = devm_ioremap(dev, res->start, 842 mixer_ctx->vp_regs = devm_ioremap(dev, res->start,
866 resource_size(res)); 843 resource_size(res));
867 if (mixer_res->vp_regs == NULL) { 844 if (mixer_ctx->vp_regs == NULL) {
868 dev_err(dev, "register mapping failed.\n"); 845 dev_err(dev, "register mapping failed.\n");
869 return -ENXIO; 846 return -ENXIO;
870 } 847 }
@@ -908,15 +885,14 @@ static void mixer_ctx_remove(struct mixer_context *mixer_ctx)
908static int mixer_enable_vblank(struct exynos_drm_crtc *crtc) 885static int mixer_enable_vblank(struct exynos_drm_crtc *crtc)
909{ 886{
910 struct mixer_context *mixer_ctx = crtc->ctx; 887 struct mixer_context *mixer_ctx = crtc->ctx;
911 struct mixer_resources *res = &mixer_ctx->mixer_res;
912 888
913 __set_bit(MXR_BIT_VSYNC, &mixer_ctx->flags); 889 __set_bit(MXR_BIT_VSYNC, &mixer_ctx->flags);
914 if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags)) 890 if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags))
915 return 0; 891 return 0;
916 892
917 /* enable vsync interrupt */ 893 /* enable vsync interrupt */
918 mixer_reg_writemask(res, MXR_INT_STATUS, ~0, MXR_INT_CLEAR_VSYNC); 894 mixer_reg_writemask(mixer_ctx, MXR_INT_STATUS, ~0, MXR_INT_CLEAR_VSYNC);
919 mixer_reg_writemask(res, MXR_INT_EN, ~0, MXR_INT_EN_VSYNC); 895 mixer_reg_writemask(mixer_ctx, MXR_INT_EN, ~0, MXR_INT_EN_VSYNC);
920 896
921 return 0; 897 return 0;
922} 898}
@@ -924,7 +900,6 @@ static int mixer_enable_vblank(struct exynos_drm_crtc *crtc)
924static void mixer_disable_vblank(struct exynos_drm_crtc *crtc) 900static void mixer_disable_vblank(struct exynos_drm_crtc *crtc)
925{ 901{
926 struct mixer_context *mixer_ctx = crtc->ctx; 902 struct mixer_context *mixer_ctx = crtc->ctx;
927 struct mixer_resources *res = &mixer_ctx->mixer_res;
928 903
929 __clear_bit(MXR_BIT_VSYNC, &mixer_ctx->flags); 904 __clear_bit(MXR_BIT_VSYNC, &mixer_ctx->flags);
930 905
@@ -932,8 +907,8 @@ static void mixer_disable_vblank(struct exynos_drm_crtc *crtc)
932 return; 907 return;
933 908
934 /* disable vsync interrupt */ 909 /* disable vsync interrupt */
935 mixer_reg_writemask(res, MXR_INT_STATUS, ~0, MXR_INT_CLEAR_VSYNC); 910 mixer_reg_writemask(mixer_ctx, MXR_INT_STATUS, ~0, MXR_INT_CLEAR_VSYNC);
936 mixer_reg_writemask(res, MXR_INT_EN, 0, MXR_INT_EN_VSYNC); 911 mixer_reg_writemask(mixer_ctx, MXR_INT_EN, 0, MXR_INT_EN_VSYNC);
937} 912}
938 913
939static void mixer_atomic_begin(struct exynos_drm_crtc *crtc) 914static void mixer_atomic_begin(struct exynos_drm_crtc *crtc)
@@ -966,7 +941,6 @@ static void mixer_disable_plane(struct exynos_drm_crtc *crtc,
966 struct exynos_drm_plane *plane) 941 struct exynos_drm_plane *plane)
967{ 942{
968 struct mixer_context *mixer_ctx = crtc->ctx; 943 struct mixer_context *mixer_ctx = crtc->ctx;
969 struct mixer_resources *res = &mixer_ctx->mixer_res;
970 unsigned long flags; 944 unsigned long flags;
971 945
972 DRM_DEBUG_KMS("win: %d\n", plane->index); 946 DRM_DEBUG_KMS("win: %d\n", plane->index);
@@ -974,9 +948,9 @@ static void mixer_disable_plane(struct exynos_drm_crtc *crtc,
974 if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags)) 948 if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags))
975 return; 949 return;
976 950
977 spin_lock_irqsave(&res->reg_slock, flags); 951 spin_lock_irqsave(&mixer_ctx->reg_slock, flags);
978 mixer_cfg_layer(mixer_ctx, plane->index, 0, false); 952 mixer_cfg_layer(mixer_ctx, plane->index, 0, false);
979 spin_unlock_irqrestore(&res->reg_slock, flags); 953 spin_unlock_irqrestore(&mixer_ctx->reg_slock, flags);
980} 954}
981 955
982static void mixer_atomic_flush(struct exynos_drm_crtc *crtc) 956static void mixer_atomic_flush(struct exynos_drm_crtc *crtc)
@@ -993,7 +967,6 @@ static void mixer_atomic_flush(struct exynos_drm_crtc *crtc)
993static void mixer_enable(struct exynos_drm_crtc *crtc) 967static void mixer_enable(struct exynos_drm_crtc *crtc)
994{ 968{
995 struct mixer_context *ctx = crtc->ctx; 969 struct mixer_context *ctx = crtc->ctx;
996 struct mixer_resources *res = &ctx->mixer_res;
997 970
998 if (test_bit(MXR_BIT_POWERED, &ctx->flags)) 971 if (test_bit(MXR_BIT_POWERED, &ctx->flags))
999 return; 972 return;
@@ -1004,11 +977,12 @@ static void mixer_enable(struct exynos_drm_crtc *crtc)
1004 977
1005 mixer_vsync_set_update(ctx, false); 978 mixer_vsync_set_update(ctx, false);
1006 979
1007 mixer_reg_writemask(res, MXR_STATUS, ~0, MXR_STATUS_SOFT_RESET); 980 mixer_reg_writemask(ctx, MXR_STATUS, ~0, MXR_STATUS_SOFT_RESET);
1008 981
1009 if (test_bit(MXR_BIT_VSYNC, &ctx->flags)) { 982 if (test_bit(MXR_BIT_VSYNC, &ctx->flags)) {
1010 mixer_reg_writemask(res, MXR_INT_STATUS, ~0, MXR_INT_CLEAR_VSYNC); 983 mixer_reg_writemask(ctx, MXR_INT_STATUS, ~0,
1011 mixer_reg_writemask(res, MXR_INT_EN, ~0, MXR_INT_EN_VSYNC); 984 MXR_INT_CLEAR_VSYNC);
985 mixer_reg_writemask(ctx, MXR_INT_EN, ~0, MXR_INT_EN_VSYNC);
1012 } 986 }
1013 mixer_win_reset(ctx); 987 mixer_win_reset(ctx);
1014 988
@@ -1211,14 +1185,13 @@ static int mixer_remove(struct platform_device *pdev)
1211static int __maybe_unused exynos_mixer_suspend(struct device *dev) 1185static int __maybe_unused exynos_mixer_suspend(struct device *dev)
1212{ 1186{
1213 struct mixer_context *ctx = dev_get_drvdata(dev); 1187 struct mixer_context *ctx = dev_get_drvdata(dev);
1214 struct mixer_resources *res = &ctx->mixer_res;
1215 1188
1216 clk_disable_unprepare(res->hdmi); 1189 clk_disable_unprepare(ctx->hdmi);
1217 clk_disable_unprepare(res->mixer); 1190 clk_disable_unprepare(ctx->mixer);
1218 if (test_bit(MXR_BIT_VP_ENABLED, &ctx->flags)) { 1191 if (test_bit(MXR_BIT_VP_ENABLED, &ctx->flags)) {
1219 clk_disable_unprepare(res->vp); 1192 clk_disable_unprepare(ctx->vp);
1220 if (test_bit(MXR_BIT_HAS_SCLK, &ctx->flags)) 1193 if (test_bit(MXR_BIT_HAS_SCLK, &ctx->flags))
1221 clk_disable_unprepare(res->sclk_mixer); 1194 clk_disable_unprepare(ctx->sclk_mixer);
1222 } 1195 }
1223 1196
1224 return 0; 1197 return 0;
@@ -1227,28 +1200,27 @@ static int __maybe_unused exynos_mixer_suspend(struct device *dev)
1227static int __maybe_unused exynos_mixer_resume(struct device *dev) 1200static int __maybe_unused exynos_mixer_resume(struct device *dev)
1228{ 1201{
1229 struct mixer_context *ctx = dev_get_drvdata(dev); 1202 struct mixer_context *ctx = dev_get_drvdata(dev);
1230 struct mixer_resources *res = &ctx->mixer_res;
1231 int ret; 1203 int ret;
1232 1204
1233 ret = clk_prepare_enable(res->mixer); 1205 ret = clk_prepare_enable(ctx->mixer);
1234 if (ret < 0) { 1206 if (ret < 0) {
1235 DRM_ERROR("Failed to prepare_enable the mixer clk [%d]\n", ret); 1207 DRM_ERROR("Failed to prepare_enable the mixer clk [%d]\n", ret);
1236 return ret; 1208 return ret;
1237 } 1209 }
1238 ret = clk_prepare_enable(res->hdmi); 1210 ret = clk_prepare_enable(ctx->hdmi);
1239 if (ret < 0) { 1211 if (ret < 0) {
1240 DRM_ERROR("Failed to prepare_enable the hdmi clk [%d]\n", ret); 1212 DRM_ERROR("Failed to prepare_enable the hdmi clk [%d]\n", ret);
1241 return ret; 1213 return ret;
1242 } 1214 }
1243 if (test_bit(MXR_BIT_VP_ENABLED, &ctx->flags)) { 1215 if (test_bit(MXR_BIT_VP_ENABLED, &ctx->flags)) {
1244 ret = clk_prepare_enable(res->vp); 1216 ret = clk_prepare_enable(ctx->vp);
1245 if (ret < 0) { 1217 if (ret < 0) {
1246 DRM_ERROR("Failed to prepare_enable the vp clk [%d]\n", 1218 DRM_ERROR("Failed to prepare_enable the vp clk [%d]\n",
1247 ret); 1219 ret);
1248 return ret; 1220 return ret;
1249 } 1221 }
1250 if (test_bit(MXR_BIT_HAS_SCLK, &ctx->flags)) { 1222 if (test_bit(MXR_BIT_HAS_SCLK, &ctx->flags)) {
1251 ret = clk_prepare_enable(res->sclk_mixer); 1223 ret = clk_prepare_enable(ctx->sclk_mixer);
1252 if (ret < 0) { 1224 if (ret < 0) {
1253 DRM_ERROR("Failed to prepare_enable the " \ 1225 DRM_ERROR("Failed to prepare_enable the " \
1254 "sclk_mixer clk [%d]\n", 1226 "sclk_mixer clk [%d]\n",